Bonjour,
j'ai un programme tout simple:
#include<stdio.h>
#include<stdlib.h>
int main(){
seteuid(1002);
system("/bin/sh");
return 0;
}
dont les droits sont:
-rws--x--x 1002 1001
Lorsque je l'exécute en tant qu'utilisateur 1001, je devrais avoir un
shell en uid 1002, mais ce n'est pas le cas, pourquoi?
un ps auxf me montre bien que le programme tourne bien en 1002 mais
le shell est en 1001 (?)
Une idée sur la raison?
Bonjour,
j'ai un programme tout simple:
#include<stdio.h>
#include<stdlib.h>
int main(){
seteuid(1002);
system("/bin/sh");
return 0;
}
dont les droits sont:
-rws--x--x 1002 1001
Lorsque je l'exécute en tant qu'utilisateur 1001, je devrais avoir un
shell en uid 1002, mais ce n'est pas le cas, pourquoi?
un ps auxf me montre bien que le programme tourne bien en 1002 mais
le shell est en 1001 (?)
Une idée sur la raison?
Bonjour,
j'ai un programme tout simple:
#include<stdio.h>
#include<stdlib.h>
int main(){
seteuid(1002);
system("/bin/sh");
return 0;
}
dont les droits sont:
-rws--x--x 1002 1001
Lorsque je l'exécute en tant qu'utilisateur 1001, je devrais avoir un
shell en uid 1002, mais ce n'est pas le cas, pourquoi?
un ps auxf me montre bien que le programme tourne bien en 1002 mais
le shell est en 1001 (?)
Une idée sur la raison?
j'ai un programme tout simple:
#include<stdio.h>
#include<stdlib.h>
int main(){
seteuid(1002);
system("/bin/sh");
return 0;
}
Il manque l'include unistd.
Il manque un void à main.
Il manque le test des codes de retour des fonctions.
Lorsque je l'exécute en tant qu'utilisateur 1001, je devrais avoir un
shell en uid 1002, mais ce n'est pas le cas, pourquoi?
Parce qu'il faut utiliser setuid au lieu de seteuid.
j'ai un programme tout simple:
#include<stdio.h>
#include<stdlib.h>
int main(){
seteuid(1002);
system("/bin/sh");
return 0;
}
Il manque l'include unistd.
Il manque un void à main.
Il manque le test des codes de retour des fonctions.
Lorsque je l'exécute en tant qu'utilisateur 1001, je devrais avoir un
shell en uid 1002, mais ce n'est pas le cas, pourquoi?
Parce qu'il faut utiliser setuid au lieu de seteuid.
j'ai un programme tout simple:
#include<stdio.h>
#include<stdlib.h>
int main(){
seteuid(1002);
system("/bin/sh");
return 0;
}
Il manque l'include unistd.
Il manque un void à main.
Il manque le test des codes de retour des fonctions.
Lorsque je l'exécute en tant qu'utilisateur 1001, je devrais avoir un
shell en uid 1002, mais ce n'est pas le cas, pourquoi?
Parce qu'il faut utiliser setuid au lieu de seteuid.
Le 19-03-2012, Éric Lévénez a écrit :j'ai un programme tout simple:
#include<stdio.h>
#include<stdlib.h>
int main(){
seteuid(1002);
system("/bin/sh");
return 0;
}
Il manque l'include unistd.
Il manque un void à main.
Il manque le test des codes de retour des fonctions.
mon code est un peu plus long, j'ai voulu réduire. Le fait est que
j'observe bien ce comportement avec celui-ci.Lorsque je l'exécute en tant qu'utilisateur 1001, je devrais avoir un
shell en uid 1002, mais ce n'est pas le cas, pourquoi?
Parce qu'il faut utiliser setuid au lieu de seteuid.
Been there, done that. Même punition, je reste avec un shell id 1001:
:/source# cat prog.c
#include <stdio.h>
#include <stdlib.h>
int main(){
setuid(1002);
system("/bin/sh");
return 0;
}
Le 19-03-2012, Éric Lévénez <usenet@levenez.com> a écrit :
j'ai un programme tout simple:
#include<stdio.h>
#include<stdlib.h>
int main(){
seteuid(1002);
system("/bin/sh");
return 0;
}
Il manque l'include unistd.
Il manque un void à main.
Il manque le test des codes de retour des fonctions.
mon code est un peu plus long, j'ai voulu réduire. Le fait est que
j'observe bien ce comportement avec celui-ci.
Lorsque je l'exécute en tant qu'utilisateur 1001, je devrais avoir un
shell en uid 1002, mais ce n'est pas le cas, pourquoi?
Parce qu'il faut utiliser setuid au lieu de seteuid.
Been there, done that. Même punition, je reste avec un shell id 1001:
root@slack:/source# cat prog.c
#include <stdio.h>
#include <stdlib.h>
int main(){
setuid(1002);
system("/bin/sh");
return 0;
}
Le 19-03-2012, Éric Lévénez a écrit :j'ai un programme tout simple:
#include<stdio.h>
#include<stdlib.h>
int main(){
seteuid(1002);
system("/bin/sh");
return 0;
}
Il manque l'include unistd.
Il manque un void à main.
Il manque le test des codes de retour des fonctions.
mon code est un peu plus long, j'ai voulu réduire. Le fait est que
j'observe bien ce comportement avec celui-ci.Lorsque je l'exécute en tant qu'utilisateur 1001, je devrais avoir un
shell en uid 1002, mais ce n'est pas le cas, pourquoi?
Parce qu'il faut utiliser setuid au lieu de seteuid.
Been there, done that. Même punition, je reste avec un shell id 1001:
:/source# cat prog.c
#include <stdio.h>
#include <stdlib.h>
int main(){
setuid(1002);
system("/bin/sh");
return 0;
}
Ben deja, setuid, c'est un appel systeme. Tu ne verifies MEME PAS s'il
fonctionne. Faudrait peut-etre commencer par ca: t'assurer que ton
setuid() renvoie bien 0, et sinon faire un perror().
Si ca se trouve, tu as un systeme d'ACL en place qui fait que tu ne
peux pas faire ce que tu veux quand tu veux au niveau uid...
Ben deja, setuid, c'est un appel systeme. Tu ne verifies MEME PAS s'il
fonctionne. Faudrait peut-etre commencer par ca: t'assurer que ton
setuid() renvoie bien 0, et sinon faire un perror().
Si ca se trouve, tu as un systeme d'ACL en place qui fait que tu ne
peux pas faire ce que tu veux quand tu veux au niveau uid...
Ben deja, setuid, c'est un appel systeme. Tu ne verifies MEME PAS s'il
fonctionne. Faudrait peut-etre commencer par ca: t'assurer que ton
setuid() renvoie bien 0, et sinon faire un perror().
Si ca se trouve, tu as un systeme d'ACL en place qui fait que tu ne
peux pas faire ce que tu veux quand tu veux au niveau uid...
Le 19-03-2012, Marc Espie a écrit :Ben deja, setuid, c'est un appel systeme. Tu ne verifies MEME PAS s'il
fonctionne. Faudrait peut-etre commencer par ca: t'assurer que ton
setuid() renvoie bien 0, et sinon faire un perror().
Ok, je fais un programme plus long, cf plus bas.
Machine et système utilisé:
:/tmp# uname -a
Linux slack 2.6.37.6-smp #2 SMP Sat Apr 9 23:39:07 CDT 2011 i686 QEMU
Virtual CPU version 0.12.5 GenuineIntel GNU/Linux
:/tmp# cat /etc/slackware-version
Slackware 13.37.0
:/tmp#
slackware 13.37, installée dans un KVM, tout par défaut.Si ca se trouve, tu as un systeme d'ACL en place qui fait que tu ne
peux pas faire ce que tu veux quand tu veux au niveau uid...
:/tmp# cat prog.c
#include <stdio.h>
#include <stdlib.h>
int main(){
int r;
fopen("/tmp/out","w+");
r = seteuid(1002);
printf("valeur retour %dn", r);
system("/bin/sh");
return 0;
}
:/tmp# gcc -o prog prog.c ; chown 1002.1001 prog ; chmod u+s prog
:/tmp# su user1
:/tmp$ ./prog
valeur retour 0
sh-4.1$ ls -l
total 12
-rw-r--r-- 1 user2 user1 0 Mar 19 12:36 out
-rwsr-xr-x 1 user2 user1 5968 Mar 19 12:36 prog
-rw-r--r-- 1 user1 user1 192 Mar 19 12:29 prog.c
sh-4.1$ id
uid01(user1) gid01(user1) groups01(user1)
sh-4.1$
Je vérifie que la valeur retour est bonne, que le programme tourne
bien en 1002 (bit s) mais le shell s'obstine à être en 1001. Je
mattends à observer:
uid01(user1) euid02(user2) gid01(user1) groups01(user1)
(et j'ai testé avec setuid au lieu de seteuid, mais le résultat est
le même)
Le 19-03-2012, Marc Espie <espie@lain.home> a écrit :
Ben deja, setuid, c'est un appel systeme. Tu ne verifies MEME PAS s'il
fonctionne. Faudrait peut-etre commencer par ca: t'assurer que ton
setuid() renvoie bien 0, et sinon faire un perror().
Ok, je fais un programme plus long, cf plus bas.
Machine et système utilisé:
root@slack:/tmp# uname -a
Linux slack 2.6.37.6-smp #2 SMP Sat Apr 9 23:39:07 CDT 2011 i686 QEMU
Virtual CPU version 0.12.5 GenuineIntel GNU/Linux
root@slack:/tmp# cat /etc/slackware-version
Slackware 13.37.0
root@slack:/tmp#
slackware 13.37, installée dans un KVM, tout par défaut.
Si ca se trouve, tu as un systeme d'ACL en place qui fait que tu ne
peux pas faire ce que tu veux quand tu veux au niveau uid...
root@slack:/tmp# cat prog.c
#include <stdio.h>
#include <stdlib.h>
int main(){
int r;
fopen("/tmp/out","w+");
r = seteuid(1002);
printf("valeur retour %dn", r);
system("/bin/sh");
return 0;
}
root@slack:/tmp# gcc -o prog prog.c ; chown 1002.1001 prog ; chmod u+s prog
root@slack:/tmp# su user1
user1@slack:/tmp$ ./prog
valeur retour 0
sh-4.1$ ls -l
total 12
-rw-r--r-- 1 user2 user1 0 Mar 19 12:36 out
-rwsr-xr-x 1 user2 user1 5968 Mar 19 12:36 prog
-rw-r--r-- 1 user1 user1 192 Mar 19 12:29 prog.c
sh-4.1$ id
uid01(user1) gid01(user1) groups01(user1)
sh-4.1$
Je vérifie que la valeur retour est bonne, que le programme tourne
bien en 1002 (bit s) mais le shell s'obstine à être en 1001. Je
mattends à observer:
uid01(user1) euid02(user2) gid01(user1) groups01(user1)
(et j'ai testé avec setuid au lieu de seteuid, mais le résultat est
le même)
Le 19-03-2012, Marc Espie a écrit :Ben deja, setuid, c'est un appel systeme. Tu ne verifies MEME PAS s'il
fonctionne. Faudrait peut-etre commencer par ca: t'assurer que ton
setuid() renvoie bien 0, et sinon faire un perror().
Ok, je fais un programme plus long, cf plus bas.
Machine et système utilisé:
:/tmp# uname -a
Linux slack 2.6.37.6-smp #2 SMP Sat Apr 9 23:39:07 CDT 2011 i686 QEMU
Virtual CPU version 0.12.5 GenuineIntel GNU/Linux
:/tmp# cat /etc/slackware-version
Slackware 13.37.0
:/tmp#
slackware 13.37, installée dans un KVM, tout par défaut.Si ca se trouve, tu as un systeme d'ACL en place qui fait que tu ne
peux pas faire ce que tu veux quand tu veux au niveau uid...
:/tmp# cat prog.c
#include <stdio.h>
#include <stdlib.h>
int main(){
int r;
fopen("/tmp/out","w+");
r = seteuid(1002);
printf("valeur retour %dn", r);
system("/bin/sh");
return 0;
}
:/tmp# gcc -o prog prog.c ; chown 1002.1001 prog ; chmod u+s prog
:/tmp# su user1
:/tmp$ ./prog
valeur retour 0
sh-4.1$ ls -l
total 12
-rw-r--r-- 1 user2 user1 0 Mar 19 12:36 out
-rwsr-xr-x 1 user2 user1 5968 Mar 19 12:36 prog
-rw-r--r-- 1 user1 user1 192 Mar 19 12:29 prog.c
sh-4.1$ id
uid01(user1) gid01(user1) groups01(user1)
sh-4.1$
Je vérifie que la valeur retour est bonne, que le programme tourne
bien en 1002 (bit s) mais le shell s'obstine à être en 1001. Je
mattends à observer:
uid01(user1) euid02(user2) gid01(user1) groups01(user1)
(et j'ai testé avec setuid au lieu de seteuid, mais le résultat est
le même)
J'arrive a reproduire ton probleme sur un Ubuntu, a condition de remplacer :
system("/bin/sh");
par :
system("/bin/bash");
S'il y a toujours un /bin/ash sur ta Slack, tu devrais tester avec, pour voir
ce que ca donne.
J'arrive a reproduire ton probleme sur un Ubuntu, a condition de remplacer :
system("/bin/sh");
par :
system("/bin/bash");
S'il y a toujours un /bin/ash sur ta Slack, tu devrais tester avec, pour voir
ce que ca donne.
J'arrive a reproduire ton probleme sur un Ubuntu, a condition de remplacer :
system("/bin/sh");
par :
system("/bin/bash");
S'il y a toujours un /bin/ash sur ta Slack, tu devrais tester avec, pour voir
ce que ca donne.
Le 19-03-2012, Bruno Ducrot a écrit :J'arrive a reproduire ton probleme sur un Ubuntu, a condition de remplacer :
system("/bin/sh");
par :
system("/bin/bash");
S'il y a toujours un /bin/ash sur ta Slack, tu devrais tester avec, pour voir
ce que ca donne.
Identique. Par contre, le même programme sur une debian 6.0.4 fonctionne (?!).
cat bash-4.1/debian/patches/privmode.dpatch
Le 19-03-2012, Bruno Ducrot <ducrot@echo.fr> a écrit :
J'arrive a reproduire ton probleme sur un Ubuntu, a condition de remplacer :
system("/bin/sh");
par :
system("/bin/bash");
S'il y a toujours un /bin/ash sur ta Slack, tu devrais tester avec, pour voir
ce que ca donne.
Identique. Par contre, le même programme sur une debian 6.0.4 fonctionne (?!).
cat bash-4.1/debian/patches/privmode.dpatch
Le 19-03-2012, Bruno Ducrot a écrit :J'arrive a reproduire ton probleme sur un Ubuntu, a condition de remplacer :
system("/bin/sh");
par :
system("/bin/bash");
S'il y a toujours un /bin/ash sur ta Slack, tu devrais tester avec, pour voir
ce que ca donne.
Identique. Par contre, le même programme sur une debian 6.0.4 fonctionne (?!).
cat bash-4.1/debian/patches/privmode.dpatch