Пример POC для SQLi с Python
Я пытаюсь создать простой POC SQLi с Python. Я использую известную строковую интерполяцию для запросов SQL в методе cursor.execute(), который неправильно экранирует входные параметры, если оператор sql объединен с указанным параметром. Вот мой пример кода:
import mysql.connector
from pip._vendor.distlib.compat import raw_input
cnx = mysql.connector.connect(user=username, password= secret_key, host=host, database=dbname, buffered=True)
def main():
account = raw_input("Enter account no. or type 'quit' to end: ")
check_bal(account)
def check_bal(account):
sql = "SELECT balance, status FROM Account WHERE account_no = '%s' "
cursor = cnx.cursor()
cursor.execute(sql % (account))
for row in cursor:
print(row)
cursor.close()
if __name__=="__main__":
main()
Мне удалось использовать программу с помощью простых входных данных, таких как foo 'OR 1 = 1. Но когда я пытаюсь использовать немного сложные входные данные (например, foo'; select * from Customer; -), я получаю эту ошибку
mysql.connector.errors.InternalError: Непрочитанный результат найден.
Я использовал буферный курсор для решения проблемы (cnx.curson(buffered=True), но проблема сохраняется. Любая идея, что не так и как я могу заставить его работать? Я использую Python 3.6.5 .
Заранее спасибо!