仅用于 渗透测试 教学,禁止用于不当目的
什么是SQL注入
SQL注入是Web渗透测试中的一种攻击手段,主要针对目标数据库。sql注入就是指: Web应用程序对用户输入数据的合法性没有做判断,前端输入后端的参数是攻击者可控的,并且能够将参数带入数据库进行查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作 。
一般情况下,开发人员可以使用动态 SQL语句 创建通用、灵活的应用。
动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL语句。当开发人员在运行过程中需要根据不同的查询标准决定提取什么字段(如select语句),或者根据不同的条件选择不同的查询表时,动态地构造SQL语句会非常有用!
下面以PHP语句为例:
$query = "SELECT * FROM users WHERE id = $_GET['id']"
由于上面的尝试ID可控,且是带入数据库进行查询的,所以攻击者可以任意拼接SQL语句进行攻击。
当然,SQL注入按照不同的分类方法可以分为报错注入、盲注、Union注入等。
SQL注入原理
要想产生 SQL注入 漏洞,必须满足两个条件:
- 参数用户可控:前端传给后端的参数内容是用户可以随时改变可控的
- 参数带入数据库查询:传入的参数拼接到SQL语句中,而且直接带入数据库查询,和数据库进行交互!
当传入的ID参数为 1′ 时,数据库要执行的代码就是:
select * from users where id = 1'
这明显不符合数据库的语法规范,所以会报错。当传入的ID参数为 and 1=1 时,执行的SQL语句如下:
select * from users where id = 1 and 1=1
因为后添加的and 1=1,1=1永远是 真 (对的),而且 where 语句中的 id=1 也为真,所以页面返回的情况会和id=1的页面一模一样。如果你将传入的参数ID为 and 1=2 时,由于后面的1=2不成立,结果会返回假(错的),页面就会显示不同的结果!
由此可以判断ID参数存在 SQL注入漏洞 ,攻击者可以进一步 拼接SQL语句 进行攻击,致使数据库信息泄露,甚至进一步拿取服务器权限!
请记住,在实际web网站渗透的过程中,凡是满足上面两个条件就会存在SQL注入漏洞,因此所有的开发者都会尽量迫使外部输入的参数不能直接和数据库进行交互,否则就会引起数据库被黑的隐患!
MySql 数据库重要基础!
mysql 是常用的数据库版本之一!我们先来学习下MySQL的SQL注入知识点:
1、在所有的MySQL5.0版本之后,MySQL默认在数据库中存放一个 “information_schema” 的数据库。在该库中,大家一定要记住三个 表名 :
a、SCHEMATA
b、TABLES
c、COLUMNS
- SCHEMATA
该表中存储该用户创建的所有 数据库的库名 ,这个表下有个字段 SCHEMA_NAME ,这个字段记录了所有的数据库名。
运行win7靶机的WAMP服务器,这个服务器已经安装好了mysql数据库,然后打开 phpmyadmin 页面,如图!
- TABLES
该表储存了用户创建的所有 数据库库名、表名 。在该表中的字段 TABLE_SCHEMA 记录的是所有的库名,而字段 TABLE_NAME 记录的是所有的表名。
- COLUMNS
这个表中存储了所有的数据库的 库、表、字段 。这个表中的三个字段TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME刚好记录数据库所有的库名、表名、字段名!
2、常用的MySQL 查询语句 如下。
在不知道任何条件时:
select 要查询的字段名 from 库名.表名
知道一个已知条件时:
select 要查询的字段名 from 库名.表名 where 已知条件的字段名='已知条件的值'
知道两个已知条件时:
select 要查询的字段名 from 库名.表名 where 已知条件1的字段名='已知条件1的值' AND 已知条件2的字段名='已知条件2的值'
比如第一个:
3、mysql数据库的 limit 用法
Limit的使用格式为 limit m,n ,m是指记录开始的位置,从0开始,表示第一条记录;n是指提取一共n条记录。简单说limit 0,5,就是从第一条开始,一共提取5条!
比如 不使用 limit查询,结果会是:
你会发现显示所有信息!
如果 使用 limit用法,将会如下图:
你会发现显示前两条信息!
4、学会使用MySQL数据的 终端
启动后,就会看到如图所示,默认没有密码,回车即可登录!
你发现,首先使用use security这个数据库;然后 select * from users ;,意思是从当前的security数据库中选择表 users ,当然你也可以使用其他的数据库,比如mysql、platform,这要看你的MySQL数据库中有哪些数据库名称。然后例举该表下的所有字段id、username、password!
5、需要记住的几个mysql数据库的 函数
database():当前网站使用的数据库名称
version():当前MySQL的版本
user():当前MySQL的用户!
使用例子:
select datebase();
上图的意思是,首先没有进入任何一个数据库名称中,使用database();,发现是 null ,当然啊!你还没有选择一个数据库进入!接下来我们使用了 “test” 数据库,就发现database()显示了当前使用的数据库名称是 test!
继续查询下函数 user() :
select user();
发现连接该mysql数据库的用户是 root 用户!
推荐一款数据库管理连接软件
前面我们使用过 phpmyadmin 网页数据库管理平台,实在不便,接下来我们也使用了mysql的 黑白管理终端 。那么现在我们使用一款可视化非常好的数据库管理软件,也就是说让你更加容易控制你的MySQL数据库—— Navicat for Mysql !加入我的 即可获取下载、安装、使用等教学视频。
直接默认安装即可,详细参照视频安装!
这里的Navicat for Mysql就是mysql数据库的 管理软件 (类似以一个操作界面),非常方便!
连接成功,我们就可以进行查询使用,比如, 我们来查询security数据库下users这个表中的字段username、password:
这里还使用函数user()查询了当前数据库登录的用户。
下面显示是 root ,本地登录!
以后,只要操作数据库,只要win7靶机的wamp开启了,或者你获得了目标服务器的数据库,就能使用 Navicat for Mysql 来操作!
关于更多web渗透实战技术,可以点击 ,进入我专栏进行学习。欢迎关注、点赞、评论!
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~