sql注入
利用sql的行内注释 -- 实现的
行内注释语法:
-- 后至少有一个任意字符
注意:
--符号后面有一个空格,再跟至少一个字符
解释:
行内注释符号 -- 会注释掉它之后的sql。
根本原理:
根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,
用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'
情况一:
#1、sql注入之:用户存在,绕过密码
egon' -- 任意字符 (你的语句是什么引号,这里也要用什么引号)
情况二:
#2、sql注入之:用户不存在,绕过用户与密码
alexsb' or 1=1 -- 任意字符
示例代码
"""sql注入
利用sql的行内注释 -- 实现的
行内注释语法:
-- 后至少有一个任意字符
注意:
--符号后面有一个空格,再跟至少一个字符
解释:
行内注释符号 -- 会注释掉它之后的sql。
根本原理:
根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,
用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'
情况一:
#1、sql注入之:用户存在,绕过密码
egon' -- 任意字符 (你的语句是什么引号,这里也要用什么引号)
情况二:
#2、sql注入之:用户不存在,绕过用户与密码
alexsb' or 1=1 -- 任意字符
"""
import pymysql
conn = pymysql.connect(
user='root',
password='',
host='localhost',
port=3306,
charset='utf8mb4',
database='hardy2_db',
)
cursor = conn.cursor(cursor=None)
username = input('username, please>>> ').strip()
password = input('password, please>>> ').strip()
try:
sql = f"select id, username, password from userinfo where username='{username}' and password='{password}';"
cursor.execute(query=sql)
res = cursor.fetchone()
except pymysql.err.ProgrammingError as e:
print(e)
except pymysql.err.InternalError as e:
print(e)
else:
if res:
print('Welcome to log in!')
else:
print('Failed!')
finally:
cursor.close()
conn.close()