【渗透课程】第五篇-SQL注入的原理
哈哈哈,讲到注入了。我想给大家讲注入的原理。这个我们前面的前言篇就说过,所谓的SQL注入就是,绕过数据库验证机制直接执行SQL语句。怎么说呢,我们先讲一个概念吧!
网站和网页的区别
单纯的网页是静态的,html就是静态的,一些简单的网站(如某些引导页)只有网页和网页之间的跳转。而网站是动态的,是一个整体性的web应用程序,几乎所有的网站都要用到数据库。数据库我们怎么利用呢?例如某些博客站,cms站点。它的文章并不是存在网站目录里的,而是存在数据库里的,例如某些cms是通过后缀?id=321来调用数据库内的文章内容。此时便是向数据库传递变量为ID值为321请求,而数据库会响应并查询我们的请求。
总体来说原理就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
例子
比方说我们在某网站后台登录界面,有两条输入框,一条是帐号一条是密码。那么我们可以猜测数据库中有一个admin表,表里面有两个字段username和password 。这样我们输入用户(比如123)密码(比如456)并提交之后,数据库就会执行一段查询语句:
select id from users where username = '123 and password = '123'
并判断用户名123是错误的(为假)
之后返回帐号密码错误信息。
那么如果我们在用户名处输入'or 1=1-- 而密码随便输入个456呢? 我们来看看数据库中的查询语句:
select id from users where username = '' or 1=1-- and password = '456'
'又 这里呢1=1永远为真,后面 and password = '456'被注释掉了。数据库不需要考虑,这里我们就跳过了验证。
这就是几年前的万能密码,这里只是说说逻辑。我们再来看看下面另一个例子。
整型参数的判断
SQL注入一般存在于形如:
HTTP://www.xxx.xxx/text.asp?id=XX
这种带有参数的asp或者动态网页中,注入又分为整形注入和字符串注入。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。下以HTTP://www.xxx.xxx/test.asp?p=xx为例进行分析,xx此处设为整型。
当输入的参数xx为整型时,通常test.asp中SQL语句原貌大致如下:
select * from 表名 where 字段=xx
所以可以用以下步骤测试SQL注入是否存在。
①HTTP://www.xxx.xxx/text.asp?p=xx’(附加一个单引号)此时abc.ASP中的SQL语句变成了
select * from 表名 where 字段=YY’
数据库无法处理,返回异常;
②HTTP://www.xxx.xxx/test.asp?p=xx and 1=1。1=1为真 test.asp运行正常,而且与没加语句之前的test.asp?p=xx运行结果一样正常显示;
③HTTP://www.xxx.xxx/test.asp?p=YY and 1=2,语句为假,因为1≠2 test.asp运行异常;如果以上三步全面满足,test.asp中一定存在SQL注入漏洞。
小技巧:有时管理员会在后台设置过滤掉单引号等字符,以防止SQL注入。此时可以用以下几种试一试。
大小定混合法:VBS并不区分大小写,而网站程序可能区分。然后程序员在过滤时通常要么全部过滤大写字符串,要么全部过滤小写字符串,而大小写混合往往会被忽视。如用SelecT代替select,SELECT等;
UNICODE法:在IIS中,以UNICODE字符集实现国际化,我们完全可以IE中输入的字符串化成UNICODE字符串进行输入。如+ =%2B,空格=%20 等;URLEncode信息可以参加百度;
ASCII码法:可以把输入的部分或全部字符全部用ASCII码代替,如U=chr(85),a=chr(97)等,ASCII信息参见百度。
猜解内容
用过明小子、啊D的都知道,存在注入肯定要猜密码了哈哈哈,可是软件是怎样一个工作过程呢?
猜解表名: and exists (select * from 表名)
猜解列名: and exists (select 字段 from 表
爆指定表名内容: and 1=1 union select 1,2,3,4,5 from 表名
猜解列长度 猜解语句: and (select top 1 len(列名)from 表名)>N and (select top 1 len(列名)from 表名)=N 其中N是数字
变换这个N的值猜解列长度,
例如: and (select top 1 len(列名)from 表名)>1 and (select top 1 len(列名)from 表名)>6
如果一直猜到6都显示正常页面,猜到7的时候返回错误(大于6并且小于等于7),那么该列的长度为7。
阿西巴,我好困~~好了这次注入浅谈就说到这里~ 其实网上的注入工具还是挺多的, 如批量注入的明小子、啊D注入工具、椰树、御剑等等。现在不会语法也没太大关系,以后再补上也行啊。SQL 存在注入的站点小编在博客里也送过了,大家可以找几个练练手(不要干坏事)。
手机一个一个字打,贼几把累(其实抄了一部分)~要是你们还不懂,明天来问我吧
【渗透课程】第五篇-SQL注入的原理的更多相关文章
- 【web渗透技术】渗透攻防Web篇-SQL注入攻击初级
[web渗透技术]渗透攻防Web篇-SQL注入攻击初级 前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的S ...
- 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析
[渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP ...
- Sql注入基础原理介绍
说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...
- 【渗透课程】特别篇-主流网站程序Oday大全以及拿shell思路
版权和内容说明: 这篇文章不是本站编写,是从网络上摘抄的,但是经过了本站的改写优化,并将内容,格式规范化. 本篇说明:这篇文章结合了前辈们前几年一路挖掘出来的主流程序漏洞以及思路, 小编写在前面是想让 ...
- 第五篇 SQL Server安全架构和安全
本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...
- 第五篇 SQL Server代理理解代理错误日志
本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...
- 【译】第五篇 SQL Server安全架构和安全
本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...
- 【译】第五篇 SQL Server代理理解代理错误日志
本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...
- python番外篇--sql注入
一.sql注入概念介绍 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)S ...
随机推荐
- CentOS7 搭建Ambari-Server,安装Hadoop集群(一)
2017-07-05:修正几处拼写错误,之前没发现,抱歉! 第一次在cnblogs上发表文章,效果肯定不会好,希望各位多包涵. 编写这个文档的背景是月中的时候,部门老大希望我们能够抽时间学习一下Had ...
- Android - Fragment(二)加载Fragment
Fragment加载方法 加载方法有两种,在xml文件中注册,或者是在Java代码中加载. xml中注册 例如在fragment_demo.xml中定义 <?xml version=" ...
- kotlin-30分钟快速入门
1.定义变量 在kotlin中,通过var 或者 val 来定义,区别就是 val定义的变量只能读不能修改,var则可以修改. val a:Int = 1 //等价于java: final int i ...
- 在 Linux 命令行脚本中执行 sudo 时自动输入密码
使用 expect 实现自动登录的脚本的原理. 脚本代码如下: ############################################## #!/usr/bin/expect set ...
- MySQL学习笔记(二):MySQL数据类型汇总及选择参考
本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型. ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...
- hive配置过程中出现的一个问题
执行hive里面的insert语句的时候,报错,执行失败查看hadoop的日志文件之后发现错误的详细信息如下: 把hdfs-site.xml中的hadoop.tmp.dir这个属性添加到core-si ...
- Orchard 学习
https://github.com/OrchardCMS/Orchard 源码下载 http://www.orchardch.com/ 中文介绍网站
- Apache Kafka - 介绍
原文地址地址: http://blogxinxiucan.sh1.newtouch.com/2017/07/12/Apache-Kafka-介绍/ Apache Kafka教程 之 Apache Ka ...
- 几种常见排序算法原理&C语言实现
一.冒泡排序(以下各法均以从小到大排序为例,定义len为数组array的长度) 原理:比较相邻元素的大小,对于每次循环,按排序的规则把最值移向数组的一端,同时循环次数依次减少. C代码实现 写法一: ...
- hadoop入门,跑出第一个WordCount
1.环境准备 下载:http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz 解压:解压后,修改et ...