From aa8d4f403680dd4a7636560aea3d4513ceb64165 Mon Sep 17 00:00:00 2001 From: Jali Date: Thu, 20 Apr 2023 23:17:34 +0200 Subject: [PATCH] Implemented SQL injection attackable service --- Cargo.toml | 7 ++ Readme.md | 23 +++++++ src/main.rs | 123 +++++++++++++++++++++++++++++++++- static/css/index.css | 16 +++++ static/images/americanah.jpeg | Bin 0 -> 13869 bytes static/images/download.jpeg | Bin 0 -> 11316 bytes static/images/elon.jpeg | Bin 0 -> 13667 bytes static/images/lord_of.jpeg | Bin 0 -> 8811 bytes static/index.html | 23 +++++++ static/store.html | 23 +++++++ 10 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 Readme.md create mode 100644 static/css/index.css create mode 100644 static/images/americanah.jpeg create mode 100644 static/images/download.jpeg create mode 100644 static/images/elon.jpeg create mode 100644 static/images/lord_of.jpeg create mode 100644 static/index.html create mode 100644 static/store.html diff --git a/Cargo.toml b/Cargo.toml index 0e4b171..cb28f49 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,10 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +actix-web="4.3.1" +actix-files="0.6.2" +actix-web-validator = "5.0.1" +serde = { veresion = "1.0.160", features = ["derive"] } +serde_json = "1.0.96" +handlebars = { version="4.3.6", features = ["dir_source"] } +rusqlite = "0.29.0" diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..4932c9a --- /dev/null +++ b/Readme.md @@ -0,0 +1,23 @@ +# Sql-Injection-Test + +> Version: 1.0.23110.1 \ +> Created by: Jali +> Last Modified by: Jali + +## About + +This project implements a very simple web-service, that is vulnerable to an SQL +injection attack. In this case a simple web-page is protected by a user name and +password, and the password is checked by requesting the user name and password +from the database, and check if they exist. If they do, users are granted access +to the web-page, if not they are thrown back to the login page. + +The SQL queries, however, are vulnerable to SQL injection. So a user can gain +access by simply putting a statement such as + +```wurst' OR '1'='1``` + +into the password field. The where clause '1'='1' will always be true, and +therefore the statement always returns a list of all possible users. + +The example creates an in memory database with users Alice and Bob. diff --git a/src/main.rs b/src/main.rs index e7a11a9..35ad422 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,122 @@ -fn main() { - println!("Hello, world!"); +use actix_files::Files; +use actix_web::{web, App, HttpResponse, HttpServer}; +use handlebars::Handlebars; +use serde::Deserialize; +use serde_json::json; + +#[derive(Deserialize)] +struct Credentials { + username: String, + password: String, +} + +fn init_sql() -> rusqlite::Connection { + let connection = rusqlite::Connection::open_in_memory().unwrap(); + connection + .execute( + "CREATE TABLE IF NOT EXISTS users (username TEXT, password TEXT, UNIQUE(username));", + (), + ) + .unwrap(); + connection + .execute("INSERT OR IGNORE INTO users VALUES ('Alice', 'test');", ()) + .unwrap(); + connection + .execute( + "INSERT OR IGNORE INTO users VALUES ('Bob', 'lovesApples');", + (), + ) + .unwrap(); + connection +} + +async fn index(hb: web::Data>) -> HttpResponse { + let data = json!({ + "project_name": "Book Store Login", + }); + + let body = hb.render("index", &data).unwrap(); + HttpResponse::Ok().body(body) +} + +async fn validate_login( + hb: web::Data>, + cred: web::Form, +) -> HttpResponse { + let connection = init_sql(); + let query = format!( + "SELECT * FROM users WHERE username = '{}' AND password = '{}';", + cred.username, cred.password + ); + println!("{}", query); + let mut stmt = connection.prepare(query.as_str()).unwrap(); + let users = stmt + .query_map([], |row| { + Ok(Credentials { + username: row.get(0)?, + password: row.get(1)?, + }) + }) + .unwrap(); + + if users.count() > 0 { + println!("Match!"); + return storepage(hb).await; + } + + println!("No Match!"); + index(hb).await +} + +async fn storepage(hb: web::Data>) -> HttpResponse { + let data = json!({ + "project_name": "Book Store", + "books":[ + { + "name":"Harry Potter", + "author":"J K Rowlings", + "image_path":"/static/images/download.jpeg" + }, + { + "name":"Lord of the ring", + "author":"Tolken", + "image_path": "/static/images/lord_of.jpeg" + }, + { + "name":"Americanah", + "author":"Chimamada Adichie", + "image_path":"/static/images/americanah.jpeg" + }, + { + "name":"Elon Musk", + "author":"#####", + "image_path":"/static/images/elon.jpeg" + }, + ] + }); + + let body = hb.render("store", &data).unwrap(); + HttpResponse::Ok().body(body) +} + +#[actix_web::main] +async fn main() -> std::io::Result<()> { + let mut handlebars = Handlebars::new(); + handlebars + .register_templates_directory(".html", "./static/") + .unwrap(); + let handlebars_ref = web::Data::new(handlebars); + + println!("listening on port 8080"); + HttpServer::new(move || { + App::new() + .app_data(handlebars_ref.clone()) + .service(Files::new("/static", "static").show_files_listing()) + //.service(web::resource("/login").route(web::post().to(validate_login))) + .route("/", web::post().to(validate_login)) + .route("/", web::get().to(index)) + }) + .bind("0.0.0.0:8080")? + .run() + .await } diff --git a/static/css/index.css b/static/css/index.css new file mode 100644 index 0000000..dcf0bdd --- /dev/null +++ b/static/css/index.css @@ -0,0 +1,16 @@ +.cats { + display: flex; +} + +.books { + border: 1px solid grey; + min-width: 200px; + min-height: 350px; + margin: 5px; + padding: 5px; + text-align: center; +} + +.book > img { + width: 190px; +} diff --git a/static/images/americanah.jpeg b/static/images/americanah.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a5db43a699ab98614ba3c50e36670657f8d19fde GIT binary patch literal 13869 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 BRRjP4 literal 0 HcmV?d00001 diff --git a/static/images/download.jpeg b/static/images/download.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..94543dfe2db0ba188e2c2518206b73ea78903b1f GIT binary patch literal 11316 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 literal 0 HcmV?d00001 diff --git a/static/images/elon.jpeg b/static/images/elon.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..1a7f2774c984f5811f1d7fcca3925829be7fa3b1 GIT binary patch literal 13667 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 + + + + + {{project_name}} + + + + +

{{project_name}}

+
+ + +
+ + +
+ +
+ + + \ No newline at end of file diff --git a/static/store.html b/static/store.html new file mode 100644 index 0000000..b8cb266 --- /dev/null +++ b/static/store.html @@ -0,0 +1,23 @@ + + + + + + {{project_name}} + + + + +

{{project_name}}

+
+ {{#each books}} +
+

{{this.name}}

+ +

Author: {{this.author}}

+
+ {{/each}} +
+ + + \ No newline at end of file