Автор Тема: Perl & SuExec  (Прочетена 5004 пъти)

asp

  • Напреднали
  • *****
  • Публикации: 55
    • Профил
Perl & SuExec
« -: Aug 08, 2011, 09:23 »
Интересувам се от малък прост скрипт, който да изпълнява команди през root.
Благодаря
Активен

n00b

  • Напреднали
  • *****
  • Публикации: 1248
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
Re: Perl & SuExec
« Отговор #1 -: Aug 08, 2011, 10:44 »
В смисъл? Скрипта може да изпълни всичко, но нали някой трябва да го вдигне до root.
Активен

mobilio - професионални мобилни приложения

Mitaka

  • Гост
Re: Perl & SuExec
« Отговор #2 -: Aug 08, 2011, 11:39 »
sudo?
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Perl & SuExec
« Отговор #3 -: Aug 08, 2011, 12:31 »
Код
GeSHi (Perl):
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use CGI:Carp qw(fatalsToBrowser);
  5. print "Content-type: text/plain\n\n";
  6.  
  7. print "Hello, World";
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

asp

  • Напреднали
  • *****
  • Публикации: 55
    • Профил
Re: Perl & SuExec
« Отговор #4 -: Aug 08, 2011, 12:40 »
Да точно, интересувам се как мога да изпълнявам sudo(root) команди през Perl?
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: Perl & SuExec
« Отговор #5 -: Aug 08, 2011, 16:15 »
Да точно, интересувам се как мога да изпълнявам sudo(root) команди през Perl?
Ако иде реч за апашкия suexec там изрично е написано че програмата проверява и не разрешава да се ескалират привилегиите до root. И са прави хората!!!
Помисли как да го направиш по друг начин
Активен

0x2B|~0x2B

asp

  • Напреднали
  • *****
  • Публикации: 55
    • Профил
Re: Perl & SuExec
« Отговор #6 -: Aug 08, 2011, 21:50 »
Незнам кво е suexec, но в превод така ми звучи (SU Exec)-(Изпълнявай команди чрез root потребителя), където точно това искам да направя или ако не е SUEXEC; просто искам да изпълня и да стане;

Код:
#!/usr/local/bin/perl
system('rm -rf /boot')
искам да е през роот - как перл скрипт се логва в роот ме интересува.
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Perl & SuExec
« Отговор #7 -: Aug 08, 2011, 22:15 »
Незнам кво е suexec, но в превод така ми звучи (SU Exec)-(Изпълнявай команди чрез root потребителя), където точно това искам да направя или ако не е SUEXEC; просто искам да изпълня и да стане;

Код:
#!/usr/local/bin/perl
system('rm -rf /boot')
искам да е през роот - как перл скрипт се логва в роот ме интересува.

Някой май ще се прави на хахор :D :D :D 'rm -rf /boot' :D.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: Perl & SuExec
« Отговор #8 -: Aug 09, 2011, 00:10 »
За това ли става дума?
http://en.wikipedia.org/wiki/Setuid

ако е за това: правиш пермишаните на скрипта да са root.root и му вдигаш setuid и  setgid бита.

Така всеки нормален юзер (без значение пермишъните на юзера) който статира скрипта ще стартира скрипта с роот привилегии и скрипта ще може да прави всичко като роот.  ???Това ли питаш. ???

Така е на теория ....обаче suid върху скриптове не работи! Не знам защо .. него и разбирам... беше някакво нарочно ограничение в кърнела специално за скриптовете.

Затова се прави по-следният начин: прави се една малка 'wrapper' програмка на C. Тази програмка не прави нищо друго освен да стартира твоят скрипт. А setuid/setgid привилегиите ги слагаш не върху скрипта а върху 'wrapper' програмката.

А бе доста оплетено беше, но съм го правил и работи.
« Последна редакция: Aug 09, 2011, 00:21 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: Perl & SuExec
« Отговор #9 -: Aug 09, 2011, 10:32 »
Незнам кво е suexec, но в превод така ми звучи (SU Exec)-(Изпълнявай команди чрез root потребителя), където точно това искам да направя или ако не е SUEXEC; просто искам да изпълня и да стане;

