-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
76 lines (63 loc) · 2.44 KB
/
main.py
File metadata and controls
76 lines (63 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import requests
from bs4 import BeautifulSoup
import sys
from urllib.parse import urljoin
s = requests.Session()
s.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
# Function to get all forms
def get_forms(url):
soup = BeautifulSoup(s.get(url).content, "html.parser")
return soup.find_all("form")
def form_details(form):
detailsOfForm = {}
action = form.attrs.get("action")
method = form.attrs.get("method", "get")
inputs = []
for input_tag in form.find_all("input"):
input_type = input_tag.attrs.get("type", "text")
input_name = input_tag.attrs.get("name")
input_value = input_tag.attrs.get("value", "")
inputs.append({
"type": input_type,
"name" : input_name,
"value" : input_value,
})
detailsOfForm['action'] = action
detailsOfForm['method'] = method
detailsOfForm['inputs'] = inputs
return detailsOfForm
def vulnerable(response):
errors = {"quoted string not properly terminated",
"unclosed quotation mark after the charachter string",
"you have an error in you SQL syntax"
}
for error in errors:
if error in response.content.decode().lower():
return True
return False
def sql_injection_scan(url):
forms = get_forms(url)
print(f"[+] Detected {len(forms)} forms on {url}.")
for form in forms:
details = form_details(form)
for i in "\"'":
data = {}
for input_tag in details["inputs"]:
if input_tag["type"] == "hidden" or input_tag["value"]:
data[input_tag['name']] = input_tag["value"] + i
elif input_tag["type"] != "submit":
data[input_tag['name']] = f"test{i}"
print(url)
form_details(form)
if details["method"] == "post":
res = s.post(url, data=data)
elif details["method"] == "get":
res = s.get(url, params=data)
if vulnerable(res):
print("SQL injection attack vulnerability in link: ", url )
else:
print("No SQL injection attack vulnerability detected")
break
if __name__ == "__main__":
urlToBeChecked = "https://juice-shop.herokuapp.com/#/login"
sql_injection_scan(urlToBeChecked)