pymysql模块学习之sql注入

sql注入

利用sql的行内注释 -- 实现的
行内注释语法:
    -- 后至少有一个任意字符
注意:
    --符号后面有一个空格,再跟至少一个字符
解释:
    行内注释符号 -- 会注释掉它之后的sql。

根本原理:
    根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,
    用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'

情况一:
    #1、sql注入之:用户存在,绕过密码
    egon' -- 任意字符   (你的语句是什么引号,这里也要用什么引号)

情况二:
    #2、sql注入之:用户不存在,绕过用户与密码
    alexsb' or 1=1 -- 任意字符

示例代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""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()
# 情况一,输入:hardy9sap' -- done
# 情况二,输入:xxx' or 1=1 -- done
password = input('password, please>>> ').strip()

try:
    sql = f"select id, username, password from userinfo where username='{username}' and password='{password}';"
    # 注意:
    #     1. 当sql语句的拼接,参数没有使用execute传入时,原字符串中的占位符必须加引号。
    #     2. 写SQL语句的时候,不要进行这样的拼接。因为会发生SQL注入,那你就等着被gan吧。
    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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值