SQL注入前置知识-PhpStudy环境搭建+MySQL基础+PHP操作数据库

        小伙伴们大家好!由于我们在学习SQL注入的时候经常会遇到看不懂payload以及不知道为什么我们使用某些语句,所以呢,本期我就为大家带来学习SQL注入的前置知识。

目录

一、环境搭建

二、MySQL基础

1.启动MySQL

2.MySQL基础操作

1>列出所有的数据库

2>进入到某个数据库

3>列出所有的表

4>查看表的信息

5>查询表中的数据

6>创建表

7>插入数据

8>where语句

9>更新数据

10>删除数据

11>like子句

12>union查询

13>order by排序

14>if语句

15>sleep()函数

16>group_concat()函数

16>删除表

17>删除数据库

三、PHP操作数据库

1.连接数据库

2、执行SQL语句

3、输出SQL语句执行结果

4>通过传参让PHP操作MySQL

        1.GET传参

        2.通过POST传参


一、环境搭建

        首先显示我们的环境搭建,这里我们是选择PHP+MySQL的集成环境-PHPStudy2018。压缩包地址我已经在下面给出了网盘下载地址。

        链接:https://pan.baidu.com/s/1agjFAW3ZoQbM3vG4yhJDxg 
        提取码:6666 

        首先呢我们先将压缩包解压。

        压缩包里有一个phpStudySetup.exe文件就是PhpStudy的安装程序。

 点击安装程序进行安装。(安装的时候可能有的杀毒软件会报毒,安装时记得把杀毒软件关闭)

这里一定要注意路径不能包含中文和空格。 

安装ing...

安装完成。 

这是打开之后的界面。

 点击“其他选项菜单”-->再点击“网站根目录”,就会进入到以下目录。

 该目录就是网站的根目录,网站的源代码都放在这里。

 这里我们先来测试一下我们安装的phpstudy是否可以正常使用。

 首先我们把phpstudy启动。

 然后在网站根目录下创建一个test.php文件。

 在里面写入一些代码。

然后在打开浏览器地址栏输入127.0.0.1/test.php

 可以看到我们打印的“hello world”被浏览器输出。

OK这样我们的php集成环境PhpStudy就搭建成功了!

二、MySQL基础

1.启动MySQL

首先呢我们还是启动我们的phpstudy, 先点击其他选项菜单,然后选择MySQL工具点击MySQL命令行。

输入密码:root(默认密码为root)。

 这样我们的MySQL就成功启动了。

2.MySQL基础操作

1>列出所有的数据库

show databases;

2>进入到某个数据库

use 数据库名;

eg:

use test;

3>列出所有的表

show tables

这里可以看到test数据库下只有一张users表。

4>查看表的信息

desc 表名;

eg:

desc users;

这里可以看到users表的字段名包括id(int型,自增主键)、username(varchar型)、password(varchar型)。 

5>查询表中的数据

select 字段名1,字段名2,...,字段名N from 表名          /*当前库查询*/
select 字段名1,字段名2,...,字段名N from 数据库.表名    /*跨库查询*/
select * from 表名    /*当前库查询*/
select * from 表名    /*跨库查询*/

其中 “*”代表通配符,代表查询所有的字段。 

eg:

select id,username,password from users;

select * from test.users;

 

6>创建表

create table `表名` (字段名1 字段名1类型,字段名2 字段名2类型,...字段名N 字段名N类型);

eg:

create table `guest`(
     `id` int unsigned auto_increment,
    `name` varchar(255) not null,
    primary key(`id`)
)ENGINE=InnoDB default charset=utf8;

 show tables一下检查是否真正创建成功。

创建成功。

7>插入数据

insert into 表名 ( 字段名1, 字段名2,...字段名N ) values ( 值1, 值2,...值N );

 eg:

 insert into guest(id,name) values (1,"Jack");

 我们查询guest表中数据,看数据是否插入到guest表中。

插入成功!!!

8>where语句

select 字段名1, 字段名2,...字段名N from 表名 where 条件1 and/or 条件2.....

eg:

select * from users where id=2;

此结果为查询id=2的数据。

9>更新数据

update 表名 set 字段名1=新值1, 字段名2=新值2,...字段名N=新值N where 条件1 and/or 条件2...

eg:

update users set password="123.com" where username="Tom";

 此结果为将username为“Tom”的password更改为“123.com”。

10>删除数据

delete from 表名 where 条件1 and/or 条件2...

eg:

 delete from guest where name="Jack";

 此结果为删除guest表中name值为“Jack”的数据。

11>like子句

select 字段名1, 字段名2,...字段名N from 表名 where 字段名1 LIKE 条件1 [[and/or] 字段名2 = 'somevalue']

eg:

select * from users where username like '%adm%';

like 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。

如果没有使用百分号 %,LIKE 子句与等号 = 的效果是一样的。

 该语句结果为查询users表中username含有“adm”字符串的数据。

