OWASP top10--SQL注入(一)
SQL注入式攻击技术,一般针对基于Web平台的应用程序.造成SQL注入攻击漏洞的原因,是由于程序员在编写Web程序时,没有对浏览器端提交的参数进行严格的过滤和判断。用户可以修改构造参数,提交SQL查询语句,并传递至服务器端,从而获取想要的敏感信息,甚至执行危险的代码或系统命令。
虽然SQL注入攻击技术早已出现,但是时至今日仍然有很大一部分网站存在SQL注入漏洞,各大门户网站同样存在SQL注入漏洞。由于SQL漏润存在的普遍性,因此SQL入侵攻击技术往往成为黑客入侵攻击网站渗透内部服务的首选技术,其危害性非常大。
01:SQL注入漏洞概念/原理
- 由于程序员在编写Web程序时,没有对浏览器端提交的参数进行严格的过滤和判断
- 注入产生的原因是接受相关参数未经处理直接带入数据库查询操作;注入攻击属于服务端攻击,他与操作系统、数据库类型、脚本语言类型无关 。
环境准备:win2003 phpstudy2016 mysql靶场环境、pikachu靶场环境
打开 musql靶场环境:
查看源代码:(sql.php)
<?
$id=$_GET['id'];//接受get方式传递参数名id的值并赋值给变量id{$conn=mysql_connect("127.0.0.1","root","root");
if($conn){echo "ok!";
}//判断连接是否成功
mysql_select_db('sql',$conn);//选择连接请求为conn的数据库
$sql="select * from user where id=$id";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result)){ //数组遍历echo "用户ID: ".$row['id']."<br >";echo "用户名: ".$row['username']."<br >";echo "用户密码: ".$row['password']."<br >";echo "用户邮箱: ".$row['email']."<br >";}
mysql_close($conn);
echo "<hr>";
echo "你当前执行的sql语句为:";
echo "select * from user where id=$id";
}
?>
说明:从GET请求中获取的参数id直接赋值给变量$id时,没有进行任何过滤或验证,产生SQL注入攻击漏洞。(参数id给变量$id未经过滤,直接带入数据库查询)
就可以在参数中编写SQL语句信息,最终需要将SQL语句发送到服务端(数据库服务)

02:SQL注入步骤
- 探测到SQL注入的注入点
- 需要绕过SQL注入防范机制
- 发送SQL注入SQL语句命令
- 获取数据库数据/篡改数据库数据
03:SQL注入漏洞检测方法
单引号
and
or
Xor
%26%26
true false
order by
单引号:
mysql靶场:
http://10.0.0.101:90/mysql/sql.php?id=1
不加单引号能输出内容:

加单引号不能输出内容:

打开phpstudy菜单mysql数据库命令行:

查看数据库直接执行命令输出的内容:

说明:主要判断是否与数据交互
and (和):
and 1=1和and 1=2
mysql靶场
and 1=1输出数据库内容:

and 1=2 未输出数据库内容:

查看数据库直接执行命令输出的内容:

and 1=1为真,数据库输出内容;and 1=2为假,数据库没有输出内容;
说明:防护机制未对and进行过滤,执行sql语句成功与数据库交互输出内容。
or(或):
or 1=1 or 1=2 (or表示或)
or 1=1输出全部内容:(or表示或;1=1为真全部输出)

or 1=2只输出查询内容:

查看数据库直接执行命令输出的内容:

Xor(异或):
Xor 1=1 Xor 1=2( Xor表示异或)
(单引号、and、or被防护机制过滤了可尝试Xor进行绕过)
Xor 1=1输出di不是1的内容:

Xor1=2输出di为1的内容:

查看数据库直接执行命令输出的内容:

Xor说明:select * from test where A xor B
如果B为真,则查出不满足A条件数据;
如果B为假,则查出满足A条件数据;
%26%26(&&经url编码):
%26%26 1=1 %26%26 1=2
(因在URL中,&通常用于分隔多个参数;将&&通过URL编码绕过为%26%26)

%26%26 1=1
%26%26 1=2

true false:
true为真 false为假
and true and false
or true or false
Xor true Xor false
%26%26 true %26%26 false
如果数字(1=1)被防护机制过滤可尝试此方式绕过;(true为真、false为假)
and true

and false

查看数据库直接执行命令输出的内容:

mod(8,7)in(1) mod(8,7)in(2)(求余函数)
使用求余函数mod;即mod(8,7)in(1)为真;mod(8,7)in(2)为假
and mod(8,7)in(1) and mod(8,7)in(2)
or mod(8,7)in(1) or mod(8,7)in(2)
Xor mod(8,7)in(1) Xor mod(8,7)in(2)
%26%26 mod(8,7)in(1) %26%26 mod(8,7)in(2)
and mod(8,7)in(1)为真;输出内容:

