CISP-PTE SQL注入-基础篇

以下模型为正常用户/hacker通过注册/查询/更新/删除数据的流程。
下面四个点也是经典的“输入-处理-输出”的web应用流程,那么我会分开来介绍正常用户和hacker在查询数据时是有什么不同,方便大家理解。

在这里插入图片描述

场景:A站点在用户登录界面采用了用户输入账号密码,将账号密码与数据库存储的账号密码做比对,比对成功则用户登入该账号。
以下为web端连接数据库校验账号密码代码

<?php
session_start();
header('Content-Type:text/html;charset=UTF-8');
$user = @$_POST['user']; //接收用户输入的用户名
$pwd = @$_POST['pwd'];//接收用户输入的密码
//连接数据库
$con = pg_connect("host=localhost dbname=test user= root password=root");
$sql = "SELECT * FROM users WHERE user='$user' and pwd='$pwd'";//拼接sql语句
$rs = pg_query($con,$sql);//执行查询
?>
<html>
<body>
<?php
if(pg_num_rows($rs) > 0){
$_SEESION['user'] = $user;
echo '登录成功'}else{
echo '登录失败';
}
pg_close($con);
?>
</body>
</html>

那么最关键的一句就是$sql = "SELECT * FROM users WHERE user='$user' and pwd='$pwd'";

正常用户:
1,输入用户名密码(假设用户名密码都为test)
2,web服务器接收到数据,拼接sql语句为 SELECT * FROM users WHERE user='test' and pwd='test',发往数据库进行查询
3,数据库返回正确参数
4,web服务器将登录成功输出给用户

hacker:
1,在输入账号密码时,hacker只在账号钟输入' or 1#,密码为空
2,web服务器接收到数据,拼接sql语句为 SELECT * FROM users WHERE user='' or 1# and pwd='test',发往数据库进行查询,那么这句sql语句则就被hacker注入了,更改了web服务器原有的sql语句,将sql语句变成 SELECT * FROM users WHERE user='' or 1,虽然user为空,但是与or逻辑运算符判断为True,则查询也会返回正确参数。
3,数据库返回正确参数
4,web服务器将登录成功输出给hacker

那么通过以上的例子相信大家也了解到sql注入是一个怎样的攻击方法。想要掌握这种攻击方法首先要对SQL语句与结构框架有一个了解。

SQL基本语句

一个数据库管理系统里有库表列三层,分别是数据库,数据表,列这三层结构。一个管理系统里包含多个数据库,一个数据库里包含多个表,一个表里面包含有多个列。
在这里插入图片描述
如果我们想要对表进行操作,首先就要选择对应的数据库

库的基本操作

show databases//查看所有数据库

在这里插入图片描述

use 数据库名;//打开数据库

在这里插入图片描述

create database 数据库名 [charset 字符集]//创建一个数据库

在这里插入图片描述

drop database 数据库名;//删除数据库

在这里插入图片描述

表的基本操作

show tables;//查看数据库里的表,查看表要先打开数据库,然后才能对表进行操作

在这里插入图片描述

create table 表名(列名,数据类型);//创建表名

在这里插入图片描述

drop table 表名;//删除表

在这里插入图片描述

rename table 原表名 to 要改成的表名;//修改表名

在这里插入图片描述

select * from 表名//查看表中所有数据

在这里插入图片描述

desc 表名;//查看表结构

在这里插入图片描述

列的基本操作

insert into 表名(1,2,...列n) values(1,2,...值n)//增加字段

在这里插入图片描述

update 表名 set1=新值1,2=新值2,...列n=新值n where 判断条件;//修改字段

在这里插入图片描述这个地方要注意的是并不是每个列名都要修改,而是修改你想要修改的列名所对应的值。如果不加判断判断语句的话,默认修改整个表的列名对应的所有值在这里插入图片描述

select1,2,...列n from 表名 where 判断条件//查询所要的列名对应的值

在这里插入图片描述通过desc users;我们看到列名有8个,但我们如果只想看user和password就可以输入select user,password from users;

在这里插入图片描述如果我们只想看admin的信息,那么在语句后面加入判断条件select user,password from users where user='admin';
在这里插入图片描述
看到这里,相信大家已经对数据库,表,列已经有一个大概的了解和掌握了,那么下一篇就是SQL注入的一些攻击手段了。这个部分我会结合DVWA的靶场给大家进行一个演示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

beirry

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

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

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

打赏作者

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

抵扣说明:

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

余额充值