"We are back" « oc.at

Shell mit sudo per PHP ausführen

Brain_Death 23.10.2007 - 09:36 3186 31
Posts

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12142
Fuehr mal folgendes PHP-Skript auf deinem Webserver aus bitte:

Code:
<?php passthru("id"); ?>

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25539
ein "set" bist du uns auch noch schuldig ;)

b_d

© Natural Ignorance (NI)
Avatar
Registered: Jul 2002
Location: 0x3FC
Posts: 10603
erstmal vielen dank für die bisherige hilfe (!), ich will nur kurz erwähnen, dass ich erst wieder ab morgen vlt. sogar erst übermorgen zugang zum server habe, bis die mir in der schule ne ip einrichten, dass ich auch von zuhause aus zugreifen und arbeiten kann.

werde dann berichten @colossus; und @mat: wo genau :p ?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25539
na in einem php-skript, wo sonst? :)
Code: PHP
<?php

$id = shell_exec("id");
$set = shell_exec("set");

echo "<h2>id</h2><br />$id<h2>set</h2><br />$set";

?>

b_d

© Natural Ignorance (NI)
Avatar
Registered: Jul 2002
Location: 0x3FC
Posts: 10603
k, werde dann beides nachreichen!

btw: php tags @vB gibts auch? mist, nicht gesehn :p:D

b_d

© Natural Ignorance (NI)
Avatar
Registered: Jul 2002
Location: 0x3FC
Posts: 10603
soda, sorry dass es letzendlich so lang gedauert hat, kann nichts dafür und mich ärgerts sowieso am meisten.

@colo:
Zitat
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)

@mat:
Zitat
id

uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)

set

BASH=/bin/sh BASH_ARGC=() BASH_ARGV=() BASH_EXECUTION_STRING=set BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="3" [1]="1" [2]="17" [3]="1" [4]="release" [5]="i486-pc-linux-gnu") BASH_VERSION='3.1.17(1)-release' CONSOLE=/dev/console DIRSTACK=() DPKG_ARCH=i386 EUID=65534 GROUPS=() HOME=/ HOSTNAME=daisyserver HOSTTYPE=i486 IFS=' ' INIT_VERSION=sysvinit-2.86 LD_LIBRARY_PATH=/opt/lampp/lib:/opt/lampp/lib: MACHTYPE=i486-pc-linux-gnu OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PATH=/sbin:/bin:/usr/sbin:/usr/bin POSIXLY_CORRECT=y PPID=4874 PREVLEVEL=N PROGRESS_STATE=2 PS4='+ ' PWD=/opt/lampp/htdocs/sms/test ROOT=/dev/hdb1 RUNLEVEL=2 SHELL=/bin/sh SHELLOPTS=braceexpand:hashall:interactive-comments:posix SHLVL=6 TERM=linux UID=65534 VERBOSE=no _=/opt/lampp/bin/httpd break= init=/sbin/init previous=N quiet=y readonly=y resume=/dev/hdb5 rootmnt=/root runlevel=2

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12142
Mit XAMPP ist das natuerlich wieder was anderes; dein httpd laeuft unter dem Kontext von nobody. Ich nenhme mal an, dass es sich sowieso nicht um eine Produktivmaschine handelt.

->

Code:
sudo usermod -a -G dialout nobody

b_d

© Natural Ignorance (NI)
Avatar
Registered: Jul 2002
Location: 0x3FC
Posts: 10603
hmm, der befehl hat nichts bewirkt :(

hab in die visudo bereits
Code:
www-data ALL=(ALL) NOPASSWD: ALL
reinghaut, hat auch nichts gebracht :(

es muss doch möglich sein auch sudo befehle per php script auszuführen, nur wie :/

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12142
*sigh* Was gibt
Code:
<?php passthru("id"); ?>
jetzt aus? Was gibt es nach einem Neustart von Apache aus?

b_d

© Natural Ignorance (NI)
Avatar
Registered: Jul 2002
Location: 0x3FC
Posts: 10603
ohne neustart

Code:
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup) 

mit neustart kann ich dir in 5 minuten sagen. bis dann :)

