SQL注入进阶-order by注入

目录

01-Order By简介

02-Order By注入场景

03-Order By注入姿势

03.1-结合union select进行盲注

03.2-结合if()进行盲注

03.3-结合if() + sleep()进行盲注

03.4-结合报错注入进行盲注

 04-靶场部署打包


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'] !=
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值