Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.openqa.selenium.chrome.ChromeOptions;

public class ChromeScript {
public static void run(String un, String pw, String url, boolean headless, String driverPath, String browserBin) {
public static void run(String un, String pw, String url, boolean headless, boolean proxy, String proxyHost, String proxyPort, String driverPath, String browserBin) {
ChromeOptions chromeOptions = new ChromeOptions();
if (!browserBin.equals("null")) {
chromeOptions.addExtensions(new File(browserBin));
Expand All @@ -21,6 +21,11 @@ public static void run(String un, String pw, String url, boolean headless, Strin
if (headless) {
chromeOptions.addArguments("--headless");
}

if (proxy) {
chromeOptions.addArguments("--proxy-server=" + proxyHost + ":" + proxyPort);
}

if (System.getProperty("os.name").startsWith("Windows")) {
chromeOptions.addArguments("--disable-gpu");
}
Expand Down Expand Up @@ -50,7 +55,7 @@ public static void run(String un, String pw, String url, boolean headless, Strin
driver.get(url + "/start.mvc#lesson/SqlInjection.lesson/6");
delay(1000);
retryingFindSendKeys(driver, By.xpath("//*[@id=\"lesson-content-wrapper\"]/div[6]/div[9]/div[2]/form/table/tbody/tr/td[2]/input"), "' OR '1'='1");
// driver.findElement(By.name("account")).sendKeys("' OR '1'='1");
//driver.findElement(By.name("account")).sendKeys("' OR '1'='1");
driver.findElement(By.name("Get Account Info")).click();

// Navigate to Numeric SQL Injection section
Expand All @@ -65,31 +70,32 @@ public static void run(String un, String pw, String url, boolean headless, Strin
driver.findElement(By.name("userid_6b")).sendKeys("dave");
driver.findElement(By.xpath("/html/body/section/section/section/div[1]/div[1]/div/div/div/div[6]/div[5]/div[3]/form/table/tbody/tr/td[3]/input")).click();

driver.get(url + "/start.mvc#lesson/SqlInjectionAdvanced.lesson/4");
driver.findElement(By.id("username4")).sendKeys("username");
driver.findElement(By.id("password4")).sendKeys("password");
driver.findElement(By.id("login-submit")).click();
// This is not a valid exploit and commenting out for now
//driver.get(url + "/start.mvc#lesson/SqlInjectionAdvanced.lesson/4");
//driver.findElement(By.id("username4")).sendKeys("username");
//driver.findElement(By.id("password4")).sendKeys("password");
//driver.findElement(By.id("login-submit")).click();

// SQL Injection (mitigations)
driver.navigate().to(url + "/start.mvc#lesson/SqlInjectionMitigations.lesson/7");
delay(1000);
driver.findElement(By.xpath("/html/body/section/section/section/div[1]/div[1]/div/div/div/div[6]/div[10]/div[3]/form[1]/div/div/div/table/thead/tr/th[4]/span")).click();
//driver.navigate().to(url + "/start.mvc#lesson/SqlInjectionMitigations.lesson/7");
//delay(1000);
//driver.findElement(By.xpath("/html/body/section/section/section/div[1]/div[1]/div/div/div/div[6]/div[10]/div[3]/form[1]/div/div/div/table/thead/tr/th[4]/span")).click();

// XXE (page 3)
driver.navigate().to(url + "/start.mvc#lesson/XXE.lesson/2");
driver.findElement(By.id("commentInputSimple")).sendKeys("Test comment");
driver.findElement(By.id("commentInputSimple")).sendKeys("<!DOCTYPE user [<!ENTITY root SYSTEM \"file:///\"> ]><comment><text>&root;");
driver.findElement(By.id("postCommentSimple")).submit();

// XXE (page 4)
driver.navigate().to(url + "/start.mvc#lesson/XXE.lesson/3");
retryingFindSendKeys(driver, By.id("commentInputContentType"), "Test comment 2");
// driver.findElement(By.id("commentInputContentType")).sendKeys("Test comment 2");
// not my comment out driver.findElement(By.id("commentInputContentType")).sendKeys("Test comment 2");
driver.findElement(By.id("postCommentContentType")).submit();

//XXE (page 7)
driver.navigate().to(url + "/start.mvc#lesson/XXE.lesson/6");
driver.findElement(By.id("commentInputBlind")).sendKeys("Test comment 3");
driver.findElement(By.id("postCommentBlind")).submit();
//driver.navigate().to(url + "/start.mvc#lesson/XXE.lesson/6");
//driver.findElement(By.id("commentInputBlind")).sendKeys("Test comment 3");
//driver.findElement(By.id("postCommentBlind")).submit();

// XSS (page 2)
driver.navigate().to(url + "/start.mvc#lesson/CrossSiteScripting.lesson/1");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.firefox.FirefoxBinary;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;

public class FirefoxScript {
public static void run(String un, String pw, String url, boolean headless, String gecko, String browserBin) {
public static void run(String un, String pw, String url, boolean headless, boolean proxy, String proxyHost, String proxyPort, String gecko, String browserBin) {
FirefoxBinary firefoxBinary = new FirefoxBinary();
if (!browserBin.equals("null")) {
File bin = new File(browserBin);
Expand All @@ -21,6 +22,11 @@ public static void run(String un, String pw, String url, boolean headless, Strin
System.setProperty("webdriver.gecko.driver", gecko);
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setBinary(firefoxBinary);
if (proxy) {
Proxy p = new Proxy();
p.setHttpProxy(proxyHost + ":" + proxyPort);
firefoxOptions.setProxy(p);
}
FirefoxDriver driver = new FirefoxDriver(firefoxOptions);

try {
Expand Down
26 changes: 24 additions & 2 deletions src/main/java/com/contrastsecurity/webgoat/selenium/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ public class Main {
static private boolean firefox = false;
static private String driverPath = "null";
static private String browserBin = "null";
static private boolean proxy = false;
static String proxyHost = "127.0.0.1"; // Default proxy host
static String proxyPort = "8080"; // Default proxy port

public static void main(String[] args) {
String port_regex = "([0-9]|[1-8][0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9]|[1-8][0-9]{3}|9[0-8][0-9]{2}|99[0-8][0-9]|999[0-9]|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])";
Expand Down Expand Up @@ -52,6 +55,21 @@ public static void main(String[] args) {
case "-headless":
headless = true;
break;
case "-proxy":
proxy = true;
break;
case "-proxyHost":
if (i == args.length -1 || args[i + 1].charAt(0) == '-')
throw new IllegalArgumentException("Expected argument after: " + args[i]);
proxyHost = args[i++ + 1];
break;
case "-proxyPort":
if (i == args.length -1 || args[i + 1].charAt(0) == '-')
throw new IllegalArgumentException("Expected argument after: " + args[i]);
if (!args[i + 1].matches(port_regex))
throw new IllegalArgumentException("Not a valid proxyPort: " + args[i + 1] + ". Valid ports are 0-65535.");
proxyPort = args[i++ + 1];
break;
case "-driver":
if (i == args.length -1 || args[i + 1].charAt(0) == '-')
throw new IllegalArgumentException("Expected argument after: " + args[i]);
Expand Down Expand Up @@ -95,12 +113,16 @@ public static void main(String[] args) {
System.out.println("pw: " + pw);
System.out.println("host: " + host);
System.out.println("port: " + port);
if (proxy){
System.out.println("proxyHost: " + proxyHost);
System.out.println("proxyPort: " + proxyPort);
}
System.out.println("ssl: " + ssl);
System.out.println("url: " + baseUrl);
if (firefox) {
FirefoxScript.run(un, pw, baseUrl, headless, driverPath, browserBin);
FirefoxScript.run(un, pw, baseUrl, headless, proxy, proxyHost, proxyPort, driverPath, browserBin);
} else {
ChromeScript.run(un, pw, baseUrl, headless, driverPath, browserBin);
ChromeScript.run(un, pw, baseUrl, headless, proxy, proxyHost, proxyPort, driverPath, browserBin);
}
}
}