and mod(8,7)in(2)为假; 不输出内容:
order by(排序):
order by 4 order by 5 (探测有几列信息)
order by 4为真;user表有4个列输出内容:

order by 5为假;user表有5个列不输出内容:

查看数据库直接执行命令输出的内容:

说明:
select * from user where id=1 order by 5
这个SQL查询将从user表中选择所有id为1的记录,并按照第5个列进行排序。这里的数字5通常是指列的索引,从1开始计数。这意味着它会尝试按照表中第五个列的值进行排序。 如果user表中没有第五个列,或者5超出了列的数量,查询将会出错。
04:哪些网页会有SQL注入漏洞
-
与数据库交互的相关页面
-
http://www.*****.com/***.asp?id=xx (ASP注入)
-
http://www.*****.com/***.php?id=xx (php注入)
-
http://www.*****.com/***.jsp?id=xx (jsp注入)
-
有传参的地方
登录的地方
更新的地方
注册的地方
留言板
查询搜索
删除等。。
-
Http Header注入
-
把http header直接代入数据库
-
-
Cookie注入
-
数据参数写入到cookice参数里面
-
-
可能出现注入的地方:http头、cookices、referee、user agent,post提交数据包的地方等等
05:SQL注入分类
数字型
and 1=1 and 1=2
打开pikachu靶场环境,选择数字型注入:
http://10.0.0.101:90/pikachu/vul/sqli/sqli_id.php
点击查询--用bp抓包--发到bp重发器--插入sql注入语句测试:
and 1=1

