一、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读取数据库路劲@@basedirmysql安装路径@@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