目录
01-Order By简介
在很多web站点中,都提供了对前端界面显示数据的排序功能,而实际中web站点的排序功能都是借助SQL的order by来实现的,下图是某站点利用order by排序功能实现的效果:
order by语法:
order by 数字 | 列名 [ ASC , [ DESC ] ]
1、order by:对查询结果按照指定列进行排序,指定列的方式有两种:数字或列名
2、ASC:升序排列,默认为ASC
3、DESC:降序排列
注意:以数字方式指定排序列时,数字不能超过列的总数,利用该特性在进行SQL注入的时候可以判断数据库的字段数量
02-Order By注入场景
CTF题干给出一个登陆界面,根据提示信息,我们可知,只要破解了用户admin的密码并登陆,即可获得flag值,如下:
题干分析:
web前端页面输入用户名密码并点击提交后,Form表单会将username/password提交到后台进行登陆验证,此时如果后端执行验证时先使用username查表,再匹配查出来记录的密码字段是否和用户提交的password一致来判断是否允许登陆,实现这种登陆验证的服务端代码往往如下所示:
<?php
// highlight_file(__FILE__);
error_reporting(E_ALL & ~E_NOTICE);
$username = $_GET['username'];
$password = $_GET['password'];
$connect = mysqli_connect('localhost','order','order','order_by_inject');
mysqli_query($connect , "set names utf8");
$sql = "select * from users where username="."('$username')";
$result = mysqli_query($connect,$sql);
if (isset($username)) {
if (!$result) {
echo("Something Wrong: " . mysqli_error($connect));
exit();
}else{
$row = mysqli_fetch_array($result);
if (isset($row) && $row['username'] !=