SMOLNET PORTAL home about changes
i* Initial import of 'sup' into mercurial - sup - small tool for privilege escalation	Err	bitreich.org	70
hgit clone git://bitreich.org/sup git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sup	URL:git://bitreich.org/sup git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sup	bitreich.org	70
1Log	/scm/sup/log.gph	bitreich.org	70
1Files	/scm/sup/files.gph	bitreich.org	70
1Refs	/scm/sup/refs.gph	bitreich.org	70
1Tags	/scm/sup/tag	bitreich.org	70
1README	/scm/sup/file/README.gph	bitreich.org	70
1LICENSE	/scm/sup/file/LICENSE.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit 989bc1c744d8fe03a58692410a6d68ad00a872c8	/scm/sup/commit/989bc1c744d8fe03a58692410a6d68ad00a872c8.gph	bitreich.org	70
hAuthor: pancake@dazo <unknown>	URL:mailto:unknown	bitreich.org	70
iDate:   Mon, 14 Dec 2009 01:02:07 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
i* Initial import of 'sup' into mercurial	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  A Makefile                            |      31 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A TODO                                |       1 +	Err	bitreich.org	70
i  A config.def.h                        |      18 ++++++++++++++++++	Err	bitreich.org	70
i  A sup.1                               |      23 +++++++++++++++++++++++	Err	bitreich.org	70
i  A sup.c                               |      72 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i	Err	bitreich.org	70
i5 files changed, 145 insertions(+), 0 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/Makefile b/Makefile	/scm/sup/file/Makefile.gph	bitreich.org	70
i@@ -0,0 +1,31 @@	Err	bitreich.org	70
i+CC?=gcc	Err	bitreich.org	70
i+DESTDIR?=	Err	bitreich.org	70
i+PREFIX?=/usr	Err	bitreich.org	70
i+VERSION=0.1	Err	bitreich.org	70
i+USER=root	Err	bitreich.org	70
i+GROUP=root	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+all: config.h sup	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+config.h:	Err	bitreich.org	70
i+        cp config.def.h config.h	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+sup.o: config.h sup.c	Err	bitreich.org	70
i+        ${CC} -c sup.c	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+sup: sup.o	Err	bitreich.org	70
i+        ${CC} sup.o -o sup	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+clean:	Err	bitreich.org	70
i+        rm -f sup.o sup	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+mrproper: clean	Err	bitreich.org	70
i+        rm -f config.h	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+install:	Err	bitreich.org	70
i+        mkdir -p ${DESTDIR}${PREFIX}/bin	Err	bitreich.org	70
i+        cp sup ${DESTDIR}${PREFIX}/bin	Err	bitreich.org	70
i+        chown ${USER}:${GROUP} ${DESTDIR}/${PREFIX}/bin/sup	Err	bitreich.org	70
i+        chmod 4111 ${DESTDIR}${PREFIX}/bin/sup	Err	bitreich.org	70
i+        sed s,VERSION,${VERSION}, sup.1 \	Err	bitreich.org	70
i+          > ${DESTDIR}${PREFIX}/share/man/man1/sup.1	Err	bitreich.org	70
1diff --git a/TODO b/TODO	/scm/sup/file/TODO.gph	bitreich.org	70
i@@ -0,0 +1 @@	Err	bitreich.org	70
i+* Enforce with checksums (sha1?)	Err	bitreich.org	70
1diff --git a/config.def.h b/config.def.h	/scm/sup/file/config.def.h.gph	bitreich.org	70
i@@ -0,0 +1,18 @@	Err	bitreich.org	70
i+#define USER 1000	Err	bitreich.org	70
i+#define GROUP -1	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define SETUID 0	Err	bitreich.org	70
i+#define SETGID 0	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define CHROOT "/"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define ENFORCE 1	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static struct rule_t rules[] = {	Err	bitreich.org	70
i+        { USER, GROUP, "whoami", "/usr/bin/whoami" },	Err	bitreich.org	70
i+        { USER, GROUP, "ifconfig", "/sbin/ifconfig" },	Err	bitreich.org	70
i+        { USER, GROUP, "ls", "/bin/ls" },	Err	bitreich.org	70
i+        { USER, GROUP, "wifi", "/root/wifi.sh" },	Err	bitreich.org	70
i+        { USER, GROUP, "", ""}, // allow to run any program	Err	bitreich.org	70
i+        { 0 },	Err	bitreich.org	70
i+};	Err	bitreich.org	70
1diff --git a/sup.1 b/sup.1	/scm/sup/file/sup.1.gph	bitreich.org	70
i@@ -0,0 +1,23 @@	Err	bitreich.org	70
i+.TH SUP 1 sup\-VERSION	Err	bitreich.org	70
i+.SH NAME	Err	bitreich.org	70
i+sup - scale user priviledges	Err	bitreich.org	70
i+.SH SYNOPSIS	Err	bitreich.org	70
i+.B sup	Err	bitreich.org	70
i+.RB [ \-hlv ]	Err	bitreich.org	70
i+.SH DESCRIPTION	Err	bitreich.org	70
i+sup is a minimal priviledge scalation utility that allow normal	Err	bitreich.org	70
i+users to run other programs as different user and group.	Err	bitreich.org	70
i+.P	Err	bitreich.org	70
i+The configuration is done in config.h at compile time.	Err	bitreich.org	70
i+.SH OPTIONS	Err	bitreich.org	70
i+.TP	Err	bitreich.org	70
i+.B \-h	Err	bitreich.org	70
i+print help message	Err	bitreich.org	70
i+.TP	Err	bitreich.org	70
i+.B \-l	Err	bitreich.org	70
i+list command whitelist	Err	bitreich.org	70
i+.TP	Err	bitreich.org	70
i+.B \-v	Err	bitreich.org	70
i+prints version information	Err	bitreich.org	70
i+.SH AUTHOR	Err	bitreich.org	70
i+pancake <nopcode.org>	Err	bitreich.org	70
1diff --git a/sup.c b/sup.c	/scm/sup/file/sup.c.gph	bitreich.org	70
i@@ -0,0 +1,72 @@	Err	bitreich.org	70
i+/* pancake <nopcode.org> -- Copyleft 2009 */	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#include <stdio.h>	Err	bitreich.org	70
i+#include <errno.h>	Err	bitreich.org	70
i+#include <string.h>	Err	bitreich.org	70
i+#include <sys/stat.h>	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define HELP "sup [-hlv] [cmd ..]"	Err	bitreich.org	70
i+#define VERSION "sup 0.1 pancake <nopcode.org> copyleft 2009"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+struct rule_t {	Err	bitreich.org	70
i+        int uid;	Err	bitreich.org	70
i+        int gid;	Err	bitreich.org	70
i+        const char *cmd;	Err	bitreich.org	70
i+        const char *path;	Err	bitreich.org	70
i+};	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#include "config.h"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static int die(int ret, const char *str) {	Err	bitreich.org	70
i+        fprintf (stderr, "%s\n", str);	Err	bitreich.org	70
i+        return ret;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+int main(int argc, char **argv) {	Err	bitreich.org	70
i+        char *cmd;	Err	bitreich.org	70
i+        int i, uid, gid, ret;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (argc < 2 || !strcmp (argv[1], "-h"))	Err	bitreich.org	70
i+                return die (1, HELP);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (!strcmp (argv[1], "-v"))	Err	bitreich.org	70
i+                return die (1, VERSION);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (!strcmp (argv[1], "-l")) {	Err	bitreich.org	70
i+                for (i = 0; rules[i].cmd != NULL; i++)	Err	bitreich.org	70
i+                        printf ("%d %d %10s %s\n", rules[i].uid, rules[i].gid,	Err	bitreich.org	70
i+                                rules[i].cmd, rules[i].path);	Err	bitreich.org	70
i+                return 0;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        uid = getuid ();	Err	bitreich.org	70
i+        gid = getgid ();	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (i = 0; rules[i].cmd != NULL; i++) {	Err	bitreich.org	70
i+                if (!rules[i].cmd[0] || !strcmp (argv[1], rules[i].cmd)) {	Err	bitreich.org	70
i+#if ENFORCE        	Err	bitreich.org	70
i+                        struct stat st;	Err	bitreich.org	70
i+                        lstat (rules[i].path, &st);	Err	bitreich.org	70
i+                        if (st.st_mode & 0222)	Err	bitreich.org	70
i+                                return die (1, "Cannot run writable binaries.");	Err	bitreich.org	70
i+#endif	Err	bitreich.org	70
i+                        if (uid != SETUID && rules[i].uid != -1 && rules[i].uid != uid)	Err	bitreich.org	70
i+                                return die (1, "User does not match");	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                        if (gid != SETGID && rules[i].gid != -1 && rules[i].gid != gid)	Err	bitreich.org	70
i+                                return die (1, "Group id does not match");	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                        if (setuid (SETUID) == -1 || setgid (SETGID) == -1 ||	Err	bitreich.org	70
i+                            seteuid (SETUID) == -1 || setegid (SETGID) == -1)	Err	bitreich.org	70
i+                                return die (1, strerror (errno));	Err	bitreich.org	70
i+#ifdef CHROOT	Err	bitreich.org	70
i+                        if (chroot (CHROOT) == -1)	Err	bitreich.org	70
i+                                return die (1, strerror (errno));	Err	bitreich.org	70
i+#endif	Err	bitreich.org	70
i+                        ret = execv (rules[i].path? rules[i].path:argv[1], argv+1);	Err	bitreich.org	70
i+                        return die (ret, strerror (errno));	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        return die (1, "Sorry");	Err	bitreich.org	70
i+}	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/sup/commit/989bc1c744d8fe03a5...
Content-Typetext/plain; charset=utf-8