12>union查询

select 字段名1,字段名2,...,字段名N from 表名1 union select 字段名1,字段名2,...,字段名N from 表名2

# 这里要注意两边查询的字段数要一致否则会报错。

eg:

select username,password from users union select * from guest;

 这里要注意两边查询的字段数要一致否则会报错。

13>order by排序

select 字段名1,字段名2,...,字段名N from 表名1 order by 字段名/字段数
# 当如果“order by 字段数” 时,当字段数大于该表的字段数时就会报错,小于就不会报错

当如果“order by 字段数” 时,当字段数大于该表的字段数时就会报错,小于就不会报错,这在之后SQL注入时猜测后端查询语句查询几个字段数时具有非常重要的作用。

eg:

select * from users order by password;
select * from users order by username;

 

14>if语句

if(条件, 结果1, 结果2);
# 如果条件正确的话,返回结果1,否则返回结果2

eg:

 update users set password=if(1=1,"123456","pass") where username="Tom";

15>sleep()函数

sleep(time) # time 为数字 sleep(time)成功执行之后,数据库会在time秒之后才返回结果

sleep()经常与if语句搭配使用,进行时间盲注。

eg:

select username from users union select sleep(5);

16>group_concat()函数

        

group_concat(字段名) 可以将我们查询到的数据用“,”拼接起来 

  

16>删除表

drop table 表名

eg:

drop table guest;

 

17>删除数据库

drop database 数据库名;

eg:

drop database test123;

三、PHP操作数据库

1.连接数据库

$coon = mysqli_connect("127.0.0.1","root","root","test",3306);
// mysqli_connect(主机名, 用户名, 密码, 数据库名, 端口号)

2、执行SQL语句

$sql = "select * from users";
$result = mysqli_query($coon,$sql);
// mysqli_query(数据库链接, sql语句)

3、输出SQL语句执行结果

// mysqli_fetch_array将$result转化为数组形式
$row = mysqli_fetch_array($result);

if ($row) {
    echo "<center></br>";
    // 输出username字段
    echo "<h1>"."username:".$row['username']."</h1>"."<br/>";
    // 输出passowrd字段
    echo "<h1>"."password:".$row['password']."</h1>"."<br/>";
    echo "</center>";
}

在地址栏中输入该php文件的地址,我的该php文件地址是opsql目录下的sql01.php文件。

4>通过传参让PHP操作MySQL

        1.GET传参

          GET传参就是通过在URL后面加入参数,形式为“http://host:port/路径?参数名=参数值”,后端接收传过去的参数进行后续操作。

        例如我们创建一个php文件(/opsql/sql02.php)

<?php

    // 连接数据库
    $coon = mysqli_connect("127.0.0.1","root","root","test",3306);
    // 接受传来的参数id
    $id = @$_GET['id'];

    if (isset($id)) {
        // 执行的SQL语句
        $sql = "select * from users where id=$id";
        $res = mysqli_query($coon, $sql);
        $row = mysqli_fetch_array($res);

        if ($row) {
            echo "<center></br>";
            echo "<h1>"."username:".$row['username']."</h1>"."<br/>";
            echo "<h1>"."password:".$row['password']."</h1>"."<br/>";
            echo "</center>";
        }
    } else {
        echo "<center>";
        echo "<h1>Please input a value as id!</h1>";
        echo "</center>";
    }

PHP的$_GET['参数名']就是获取前端以GET方式传进来的参数值。

        2.通过POST传参

          由于GET方式传递的参数都能显示在URL上面,如果我们传递的是我们的用户名和密码,那么将会造成信息泄露,所以就出现了POST传参。

          POST传参是在请求体中传递数据,不会显示在URL上面,可以通过抓取数据包来获取。

        创建/opsql/php03.php文件

<?php

    // 连接数据库
    $coon = mysqli_connect("127.0.0.1","root","root","test",3306);

    echo "<br/>";
    echo "<center>";
    echo "<form method='post' action='sql03.php'>";
    echo "<lable>Id</lable><input type='number' name='id'/>";
    echo "<input type='submit' value='OK'/>";
    echo "</form>";
    echo "</center>";

    // 接受传来的参数id
    $id = @$_POST['id'];

    if (isset($id)) {
        // 执行的SQL语句
        $sql = "select * from users where id=$id";
        $res = mysqli_query($coon, $sql);
        $row = mysqli_fetch_array($res);

        if ($row) {
            echo "<center></br>";
            echo "<h1>"."username:".$row['username']."</h1>"."<br/>";
            echo "<h1>"."password:".$row['password']."</h1>"."<br/>";
            echo "</center>";
        }
    } else {
        echo "<center>";
        echo "<h1>Please input a value as id!</h1>";
        echo "</center>";
    }

这样我们就使用PHP成功操作了MySQL数据库。

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你们de4月天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值