首先本地要有一个wamp server,因为SQL注入涉及到与数据库交互,所以先从搭建测试数据库开始。
打开mysql console,输入root账户密码登陆。创建一个数据库,并命名为fake,命令如下:
create database fake;
因为我之前已经建立好了,这里直接配置fake数据库的用户权限,配置为leon用户访问,且leon用户的密码为leon,命令如下:
grant all privileges on fake.* to leon@localhost identified by 'leon' with grant option;
如下图所示
使用phpmyadmin也可以配置用户权限,参考下面文章:
phpmyadmin用户及权限管理
配置用户权限主要是为了防止跨库,直接使用root用户来连接当然也是可以的。
数据库的用户权限配置好了,接下来就是在数据库下建表,建字段等,同样可以使用mysql console命令来完成这些操作,但是使用phpmyadmin比较方便
首先在fake这个数据库下建立一个user表,user表下包括3个字段,分别是id,username和password,设置id为主键。
然后向字段中插入内容
最终的内容如下
如果想要用mysql console来实现,我们可以新建一个fake2数据库来测试,create好数据库后,输入下面命令建立数据表和字段并简单配置:
create table `user`(`id` int(11) not null,`username` varchar(20) not null,`password` varchar(20) not null,primary key (`id`)) engine=myisam default charset=latin1;
接着向数据库的字段里insert内容
insert into `user` (`id`,`username`,`password`) values (1,'leon','admin'),(2,'susan','test');
操作过程如下图
这里有个小细节,其实上面的这些建表、建字段和插入的语句我是利用导出的user.sql文件得到的,具体操作就是使用phpmyadmin进入下面的界面
全选所有字段并导出,跳转到下面的页面
点击执行就会导出一个user.sql文件,然后使用编辑器打开
怎么感觉跑题了。。。到了这里数据库方面就处理好了,然后就是注入文件的构造,代码如下:
$id = $_GET['uid'];
echo "您当前执行的sql语句为:" ;
echo "select * from user where id=" . $id . "
";
echo "
";
$mysqli = new mysqli('127.0.0.1','leon','leon','fake');
if(mysqli_connect_errno()){
printf("连接失败:%s
",mysqli_connect_error());
exit();
}
$result = $mysqli->query("select * from user where id=$id");
//print_r($result->fetch_array(MYSQLI_ASSOC));
while(list($id,$username,$password)=$result->fetch_row()){
echo "用户ID:" . $id . "
";
echo "用户名:" . $username . "
";
echo "用户密码:" . $password . "
";
}
$result->close();
$mysqli->close()
?>
从SQL查询语句中可以看到这是数字型的注入,本地的访问效果:
手工注入,sqlmap注入都是可以的。
比较怀旧的也可以使用下面的代码
$id = $_GET['uid'];
$conn = @mysql_connect('127.0.0.1','leon','leon'); //这里使用@符号屏蔽出错信息
mysql_select_db('fake',$conn);
$sql = "select * from user where id=$id";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
echo "用户ID:" . $row['id'] . "
";
echo "用户名:" . $row['username'] . "
";
echo "用户密码:" . $row['password'] . "
";
}
mysql_close($conn);
echo "
";
echo "您当前执行的sql语句为:" ;
echo $sql;
?>