一、sql注入概述
sql注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的sql语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
二、sql注入原理
sql注入需要满足两个条件:
参数用户可控:前端传给后端的参数内容是用户可以控制的。
参数带入数据库查询:传入的参数拼接到sql语句,且带入数据库查询。
三、相关知识
1.默认的库、表
例如mysql5.0以后,有一个默认的库information_schema,里面存放了大量的信息,其中:
SCHEMATA:该表中存放了mysql实例中所有数据库的信息。
TABLES:该表提供了序数据库中表的信息。详细描述了每个库中包含的表的名字、类型、创建时间等信息。
COLUMNS:该表提供了表中列的信息。详细描述了某张表的所有列以及每个列的信息。
2.默认函数和表达式
Version() | 数据库版本 |
Database() | 当前数据库名 |
User() | 当前登录用户 |
system_user() | 系统用户名 |
current_usre() | 当前用户名 |
session_user | 连接数据库的用户名 |
@@datadir | 读取数据库路劲 |
@@basedir | mysql安装路径 |
@@version_compile_os | 查看操作系统版本 |
@@hostmane | 计算机名 |
@@character_set_database | 显示字符集 |
3.注入点查找
略
四、sqlmap基础命令
sqlmap是用于sql注入的工具,在发现注入点后,就可以通过sqlmap获取到数据库中的信息。命令如下:
sqlmap -u “注入点URL” :查询该点是否存在注入
检查到注入点后,就可以接以下参数,进行注入:
--dbs | 检测站点包含哪些数据库 |
--current-db | 获取当前的数据库名 |
--tables-D"db_name" | 获取指定数据库中的表名-D后接指定的数据库名称 |
--columns-T"table_name"-D"db_name" | 获取数据库表中的字段 |
--dump-C"columns_name"-T"table_name"-D"db_name" | 获取字段的数据内容 |
--purge | 重新扫描(--purge 删除原先对该目标扫描的) |
--current-user | 检测当前用户 |
--is-dba | 判断站点的当前用户是否为数据库管理员 |
--batch | 默认确认,不询问你是否输入 |
--threads 10 | 线程,sqlmap线程最高设置为10 |
--level 3 | 最高为5 |
--risk 3 | 默认为1。risk越高,越慢但是越安全 |
--privileges | 查看权限 |
--cookie"cookie" | 添加cookie进行注入 |
--referer | 使用referer欺骗 |
--user-agent | 自定义user-agent |