【渗透课程】第五篇-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 存在注入的站点小编在博客里也送过了,大家可以找几个练练手(不要干坏事)。

手机一个一个字打,贼几把累(其实抄了一部分)~要是你们还不懂,明天来问我吧

时间: 2024-10-13 06:12:04

【渗透课程】第五篇-SQL注入的原理的相关文章

渗透学习笔记--基础篇--sql注入(字符型)

环境:dvwa1.7数据库:mysql前置知识:sql语句(Click me)      在进行sql注入前,我们先熟悉熟悉select语句.一.打开我们的sql终端 二.进入之后可以看到有mysql>我们输入sql语句,即可返回我们想要的结果,注意分号哟!我们使用的dvwa,在我们前几章设置的时候,会在数据库中生成一个dvwa的database:这里我们使用它来进行我们的select 语句:(1)使用dvwa数据库use dvwa;(2)在users表里查询用户名为'admin'的所有信息se

渗透学习笔记--基础篇--sql注入(数字型)

环境:dvwa 1.7数据库:mysql dvwa的安全等级:medium 一.分析和查找注入点(1)知识点回顾如果上一篇有好好读过的同学应该知道,我们上一篇遇到的字符型注入.也即是通过Get或者Post方式传进去的数据被单引号或者双引号包裹住.如果我们想要注入自己的payload(有效载荷)的话,则我们必须先闭合前面的单引号或者双引号,否则我们的数据始终会被当做成字符串来处理. 这种类型的注入点称为字符型注入点. (2)这次我们的把防御等级提升了一个层次,来逐步加强我们手工注入的能力以及开更多

【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析

[渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP请求信息由3部分组成: 1.请求方法(GET/POST) URI 协议/版本 2.请求头(Request Header) 3.请求正文 下面我们来分析一个http请求: POST http://xg.mediportal.com.cn/health/sms/verify/telephone HTTP

基础篇——SQL注入(手工注入)

SQL注入 当我们学习一个知识时我们要考虑几个问题:是什么?怎么做?然后进行有条理的学习 是什么? 首先我们要明白SQL注入是什么: sql——结构化查询语言 SQL注入就是在网站url中插入sql语句,执行sql命令,获取数据库内容,达到欺骗服务器的目的. SQL注入的原理:普通用户提交sql查询语句,网站没有对用户输入进行过滤导致执行用户命令 危害及防护 危害:SQL注入可以使入侵者获取后台账号密码.拖库.进入后台破坏.拿shell 防护:设置网站黑名单.限制敏感词汇.对用户输入进行转义.将

渗透攻防Web篇-SQL注入攻击初级

不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问,我们真的了解SQL注入吗?看完本篇文章希望能让你更加深刻的认识SQL注入. 注入攻击原理及自己编写注入点 1.1.什么是SQL?SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统.SQL 语句用于取回和更新数据库中的数据.SQL 可与数据库程序协同工作,比如 MS Access.DB

【渗透课程】特别篇-主流网站程序Oday大全以及拿shell思路

版权和内容说明: 这篇文章不是本站编写,是从网络上摘抄的,但是经过了本站的改写优化,并将内容,格式规范化. 本篇说明:这篇文章结合了前辈们前几年一路挖掘出来的主流程序漏洞以及思路, 小编写在前面是想让大家大致了解一下,因为<渗透课程>以后的内容,就是围绕着本篇所涉及的内容进行深度逻辑原理剖析. 这是一篇比较完全的基本渗透笔记.看不懂没关系,后面会一一讲解不过本章的内容读者们要尽量保存,可能会在拿站的时候应用到呢! 常见网站程序asp类: foosun(风讯) kesion(科汛) newasp

第五篇 SQL Server代理理解代理错误日志

本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到,SQL Server代理可以通过数据库邮件发送通知.如果有什么不正确的,你必须查看数据库邮件日志.在这一篇,你将学习如何理解和查看所有相关的SQL Server代理错误日志.你将回顾最常见的错误信息,掌握哪些信息需要你采取行动,哪些信息只是单纯的信息而已.一旦你理解错误日志,在处理SQL Serv

第五篇 SQL Server安全架构和安全

本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学习如何给主体访问一组对象,通过给架构分配权限而不是单个表.代码模块和其他对象.你还会了解用户架构分离的好处,以及如何提高对象安全性,如何为用户.组使用默认架构来简化对象访问管理和安全性.Schemas with Roles and PermissionsThe relationship of sch

基础篇——SQL注入(工具注入)

注入工具 上一篇介绍了SQL注入漏洞以及一些手工注入方法,本篇介绍一下注入工具 1.sqlmap sqlmap属于比较经典的一个注入工具,功能强大,还自带一些绕过参数 使用方法: sqlmap.py -u “url”  对url连接进行注入检测 然后使用注入参数进行注入 -u  //添加url进行检测 -dbs  //进行数据库检测 -tables  //猜解数据库表 -colums  //猜解字段 --level 1~5  //设置注入等级最高5级 --risk  1~3  //设置危险等级