[摘要]先申明下这方法只对ACCESS数据库的网站有效 关于ACCESS注入的基本常识: 第一、ACCESS数据库注入与MySQL方法不同, 它的用户列表名, 密码字段, 以及字段的内容不能用MySQL&a... 先申明下这方法只对ACCESS数据库的网站有效 关于ACCESS注入的基本常识: 第一、ACCESS数据库注入与MySQL方法不同, 它的用户列表名, 密码字段, 以及字段的内容不能用MySQL“暴”的方法来取得。 第二、ACCESS只能用“猜”的方法来得到表名和字段, 然后再猜解出字段的长度, 最后把字段的第一位到第N位分别猜出来。 比如说, 有一个人心里想着一个数字, 另一个人要猜出这个人心里想的是什么数字, 所以如果要百分之百、系统性的猜准, 就要有一定的提示。 比如说, 那个人问, 这个数字是否大于100, 如果被问的那个人说“不”, 那么可以确定, 这个数字不 大于100, 继续问, 是否小于1, 如果被问的那个人仍然说“不”, 那么就可以确定这个数字是一个正数, 并且在1-100之间。 继续问下去, 是否大于60, 是否小于90……, 这样一直问下去, 最后一定可以得到一个准确的答案。 这种猜法被称为“折半猜解法”。 知道ACCESS数据库注入的一些基本规律, 就可以通过一些相关语法来进行手动注入了。 第一步:确定注入点 用“ and 1=1”或者“ and 1=2”来确认。 注意:and两边各有一处空格。 如果检测过后, 返回错误信息, 那么就证明这个网站有注入漏洞。 第二步:猜解表名 用:and exists (select * from [admin]) 检测是否存在admin表, admin这个表名可以替换成其它的表名进行猜解,如果存在该表名返回页面结果为正常, 如果不存在则返回为出错。 第三步:猜解某表名中存在的字段 语法:and exists (select top 1 [name] from [admin]) 前面[name]大括号中的name可以换成你要查询的字段名, 后面admin则是要查询的表名, 这一句的意思就是查询在admin表中是否存在name字段, 和上述一样, 如果存在返回页面为正常, 如果不存在, 则返回出错页面。 比如说你要查密码字段名, 则要把[name]改成pass或者password(可以通过尝试访问界面来确认是否存在该字段)。 第四步:猜解字段的长度 语法:and (select top 1 len(username) from Admin)>0 len参数提取字段长度()内的username是字段名, >0可以换成>1、>2直到猜中。 继续我们以上的叙述, 刚才找的是密码字段, 所以可以把(username)(记住username是由小括号括住的)改成password。 第五步:折半法猜出字段--最关键的一环 语法:and (select top 1 asc(mid(username,N,1)) from Admin)>0 猜解第N位的ASCII码>0取值从负数到正数都有可能, 当然常见的 密码都是数字加字母的组和, 它们的ASCII值在0-128之间, 将值替换为这之间的值, 如果正确, 则返回正常页面, 如果不是责返回出错, 将N分别替换为1、2、3、4……反复猜解即可得出字段每一个位数的值而得到密码, 参数N为字段的位数, 如果是(mid(username,1,1)), 则查找username字段中的第一位, 依此类推。 整个语句的最右边“>0”, 数字0表示的是ASCII码, 并不是真正的字段位数相应的字符。 还是一样, 我们继续上述结果, 可以把username改为password。
上面是电脑上网安全的一些基础常识,学习了安全知识,几乎可以让你免费电脑中毒的烦扰。
|