Код:
#!/usr/local/bin/perl
system('rm -rf /boot')
искам да е през роот - как перл скрипт се логва в роот ме интересува.
Някой май има много да чете, su идва от switch user, не от superuser. И suexec не ти дава да правиш нищо като root!
Активен

0x2B|~0x2B

Mitaka

  • Гост
Re: Perl & SuExec
« Отговор #10 -: Aug 09, 2011, 11:11 »
Сега... това, което предлагам работи но е НЕСИГУРНО!
Ако ти се занимава /и можеш/ да си промениш кода - ОК.... но в този му вид АЗ НЕ БИХ ГО ПОЛЗВАЛ!!!

Малко C:
файла се казва wrapper1.c

[root@fm /home/dimitar/wra]# cat wrapper1.c

Код
GeSHi (C):
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[]){
  4.  
  5.  
  6.    if (argv[1] == NULL) return 1;
  7.  
  8.    if (strncasecmp(argv[1], "/home/dimitar/wra/", 18) != 0) return 1;
  9.  
  10.    setresuid(0,0,0);
  11.    setresgid(0,0,0);
  12.  
  13.    execvp(argv[1], &(argv[1]));
  14. }
  15.  

Компилираме:

Код:
[root@fm /home/dimitar/wra]# cc -o wrapper1 wrapper1.c


Правим го suid:

Код:
[root@fm /home/dimitar/wra]# chmod 4755 wrapper1

Копираме си един шел в директория /home/dimitar/wra (ако искаш да изпълнява код от друга директория си я смени в сорса!!!):
Трябва да се промени в този ред: if (strncasecmp(argv[1], "/home/dimitar/wra/", 18) != 0) return 1; като това 18 те оставям сам де се досетиш какво е :)

Код:
cp /bin/sh .

И тестваме:

Код:
[root@fm /home/dimitar/wra]# su dimitar
$ id
uid=1001(dimitar) gid=1001(dimitar) groups=1001(dimitar),0(wheel)
$ ./wrapper1 /home/dimitar/wra/sh      
# id
uid=0(root) gid=0(wheel) groups=0(wheel)

!! Задължително като аргумент се подава пълният път до програмата, която трябва да се стартира като root. Ако искаш може да си махнеш проверката.... но не ти го препоръчвам!
Всъщност, изобщо не препоръчвам да даваш достъп на кое да е уеб приложение до този wrapper в този му вид, освен ако не е тестова машина.... ИЗПОЛЗВАЙ ГО НА СВОЙ РИСК!!! АКО ТЕ ИЗПРАСКАТ ПРЕЗ ТАЯ БЪГНЯ... НЕ МЕ ТЪРСИ!!
« Последна редакция: Aug 09, 2011, 11:13 от Mitaka »
Активен

AMD

  • Напреднали
  • *****
  • Публикации: 873
  • Distribution: Calculate Linux Scratch 64 / Alt Linux Centaurus 6.0 64
  • Window Manager: Gnome 2.32/3.2 XFCE 4.8/4.10-git
  • AMD Athlon64/Sempron64 4000+Dual Core/3400+
    • Профил
Re: Perl & SuExec
« Отговор #11 -: Aug 09, 2011, 11:37 »
Сега... това, което предлагам работи но е НЕСИГУРНО!
Ако ти се занимава /и можеш/ да си промениш кода - ОК.... но в този му вид АЗ НЕ БИХ ГО ПОЛЗВАЛ!!!

Малко C:
файла се казва wrapper1.c

[root@fm /home/dimitar/wra]# cat wrapper1.c

Код
GeSHi (C):
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[]){
  4.  
  5.  
  6.    if (argv[1] == NULL) return 1;
  7.  
  8.    if (strncasecmp(argv[1], "/home/dimitar/wra/", 18) != 0) return 1;
  9.  
  10.    setresuid(0,0,0);
  11.    setresgid(0,0,0);
  12.  
  13.    execvp(argv[1], &(argv[1]));
  14. }
  15.  

