Skip to content

Commit 3afd6ec

Browse files
author
patched.codes[bot]
committed
Patched introduction/views.py
1 parent 2747227 commit 3afd6ec

File tree

1 file changed

+43
-36
lines changed

1 file changed

+43
-36
lines changed

introduction/views.py

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,6 @@ def cmd(request):
405405
return render(request,'Lab/CMD/cmd.html')
406406
else:
407407
return redirect('login')
408-
@csrf_exempt
409408
def cmd_lab(request):
410409
if request.user.is_authenticated:
411410
if(request.method=="POST"):
@@ -414,15 +413,15 @@ def cmd_lab(request):
414413
os=request.POST.get('os')
415414
print(os)
416415
if(os=='win'):
417-
command="nslookup {}".format(domain)
416+
command=["nslookup", domain]
418417
else:
419-
command = "dig {}".format(domain)
418+
command = ["dig", domain]
420419

421420
try:
422421
# output=subprocess.check_output(command,shell=True,encoding="UTF-8")
423422
process = subprocess.Popen(
424423
command,
425-
shell=True,
424+
shell=False,
426425
stdout=subprocess.PIPE,
427426
stderr=subprocess.PIPE)
428427
stdout, stderr = process.communicate()
@@ -481,8 +480,6 @@ def bau_lab(request):
481480

482481
def login_otp(request):
483482
return render(request,"Lab/BrokenAuth/otp.html")
484-
485-
@csrf_exempt
486483
def Otp(request):
487484
if request.method=="GET":
488485
email=request.GET.get('email')
@@ -540,7 +537,6 @@ def a9(request):
540537
return render(request,"Lab/A9/a9.html")
541538
else:
542539
return redirect('login')
543-
@csrf_exempt
544540
def a9_lab(request):
545541
if request.user.is_authenticated:
546542
if request.method=="GET":
@@ -550,7 +546,8 @@ def a9_lab(request):
550546
try :
551547
file=request.FILES["file"]
552548
try :
553-
data = yaml.load(file,yaml.Loader)
549+
import json
550+
data = json.loads(file.read())
554551

555552
return render(request,"Lab/A9/a9_lab.html",{"data":data})
556553
except:
@@ -562,8 +559,6 @@ def a9_lab(request):
562559
return redirect('login')
563560
def get_version(request):
564561
return render(request,"Lab/A9/a9_lab.html",{"version":"pyyaml v5.1"})
565-
566-
@csrf_exempt
567562
def a9_lab2(request):
568563
if not request.user.is_authenticated:
569564
return redirect('login')
@@ -598,6 +593,7 @@ def a9_lab2(request):
598593
return render(request, "Lab/A9/a9_lab2.html", {"data":"Please Upload a file", "error":True})
599594

600595

596+
601597
@authentication_decorator
602598
def A9_discussion(request):
603599
return render(request, "playground/A9/index.html")
@@ -734,9 +730,6 @@ def a1_broken_access(request):
734730
return redirect('login')
735731

736732
return render(request,"Lab_2021/A1_BrokenAccessControl/broken_access.html")
737-
738-
739-
@csrf_exempt
740733
def a1_broken_access_lab_1(request):
741734
if request.user.is_authenticated:
742735
pass
@@ -771,8 +764,6 @@ def a1_broken_access_lab_1(request):
771764

772765
else:
773766
return render(request,'Lab_2021/A1_BrokenAccessControl/broken_access_lab_1.html',{"no_creds":True})
774-
775-
@csrf_exempt
776767
def a1_broken_access_lab_2(request):
777768
if request.user.is_authenticated:
778769
pass
@@ -842,9 +833,6 @@ def injection(request):
842833
return redirect('login')
843834

844835
return render(request,"Lab_2021/A3_Injection/injection.html")
845-
846-
847-
@csrf_exempt
848836
def injection_sql_lab(request):
849837
if request.user.is_authenticated:
850838

@@ -854,7 +842,7 @@ def injection_sql_lab(request):
854842
print(password)
855843

856844
if name:
857-
sql_query = "SELECT * FROM introduction_sql_lab_table WHERE id='"+name+"'AND password='"+password+"'"
845+
sql_query = "SELECT * FROM introduction_sql_lab_table WHERE id=%s AND password=%s"
858846

859847
sql_instance = sql_lab_table(id="admin", password="65079b006e85a7e798abecb99e47c154")
860848
sql_instance.save()
@@ -868,7 +856,7 @@ def injection_sql_lab(request):
868856
print(sql_query)
869857

