Python 如何使INSERT上的SQL注入在SQLite上工作
我不知道如何使SQL注入在SQLite中工作。我正在使用Python中的一个函数,该函数连接到数据库并插入字符串 我有database.db,它有两个表:feedback和users。 反馈表有一列:message。 用户表有两列:用户名和密码Python 如何使INSERT上的SQL注入在SQLite上工作,python,sqlite,sql-insert,sql-injection,Python,Sqlite,Sql Insert,Sql Injection,我不知道如何使SQL注入在SQLite中工作。我正在使用Python中的一个函数,该函数连接到数据库并插入字符串 我有database.db,它有两个表:feedback和users。 反馈表有一列:message。 用户表有两列:用户名和密码 def send_feedback(feedback): conn = sqlite3.connect("database.db") curs = conn.cursor() curs.execute(&quo
def send_feedback(feedback):
conn = sqlite3.connect("database.db")
curs = conn.cursor()
curs.execute("INSERT INTO feedback VALUES ('%s')" % (feedback))
print(curs.fetchall())
conn.close()
我知道execute函数允许我对数据库进行单个查询,因此我不能使用;到
进行多个查询
我尝试的是让字符串看起来像这样:
a') SELECT password FROM users --
feedback = "INSERT INTO feedback VALUES ('a') SELECT password FROM users --')"
但这给了我以下错误:
sqlite3.error:近选择:语法错误
所以我尝试使用UNION命令:
a') UNION SELECT password FROM users --
feedback = "INSERT INTO feedback VALUES ('a') UNION SELECT password FROM users --')"
这一个可以工作,但是fetchall函数返回一个空列表。大多数SQL注入都不会导致对攻击者有用的结果,只是语法错误 例如,将字符串“我不满意”传递给此反馈函数,多余的“字符”将导致引号不平衡,这将导致错误,导致插入失败 sqlite3.error:接近m:语法错误 从技术上讲,这是SQL注入。插入到查询中的内容影响了SQL语句的语法。这就是全部。这并不一定会导致一个成功的任务:不可能的渗透 我想不出一种方法来利用您展示的INSERT语句,使它除了产生错误之外,还能做一些聪明的事情 不能将插入更改为生成结果集的选择。即使您尝试在第二个SQL查询之后插入分号,您也会得到 上面的第一次尝试导致语法错误,因为要插入的数据源既有VALUES子句,也有SELECT。在SQL语法中,可以使用其中一种,但不能同时使用两种。看 您可能已经知道如何使代码安全,因此不安全的内容甚至不会导致语法错误。但我将为其他读者介绍:
curs.execute("INSERT INTO feedback VALUES (?)", (feedback,))
您可以这样做,例如获取表名 一个“| |从sqlite_master中选择tbl_名称,其中type='table'和tbl_名称与'sqlite_u%'不同--
好的,我花了一些时间在这上面,有一种方法可以让它工作。您可以在如下查询中查询sqlite:SELECT CASE WHEN SELECT SUBSTRINGpassword,1,1='a',然后1 END。您可以编写一个简单的python脚本来更改子字符串中的1和“a”字符。通过这种方式,您几乎可以强制执行列的输出。