资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
浅谈 SQL 及 SQL 注入结构化查询语言(Structured Query Language)简称 SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库;同时也是数据库脚本文件的扩展名的扩展名,如 vf 中的脚本文件。SQL 是 1986 年 10 月由美国国家标准局通过的数据库语言美国标准,接着,国际标准化组织颁布了 SQL 正式国际标准。1989 年 4 月,ISO 提出了具有完整性特征的 SQL89 标准,1992 年 11 月又公布了 SQL92 标准,在此标准中,把数据库分为三个级别:基本集、标准集和完全集。SQL 五种数据类型分别是:字符型,文本型,数值型,逻辑型和日期型。一、字符型Varchar 和 char。varchar 和 char 型数据差别非常小,他们都是用来储存字符串长度小于255 的字符。varchar 型字段的另一个突出的好处是它可以比 char 型字段占用更少的内存和硬盘空间。当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要。2、文本型TXT. 。当需要存储大串的字符时,应该使用文本型数据。而文本型数据没有长度,一个文本型字段中的数据通常要么为空,要么很大。但是,无论何时,只要你能避免使用文本型字段,你就应该不使用它。文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。文本型字段还会吃掉大量的磁盘空间。一旦你向文本型字段中输入了任何数据(甚至是空值) ,就会有2K 的空间被自动分配给该数据。除非删除该记录,否则你无法收回这部分存储空间。三、数值型INT,TINYINT.通常,为了节省空间,应该尽可能的使用最小的整型数据。一个TINYINT 型数据只用一个字节; 一个 INT 型数据占用四个字节。这看起来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。另一方 面,一旦你已经创建了一个字段,要修改它是很困难的。因此,为安全起见,你应该预测一下,一个字段所需要存储的数值最大有可能是多大,然后选择适当的数据类型。NUMERIC.为了能对字段所存放的数据有更多的控制,你可以使用 NUMERIC 型数据来同时表示一个数的整数部分和小数部分。 NUMERIC 型数据使你能表示非常大的数比 INT 型数据要大得多。一个 NUMERIC 型字段可以存储从-1038到1038范围内的数。 NUMERIC 型数据还使你能表示有小数部分的数。例如,你可以在 NUMERIC 型字段中存储小数3.14。MONEY,SMALLMONEY.你可以使用 INT 型或 NUMERIC 型数据来存储钱数。但是,专门有另外两种数据用于此目的。如果你希望你的网点能挣很多钱,你可以使用 MONEY型数据。如果你的野心不大,你可以使用 SMALLMONEY 型数据。MONEY 型数据可以 存储从-922,337,203,685,477.5808 到922,337,203,685,477.5807的钱数。如果你需要存储比这还大的金额, 你可以使用 NUMERIC 型数据。SMALLMONEY 型数据只能存储从-214,748.3648到214,748.3647 的钱数。同样,如果可以的话,你应该用 SMALLMONEY 型来代替 MONEY 型数据,以节省空间。4、逻辑型如果使用复选框从网页中搜集信息,可以把此信息存储在 BIT 型字段中。BIT 型字段只能取两个值:0或1。但在创建好一个表之后,不能向表中添加 BIT 型字段。如果打算在一个表中包含 BIT 型字段,必须在创建表时完成。5、日期型DATETIME SMALLDATETIME。一个 DATETIME 型的字段可以存储的日期范围是从1753年1月1日第一毫秒到9999年12月31日最后一毫秒。如果你不需要覆盖这么大范围的日期和时间,你可以使用 SMALLDATETIME 型数据。它与 DATETIME 型数 据同样使用,只不过它能表示的日期和时间范围比 DATETIME 型数据小,而且不如 DATETIME 型数据精确。一个 SMALLDATETIME 型的字段 能够存储从1900 年1月1日到2079年6月6日的日期,它只能精确到秒。DATETIME 型字段在你输入日期和时间之前并不包含实际的数据。SQL 注入SQL 注入,就是通过把 SQL 命令插入到 Web 表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令,比如先前的很多影视网站泄露 VIP 会员密码大多就是通过 WEB 表单递交查询字符暴出的,这类表单特别容易受到 SQL 注入攻击。SQL 注入技术1、强制产生错误对数据库类型、版本等信息进行识别是此类型攻击的动机所在。它的目的是收集数据库的类型、结构等信息为其他类型的攻击做准备,可谓是攻击的一个预备步骤。利用应用程序服务器返回的默认错误信息而取得漏洞信息。二、采用非主流通道技术除 HTTP 响应外,能通过通道获取数据,然而,通道大都依赖与数据库支持的功能而存在,所以这项技术不完全适用于所有的数据库平台。SQL 注入的非主流通道 主要有 E-mail、DNS 以及数据库连接,基本思想为:先对 SQL 查询打包,然后借助非主流通道将信息反馈至攻击者。三、使用特殊的字符不同的 SQL 数据库有许多不同是特殊字符和变量,通过某些配置不安全或过滤不细致的应用系统能够取得某些有用的信息,从而对进一步攻击提供方向。四、使用条件语句此方式具体可分为基于内容、基于时间、基于错误三种形式。一般在经过常规访问后加上条件语句,根据信息反馈来判定被攻击的目标。五、利用存储过程通过某些标准存储过程,数据库厂商对数据库的功能进行扩展的同时,系统也可与进行交互。部分存储过程可以让用户自行定义。通过其他类型的攻击收集到数据库的 类型、结构等信息后,便能够建构执行存储过程的命令。这种攻击类型往往能达到远程命令执行、特权扩张、拒绝服务的目的。六、避开输入过滤技术虽然对于通常的编码都可利用某些过滤技术进行 SQL 注入防范,但是鉴于此种情况下也有许多方法避开过滤,一般可达到此目的的技术手段包括 SQL 注释和动态查 询的使用,利用截断,URL 编码与空字节的使用,大小写变种的使用以及嵌套剥离后的表达式等等。借助于此些手段,输入构思后的查询可以避开输入过滤,从而 攻击者能获得想要的查询结果。七、推断技术此种方式的攻击通过网站对用户输入的反馈信息,对可注入参数、数据库模式推断,这种攻击构造的查询执行后 获得的答案只有真、假两种。基于推断的注入方式主要分为时间测定注入与盲注入两种。前者是在注入语句里加入语句诸如“waitfor 100”,按照此查询结果出现的时间对注入能否成功和数据值范围的推导进行判定;后者主要是“and l=l”、 “and l=2”两种经典注入方法。这些方式均是对一些间接关联且能取得回应的问题进行提问,进而通过响应信息推断出想要信息,然后进行攻击。SQL 手工注入主要有以下几个步骤:1.判断有无注入点and 1=1 and 1=22.猜表一般的表的名称基本是是 admin administrator user pass password 等.and 0(select count(*) from admin) -判断是否存在 admin 这张表3.猜帐号数目 如果遇到00)-and 1=(select count(*) from admin where len(用户字段名称 name)0)and 1=(select count(*) from admin where len(密码字段名称 password)0)5.猜解各个字段的长度 猜解长度就是把0变换 直到返回正确页面为止and 1=(select count(*) from admin where len(*)0)6.猜解字符and 1=(select count(*) from admin where left(name,1)=a) -猜解用户帐号的第一位and 1=(select count(*) from admin where left(name,2)=ab)-猜解用户帐号的第二位就这样一次加一个字符这样猜,猜到够刚才猜出来的多少位了就对了,帐号就算出来了。接下来个人感觉猜解密码相对比较困难,可用工具去对要入侵网站进行扫描。我自己成功拿下的一个站是一个注入实验站点,IP 为192.168.1.240,属于内网。我用明小子对网址扫描,以上几步手工注入都可省略,当所要入侵站点有注入点时,用明小子扫描出账户名,密码,数据库类型。找到登录数据库地址,用账户密码登录上。用数据库功能上传自己的木马来控制数据库,如数据库有 Pr 漏洞,上传 Pr.exe。接着上传 cmd.exe,用来添加新账户并提权。一般数据库有上传文件大小限制,一般在200k 内,cmd.exe 为470k,只能通过用服务器自己来下载 cmd,将自己电脑 system32中的 cmd,exe 上传到网上,用服务器下载下来。数据库中 cmd 项便可使用,用命令行添加账户并提权,使自己拥有账户控制数据库。接着在自己电脑用运行输入 mstsc 进行远程桌面连接,输入目标 IP,用自己添加的账户登录,这样就成功拿下一个网站。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号