SQL注入

什么是SQL注入攻击以及如何防止SQL注入攻击 一、什么是SQL注入攻击? CASE 1 : 模拟用户登陆案例 (1)准备数据 use jt_db; create table user( id int primary key auto_increment, username varchar(50), password varchar(50) ); insert into user values(null,'张三','123'); ... 阅读详情

      随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

     SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。

     但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。

入 门 篇

     如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。

     第一节、SQL注入原理

     以下我们从一个网站www.19cn.com开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。

     在网站首页上,有名为“IE不能打开新窗口的多种解决方法”的链接,地址为:http://www.19cn.com/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示:Microsoft JET Database Engine 错误 '80040e14'
字符串的语法错误 在查询表达式 'ID=49'' 中。/showdetail.asp,行8

从这个错误提示我们能看出下面几点:

1.网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。
2.程序没有判断客户端提交的数据是否符合程序要求。
3.该SQL语句所查询的表中有一名为ID的字段。

从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。

      第二节、判断能否进行SQL注入

      看完第一节,有一些人会觉得:我也是经常这样测试能否注入的,这不是很简单吗?其实,这并不是最好的方法,为什么呢?

      首先,不一定每台服务器的IIS都返回具体错误提示给客户端,如果程序中加了cint(参数)之类语句的话,SQL注入是不会成功的,但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。请和系统管理员联络。

      其次,部分对SQL注入有一点了解的程序员,认为只要把单引号过滤掉就安全了,这种情况不为少数,如果你用单引号测试,是测不到注入点的。

那么,什么样的测试方法才是比较准确呢?答案如下:

① http://www.19cn.com/showdetail.asp?id=49
② http://www.19cn.com/showdetail.asp?id=49 and 1=1
③ http://www.19cn.com/showdetail.asp?id=49 and 1=2

这就是经典的1=1、1=2测试法了,怎么判断呢?看看上面三个网址返回的结果就知道了:

可以注入的表现:

① 正常显示(这是必然的,不然就是程序有错误了)
② 正常显示,内容基本与①相同
③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)

     不可以注入就比较容易判断了,①同样正常显示,②和③一般都会有程序定义的错误提示,或提示类型转换时出错。

     当然,这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数,我将在中级篇的“SQL注入一般步骤”再做分析。

     第三节、判断数据库类型及注入方法

     不同的数据库的函数、注入方法都是有差异的,所以在注入之前,我们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Access和SQLServer,网上超过99%的网站都是其中之一。

     怎么让程序告诉你它使用的什么数据库呢?来看看:

     SQLServer有一些系统变量,如果服务器IIS提示没关闭,并且SQLServer返回错误提示的话,那可以直接从出错信息获取,方法如下:http://www.19cn.com/showdetail.asp?id=49 and user>0

     这句语句很简单,但却包含了SQLServer特有注入方法的精髓,我自己也是在一次无意的测试中发现这种效率极高的猜解方法。让我看来看看它的含义:首先,前面的语句是正常的,重点在and user>0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。在以后的篇幅里,大家会看到很多用这种方法的语句。

      顺便说几句,众所周知,SQLServer的用户sa是个等同Adminstrators权限的角色,拿到了sa权限,几乎肯定可以拿到主机的Administrator了。上面的方法可以很方便的测试出是否是用sa登录,要注意的是:如果是sa登录,提示是将”dbo”转换成int的列发生错误,而不是”sa”。

     如果服务器IIS不允许返回错误提示,那怎么判断数据库类型呢?我们可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。

在确认可以注入的情况下,使用下面的语句:

http://www.19cn.com/showdetail.asp?id=49 and (select count(*) from sysobjects)>0
http://www.19cn.com/showdetail.asp?id=49 and (select count(*) from msysobjects)>0

      如果数据库是SQLServer,那么第一个网址的页面与原页面http://www.19cn.com/showdetail.asp?id=49是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出错,就算程序有容错处理,页面也与原页面完全不同。

 如果数据库用的是Access,那么情况就有所不同,第一个网址的页面与原页面完全不同;第二个网址,则视乎数据库设置是否允许读该系统表,一般来说是不允许的,所以与原网址也是完全不同。大多数情况下,用第一个网址就可以得知系统所用的数据库类型,第二个网址只作为开启IIS错误提示时的验证。

 

SQL注入——堆叠注入 SQL注入简介——堆叠注入(一)SQL注入的概述和分类1.概述2.分类①按照数据提交的方式来分类:②按照执行效果来分类:③按照注入点类型来分类:(二)堆叠注入1.概念2.局限 (一)SQL注入的概述和分类 1.概述   首先说,什么是SQL注入?   程序员在开发用户和数据库交互的系统时没有对用户输入的字符串进行过滤、转义、限制,或者处理不严谨,导致用户可以通过输入精心构造的字符串去非法获取到数据库中的数据,这一构造字符串非法获取数据的过程就被称为SQL注入。 2.分类 (参考来源: link.) ①按照数 阅读详情