Компилираме:

Код:
[root@fm /home/dimitar/wra]# cc -o wrapper1 wrapper1.c


Правим го suid:

Код:
[root@fm /home/dimitar/wra]# chmod 4755 wrapper1

Копираме си един шел в директория /home/dimitar/wra (ако искаш да изпълнява код от друга директория си я смени в сорса!!!):
Трябва да се промени в този ред: if (strncasecmp(argv[1], "/home/dimitar/wra/", 18) != 0) return 1; като това 18 те оставям сам де се досетиш какво е :)

Код:
cp /bin/sh .

И тестваме:

Код:
[root@fm /home/dimitar/wra]# su dimitar
$ id
uid=1001(dimitar) gid=1001(dimitar) groups=1001(dimitar),0(wheel)
$ ./wrapper1 /home/dimitar/wra/sh      
# id
uid=0(root) gid=0(wheel) groups=0(wheel)

!! Задължително като аргумент се подава пълният път до програмата, която трябва да се стартира като root. Ако искаш може да си махнеш проверката.... но не ти го препоръчвам!
Всъщност, изобщо не препоръчвам да даваш достъп на кое да е уеб приложение до този wrapper в този му вид, освен ако не е тестова машина.... ИЗПОЛЗВАЙ ГО НА СВОЙ РИСК!!! АКО ТЕ ИЗПРАСКАТ ПРЕЗ ТАЯ БЪГНЯ... НЕ МЕ ТЪРСИ!!

Тогава защо я предлагаш на човека.
Активен

Господи моля те пази ме от ламерите, от хакерите и сам мога да се пазя.

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: Perl & SuExec
« Отговор #12 -: Aug 09, 2011, 12:35 »
Тогава защо я предлагаш на човека.

Е.. ама и ти да не се обадиш с дълъг цитат.

Начина може изобщо да не се отнася за само за root. Аз съм го ползвал да стартирам скрипт с привилегии на apache.apache обаче скрипта се стартира от qmail.
qmail(qmail.qmail) -> wrapper(apache.apache) -> script.php(apache.apache)

A може и наистина на някой скрипт да му трябват роот привилегии!
Активен

Perl - the only language that looks the same before and after encryption.

Mitaka

  • Гост
Re: Perl & SuExec
« Отговор #13 -: Aug 09, 2011, 12:39 »
Тогава защо я предлагаш на човека.

Защото му давам насоки.
Нали не очакваш да се хвана да пиша нещо, което на мен не ми трябва ей така за спорта?
Това, което съм написал е налълно достатъчно да даде идея как да станат нещата....
Нали всеки тук е на принципа "то е опен, направи си го". Е, ето го сега - ей ти кода, оправяй се :)
Нагласи си го така, че да работи и да ти върши работа.
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Perl & SuExec
« Отговор #14 -: Aug 09, 2011, 18:48 »
Мисля си, че sudo с добре написан sudoers (проверка на параметри, команди ит т.н.) е достатъчно добро решение за ескалиране на привилегии, макар че това rm -rf /boot да ми звучи доста зле :)
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Perl
Общ форум
x11r6 5 3414 Последна публикация Aug 09, 2003, 10:03
от x11r6
Perl
Общ форум
Йордан 3 2861 Последна публикация Nov 13, 2003, 16:14
от Йордан
Gtk-Perl
Хардуерни и софтуерни проблеми
apogza 0 1780 Последна публикация Jan 24, 2004, 12:52
от apogza
Ползва ли се Perl в България и за какво?
Общ форум
berov 63 18678 Последна публикация Jan 31, 2005, 11:17
от toxigen
Apache2+suphp+suexec+chroot
Настройка на програми
d3v1ous 4 2145 Последна публикация Jan 14, 2011, 10:25
от d3v1ous