870858
try:
871-
user = sql_lab_table.objects.raw(sql_query)
859+
user = sql_lab_table.objects.raw(sql_query, [name, password])
872860
user = user[0].id
873861
print(user)
874862

@@ -897,6 +885,7 @@ def injection_sql_lab(request):
897885
return redirect('login')
898886

899887

888+
900889
##----------------------------------------------------------------------------------------------------------
901890
##----------------------------------------------------------------------------------------------------------
902891

@@ -907,7 +896,6 @@ def ssrf(request):
907896
return render(request,"Lab/ssrf/ssrf.html")
908897
else:
909898
return redirect('login')
910-
911899
def ssrf_lab(request):
912900
if request.user.is_authenticated:
913901
if request.method=="GET":
@@ -917,6 +905,7 @@ def ssrf_lab(request):
917905
try :
918906
dirname = os.path.dirname(__file__)
919907
filename = os.path.join(dirname, file)
908+
filename = os.path.abspath(filename)
920909
file = open(filename,"r")
921910
data = file.read()
922911
return render(request,"Lab/ssrf/ssrf_lab.html",{"blog":data})
@@ -944,26 +933,39 @@ def ssrf_target(request):
944933
return render(request,"Lab/ssrf/ssrf_target.html")
945934
else:
946935
return render(request,"Lab/ssrf/ssrf_target.html",{"access_denied":True})
947-
948936
@authentication_decorator
949937
def ssrf_lab2(request):
950938
if request.method == "GET":
951939
return render(request, "Lab/ssrf/ssrf_lab2.html")
952940

953941
elif request.method == "POST":
954942
url = request.POST["url"]
943+
allowed_schemes = ["https"]
944+
allowed_hosts = ["example.com"]
955945
try:
956-
response = requests.get(url)
957-
return render(request, "Lab/ssrf/ssrf_lab2.html", {"response": response.content.decode()})
946+
parsed_url = urlparse(url)
947+
if parsed_url.scheme in allowed_schemes and parsed_url.netloc in allowed_hosts:
948+
response = requests.get(url)
949+
return render(request, "Lab/ssrf/ssrf_lab2.html", {"response": "Request successful"})
950+
else:
951+
return render(request, "Lab/ssrf/ssrf_lab2.html", {"error": "Invalid URL"})
958952
except:
959953
return render(request, "Lab/ssrf/ssrf_lab2.html", {"error": "Invalid URL"})
954+
960955
#--------------------------------------- Server-side template injection --------------------------------------#
961956

962957
def ssti(request):
963958
if request.user.is_authenticated:
964959
return render(request,"Lab_2021/A3_Injection/ssti.html")
965960
else:
966961
return redirect('login')
962+
from django.shortcuts import render
963+
from django.shortcuts import redirect
964+
from django.http import HttpResponse
965+
from .models import Blogs
966+
import os
967+
import uuid
968+
from django.template import Template
967969

968970
def ssti_lab(request):
969971
if request.user.is_authenticated:
@@ -985,8 +987,10 @@ def ssti_lab(request):
985987
new_blog.save()
986988
dirname = os.path.dirname(__file__)
987989
filename = os.path.join(dirname, f"templates/Lab_2021/A3_Injection/Blogs/{id}.html")
990+
template = Template(blog)
991+
rendered_blog = template.render({})
988992
file = open(filename, "w+")
989-
file.write(blog)
993+
file.write(rendered_blog)
990994
file.close()
991995
return redirect(f'blog/{id}')
992996
else:
@@ -1007,6 +1011,7 @@ def crypto_failure(request):
10071011
return render(request,"Lab_2021/A2_Crypto_failur/crypto_failure.html",{"success":False,"failure":False})
10081012
else:
10091013
redirect('login')
1014+
import hashlib
10101015

10111016
def crypto_failure_lab(request):
10121017
if request.user.is_authenticated:
@@ -1016,14 +1021,20 @@ def crypto_failure_lab(request):
10161021
username = request.POST["username"]
10171022
password = request.POST["password"]
10181023
try:
1019-
password = md5(password.encode()).hexdigest()
1020-
user = CF_user.objects.get(username=username,password=password)
1024+
user = CF_user.objects.get(username=username)
1025+
# Assuming 'password' field now stores salt
1026+
salt = user.password[:32]
1027+
password_hash = hashlib.scrypt(
1028+
password.encode(), salt=salt, n=2**14, r=8, p=1
1029+
).hex()
1030+
user = CF_user.objects.get(username=username, password=password_hash)
10211031
return render(request,"Lab_2021/A2_Crypto_failur/crypto_failure_lab.html",{"user":user, "success":True,"failure":False})
10221032
except:
10231033
return render(request,"Lab_2021/A2_Crypto_failur/crypto_failure_lab.html",{"success":False, "failure":True})
10241034
else :
10251035
return redirect('login')
10261036

