- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQLi Labs 指南.doc
校园全能高手/xyqngs/
SQLi Labs 指南
简介
结构化查询语言,也叫做SQL,从根本上说是一种处理数据库的编程语言。对于初学者,数据库仅仅是在客户端和服务端进行数据存储。SQL通过结构化查询,关系,面向对象编程等等来管理数据库。编程极客们总是搞出许多这样类型的软件,像MySQL,MS SQL ,Oracle以及Postgresql。现在有一些程序能让我们有能力通过结构化查询来管理大型数据库。脚本小子们一定已经动手体验了类似SQL注入等这样的操作,虽然他们可能已经通过使用自动化工具例如SQL Map或者SQLNinja来实施攻击,但却还不知它真正的原理。在这篇简短的教程里,我将会尽力让你对SQL 注入是怎样工作的,攻击是怎样发生的以及什么是应用程序SQL漏洞有一个深入的理解。我们将要使用的实验室是SQLi Labs,它是一个可以从/Audi-1/sqli-labs免费下载,以便我们研究学习以及编写安全的程序。所以这篇教程对于程序员和安全测试者都将是一次动手实践的机会。
安装
从/Audi-1/sqli-labs下载源代码
将源代码复制到Apache webroot 文件夹(htddocs,/var/www)
打开sql-connections文件夹下的“db-creds.inc”文件
修改mysql用户名和密码为你自己的
打开浏览器,通过localhost的index.html访问文件夹
点击setup/resetDB 链接在你的mysql中创造数据库
开始游戏!
实验
第一节:GET – 基于错误 – 单引号 – 字符型
你会看到“Welcome Dhakkan”(一个北印度俚语,通常指愚蠢的人)。SQLI Labs的编码者一定是一个很幽默的人。现在我们用数字型注入可以得到一个“id”参数。
-??id=1
开火!
任务完成!我们得到了登陆名 Dumb 和密码 Dump。我们在URL上添加了一个参数,并让这个参数指向第一条记录。这是便生成了一个从浏览器到数据库的表中的一个快速的查询,从而来获取“id=1”的记录。同样,你可以构造查询来得到后面的记录如 2,3,4……。
在后端的实际查询如下:
Select?*?from?TABLE?where?id=1;
原文这里只是给了简单的用了id=1来正常查询了一条记录,根据原程序作者博客的说明,这里应该是有一个字符型的单引号注入,如下解释:)
在第一节index.php文件的第29行中:
$sql=SELECT?*?FROM?users?WHERE?id=$idLIMIT?0,1;
这里的$id是被单引号包裹的。
通过如下的注入查询可以验证:
id=1
(这样看来,原文作者上面给的实际执行的SQL语句就不对了,应为Select * from TABLE where id=1;)
以下两个注入可以成功执行。
?or?1=1
?or?1=1?--+
后者采用的注释的方法。
第二课: GET – 基于错误 – 数字型
现在我们尝试通过类似于输入字符串的方法来攻击应用程序,例如“abc”和“abcd”。我们注意到在lesson 2中我们收到了一个从数据库返回的错误。下面我们对数字做一些篡改,将(单引号)添加到数字中。
我们又得到了一个Mysql返回的错误,提示我们语法错误。
You?have?an?error?in?your?SQL?syntax;?check?the?manual?that?corresponds?to?your?MySQL?server?version?for?the?right?syntax?to?use?near?‘’?LIMIT?0,1′?at?line?1
现在执行的查询语句如下:
Select?*?from?TABLE?where?id?=?1’?;
所以这里的奇数个单引号破坏了查询,导致抛出错误。
因此我们得出的结果是,查询代码使用了整数。
Select?*?from?TABLE?where?id?=?(some?integer?value);
现在,从开发者的视角来看,为了对这样的错误采取保护措施,我们可以注释掉剩余的查询:
http://localhost/sqli-labs/Less-2/?id=1–-
注意:一定要在注释符号后加空格,或者URL编码后的空格(%20),否则注释符号不会产生作用。
这小节中,原作者同样使用了单引号来注入,但这并不代表着这个小节,是基于字符串的,大家可以观察一个单引号注入后的出错信息, LIMIT 0,1′ at line 1和上面我备注图中的引号个数是不一样的,稍微分析下,便可以明白。
源代码中31,32行为此处的SQL查询语句。
$sql=SELECT?*?FROM?users?WHERE?id=$id?L
文档评论(0)