IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQL Inject -> 正文阅读

[大数据]SQL Inject

SQL(pikachu)

SQL Inject漏洞概述

owasp发布的top 10漏洞里面,注入漏洞一直是危害排名第一,其中主要指 SQL Inject漏洞

数据库注入漏洞,主要是开放人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄露的一种漏洞。
请添加图片描述

SQL Inject漏洞攻击流程

1、第一步:注入点探测
—— 自动方式:使用web漏洞扫描工具,自动进行注入点发现
—— 手动方式:手工构造sql inject测试语句进行注入点发现
2、第二步:信息获取
通过注入点期望得到的数据。
—— 1.环境信息:数据库类型,数据库版本,操作系统版本,用户信息等。
—— 2.数据库信息:数据库名称,数据库表,表字段,字段内容(加密内容破解)
3、第三步:获取权限
—— 获取操作系统权限:通过数据库执行shell,上传木马

SQL Inject漏洞 - 常见注入点类型

  • 数字型 —— user_id=$id
  • 字符型 —— user_id= ‘$id’
  • 搜索型 —— text LIKE ‘%{$_GET[‘search’]}%’"

SQL Inject - 数字型注入(pikachu)

$id $_POST['id']
select 字段1,字段2 from 表名 where id = $id;
select 字段1,字段2 from 表名 where id = 1 or 1 = 1; //简单的数字型的SQL Inject的演示

SQL Inject 漏洞代码分析(数字型)

if(isset($_POST['submit']) && $_POST['id']!=null){
    //这里没有做任何处理,直接拼到select里面去了,形成Sql注入
    $id=$_POST['id'];
    $query="select username,email from member where id=$id";
    $result=execute($link, $query);
    //这里如果用==1,会严格一点
    if(mysqli_num_rows($result)>=1){
        while($data=mysqli_fetch_assoc($result)){
            $username=$data['username'];
            $email=$data['email'];
            $html.="<p class='notice'>hello,{$username} <br />your email is: {$email}</p>";
        }
    }else{
        $html.="<p class='notice'>您输入的user id不存在,请重新输入!</p>";
    }
}

请添加图片描述

SQL Inject - 字符型注入(pikachu)

$username=$_GET['username']
select 字段1,字段2 from 表名 where username='kobe';
~~kobe or 1=1~~ 
select 字段1,字段2 from 表名 where username='kobe' or 1=1#';

SQL Inject 漏洞代码分析(字符型)

if(isset($_GET['submit']) && $_GET['name']!=null){
    //这里没有做任何处理,直接拼到select里面去了
    $name=$_GET['name'];
    //这里的变量是字符型,需要考虑闭合
    $query="select id,email from member where username='$name'";
    $result=execute($link, $query);
    if(mysqli_num_rows($result)>=1){
        while($data=mysqli_fetch_assoc($result)){
            $id=$data['id'];
            $email=$data['email'];
            $html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>";
        }
    }else{

        $html.="<p class='notice'>您输入的username不存在,请重新输入!</p>";
    }
}

请添加图片描述

SQL Inject - 搜索型注入(pikachu)

select * from member where username like '%k%';
like '%xxxx%' or 1=1 #%'
%xxxx%' or 1=1 #

= ('xx')or 1=1 #')
xx')or 1=1 #

SQL Inject 漏洞代码分析(搜索型)

 //这里没有做任何处理,直接拼到select里面去了
    $name=$_GET['name'];

    //这里的变量是模糊匹配,需要考虑闭合
    $query="select username,id,email from member where username like '%$name%'";
    $result=execute($link, $query);
    if(mysqli_num_rows($result)>=1){
        //彩蛋:这里还有个xss
        $html2.="<p class='notice'>用户名中含有{$_GET['name']}的结果如下:<br />";
        while($data=mysqli_fetch_assoc($result)){
            $uname=$data['username'];
            $id=$data['id'];
            $email=$data['email'];
            $html1.="<p class='notice'>username:{$uname}<br />uid:{$id} <br />email is: {$email}</p>";
        }
    }else{

        $html1.="<p class='notice'>0o。..没有搜索到你输入的信息!</p>";
    }
if(isset($_GET['submit']) && $_GET['name']!=null){
    //这里没有做任何处理,直接拼到select里面去了
    $name=$_GET['name'];
    //这里的变量是字符型,需要考虑闭合
    $query="select id,email from member where username=('$name')";
    $result=execute($link, $query);
    if(mysqli_num_rows($result)>=1){
        while($data=mysqli_fetch_assoc($result)){
            $id=$data['id'];
            $email=$data['email'];
            $html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>";
        }
    }else{

        $html.="<p class='notice'>您输入的username不存在,请重新输入!</p>";
    }
}

总结

不管是什么型,总而言之,就是对SQL中的各种类型的输入进行闭合测试,构造合法SQL,欺骗后台执行!

补充:MYSQL小知识:注释符号

因为在SQL注入测试中,需要经常对多余的内容进行消除,以保证SQL语句语法正确,比如上面的#。
使用注释符号直接对多余内容进行注释是比较有效的方法。

MySQL服务器支持3种注释:
1.从 '#' 字符从行尾。
2.从 '--' 序列到行尾。请注意 '--'(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如:空格、tab、换行等等)。该语法与标准SQL注释语法稍有不同。
3.从 /* 序列到后面 */ 序列。结束序列不一定在同一行中,因此该语法允许注释跨越多行。
4.下面的例子显示了3种风格的注释:

mysql> SELECT 1+1;   #This is comment continues to the end of line
mysql> SELECT 1+1;   --This comment continues to the end of line
mysql> SELECT 1 /*This is an in-line comment*/ + 1;
mysql> SELECT 1+ /*This is amultiple-line comment*/ 1;

注入方式get&post区别

GET 方式中使用URL提交注入数据;
POST 方式中使用抓包工具修改post数据部分提交注入;

不管是 GET方式还是 POST方式,都可能会出现SQL注入漏洞,本质其实是一样的!

以上是我的听课及学习笔记,欢迎借鉴交流学习,并指出不足!谢谢支持!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:22:42  更:2022-09-13 11:24:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:29:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码