mit neustart

Code:
uid=65534(nobody) gid=65534(nogroup) groups=20(dialout),65534(nogroup)
und ich versuchs dann gleich nochmal, weil ohne neustart ich es eben noch nicht versucht hab!

geht nicht, passt das eh so in die visudo:
Code:
www-data ALL=(ALL) NOPASSWD: ALL
Bearbeitet von b_d am 06.11.2007, 09:48

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12142
Ja, das passt, ist aber total verrueckt.

Wenn dein Device (/dev/ttyUSB0) immer noch die selben Permissions hat, und von der Guppe "dialout" gelesen und beschrieben werden kann, sollte das inzwischen auch ohne sudo passen.

Ehrlich gesagt bin ich den Thread langsam leid. Wenn du willst, schau ich mal per SSH auf den Server, und fixe dir das - dieses Maeusemelken ist einfach langatmig.

b_d

© Natural Ignorance (NI)
Avatar
Registered: Jul 2002
Location: 0x3FC
Posts: 10603
ich war zu feig dich das zu fragen, aber wenn dus schon anbietest :D got pm!

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12142
Die sudo-Regel wird auf den User "www-data" angewandt; dein Apache laeuft aber nach wie vor unter "nobody", weshalb `sudo` immer noch nach einem Passwort fragt. Allerdings auf stderr, was PHP deswegen nicht auffaengt und anzeigt. Da der User "nobody" aber auch schon in der Gruppe "dialout" Mitglied ist, hat er auf dein GSM-Terminal ohnehin Zugriff, und privlege elevation via `sudo` ist nicht mehr noetig

Code:
$ cat script.php
<html>

<?php
passthru("./test.sh");
?>

</html>

Code:
$ cat test.sh
#!/bin/bash
exec 2>&1
/usr/bin/scmxx --device /dev/ttyUSB0 --info

Code:
$ curl "http://somehost.invalid/script.php"
<html>

Using "ANSI_X3.4-1968" as system character set.
Accessing device /dev/ttyUSB0...done
OK, a modem device is present.
Phone related information:
Vendor:       SIEMENS
Model:        CX65
Revision:     50,"OFFICIAL","20050404T200959+0200","15:25:16", [...]
Battery:      95%
Charsets:     GSM, UCS2
Time:         Mon Nov  5 19:34:38 2007

[...]

</html>

Das wollten wir doch, oder?

PS: Credentials fuer deinen Server solltest du nie ueber unsichere Kanaele weitergeben. Die PM mit den Credentials war folglich keine so ueberragende Idee. Das fuer die Zukunft ;)

b_d

© Natural Ignorance (NI)
Avatar
Registered: Jul 2002
Location: 0x3FC
Posts: 10603
perfekt, danke :)

also kann ich die regel für www-data eigentlich löschen, oder?

und ich vertrau dir und auch dem oc.at staff, das sowas diskret behandelt wird ;D pm's sollte ja überhaupt net gelesen werden, zb ;)

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12142
Ja, die Regel kannst du kicken.

Dass der Staff bzw. ich nichts "Boeses" damit anstellen ist anzunehmen, aber es braucht sich nur jemand an einem der vielen Router zwischen mir hier und dem oc.at-Server einklinken und die unverschluesselte Verbindung abhorchen/mitschneiden, schon kaeme er theoretisch rein. Ist natuerlich ein bisschen absurd, aber es gibt ja gangbare und komfortable Alternativen, wie das Eintragen meines ssh2-Publickeys zur Authentifikation an deinem Server :)

Ich betreibe uebrigens auch ein GSM-Terminal hier zu Hause - eine empfehlenswerte Programmsuite im Umgang damit ist meiner Erfahrung nach "gammu".
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz