一、MySQL数据库的建立
我用的是phpstudy集成环境,连接MySQL数据库比较简单:
打开mysql命令行,输入默认密码root即可连接到MySQL数据库。
1、建立数据库命令:create database 数据库名; 例如:create database hehe;
删除数据库命令:drop database 数据库名 ; 注意:一旦删除数据库,数据库中的内容会被全部清除。
2、创建数据表命令:create table 数据表名(列的名字1 列的属性1, 列的名字2 列的属性2.....); 例如:create table hello(id int not null ,username varchar(40) not null)engine=innodb default charset=utf8;
数据表已经建立,但是只是建立了一个表的模型,里面没有任何数据,所以接下来往数据表中添加数据记录。
3、添加数据命令:insert into 表名 (列的名字1,列的名字2......)values(属性1,属性2,......),(属性1,属性2,......)......
好了 ,一个数据库成功的建立!
二、一个注入例子。
条件:test数据库,user表,id列,username列,password列,id=1,username=admin,password=admin
目标:通过sql注入得到admin用户的密码。
PHP代码:
查看代码很明显可以看到输入的username和password经过了clean函数的过滤。那么我们来看clean函数。
magic_quotes_gpc=on的时候,输入的单引号和双引号都会被加上反斜线,所以if语句的作用就是避免输入的变量自动加上反斜线。然后函数将经过htmlentities转义的字符串返回。htmlentities()函数的作用就是将指定的字符转换,第二个参数的描述为:
那么很明显我们不能在给username赋值的时候 加入单引号,因为这是没有用的,然而我们又需要一个单引号来使username闭合从而加入sql注入语句,那该怎么办呢? 注意到后面 password中也有单引号,那么我们可以把username闭合的那个单引号转义掉,使其不能闭合,然后password的第一个单引号使其闭合,那么就可以给password赋上注入语句来执行注入。就是这样:?username=\&password=union select * from user%23 此时php中的语句变成:select * from user where username='\' AND password='union select *from user# 原username闭合的单引号被转义了不能闭合,然后AND password=也变成比较的一部分,后面那个单引号才能使username闭合,然后后面的注入可以正常执行,结果如下: