Less-24 POST- Second Oder Injections Real treat -Stored Injections
-
二次排序注入
二次排序注入也成为存储型的注入,就是将可能导致sql注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以出发sql注入。二次排序注入思路:
1、黑客通过构造数据的形式,在浏览器或者其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令。
2、服务端应用程序会将黑客提交的数据信息进行存储,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响应。
3、黑客向服务端发送第二个与第一次不相同的请求数据信息。
4、服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而导致黑客在第一次请求中构造的SQL语句或者命令在服务端环境中执行。
5、服务端返回执行的处理结果数据信息,黑客可以通过返回的结果数据信息判断二次注入漏洞利用是否成功。 -
查看后端源代码():
//login.php中的源码
$username = mysql_real_escape_string($_POST["login_user"]);
$password = mysql_real_escape_string($_POST["login_password"]);
//mysql_real_escape_string() 函数,转义SQL语句中使用的字符串中的特殊字符。
//login_create.php中的源码
$username= mysql_escape_string($_POST['username']) ;
$pass= mysql_escape_string($_POST['password']);
$re_pass= mysql_escape_string($_POST['re_password']);
//mysql_escape_string()函数,
//pass_change.php中的源码
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
- 可见,登录页面和注册页面的后端源代码都有输入过滤函数对输入的字符转义。
- 下图是数据库中原有的表单:
- 注册一个跟上图原有的username相似的username:
- 数据表中已存入刚注册的username和password:
- 寻找另一处引用这个数据并没有被转义又插入进了数据库中。即:在登录后的密码修改处
- Reset后admin的密码就会被更改: