第一部分/page-1 Basic Challenges

Background-1 基础知识

此处介绍一些mysql注入的一些基础知识。

(1)注入的分类---仁者见仁,智者见智。

下面这个是阿德玛表哥的一段话,个人认为分类已经是够全面了。理解不了跳过,当你完全看完整个学习过程后再回头看这段。能完全理解下面的这些每个分类,对每个分类有属于你的认知和了解的时候,你就算是小有成就了,当然仅仅是sql注入上。

基于从服务器接收到的响应 

▲基于错误的SQL注入

▲联合查询的类型

▲堆查询注射

▲SQL盲注

•基于布尔SQL盲注

•基于时间的SQL盲注

•基于报错的SQL盲注

基于如何处理输入的SQL查询(数据类型) 

•基于字符串

•数字或整数为基础的

基于程度和顺序的注入(哪里发生了影响)

★一阶注射

★二阶注射

一阶注射是指输入的注射语句对WEB直接产生了影响,出现了结果;二阶注入类似存储型XSS,是指输入提交的语句,无法直接对WEB应用程序产生影响,通过其它的辅助间接的对WEB产生危害,这样的就被称为是二阶注入.
基于注入点的位置上的 

▲通过用户输入的表单域的注射。

▲通过cookie注射。

▲通过服务器变量注射。 (基于头部信息的注射)

 

(2)系统函数

介绍几个常用函数:
1. version()——MySQL版本
2. user()——数据库用户名
3. database()——数据库名
4. @@datadir——数据库路径
5. @@version_compile_os——操作系统版本

  1. 字符串连接函数

    函数具体介绍 http://www.cnblogs.com/lcamry/p/5715634.html

  2. concat(str1,str2,...)——没有分隔符地连接字符串
    2. concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串
    3. group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据
    说着比较抽象,其实也并不需要详细了解,知道这三个函数能一次性查出所有信息就行了。
  3. 一般用于尝试的语句

    Ps:--+可以用#替换,url提交过程中Url编码后的#为%23

    or 1=1--+

    'or 1=1--+

    "or 1=1--+

    )or 1=1--+

    ')or 1=1--+

    ") or 1=1--+

    "))or 1=1--+

    一般的代码为:

    $id=$_GET['id'];

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

    此处考虑两个点,一个是闭合前面你的 ' 另一个是处理后面的 ' ,一般采用两种思路,闭合后面的引号或者注释掉,注释掉采用--+ 或者 #(%23)

  4. union操作符的介绍

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

    SQL UNION 语法

    SELECT column_name(s) FROM table_name1

    UNION

    SELECT column_name(s) FROM table_name2

    注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

    SQL UNION ALL 语法

    SELECT column_name(s) FROM table_name1

    UNION ALL

    SELECT column_name(s) FROM table_name2

    另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

    (6)sql中的逻辑运算

    这里我想说下逻辑运算的问题。

    提出一个问题Select * from users where id=1 and 1=1; 这条语句为什么能够选择出id=1的内容,and 1=1到底起作用了没有?这里就要清楚sql语句执行顺序了。

    同时这个问题我们在使用万能密码的时候会用到。

    Select * from admin where username='admin' and password='admin'

    我们可以用 'or 1=1# 作为密码输入。原因是为什么?

    这里涉及到一个逻辑运算,当使用上述所谓的万能密码后,构成的sql语句为:

    Select * from admin where username='admin' and password=''or 1=1#'

    Explain:上面的这个语句执行后,我们在不知道密码的情况下就登录到了admin用户了。

    原因是在where子句后,我们可以看到三个条件语句 username='admin' and password=''or 1=1。三个条件用and和or进行连接。在sql中,我们and的运算优先级大于or的元算优先级。因此可以看到 第一个条件(用a表示)是真的,第二个条件(用b表示)是假的,a and b = false,第一个条件和第二个条件执行and后是假,再与第三个条件or运算,因为第三个条件1=1是恒成立的,所以结果自然就为真了。因此上述的语句就是恒真了。

     

     

     

     

     

    ①Select * from users where id=1 and 1=1;

    ②Select * from users where id=1 && 1=1;

    ③Select * from users where id=1 & 1=1;

    上述三者有什么区别?①和②是一样的,表达的意思是 id=1条件和1=1条件进行与运算。

    ③的意思是id=1条件与1进行&位操作,id=1被当作true,与1进行 & 运算 结果还是1,再进行=操作,1=1,还是1(ps:&的优先级大于=)

    Ps:此处进行的位运算。我们可以将数转换为二进制再进行与、或、非、异或等运算。必要的时候可以利用该方法进行注入结果。例如将某一字符转换为ascii码后,可以分别与1,2,4,8,16,32.。。。进行与运算,可以得到每一位的值,拼接起来就是ascii码值。再从ascii值反推回字符。(运用较少)

    (7)注入流程

    我们的数据库存储的数据按照上图的形式,一个数据库当中有很多的数据表,数据表当中有很多的列,每一列当中存储着数据。我们注入的过程就是先拿到数据库名,在获取到当前数据库名下的数据表,再获取当前数据表下的列,最后获取数据。

    现在做一些mysql的基本操作。启动mysql,然后通过查询检查下数据库:

    show databases;

    这个实验用到的数据库名为security,所以我们选择security来执行命令。

    use security;

    我们可以查看下这个数据库中有哪些表

    show tables;

    现在我们可以看到这里有四张表,然后我们来看下这张表的结构。

    desc emails;

    在继续进行前台攻击时,我们想讨论下系统数据库,即information_schema。所以我们使用它

    use information_schema

    让我们来看下表格。

    show tables;

    现在我们先来枚举这张表

    desc tables;

    现在我们来使用这个查询:

    select table_name from information_schema.tables where table_schema = "security";

    使用这个查询,我们可以下载到表名。

    Mysql有一个系统数据库information_schema,存储着所有的数据库的相关信息,一般的,我们利用该表可以进行一次完整的注入。以下为一般的流程。

    猜数据库

    select schema_name from information_schema.schemata

    猜某库的数据表

    select table_name from information_schema.tables where table_schema='xxxxx'

    猜某表的所有列

    Select column_name from information_schema.columns where table_name='xxxxx'

    获取某列的内容

    Select *** from ****

    上述知识参考用例:less1-less4

