SQL注入原理及危害
攻击者通过用户可控参数中(GET , POST ,HTTP 头部 ,Cookie 等位置)注入SQL语法,破坏原有的正常SQL结构。
攻击者利用 SQL 注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密码),从而脱取数据库中内容(脱库)。在特别情况下还可以修改数据库内容或者插入内容到数据库,如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过 SQL 注入漏洞直接获取 webshell 或者服务器系统权限
SQL注入的分类
按数据类型分为:
1.整形注入
2.字符型注入
按注入语法分为:
1.联合查询注入
2.多语句查询注入
3.报错型注入
4.布尔型注入
5.延时注入
SQL注入挖掘
1.and 1=1/and 1=2 根据页面的显示情况,可以判断是否是整型注入
2.加单引号,可以根据页面显示或者显示的数据库错误信息来判断是整形注入还是字符型注入
3.用and sleep()函数,根据页面的返回时间来判断
SQL注入常用函数
字符串连接显示函数
1.concat(str1,str2),可以连接一个或者多个字符串
2.concat_ws(separator, str1,str2…),表示 concat with separator,即有分隔符的字符串连接
3.group_concat(str1,str2……),把每一行数据分到一个组里显示出来
mysql函数
4.system_user() 系统用户名
5.user() ,用户名
6.current_user, 当前用户名
7.session_user(),连接数据库的用户名
8.database() ,数据库名
9.version() ,MYSQL数据库版本
10.load_file() ,MYSQL读取本地文件的函数
11.@@datadir, 读取数据库路径
12.@@basedir, MYSQL 安装路径
13.@@version_compile_os, 操作系统
SQL注入神器以及一些常用参数
sqlmap
-p 指定测试参数
-b 获取banner
–dbs 列举数据库
–is-dba 是否是管理员权限
–current-db 当前数据库
–current-user 当前用户
–tables 列举数据库的表名
–count 检索所有条目数
–columns 获取表的列名
–dump 获取表中的数据,包含列
–dump-all 转存DBMS数据库所有表项目
–level 测试等级(1-5),默认为1
-v 显示详细信息
读取数据库—>读取表—->读取表的列—->获取内容
-D 指定数据库
-T 指定表
-C 指定列
–dbms=mysql oracle mssql 指定数据库