zoukankan      html  css  js  c++  java
  • SQL注入学习笔记——联合语句查询

    前提条件:

    联合查询注入利用的前提是页面上有显示位。

    显示位:在一个在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据,客户端将数 据展示在页面中,这个展示数据的位置就叫显示位。

    注意:union可合并两个或多个select语句的结果集, 前提是两个select必有相同列、且各列的数据类型也相同。

    联合注入的过程:

    1、判断注入点

    2、判断是整型还是字符型

    3、判断查询列数

    4、判断显示位

    5、获取所有数据库名

    6、获取数据库所有表名

    7、获取字段名

    8、获取字段中的数据

    一、判断注入点

    and 1=1 / and 1=2 回显页面不同(整形判断) 

    单引号判断‘ 显示数据库错误信息或者页面回显不同(整形,字符串类型判断) 

    (转义符) 

    注:加号‘+’在URL中有特殊含义,因此在需要对其进行URL编码为%2b。%20是空格的意思,在浏览器中注入回车后空格会自动转化成%20。

    二、判断是整型还是字符型

    输入and 1=1和and 1=2后发现页面没有变化,判断不是整型注入。

     

     输入' and 1=1 和 ' and 1=2 后发现页面变化,判断为字符注入 。(%27是 ' 的意思)

     

    在数据库中 1=1 和1=2  后面随便输入字符串(相当于1=1和1=2后面的查询语句),发现select 1="1dasd"时返回1正确,1="2dasd"时返回0错误,即select在查询时忽略后面的字符串,只让1和后面第一个数字对比,如果相等就是正确,不相等返回错误。

    三、判断查询列数

    order by 函数是对MySQL中查询结果按照指定字段名进行排序,除了指定字 段名还可以指定字段的栏位进行排序,第一个查询字段为1,第二个为2,依次 类推。我们可以通过二分法来猜解列数

     输入 order by 4--+  发现页面错误,说明没有4列

    输入 order by 3--+  发现页面正确,说明有3列

     

     四、判断显示位

    UNION的作用是将两个select查询结果合并,

    程序在展示数据的时候通常只会取结果集的第一行数据,看一下源码,mysql_fetch_array只被调用了一次,而mysql_fetch_array从结果集中取得一行作为关联数组或数字数组或二者兼有,具体看第二个参数是什么。所以这里无论怎么折腾最后只会出来第一行的查询结果。只要让第一行查询的结果是空集,即union左边的select子句查询结果为空,那么union右边的查询结果自然就成为了第一行,打印在网页上了。

    输入?id=-1' 或者 1' and 1=2 后面跟上union select 1,2,3--+

    可以看到将uid改为-1后第二行打印在页面上。使union前面的语句报错,执行后面的,爆出显示位,2,3

     

     五、获取所有数据库名

    group_concat()一次性显示: 

    select group_concat(schema_name) from information_schema.schemata

    显示当前数据库: database()

     六、获取表名

    把上面语句中的 schema_name 改成查表名的语句 table_name,information_schema.schemata改成information_schema.tables,后面跟上在哪查的where table_schema='库名'。

     七、获列名

    直接上payload了:select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'

     八、获取列中的信息

    select group_concat(0x3a,username,password) from users 

     也可以用 concat_ws函数 limit 0,1 一条一条查,这里就不做演示了。

  • 相关阅读:
    TensorFlow学习笔记1:graph、session和op
    TensorFlow学习笔记2:逻辑回归实现手写字符识别
    Tensorflow学习笔记3:卷积神经网络实现手写字符识别
    Firstpython介绍
    Oracle sql语句学习
    总结__window dns域名解析错误及其解决方法
    Group By 和 Having, Where ,Order by语句的执行顺序
    Oracle 语句分类
    webbrowser自动登录,没有点击事件,不是submit提交按钮的情况下如何模拟点击登录
    webbrowser跨域访问iframe中的元素实现自动登录
  • 原文地址:https://www.cnblogs.com/qi-yuan/p/12833210.html
Copyright © 2011-2022 走看看