19ECS448P Secure Software Engineering - Lab Manual
19ECS448P Secure Software Engineering - Lab Manual
LAB MANUAL
List of experiments
P.
S.No Experiments No
4. SQL Injection
5. Command Injection
6. No Server-Side Validation
7. Stack Overflows
7. Search Function
8. Arguments
9. File Operations
app = Flask(__name__)
@app.route('/run_command', methods=['POST'])
def run_command():
cmd = request.form.get('cmd')
result = eval(cmd) # VULNERABILITY: Evaluating user-supplied input as code is a dangerous practice
return result
if __name__ == '__main__':
app.run()
Ex. 2 Authentication check using SQL
2-import mysql.connector
def get_user_info(username):
conn = mysql.connector.connect(user='user', password='password', host='host',
database='database')
cursor = conn.cursor()
query = "SELECT * FROM users WHERE username='" + username + "'"
cursor.execute(query)
results = cursor.fetchall()
cursor.close()
conn.close()
return results
username = input("Enter your username: ")
print(get_user_info(username))
Ex. 3 F.read function Check
3-def process_input(user_input):
with open(user_input, "r") as f:
content = f.read()
print(content)
user_input = input("Enter a file name: ")
process_input(user_input)
Ex. 4 Evaluation of Post Function
amount = request.form.get('amount')
recipient = request.form.get('recipient')
# Transfer the funds...
return 'Funds transferred successfully!'
if __name__ == '__main__':
app.run()
Ex. 5 Evaluation of Read Function
5-def read_credit_card_number():
card_number = input("Enter your credit card number: ")
# do something with card_number return card_number
def process_payment(card_number):
# process payment with card_number pass
card_number = read_credit_card_number()
process_payment(card_number)
Ex. 6 Fetch Data Function
6-import requests
def fetch_data_from_url(url):
response = requests.get(url)
data = response.text
exec(data)
url = input("Enter a URL: ")
fetch_data_from_url(url)
Ex. 7 Search Function
import os
import urllib
from flask import Flask, request
from django.db import connection, models
from django.db.models.expressions import RawSQL
app = Flask(__name__)
@app.route("/code-execution")
def code_execution():
code1 = request.args.get("code1")
exec("setname('%s')" % code1)
return a
@app.route("/open-redirect")
def open_redirect():
redirect_loc = request.args.get('redirect')
return redirect(redirect_loc)
@app.route("/sqli/<username>")
def show_user(username):
with connection.cursor() as cursor:
cursor.execute("SELECT * FROM users WHERE username = '%s'" % username)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=9000)
Secure Code Testing in SNYK (Java)
Ex. 9 File Operations
9-import java.io.*;
public class UnvalidatedInput {
public static void main(String[] args) {
String filename = args[0];
File file = new File(filename);
try (FileReader reader = new FileReader(file)) {
char[] buffer = new char[(int) file.length()];
reader.read(buffer);
System.out.println(buffer);
String query = "SELECT * FROM users WHERE username = '" + username + "' AND
password = '" + password + "'";