【SQL注入】浅谈SQL注入入门常犯的错误、易错易混难点、个人经验。纯原创,未完待续...

写在前面:

        本篇文章写于笔者初步学习SQL注入后,针对自己入门时的疑惑、经常犯下的错误、易错易混的难点进行了反思,并且整理了下来。在本文中也有许多个人对于SQL注入语句书写的一些经验之谈,旨在能帮助到入门SQL注入的朋友们。当然,鉴于本人也属于入门水平,难免有纰漏之处,也欢迎各位前辈老师们指点迷津,提出宝贵的建议。

目录

1.新手入门时对SQL注入思路的疑惑、以及必须记住的几个库名表名

2.关于书写注入语句中那些让人头大的繁多的“括号”  

2.1 怎么“读”括号?

2.2 写注入语句时,括号太多太乱,有什么方法吗?

2.3 什么时候加括号,什么时候不加?在哪里加?


1.新手入门时对SQL注入思路的疑惑、以及必须记住的几个库名表名

SQL注入目的是什么?为了查到某一张表里的信息。很多刚入门SQL注入的同学可能会感觉对查询步骤没有清晰的概念,思维混乱。注入思路到底是什么?需要注入哪张表?笔者这里就浅谈一下自己的经验。

首先我们了解:数据库结构:库->表->列,即一个数据库中有很多表,一个表中有很多列。

注入思路:先找信息所在的数据再找表名最后确定要查找的信息所在项。即

找库->找表->找列

几个重要的数据库和表:

information_schema 数据库:里面有columns和tables两张表。columns里面存放了所有列名,

而tables里面存放了所有表名。

我们用information_schema.columns和information_schema.tables分别表示columns表和tables表。

database() :当前数据库的名字

table_name :表的名字 

column_name:列的名字

前面说过,我们SQL注入是为了查找某一张表里的信息,第一步:查表名

  • 在哪找呢?information_schema.tables里找

  • 结果太多,如何筛选呢?where table_schema=database()

    找出来表若干:emails,address,users...

假设我们要查找用户的账号密码,那么根据推断账号密码应该在user表中。

那么user表中具体有哪些列呢?第二步:查列名

  • 在哪找呢?information_schema.colunms里找

  • 结果太多,如何筛选呢?where table_schema=database() and table_name = 'users'

结束。

我在做的时候遇到的需要注意的细节:

  • table_name='users'(加单引号)

  • select * from users(不加单引号)

2.关于书写注入语句中那些让人头大的繁多的“括号”  

2.1 怎么“读”括号?

在报错注入中,有很多括号,初学者往往因为经验不足在括号出犯错误。

  • 读括号时,从内向外读

    • 与小学数学括号运算一样,优先级也是从里往外看,养成这样从里往外一对一对找的习惯不容易出错。

2.2 写注入语句时,括号太多太乱,有什么方法吗?

写注入语句时,可以先把框架写出来,再改内容

  • 比如,先写个格式:select 1,1,concat_ws(1,2,3) as x from tables group by x

  • 再改:select 1,count(*),concat_ws('-',(select database()),floor(rand(0)*2)) as x from tables group by x

2.3 什么时候加括号,什么时候不加?在哪里加?

这里以substr/substring为例,在注入时有两个地方可以添加。(只部分片段举例)

  • 第一种情况,substr函数直接占用concat函数第二个参数,把select整个语句包含进去(因为select是语句,所以充当substr第一个参数时需要加括号):

        concat(0x7e,substr((select group_concat(xxx) from users),1,30))

  • 第二种情况,substr函数作为select语句查询的列名(因为substr是函数,所以作为select查询的列名时不需要加括号)

        concat(0x7e,(select substr(group_concat(xxx),1,30)from users))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Fly1ngM0nkey

感谢您的支持与鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值