and 1=2
存在sql注入点
搜索型
'%xx%' or 1=1
user' and 1=1 # user' and 1=2 #
打开pikachu靶场环境:
http://10.0.0.101:90/pikachu/vul/sqli/sqli_str.php
查看源代码:
<?php
/*** Created by runner.han* There is nothing new under the sun*/$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);if ($SELF_PAGE = "sqli_str.php"){$ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
}$PIKA_ROOT_DIR = "../../";
include_once $PIKA_ROOT_DIR . 'header.php';include_once $PIKA_ROOT_DIR."inc/config.inc.php";
include_once $PIKA_ROOT_DIR."inc/function.php";
include_once $PIKA_ROOT_DIR."inc/mysql.inc.php";$link=connect();
$html='';if(isset($_GET['submit']) && $_GET['name']!=null){//这里没有做任何处理,直接拼到select里面去了$name=$_GET['name'];//这里的变量是字符型,需要考虑闭合$query="select id,email from member where username='$name'";$result=execute($link, $query);if(mysqli_num_rows($result)>=1){while($data=mysqli_fetch_assoc($result)){$id=$data['id'];$email=$data['email'];$html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>";}}else{$html.="<p class='notice'>您输入的username不存在,请重新输入!</p>";}
}?>
其中: $query="select id,email from member where username='$name'";
因'$name'变量是字符型有单引号,要绕过需要先加单引号进行闭合,原来的单引号进行注释:
如:user' and 1=2 #
$query="select id,email from member where username='user' and 1=2 #'";
通过添加 '来尝试关闭原本的字符串,然后添加
and 1=2一个始终为假,最后用#注释掉剩余的查询部分。
user' and 1=1 # 为真;输出内容:
user' and 1=2 # 为假,不输出内容:
搜索型
'%user%' or 1=1 '%user%' or 1=2
打开pikachu靶场环境:
http://10.0.0.101:90/pikachu/vul/sqli/sqli_search.php
查看源代码:
<?php
/*** Created by runner.han* There is nothing new under the sun*/$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);if ($SELF_PAGE = "sqli_search.php"){$ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
}$PIKA_ROOT_DIR = "../../";
include_once $PIKA_ROOT_DIR . 'header.php';include_once $PIKA_ROOT_DIR."inc/config.inc.php";
include_once $PIKA_ROOT_DIR."inc/function.php";
include_once $PIKA_ROOT_DIR."inc/mysql.inc.php";$link=connect();
$html1='';
$html2='';
if(isset($_GET['submit']) && $_GET['name']!=null){//这里没有做任何处理,直接拼到select里面去了$name=$_GET['name'];//这里的变量是模糊匹配,需要考虑闭合$query="select username,id,email from member where username like '%$name%'";$result=execute($link, $query);if(mysqli_num_rows($result)>=1){//彩蛋:这里还有个xss$html2.="<p class='notice'>用户名中含有{$_GET['name']}的结果如下:<br />";while($data=mysqli_fetch_assoc($result)){$uname=$data['username'];$id=$data['id'];$email=$data['email'];$html1.="<p class='notice'>username:{$uname}<br />uid:{$id} <br />email is: {$email}</p>";}}else{$html1.="<p class='notice'>0o。..没有搜索到你输入的信息!</p>";}
}?>
其中$query="select username,id,email from member where username like '%$name%'";
'%$name%'会匹配任何包含
$name的字符串,无论$name在用户名中的位置如何。如果
$name = "user",查询会找到所有用户名中包含 "user" 的记录,如 "user123"、"superuser" 等。如:user%' or 1=1 #
$query="select username,id,email from member where username like '%user%' or 1=1 #%'"
user%' or 1=1 # ;or或;1=1为真 ;输出所有含user的内容:
user%' or 1=2 # ;or或;1=2为假 ;输出只含user的内容:
XX型(特殊类型)
username=('xx') or 1=1
user') or 1=1 # user') or 1=2 #
打开pikachu靶场环境:
http://10.0.0.101:90/pikachu/vul/sqli/sqli_x.php
查看源代码:
<?php
/*** Created by runner.han* There is nothing new under the sun*/$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);if ($SELF_PAGE = "sqli_search.php"){$ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','','','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
}$PIKA_ROOT_DIR = "../../";
include_once $PIKA_ROOT_DIR . 'header.php';include_once $PIKA_ROOT_DIR."inc/config.inc.php";
include_once $PIKA_ROOT_DIR."inc/function.php";
include_once $PIKA_ROOT_DIR."inc/mysql.inc.php";$link=connect();
$html='';if(isset($_GET['submit']) && $_GET['name']!=null){//这里没有做任何处理,直接拼到select里面去了$name=$_GET['name'];//这里的变量是字符型,需要考虑闭合$query="select id,email from member where username=('$name')";$result=execute($link, $query);if(mysqli_num_rows($result)>=1){while($data=mysqli_fetch_assoc($result)){$id=$data['id'];$email=$data['email'];$html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>";}}else{$html.="<p class='notice'>您输入的username不存在,请重新输入!</p>";}
}?>
其中$query="select id,email from member where username=('$name')";
('$name')加了单引号和括号,进行绕过需要加单引号括号进行闭合。
如:user') or 1=1 #
$query="select id,email from member where username=('user') or 1=1 #')"
user') or 1=1 # ;or或;1=1为真 ;输出所有含user的内容:
user') or 1=2 # ;or或;1=2为假 ;输出只含user的内容:
声明:
- 此文章只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试留言私信,如有侵权请联系小编处理。
相关文章:
OWASP top10--SQL注入(一)
SQL注入式攻击技术,一般针对基于Web平台的应用程序.造成SQL注入攻击漏洞的原因,是由于程序员在编写Web程序时,没有对浏览器端提交的参数进行严格的过滤和判断。用户可以修改构造参数,提交SQL查询语句,并传递至服务器端…...
java —— 类与方法
一、访问修饰符 在类和方法中,均可使用访问修饰符以锁定该类或方法的被访问权限。访问修饰符有四种: (一)public 同一个项目中,对所有的类可见。 (二)protected 同一个项目中,对…...
【MySQL精通之路】InnoDB-启动选项和系统变量
系统变量可以在服务器启动时设置TRUE或FALSE启用禁用,也可以通过使用--skip前缀来禁用 例如: 要启用或禁用InnoDB自适应哈希索引,可以在命令行中使用--skip-innodb-adaptive-hash-index或--innodb-adaptive-hash-index,或者在配置…...
嵌入式linux系统中文件系统制作方法详解
第一:制作目的 1、掌握嵌入式Ubuntu系统的构建方法 2、熟悉嵌入式Ubuntu文件系统映射压缩打包方法 3、掌握RK3399linux系统单文件系统更新方法 Ubuntu根文件系统制作完成之后,把制作好的ubuntu文件系统映射文件在出厂系统的基础上替换原有的ubuntu根文件系统,即对 Linux 系统…...
AI爆文写作:要写文章爆,这47个爆文前缀少不了!
47个爆文前缀:很震惊很好用 这些前缀,虽然被用了无数次,但每个人看到还是会忍不住点进去。 可以借鉴这样强情绪的句式。 序号前缀1就在刚刚…2真相曝光…3震惊国人…4惊天秘密…5疯狂转发…6删前速看…7千万别吃…8还敢喝吗…9癌症前兆…10赶快扔了…11太可怕了…12大事不…...
javas-core VS java-object-diff
对照工具选择 javas-core 和 java-object-diff ,对比demo https://github.com/kofgame/objectdiff-vs-javers,都为同源对比,都支持嵌套对象。 使用JMH测试方法进行性能测试,使用题库的QuestionResponseVO对象来进行对照对比,进行…...
dirsearch指令大全
文章目录 基本用法主要参数和选项目标和URL设置--url URL--url-list FILE 扩展名--extensions EXTENSIONS 字典文件--wordlists WORDLIST 线程和性能--threads THREADS--timeout SECONDS--delay MILLISECONDS 忽略状态码代理和请求设置--proxy PROXY--headers HEADERS 保存结果…...
C++基础:构建者设计模式
#include <iostream> #include <string> using namespace std; //构建者设计模式-一种工厂只生产一种复杂的产品 class robot {public:string head;string upbody;string downbody; };class robotBuilder {private:robot *myRobot;public:robotBuilder() //构造函…...
Swift 请求用户授权以跟踪其跨应用或网站的活动
步骤1:导入框架 首先,需要在Swift文件中导入AppTrackingTransparency框架。 import AppTrackingTransparency import AdSupport步骤2:请求跟踪许可 在适当的地方请求用户的跟踪许可。通常,这个请求会在应用启动时或者在用户执行…...
最新版npm详解
如:npm中搜索 jQuery image.png image.png 接地气的描述:npm 类似于如下各大手机应用市场 image.png image.png 查看本地 node 和 npm 是否安装成功 image.png image.png 或 npm install -g npm image.png image.png image.png image.png image.…...
超值分享50个DFM模型格式的素人直播资源,适用于DeepFaceLive的DFM合集
50直播模型:点击下载 作为直播达人,我在网上购买了大量直播用的模型资源,包含男模女模、明星脸、大众脸、网红脸及各种稀缺的路人素人模型。现在,我将这些宝贵的资源整理成合集分享给大家,需要的朋友们可以直接点击下…...
Python——一维二维字典数据转化为DataFrame的方法
import pands as pddf pd.DataFrame(dict)...
unity中如何插入网页
在Unity中插入自己的网页通常是通过使用Unity的WebGL构建目标和HTML页面来实现的。以下是一些步骤: 构建你的Unity项目为WebGL:在Unity中,选择Build Settings(构建设置),将Platform(平台&#x…...
【负载均衡在线OJ项目日记】引入网络库和客户端用户路由功能
目录 引入cpp-httplib库 将编译与运行服务打包 代码 客户端用户路由功能 采用MVC结构进行设计 用户路由功能 路由功能代码 引入cpp-httplib库 对于后端编译与运行模块基本已经设计完成,最后用户是通过网络传递代码等信息;我们就要将这个模块引入…...
【Vue3】env环境变量的配置和使用(区分cli和vite)
原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、env文件二、vue3cli加载env1..env配置2..dev配置(其他环境参考)3.package.json文件4.使用 三、vue3vite加载e…...
ACW石子合并-XMUOJ元素共鸣:唤醒神之眼 -区间DP
题目 思路 话不多说,直接上代码 代码 /* ACW石子合并-XMUOJ元素共鸣:唤醒神之眼 JinlongW-2024/05/25 区间DP 当i<j时,f[i][j]min(f[i][k]f[k][j]s[j]-s[i-1]) 当ij时,f[i][j]0 最终答案:f[1][n] *//* 区间DP…...
大语言模型实战——搭建纯本地迷你版RAG
1. 概念 RAG(Retrieval Augmented Generation)检索增强生成,它结合了搜索技术和大语言模型的提示词功能,以搜索算法找到的信息作为背景上下文,来辅助大语言模型(Large Language Model, LLM)生成…...
内存分配算法
一、实验目的: 实验目的: 通过编写一个内存分配模拟程序,实现首次适应算法(First Fit)、循环首次适应算法(Next Fit)、最佳适应算法(Best Fit)和最差适应算法(…...
Hive运行错误
Hive 文章目录 Hive错误日志错误SessionHiveMetaStoreClientql.Driver: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTaskerror: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster Please check …...
vue3之使用图片实现类似于 el-radio 的单选框功能,并且可实现选中和取消选中
背景 我们在工作中常用的一般都是使用类似于 element-plus 中的 el-radio 或者是 el-checkbox 来实现单选或者多选 若有一天我们遇到了一个新的业务需求,需要使用 图片 来实现类似于 el-radio 的功能,并且要求实现第一次点击时处于选中状态,当我们再次点击时处于非选中状态…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

