Witam serdecznie,
Otrzymalam maly projekt na zaliczenie w ktorym potrzeba naprawic kilka luk w zabezpieczeniu aplikacji. Udalo mi sie uporac z SQLi i XSS, aczkolwiek bije glowa w sciane z OS command injection. Ponizej przedstawiam kod z dwoch plikow, kotre przekazuja "input" do cowsay.run. Wedlug OWASP,a potrzeba poprawnie przekazac argumenty i komende w "Processbuilderze" ale niestety nie bardzo mi to wychodzi. Jesli ktos bylby w stanie pomoc bylabym bardzo wdzieczna.
package com.scalesec.vulnado;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Cowsay {
public static String run(String input) {
ProcessBuilder processBuilder = new ProcessBuilder();
String cmd = "/usr/games/cowsay '" + input + "'";
System.out.println(cmd);
processBuilder.command("bash", "-c", cmd);
StringBuilder output = new StringBuilder();
try {
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
}
package com.scalesec.vulnado;
import org.springframework.web.bind.annotation.*;
import org.springframework.boot.autoconfigure.*;
import java.io.Serializable;
@RestController
@EnableAutoConfiguration
public class CowController {
@RequestMapping(value = "/cowsay")
String cowsay(@RequestParam(defaultValue = "I love Linux!") String input) {
return Cowsay.run(input);
}
}