不久前对学校的一个主机进行友情渗透,网站采用的是一套自行开发的ASP+Access程序。也没问是什么表结构,顺利找到一注入点。文章表取了5个字段,能够正常显示的字段索引值为(2、3、5),管理员表为Admin,猜中两个常用字段:ID、Password,采用逆推法:union select 1,1,* from admin时正常返回,得知admin表有3个字段,用户名字段不得而知。遗憾的是,这个用户名字段只能显示在4的位置(后来得知为adminuser),如表1所示: 1 2 3 4 5 1 1 ID Adminuser Password 表1 想来是心有不甘,我随随便便将2改为ID提交(union select 1,ID,* from admin),令人意想不到的是,系统报错: Microsoft JET Database Engine 错误 '80040e14' 在联合查询中所选定的两个数据表或查询中的列数不匹配。 /list_kx.asp,行11 我以为看错了眼,核实了一下列数,1+ID+*(3)= 5,怎么不对啊?计算机连数个数都错了?既然你说我错了,我给你凑! 提交union select ID,* from admin,错!union select 1,1,ID,* from admin,正常!我就纳闷了:1+1+ID+*(3)= 6,你居然还能正常返回!?6怎么就等于5了呢?还好学了点数据库理论: DBMS 和RDBMS的重要区别在于:RDBMS提供丁一种面问集合的数据库语言。对于大多数[1] [2] [3] 下一页 |