联合查询SQL注入

1、 SQL注入介绍

  SQL注入介绍:SQL注入介绍
  注入产生原因:web应用程序对用户输入数据的合法性没有判断或过滤不严,导致恶意payload直接带入SQL语句执行,从而执行payload中非法操作!

2、 联合查询注入PHP代码

  新建PHP文件,将下面代码复制到PHP文件中,在浏览器中访问即可

<?php
$host   = '127.0.0.1';
$dbuser = 'root';
$dbpass = 'root';
$dbname = 'test';

$con = new mysqli($host, $dbuser, $dbpass, $dbname);
if ($con->connect_error) {
    die("Connect Failed: " . $con->connect_error);
}

if (isset($_GET['id']) && !empty($_GET['id'])) {
    $id = $_GET['id'];
} else {
    die("Missing id parameter!");
}

$sql    = "select id,title,content from t_feedback where id=$id";
$result = $con->query($sql) or die();

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"] . "<br>";
        echo "title: " . $row["title"] . "<br>";
        echo "content: " . $row["content"] . "<br>";
    }
} else {
    echo "No feedback found!" . "<br>";
}

echo "Your SQL syntax: " . $sql;

$con->close();

3、 联合查询注入测试

  尝试输入特殊字符,SQL返回错误,证明可能存在SQL注入漏洞,联合查询注入前提:页面回显查询内容
在这里插入图片描述
  通过order by确定表字段数,order by 3页面返回正确,order by 3页面返回错误,确定数据表有3列字段
在这里插入图片描述
在这里插入图片描述
  通过联合查询语句,拼接查询用户、数据库名及数据库版本信息,关键payload:
group_concat(user(),0x7e,database(),0x7e,version())
在这里插入图片描述
  查询数据库中所有数据表,0x74657374为数据库名二进制编码,关键payload:
group_concat(table_name) from information_schema.tables where table_schema=
在这里插入图片描述
  查询数据表所有列名,关键payload:
group_concat(column_name) from information_schema.columns where table_name=
在这里插入图片描述
  查询用户数据表所有用户信息,关键payload:
group_concat(name,0x7e,pass,0x7e,email) from t_user
在这里插入图片描述

4、 代码漏洞修复

  由于此处传入 id 值为 int 型,此处可直接使用 intval() 函数将接收的参数值强制转换为 int 型,防止注入。此脚本中,$id = $_GET['id'];改为$id = intval($_GET['id']);即可。

  修改后PHP代码如下:

<?php
$host   = '127.0.0.1';
$dbuser = 'root';
$dbpass = 'root';
$dbname = 'test';

$con = new mysqli($host, $dbuser, $dbpass, $dbname);
if ($con->connect_error) {
    die("Connect Failed: " . $con->connect_error);
}

if (isset($_GET['id']) && !empty($_GET['id'])) {
    $id = intval($_GET['id']);
} else {
    die("Missing id parameter!");
}

$sql    = "select id,title,content from t_feedback where id=$id";
$result = $con->query($sql) or die();

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"] . "<br>";
        echo "title: " . $row["title"] . "<br>";
        echo "content: " . $row["content"] . "<br>";
    }
} else {
    echo "No feedback found!" . "<br>";
}

echo "Your SQL syntax: " . $sql;

$con->close();
——舍心K
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值