Web网站程序编写中的安全软肋
作者: 陆羽, 出处:IT168, 责任编辑: 韩博颖,
2008-01-31 10:29
一个纯静态的网页,不知道后台,也不知道FTP帐号密码等信息,但是它还是被人拿下了,这又是为什么呢?
| <!--#include file="conn.asp"--> <% Id=request("id") if id<>"" then Set rs=Server.CreateObject("ADODB.RecordSet") sql="select * from news where id="&id rs.Open sql,conn,1,1 response.write "标题:"&rs("title")&"<br>" response.write "内容:"&rs("content") set rs=nothing rs.colse else response.write "缺少参数" end if %> |
这段代码直接从浏览器接收了id的值,然后不进行任何过滤就提交进数据库查询,首先我们来判断下是否存在注入,通常使用的办法是 and 1=1返回正常

and 1=2返回错误或无返回内容则认为存在注入漏洞,我个人经常偷懒直接在地址栏后面加上一个“’”,返回错误或无返回内容则认为有注入。

构造注入语句:
and exists (select count(*) from admin)
将这段代码加到地址后面就是
http://localhost/index.asp/id=1 and exists (select count(*) from admin)
那么在程序中接收到的参数就变成了后面的联合查询语句,我们带入数据库查询部分。看看结果如何?
sql="select * from news where id="&1 and exists (select count (*) from admin)
结果显而易见,原来的单句查询变成了联合查询,将admin表的内容进行了查询操作,这个语句是用来判断字段是否存在的。如果字段存在则查询成功,返回正常,字段不存在就返回错误提示,表示不存在表。详细的注入方法这里就不说明了。
- 本文关键词:

