小议SQL注入及其简单测试方法

上一篇 / 下一篇  2011-02-17 15:06:39 / 个人分类:web测试

(转自跳舞的猫咪)

 原理:

  如有一新闻管理系统用文件news.asp再用参数读取数据库里的新闻譬如

  http://www.xxx.com/news.asp?id=1这一类网站程序

  如果直接用

  rs.open "select * from news where id=" &

  cstr(request("id")),conn,1,1

  数据库进行查询的话即上面的URL所读取的文章是这样读取的

  select * from news where id=1

  懂得SQL语言的就知道这条语言的意思是在news读取id为1的文章内容。

  但是在SQL SERVER里select是支持子查询和多句执行的。如果这样提交URL的话

  http://www.xxx.com/news.asp?id=1and 1=(select count(*) from admin

  where left(name,1)=a)

  SQL语句就变成了

  select * news where id=1 and 1=(select count(*)

  from admin where left(name,1)=a)

  意思是admin表里如果存在字段字为name里左边第一个字符是a的就查询news表里id为1的内容,news表里id为1是有内容的,从逻辑上的角度来说就是1&P。只要P为真,表达式就为真,页面会返回一个正确的页面。如果为假页面就会报错或者会提示该id的文章不存在。黑客利用这点就可以慢慢得试用后台管理员的用户和密码。

 测试

  测试存不存在SQL INJETION很简单

  如果参数为整数型的就在URL上分别提交http://www.xxx.com/news.asp?id=1and 1=1 和http://www.xxx.com/news.asp?id=1and 1=2

  如果第一次返回正确内容,第二次返回不同页面或者不同容内的话表明news.asp文件存在SQL INJETION。如何利用就不多说了,毕竟我们都不是为了入侵。


TAG:

 

评分:0

我来说两句

Open Toolbar