小白学了一点简单的SQL注入,做了点笔记,感觉挺详细,希望能帮助到学习的伙伴。大佬勿喷,有不足多多的指教。

实验原理

SQL注入攻击是通过将恶意的SQL查询或添加语句插入到应用的输入参数中,再在后台SQL服务器上解析执行进行的攻击,它目前是黑客对数据库进行攻击的最常用的手段之一。本课程将带你从介绍web应用运行原理开始,一步一步理解SQL注入的由来,原理和攻击方式。

SQL注入带来的威胁主要有如下几点:
■猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。
■绕过认证,列如绕过验证登录网站后台。
■注入可以借助数据库的存储过程进行提权等操作。

4.sql注入示例一.猜解数据库

看看后台中到底执行了什么样的SQL语句呢?点击view-source查看源代码:


实际执行的SQL语句是:
select first_name,last_name from users where user_id= ='1';

(这里我建议先学一下MySQL这样会理解的更好一点,这里我推荐一下我在前面学习的mysql笔记:)

我们是通过控制参数id的值来返回我们需要的信息。如果我们不按常理出牌,比如在输入框中输入1‘ order by 1# 实际执行的SQL语句会变成:
select first_name,last_name from users where user_id = '1' order by 1#';(按照Mysql语法,#后面的会被注释掉,使用这种方法屏蔽掉后面的单引号,避免语法错误)
语句的意思就是查询users表中的first_name,last_name中的user_id为1的数据并按第一字段排行(order by 语句用于根据指定的列对结果集进行排序,语句默认是按照升序记录进行排序的)。
输入 1’ order by 1#和1‘ order by 2#时都返回正常:

当输入1’ order by 3#时,返回出错:

由此可知,users表中只有两个字段,数据为两列。接下来我们使用union select 联合查询继续获取信息。union运算符可以将两个或者两个以上select语句的查询结果集合合并成一个结果集显示,即执行联合查询。需要注意在使用union查询的时候需要和主查询的列数相同,而我们之前已经知道了主查询列数为2,接下来就好办了。输入1‘ union select database(),user()#进行查询:
database()将会返回当前网站所使用的数据库名字。
user()将会返回执行当前查询的用户名。

实际执行的SQL语句是:
select first_name,last_name from users where user_id = '1' union sesect database(),user()#';

通过上图的返回信息,我们成功获取到:
■当前网站使用的数据库为dvwa。
■当前执行查询用户名为root@localhost.
同理我们在输入1’ union select version(),@@version_compile_os#进行查询:
■version()获取当前数据库的版本
■@@version_compile_os获取当前操作系统。

实际执行的SQL语句是:
select first_name,last_name from users where user_id = '1' union select version(),@@version_compile_os#';

通过上面的图中返回信息,我们可以知道:

■当前的数据库版本为:5.5.50-0Ubuntu0.14.04.1

■当前的操作系统为:debian-linux-gun

接下来我们尝试获取dvwa数据库中的表名。information_schema是mysql自带的一张表,这张数据表保存了Mysql服务器所有数据库的信息,如数据库名、数据库的表、表栏的数据类型与访问权限等。该数据库拥有一个名为tables的数据表,该表包含两个字段table_name和table_schema,分别记录DBMS中的存储的表名和表名所在的数据库。

我们输入1‘ union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#进行查询:
实际执行的SQL语句是
select first_name,last_name from users where user_id = '1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#';

通过上图返回信息,我们可以知道:

■dvwa数据库有两个数据表,分别是guestbook和users。
有些人啊觉得这些信息还是不够,那么我们接下来尝试获取重量级的用户名,密码,有经验的大家可以大胆的猜测users表的字段为user和password,所以输入:1’ union select user,password from users#进行查询:实际执行的SQL语句是:
select first_name,last_name from users where user_id = '1' union select user,password from users#';

可以看到成功的爆出用户名,密码,密码采用md5进行加密,可以到www.cmd5.com进行解密。

Sql 注入实例二.验证绕过

接下来我们再试试另一个利用SQL漏洞绕过登录验证的实验。

给我的是一个普通的登录页面,只要输入正确的用户名和密码就能登录成功。我们先尝试所以输入用户名123,密码123登录:
嗯,就是随手一试,也就随便给了我一个错误的界面。23333

从错误页面中我们无法获取到任何信息。看看后台代码如何做实验的:


实际执行的操作时:

select * from users where username='123' and password='123'

当查询到数据表中存在同时满足username和password字段时,会返回登录成功。按照第一个实验的思路,我们尝试在用户名中输入123‘ or 1=1#;

为什么能够登录成功呢?因为实际执行的语句是:
 select * from users where username='123' or 1=1 #' and password='123' or 1=1 #'