1037+
10271038
def crypto_failure_lab2(request):
10281039
if request.user.is_authenticated:
10291040
if request.method == "GET":
@@ -1037,7 +1048,6 @@ def crypto_failure_lab2(request):
10371048
return render(request,"Lab_2021/A2_Crypto_failur/crypto_failure_lab2.html",{"user":user, "success":True,"failure":False})
10381049
except:
10391050
return render(request,"Lab_2021/A2_Crypto_failur/crypto_failure_lab2.html",{"success":False, "failure":True})
1040-
10411051
# based on CWE-319
10421052
def crypto_failure_lab3(request):
10431053
if request.user.is_authenticated:
@@ -1066,20 +1076,19 @@ def crypto_failure_lab3(request):
10661076
expire = datetime.datetime.now() + datetime.timedelta(minutes=60)
10671077
cookie = f"{username}|{expire}"
10681078
response = render(request,"Lab_2021/A2_Crypto_failur/crypto_failure_lab3.html",{"success":True, "failure":False , "admin":False})
1069-
response.set_cookie("cookie", cookie)
1079+
response.set_cookie("cookie", cookie, httponly=True, secure=True, samesite='Lax')
10701080
response.status_code = 200
10711081
return response
10721082
else:
10731083
response = render(request,"Lab_2021/A2_Crypto_failur/crypto_failure_lab3.html",{"success":False, "failure":True})
1074-
response.set_cookie("cookie", None)
1084+
response.set_cookie("cookie", None, httponly=True, secure=True, samesite='Lax')
10751085
return response
10761086
except:
10771087
return render(request,"Lab_2021/A2_Crypto_failur/crypto_failure_lab2.html",{"success":False, "failure":True})
10781088

1089+
10791090
#-----------------------------------------------SECURITY MISCONFIGURATION -------------------
10801091
from pygoat.settings import SECRET_COOKIE_KEY
1081-
1082-
10831092
def sec_misconfig_lab3(request):
10841093
if not request.user.is_authenticated:
10851094
return redirect('login')
@@ -1099,7 +1108,7 @@ def sec_misconfig_lab3(request):
10991108

11001109
cookie = jwt.encode(payload, SECRET_COOKIE_KEY, algorithm='HS256')
11011110
response = render(request,"Lab/sec_mis/sec_mis_lab3.html", {"admin":False} )
1102-
response.set_cookie(key = "auth_cookie", value = cookie)
1111+
response.set_cookie(key = "auth_cookie", value = cookie, secure=True, httponly=True, samesite='Lax')
11031112
return response
11041113

11051114
# - ------------------------Identification and Authentication Failures--------------------------------
@@ -1159,7 +1168,6 @@ def auth_failure_lab2(request):
11591168
"User3":{"userid":"3", "username":"User3", "password": "5a91a66f0c86b5435fe748706b99c17e6e54a17e03c2a3ef8d0dfa918db41cf6"},
11601169
"User4":{"userid":"4", "username":"User4", "password": "6046bc3337728a60967a151ee584e4fd7c53740a49485ebdc38cac42a255f266"}
11611170
}
1162-
11631171
# USER_A7_LAB3 = {
11641172
# "User1":{"userid":"1", "username":"User1", "password": "Hash1"},
11651173
# "User2":{"userid":"2", "username":"User2", "password": "Hash2"},
@@ -1168,7 +1176,6 @@ def auth_failure_lab2(request):
11681176
# }
11691177

11701178
@authentication_decorator
1171-
@csrf_exempt
11721179
def auth_failure_lab3(request):
11731180
if request.method == "GET":
11741181
try:
@@ -1194,7 +1201,7 @@ def auth_failure_lab3(request):
11941201
session_data = AF_session_id.objects.create(session_id=token, user=USER_A7_LAB3[username]['username'])
11951202
session_data.save()
11961203
response = render(request, "Lab_2021/A7_auth_failure/lab3.html", {"success":True, "failure":False, "username":username})
1197-
response.set_cookie("session_id", token)
1204+
response.set_cookie("session_id", token, secure=True, httponly=True, samesite='Lax')
11981205
return response
11991206

12001207
#-- coding playground for lab2

0 commit comments

Comments
 (0)