【18】WEB安全学习----MySQL注入-3(非盲注注入例子)

通过上一章,学习了MySQL注入的步骤,这一章进行练习。

PHP代码:与上一章不同,不同之处请看代码注释

<?php
    header('content-type:text/html;charset=utf-8');
    @$id=$_GET['id'];  //传参
    if(!isset($id)){
        die('请传入GET方法id参数值');
    }
    $mysqli=new mysqli();
    $mysqli->connect('localhost','root','root');
    if($mysqli->connect_errno){
        die('连接数据库失败:'.$mysqli->connect_error);
    }
    $mysqli->select_db('user');
    if($mysqli->errno){
        die('打开数据库失败:'.$mysqli->error);
    }
    $mysqli->set_charset('utf8');
    $sql="SELECT username,passwd FROM users WHERE id={$id} limit 0,1";  //添加了limit语句
    $result=$mysqli->query($sql);
    if(!$result){
        die('执行SQL语句失败:'.$mysqli->error);
    }else if($result->num_rows==0){
        die('查询结果为空');
    }else {
        $array1=$result->fetch_all(MYSQLI_ASSOC);
        //无论有多少条记录,只显示第一行记录
        echo '用户名:'.$array1[0]['username'].'<br />'.'密码:'.$array1[0]['passwd'].'<br />';
    }

判断注入点

进行了运算操作,%23是mysql注释符#的编码,因为在实际测试中,你并不知道SQL语句后面还写了什么,为了方便判断,直接注释后面的语句。

进行了逻辑运算

进行了数学函数运算

猜字段长度

可得知,当前查询语句为2个字段

进行联合查询

这里要注意一点,因为代码设置了只能显示一行记录,为了显示union后面的记录,故要把前面的查询记录设置为空,所以这里ID=-1

注意:因为只能显示一条记录,故这里用limit语句控制记录行数。

闭合SQL语句

在其它情况中,关键是如何拼接SQL语句的,在SQL注入中就要闭合相关语句,可通过报错信息查看拼接信息。如果不显示报错信息,则只有FUZZ了。

 $sql="SELECT username,passwd FROM users WHERE id={$id} limit 0,1";
 $sql="SELECT username,passwd FROM users WHERE id='{$id}' limit 0,1";
 $sql="SELECT username,passwd FROM users WHERE id=({$id}) limit 0,1";
 $sql="SELECT username,passwd FROM users WHERE id='({$id})' limit 0,1";
......

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值