相关推荐

单目和多目视觉统一标定

单目和多目视觉统一标定 一.单目视觉标定 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在

吴建明wujianming_110117 2911

SQL注入分类,一看你就明白了。SQL注入点/SQL注入类型/SQL注入有几种/SQL注入点分类

根据输入的「参数」类型,可以将SQL注入分为两大类:「数值型」注入、「字符型」注入。 根据数据的「提交方式」分类:GET注入、POST注入、Cookie注入、HTTP Header注入。 根据页面「是否回显」分类:显注、盲注。

wangyuxiang946的博客 2万+

金三银四!风控建模岗面试题库大全:从理论到实战避坑指南

风控建模面试大全

阿黎逸阳的博客 767

SQL注入点判断及注入方式

SQL注入类型 一,判断注入点 当参数可控时,看参数是否对数据产生影响,若有影响则可能是注入点。 输入SQL看是否可以产生报错,通过报错信息得到数据库部分语句。 利用引号、双引号、圆括号进行报对。 二,注入方式 get注入 在get传参时写入参数,将SQl语句闭合,后面加写入自己的SQL语句。 ?id=1‘order by 3 #判断有几列利用排序报错,超出列数报错。 ?id=1' union select 111,222,333 #显示回显点。 ?id=1' union select 111,us

HMX404的博客 1万+

贝叶斯(Bayes)决策理论

在博文【模式识别PR和模式的概念】介绍了相关的模式识别与模式的概念。在本节描述所要讨论的问题之前,再提一下对于待识别的物理对象的描述问题。假设一个待识别的物理对象用其d个属性观察值描述,称之为d个特征,这组成一个d维的特征向量,而这d维待征所有可能的取值范围则组成了一个d维的特征空间。一般地,机器实现自动分类有两大类方法:一种是模板匹配方法,另一种是对特征空间划分为子空间(每类的势力范围)的方法。

松子茶的专栏 3万+

PCL 模型滤波器【2025最新版】

根据给定的模型系数在点云中提取对应于模型的点云数据。博客长期更新,本文最新更新时间为:2025年6月17日。

点云侠的博客 4384

SQL注入之五大注入手法

文章目录1、UNION query SQL injection(可联合查询注入)2、Error-based SQL injection(报错型注入)3、Boolean-based blind SQL injection(布尔型注入)4、Time-based blind SQL injection(基于时间延迟注入)5、Stacked queries SQL injection(可多语句查询注入/堆...

Clannad的博客 1万+

Autodesk Revit软件二次开发:Revit二次开发中的插件设计与实现

在 Revit 中,族是构成建筑模型的基本单元,可以是门窗、家具等。通过自定义族,可以创建符合特定需求的建筑构件。参数化设计允许族的尺寸、形状等属性根据参数变化而变化。使用 Revit API 创建自定义族涉及多个步骤,包括定义族类型、设置参数、创建几何形状等。// 创建族文档// 定义参数Parameter param = family.FamilyManager.AddParameter("Width", BuiltInParameterGroup.PG_LENGTH, "宽度");

kkchenjj的博客 2230

SQL 手工注入

SQL 手工注入 文章目录SQL 手工注入0x01 SQL注入概述0x02 SQL 注入原理1.基本概述2.单引号的作用3.SQL 注入流程4.SQL 注入的基本分类3.常见注入方式分类0x03 部署 sqli-labs 学习环境1.sqli-labs 简介2.部署sqli-labs 实验环境2.1 搭建LAMP 环境2.2 检查安装的状态和启动服务2.3 配置 mysq 数据库 root 用户密码2.4 安装 sqli-labs 教学环境2.5 创建快照0x04 安装 hackbar 插件0x05 SQL

枫梓林のBlog 1万+

pandas教程:2012 Federal Election Commission Database 2012联邦选举委员会数据库

里面包含了支持者的名字,职业和雇主,地址,赞助金额。我们可以已经能想到如何切割、整理数据,来提取赞助者的统计数据,或提取宣传活动的模式,这里我们展示一些不同的分析方法。可以看到有些职业是同一种工作类型,指代的是同一个东西。这两个连续操作是分别独立执行的,一个结束后,另一个才开始。上,这里我是把数据集压缩成了ZIP格式,解压后能正常导入)。我觉得也有必要好好了解一下,这个网站做了很好的讲解,),所以我们最好添加这样的信息。这样的情况,即把两个索引操作连在一起。,发现映射关系被正常执行了,所以这里的。

Cachel Wood的博客 349

Label Studio 数据标注平台,大模型预训练与微调必备

摘要:LabelStudio是一款开源数据标注工具,支持文本、图像等多种数据类型的标注。本文介绍了其安装方法(通过conda创建环境并pip安装)、基础使用流程(创建项目、导入数据、设置标签、标注导出)以及AI自动标注功能的实现。重点讲解了如何通过MLBackend集成LangChain模型实现自动标注:创建自定义模型类、构建预测链、处理返回结果,最后配置到LabelStudio项目中。该功能可显著提升标注效率,标注人员只需在AI预测结果基础上进行修正。

技术引领业务创新 289

什么是SQL注入

sql注入的原理。 什么是SQL注入? sql注入怎么发生?

mingsec的博客 1万+

【Claude Code 源码解析教程】总体大纲

本教程旨在深入解析 Anthropic Claude Code 项目的源码架构和实现细节。Claude Code 是一个基于 TypeScript + Bun 构建的 AI 编程助手 CLI 工具,代号 "Tengu",具有复杂的多模块架构和丰富的功能特性。本教程基于Claude Code 的源码分析来生成,将帮助您全面掌握 Claude Code 的源码架构和实现细节,为开发类似 AI 编程助手工具奠定坚实基础。

rengang66的博客 386

什么是sql注入,怎么防止SQL注入?

防止SQL注入 什么是SQL注入? 用户提交带有恶意的数据与SQL语句进行字符串方式的拼接,从而影响了SQL语句的语义,最终产 生数据泄露的现象 如何防止SQL注入? SQL语句参数化 SQL语言中的参数使用%s来占位,此处不是python中的字符串格式化操作 将SQL语句中%s占位所需要的参数存在一个列表中,把参数列表传递给execute方法中第二个参数 防止SQL注入的示例代码: fr...

lh_hebine的博客 5646

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

sql注入及mybatis防止sql注入

一、Sql 注入漏洞详解 Sql 注入产生原因及威胁: 当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句。这种网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句,如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。 Sql 注入带来的威胁主要有如下几点 猜解后台数据库,这是利用最多的方式,盗取网站的

cristianoxm的博客 3955

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SQL注入总结

SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的sql服务器加以解析和执行。由于sql语句本身的多样性,以及可用于构造sql语句的编程方法很多,因此凡是构造sql语句的步骤均存在被攻击的潜在风险。Sql注入的方式主要是直接将代码插入参数中,这些参数会被置入sql命令中加以执行。间接的攻击方式是将恶意代码插入字符串中,之后将这些字符串保存到数据库的数据表中或将其当成元数据。当将存储的字符串置入动态sql命令中时,恶意代码就将被执行。

qq_46081990的博客 5057

SQL注入(三)各种sql注入方式

sql注入的方式

shirlly_的博客 1948

SQL手工注入

重点。

qq_58725061的博客 3244

sql注入

*SQL注入原理:**脚本代码在实现代码与数据库进行数据通讯时(从数据库取出相关数据进行页面显示),将定义的sql语句进行执行查询 数据时,其中的sql语句能通过参数传递自定义值来实现控制sql语句,从而执行恶意的sql语句,可以实现查询其他数据 (数据库中的敏感数据,如管理员账号密码)。这一过程就可以叫做sql注入漏洞。**UNION注入:**利用了MySQL UNION操作符原理,MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集 合,并去除重复的行。

weixin_46212356的博客 1735

SQL注入之二阶注入

二阶注入简介 注入分类: SQL注入一般分为两类:一阶SQL注入(普通SQL注入),二阶SQL注入 什么是二阶注入? 二阶注入就是无法直接注入,它时指已存储(数据库、文件)的用户输入被读取后再次进入到 SQL 查询语句中导致的注入。 注入原理 注入比较: 一阶SQL注入:       1;一阶SQL注入发生在一个HTTP请求和响应中,对系统的攻击是立即执行的;     ...

秋水的博客 6466

SQL注入及SQL注入绕过

SQL注入原理 sql注入的原理就是后端无条件相信前端提交过来的代码,从而导致一些恶意的查询。 一般sql注入经常出现在URL的参数里,一些输入框里。 sql注入把前端提交的代码当成了后端查询的代码执行了。 SQL注入分类 SQL注入分为两类,一种是数字注入也是简单的一种,另一种是字符注入。 数字型注入 字符型注入 ...

qq_53086690的博客 1249

什么是sql注入,如何防止sql注入

1、什么是 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 //比如这是一个用户登录Dao层的查询操作 select * from user where username=? and password =?; //username 和 password通过web表单穿过来 例如: username=admin...

m0_37531231的博客 8832

sql注入篇

SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用 SQL。SQL注入是由于程序没有对用户输入数据的合法性进行验证和过滤,导致SQL查询语句被恶意拼接从 而产生SQL注入。

qq_74378387的博客 1593

SQL注入-Union注入

SQL注入-Union注入

lza20001103的博客 1258
上一篇: .NET开发人员不可不知的小常识
下一篇: DataList 整理
phpcrazy86
博客等级 码龄19年 10粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值