less 16的考点是登录后在修改密码界面注入而并非登录时注入。
1.在username和password输入1,1;1,1‘‘测试,验证失败
2.根据代码查询,
$uname = check_input($_POST[‘uname‘]); $passwd = $_POST[‘passwd‘]; @$sql = "SELECT username, password FROM users WHERE username= $uname LIMIT 0,1"; $result = mysql_query($sql); $row = mysql_fetch_array($result); if($row) { $row1 = $row[‘username‘]; $update="UPDATE users SET password = ‘$passwd‘ WHERE username=‘$row1‘"; mysql_query($update); if (mysql_error()) print_r(mysql_error()); echo ‘<img src="../images/flag1.jpg"/>‘; } else echo ‘<img src="../images/slap1.jpg"/>‘;
从源码中可以看到:接收到用户POST的
uname
和passwd
后,首先根据uname
查询数据库的username
和password
,若uname
存在则用passwd
替换password
,若不存在则显示slap1.jpg
。这就是为什么之前试的几条都失败了。当用户名正确后,页面便能够返回Mysql错误信息,这就可以利用子查询注入在错误信息中返回想要的数据。
username=admin new password=1‘