一样按照Mysql语法,#后面的内容会被忽略,所以以上语句等同于(实际上密码框里不输入任何东西一样):
select * from users where username='123' or 1=1
由于判断语句 or 1=1恒成立,所以结果当然返回真值,登录成功。我们再尝试不用#屏蔽引号,采用手动闭合的方式:我们尝试在用户名中输入123’ or ‘1’=‘1.密码同样输入123’ or ‘1’=‘1(不能少了单引号,否则会有语法错误):
实际执行的SQL语句是:

select * from users where username ='123' or '1' ='1' and password='123' or '1'='1'
看到了吗?两个or语句使and前后两个判断永远恒等与真,这所以能够成功登录。

欢迎关注微信公众号

简单的SQL注入原理相关推荐

  1. SQL注入原理及其简单演示

    一 .  SQL注入: SQL injection:通过把SQL命令插入到web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器恶意执行的SQL命令.具体来说就是利用现有的程序将Sql命令 ...

  2. SQL注入原理及过程简单介绍

    1.产生SQL注入原因        开发代码的时候没有全面考虑到网络安全性,特别是在用户交互时,没有考虑到用户提交的信息中可能破坏数据库,没有对输入的数据进行合法的过滤.SQL 注入过程目的性是非常 ...

  3. Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解

    前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程 ...

  4. mysql 绕过select报错_Web安全之SQL注入(原理,绕过,防御)

    首先了解下Mysql表结构 mysql内置的information_schema数据库中有三个表非常重要 1 schemata:表里包含所有数据库的名字 2 tables:表里包含所有数据库的所有的表 ...

  5. JDBC防止SQL注入原理

    一.基本解釋 1.JDBC(Java DataBase Connection):它是Java用来执行Sql的Java Api:可以为多种关系型数据库提供统一的访问接口,他是一组Java编写的类和接口. ...

  6. SQL注入原理与解决方法

    一.什么是sql注入? 1.什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网 ...

  7. SQL注入原理及预防SQL注入的方法

    网络安全成为了现在互联网的焦点,这也恰恰触动了每一位用户的神经,担心网上的信息以及个人隐私遭到泄露.下面要为大家介绍的是SQL注入,对于sql注入,相信程序员都知道或者使用过,如果没有了解或完全没有听 ...

  8. 安全架构-SQL注入原理及防范

    安全架构系列文章 SQL注入原理及防范 文章目录 安全架构系列文章 前言 一.sql注入是什么? 二.防范方法 1.Java处理 2 .NET处理 总结 前言 一.sql注入是什么? SQL注入是通过 ...

  9. SQL注入原理及如何判断闭合符

    一.SQL注入原理: 造成SQL注入的原因: 在没有对用户的输入进行过滤.检测的情况下,就把用户输入数据,带入到数据库中执行SQL语句. 利用SQL注入: 由于系统没有对输入的数据进行过滤.检测,就带 ...

最新文章

  1. python批量提取word指定内容_使用python批量读取word文档并整理关键信息到excel表格的实例...
  2. 数据库三范式经典实例解析
  3. QML基础类型之quaternion
  4. 2018年12月7日 字符串格式化2 format与函数1
  5. 物理竞赛得奖学计算机,物理竞赛林紫琪带你探索清华学堂计算机科学实验班”(姚班)...
  6. CSS清除浏览器input缓存黄色背景
  7. 28.TCP/IP 详解卷1 --- SMTP:简单邮件传输协议
  8. FFmpeg总结(十三)用ffmpeg基于nginx实现直播功能,推流拉流
  9. java爬虫基础知识,Java网络爬虫基础知识
  10. 软考中级软件设计师-加密技术(自用)
  11. maya! board_教你玩转MAYA的四十二精华造诣(第二期)
  12. 实训项目:PHP双色球效果实现
  13. 佛罗里达州立大学计算机专业排名,佛罗里达州立大学有哪些专业_专业排名(QS世界排名)...
  14. 在线将PDF极速转换为图片
  15. 身体质量指数(Body Mass Index,BMI)是根据人的体重和身高计算得出的一个数字,BMI对大多数人来说,是相当可靠的身体肥胖指标,其计算公式为:,其中体重单位为公斤,身高单位为米。编写程序
  16. 联想G40-30进win10PE触摸板、键盘无反应
  17. linux 工具——终端分屏与vim分屏
  18. 用python进行数据分析举例说明_《利用python进行数据分析》读书笔记 --第一、二章 准备与例子...
  19. 电商让客户等待的话术
  20. JVM的Eden由来

热门文章

  1. CVPR 2023放榜了!录用率25.78%!2360篇论文被接收
  2. android Error receiving broadcast
  3. javascript和jquery实现页面元素显示/隐藏切换的方法
  4. HashMap是怎么解决哈希冲突的?
  5. Golang系列之布尔类型基本介绍
  6. 关于input[type=number]的输入框禁止输入.、e、+、-的解决方案
  7. 多元微积分_保守场内的线积分
  8. html实现经典坦克大战小游戏
  9. php+pv统计代码实现,Laravel 10 行代码实现简单的网站 pv uv 统计
  10. linux删除目录不弹出y,Linux下rm删除文件(文件夹)失败的解决