本文的目的不是要攻击一个网站,而是将此测试记录下来,以了解相关知识之目的;并且这种 ASP 注入测试早在 N 年前已经流行,而现在看起来算是很过时的东西了,但是网上存在此类漏洞的网站仍然有不少。虽然使用一些自动化的注入工具可以很轻松的达到快餐式的入侵目的,但如果不是在了解背后的细节下,这样做不但很快会乏味,而且每次都会有种意犹未尽的感觉。下面叙述此次的记录。由于本文涉及的网址链接为真实链接,因此不直接给出网址文字形式。
首先找到下面这个可供测试的站点链接:
像这样的 xxx.asp?id= 的网址片段是注入多发地段,因为 id= 的后面常会跟着一个参数,而服务器的后台 asp 处理页面会将此参数取出,并放到数据库语句里查询,最后返回相关的结果给客户,比如会有这样的 SQL 语句:select * from News where id=224 。因此,在处理这种涉及到数据库查询的语句里,若是对参数过滤不严,那么就容易产生注入的漏洞。
习惯的,我们在上面的这个网站后面加一个分号,看看网站有没有对这个最基本的小符号进行过滤:
由提示出来的错误信息我们可以知道该网站使用的数据库类型基本上就是 Access 数据库了。
使用经典的 1=1 和 1=2 测试法。
可以分别在上面的网址的后面加上 and 1=1 和 and 1=2 来测试,如果加 and 1=1 时显示的是正常页面,而加 and 1=2 显示的是错误页面,那么说明存在 SQL 注入漏洞。该漏洞的实质就是,网站后台并没有过滤网址里提交的参数中包含 SQL 查询语句,而是直接把恶意提交的查询语句作为实际查询数据库动作的一部分,因此就带来了注入问题。