首页 > 解决方案 > 编写注入漏洞代码 sqlite3

问题描述

我正在编写一个 python 文件来查询,该文件容易受到 sql 注入的影响。
此处,在执行 python 文件时,对其进行约束和约束的表名和列名作为命令行参数给出。
这是pyhon文件:

import sqlite3
import sys

con = sqlite3.connect("univ1.db")
cur = con.cursor()

table = sys.argv[1]
column = sys.argv[2]
constraint = sys.argv[3]
cur.execute( """SELECT * FROM {} WHERE {} = '%s'""".format(table, column)% constraint)
rows = cur.fetchall()
for row in rows:
    print(','.join([str(val) for val in row]))

这段代码被认为容易受到 sql 注入的攻击,因此执行以下命令预计会从数据库中删除指定的表,同时打印建筑物为 blah 的教室的详细信息。

python3 query.py classroom building "blah'; DROP TABLE INSTRUCTOR; --'"

但是由于 cursor.execute 一次只能执行一个命令,因此程序终止并发出警告。
如何允许执行多个命令。另请注意, fetchall 函数应返回相关数据。
我为什么要问这个?
这是作业的一部分,我应该在其中编写注入禁用和注入易受攻击的查询文件。

标签: pythonsqlitesql-injection

解决方案


事实证明,python sqlite 完全不会受到相关攻击的攻击。


推荐阅读