IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQL 数字型注入详解 + iwebsec实例 -> 正文阅读

[大数据]SQL 数字型注入详解 + iwebsec实例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文为作者的学习笔记。其中详细记载了作者对于SQL 数字型注入的理解,同时也介绍了利用union联合查询注入成功的完整过程。本文最后作者利用iwebsec和Webgoat两个平台来进行实战。如果有不足之处,欢迎指正。

提示:以下是本篇文章正文内容,下面案例可供参考

一、SQL 数字型注入原理

当输入的参数为整型时例如:ID、年龄等。如果此时存在注入漏洞,则可以认为是数字型注入漏洞。可以说数字型漏洞是最简单的一个。
它的判断步骤如下:
第一步:在参数后面加上**“ ‘ ”** (单引号),之后发现页面发生错误
(这一步的作用是判断是否存在注入漏洞,如果不报错那就证明此处没有注入漏洞。只有在服务器将这个单引号一起当作SQL语句时才会报错此处也就存在了SQL注入漏洞)
在这里插入图片描述

第二步:在参数后面加上**“ and 1=1 ”** ,之后发现页面返回正常
在这里插入图片描述

第三步:在参数后面加上 and 1=2 ,之后发现页面返回错误,证明此处有SQL数字型注入漏洞
在这里插入图片描述

二、完整注入过程在这里插入图片描述

第一步判断注入点在判断是否为数字型注入时已经完成。
第二步判断列数使用 order by 来猜列数是多少。order by 3 是以第三列为标准进行升序排序,如果后面的数字大于实际的列数就会报错,我们就是利用这个特点猜解列数,可以用二分法。
在这里插入图片描述
在这里插入图片描述

第三步是判断显错点
我们已经知道列数是三,那么在后面输入 and 1=2 union select 1,2,3
在这里插入图片描述
union联合查询是将两个查询结果合并起来,然后一起输出。但是由于一般都输出第一行,那么按理说输出结果应该和之前的结果是一样的,为什么不一样呢。是因为我们在前面添加了 and 1=2 将之前的查询语句调整为false,所以自然而然输出的结果就只有1,2,3了。
第四步是获取数据库名称
我们一直在Mysql5以后都会存在一个元数据库称为 information_schema ,这里面记录了Mysql数据库里面的所有信息,例如数据库的名称以及表的名称和列的名称。
在这里插入图片描述
当然我们也可以利用数据库自带的函数来获取我们所需要的部分信息。例如:

user()  //用户名
@@datadir     //数据库路径
version()     //数据库版本
@@compile_version_os    //操作系统版本

在这里插入图片描述
我们得出数据库的名称为iwebsec
第五步是获取表名和列名
我们利用information_schema这个数据库来查询我们想知道的信息
在这里插入图片描述
查出表名之后我们继续查询列名
在这里插入图片描述

最后一步获取数据
在这里插入图片描述

三、总结

1.

数字型注入是SQL注入中最简单的漏洞,它的主要问题就在于利用union联合查询并且将前面正常的查询沉默。information_schema数据库里面的内容要记住。

2.

数字型注入与字符型注入的区别不大,只不过字符型注入需要闭合单引号。只要将单引号闭合之后它就变得与数字型注入一样了。在判断是否为数字型注入时第二步和第三步就可以主要是区别字符型注入和数字型注入。

// 这是测试数字型注入页面的源代码
<?php
  require_once('../header.php');
  require_once('db.php');
  ?>
<html>
	<head>
		<title>MySQL 数字型 SQLi</title>
	</head>
	<h2>MySQL 数字型 SQLi</h2>
		<div class="alert alert-success">
			<p>/01.php?id=1 </p>
		</div>
	<body>
  <?php
  if(isset($_GET[id])){
	$id=$_GET[id];
	echo $id."<br>";
	$sql="SELECT * FROM user WHERE id=$id LIMIT 0,1";
	echo $sql."<br>";
		$result=mysql_query($sql);
	}
	else{
		exit();
	}
	if ($result) {
		?>
		<table class='table table-striped'>
      <tr><th>id</th><th>name</th><th>age</th></tr>
		<?php
		while ($row = mysql_fetch_assoc($result)) {
			echo "<tr>";
    			echo "<td>".$row['id']."</td>";
    			echo "<td>".$row['username']."</td>";
    			echo "<td>".$row['password']."</td>";
			echo "</tr>";
		}	
		echo "</table>";
	}
	else 
	{
//	echo '<font color= "#FFFFFF">';
	print_r(mysql_error());
//	echo "</font>";  
	}

?>

总结

希望这篇文章对各位有帮助。本篇文章属于作者的学习笔记,如果有不足之处,可以在评论区讨论。后续如果有新的理解会继续更新。 祝各位学业进步,事业有成
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:06:24  更:2021-12-05 12:08:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:55:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码