• Access手工注入


    access手工注入

    哈哈哈哈,,,我顾北清又回来啦,接着更新。
    实验环境:win2008R2虚拟机,物理机(也就是我的win10)。
    搭建环境用的是access+asp源码。

    环境搭建可以参照这里,不同的是在第六步勾选应用程序开发选项。
    环境搞完之后大概是这个样子的:

    接着来手工注入一下。
    首先判断有没有注入点,随便点进一个页面:


    %20是空格的转码。
    and 1=1没有出错,再来试试and 1=2

    出错了,说明它将这条语句带入查询了,说明存在注入点。

    1.联合查询法
    先判断字段长度,使用order by 猜测的长度
    我这里猜测长度是22(因为我事先知道/滑稽脸,所以命令是order by 22


    判断到22的时候是正常的,到23的时候报错了,说明,字段长度是22。
    然后来猜解表名,使用的命令是: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.
    admin是我猜解的表名。

    发现这里爆出一个315,说明315这两个位置存在数据,接着来用猜解的数据替换这两个位置。

    图中的adminpassword是猜解的字段,如果此阿姐正确就会爆出这两个位置的数据,这样就拿到了账号密码。

    2.逐字猜解法
    首先判断是否存在某个表:
    这里使用的命令是and exists ( select * from admin),判断是否存在admin表。

    没有报错,说明存在admin表,接着来判断admin表中的字段,这里使用and exists ( select admin from admin)命令判断在admin表中是否存在admin字段。

    没有报错说明存在,接着看看有没有password字段。

    发现也没有报错,说明存在。
    然后判断这两个字段对应数据的长度。
    因为我事先知道对应关系,所里我就直接判断admin的长度是5,password的长度是16。
    使用语句是and (select top 1 len(列名) from admin)=长度值
    可以使用and (select top 1 len(列名) from admin)>长度值来缩小范围。


    这样我就判断出了数据的长度,然后根据数据长度反推数据。
    使用的命令是and (select top 1 asc(mid(列名,第几位,1)) from admin)=长度值,这里的长度值是ASCII码。

    我使用的命令是and (select top 1 asc(mid(admin,1,1)) from admin)=97
    可以看到没有报错,这里97对应的是a,而我的admin列里的数据是admin,刚好对应,如果换成98,那么就会报错。
    以此类推,猜解出数据。

  • 相关阅读:
    TCP_UCP通信原理及案例
    JavaScript高级笔记DOM与BOM
    JavaScript基本语法,基本对象,正则表达式
    JDBC连接池&JDBCTemplate&Sping JDBC
    JDBC,JDBCUtils,JDBC控制事务
    自动化工具ansible(0——准备部署工作)
    监控软件篇——prometheus+exporter组件+grafana
    命令工具篇
    sed 命令备忘
    ES6数据分组
  • 原文地址:https://www.cnblogs.com/Timesi/p/9435693.html
Copyright © 2020-2023  润新知