MYSQL注入天书之基础知识的更多相关文章

  1. MYSQL注入天书之开天辟地

    MYSQL注入天书 在线版本:xianzhi.aliyun.com 第一篇地址:https://xianzhi.aliyun.com/forum/read/314.html第二篇地址:https:// ...

  2. MySQL中索引的基础知识

    本文是关于MySQL中索引的基础知识.主要讲了索引的意义与原理.创建与删除的操作.并未涉及到索引的数据结构.高性能策略等. 一.概述 1.索引的意义:用于提高数据库检索数据的效率,提高数据库性能. 数 ...

  3. mysql注入快速学习基础

    前言: sql注入想学好,学通.必须得了解一下基础的SQL 语句.这里我快速理一理 正文: 搭建环境建议下phpsduy快速搭建 select * from kasi select 字段名 from ...

  4. MYSQL注入天书之宽字节注入

    Background-7 宽字节注入 Less-32,33,34,35,36,37六关全部是针对'和\的过滤,所以我们放在一起来进行讨论. 对宽字节注入的同学应该对这几关的bypass方式应该比较了解 ...

  5. MYSQL注入天书之stacked injection

    第三部分/page-3 Stacked injection Background-8 stacked injection Stacked injections:堆叠注入.从名词的含义就可以看到应该是一 ...

  6. MYSQL注入天书之后记

    后记 对于工具的看法: 我之所以在每个例子中只写了几个示例,是因为我希望你能通过这一两个示例举一反三将其他的列出来.如果让我来完成每一次完整的注入,应该在知道原理的情况下,必然使用工具或者自己写代码实 ...

  7. MYSQL注入天书之盲注讲解

    Background-2 盲注的讲解 何为盲注?盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面.此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注.从ba ...

  8. MYSQL注入天书之前言

    写在前面的一些内容 请允许我叨叨一顿: 最初看到sqli-labs也是好几年之前了,那时候玩了前面的几个关卡,就没有继续下去了.最近因某个需求想起了sqli-labs,所以翻出来玩了下.从每一关卡的娱 ...

  9. MYSQL注入天书之导入导出介绍

    Background-3 导入导出相关操作的讲解 load_file()导出文件 Load_file(file_name):读取文件并返回该文件的内容作为一个字符串. 使用条件: A.必须有权限读取并 ...

随机推荐

  1. 用python爬校花网

    import requests import re import hashlib,time def get_index(url): response=requests.get(url) if resp ...

  2. 洛谷P3764 签到题 III

    题目背景 pj组选手zzq近日学会了求最大公约数的辗转相除法. 题目描述 类比辗转相除法,zzq定义了一个奇怪的函数: typedef long long ll; ll f(ll a,ll b) { ...

  3. 【BZOJ】1607: [Usaco2008 Dec]Patting Heads 轻拍牛头

    [算法]模拟 #include<cstdio> #include<algorithm> using namespace std; ,maxm=; int a[maxn],A[m ...

  4. Linux系统网络基础知识及配置

    一:DNS(domain name system)简介 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而 ...

  5. 【Python问题解决】关于解决python3.x无法使用PIL库的解决方法

    因为PIL库目前只更新到python2.x,故python3.x直接安装PIL库会找不到版本.但是python3.x有一个新的库,可以提供和PIL差不多的功能,也就是pillow库. 本人使用的是py ...

  6. vue-混入mixin

    混入 基础 混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项. 例子: // ...

  7. LINUX内核面试题摘选

    转载:http://blog.csdn.net/zm1_1zm/article/details/77231197 1) Linux中主要有哪几种内核锁? 答:Linux的同步机制从2.0到2.6以来不 ...

  8. 在linux下有没有什么软件可以连接windows上的MSSQL SERVER

    在linux下有没有什么软件可以连接windows上的MSSQL SERVER GUI的http://dbeaver.jkiss.org/ http://bbs.csdn.net/topics/391 ...

  9. Winform利用委托进行窗体间的传值

    在form1.cs中 1.委托的定义 //定义一个委托 public delegate void AddUsrEventHandler(object sender, AddUsrEventHandle ...

  10. maven新建web项目提示The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    maven新建web项目提示The superclass "javax.servlet.http.HttpServlet" was not found on the Java Bu ...