403Webshell
Server IP : 81.2.241.106  /  Your IP : 216.73.216.165
Web Server : Apache/2.4.67 (Debian)
System : Linux tranq-f.bakta.org 5.10.0-45-amd64 #1 SMP Debian 5.10.259-1 (2026-07-02) x86_64
User : lisky ( 1002)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /usr/src/openssh-chroot/5.1p1/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/src/openssh-chroot/5.1p1/test.diff
--- sftp-server-5.5-orig.c	2010-01-13 12:44:06.000000000 +0100
+++ sftp-server.c	2010-08-20 17:14:33.000000000 +0200
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp-server.c,v 1.91 2010/01/13 01:40:16 djm Exp $ */
+/* $OpenBSD: sftp-server.c,v 1.84 2008/06/26 06:10:09 djm Exp $ */
 /*
  * Copyright (c) 2000-2004 Markus Friedl.  All rights reserved.
  *
@@ -51,6 +51,8 @@
 #include "sftp.h"
 #include "sftp-common.h"
 
+#define CHROOT
+
 /* helper */
 #define get_int64()			buffer_get_int64(&iqueue);
 #define get_int()			buffer_get_int(&iqueue);
@@ -70,9 +72,6 @@
 /* Version of client */
 int version;
 
-/* Disable writes */
-int readonly;
-
 /* portable attributes, etc. */
 
 typedef struct Stat Stat;
@@ -556,21 +555,16 @@
 	mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? a->perm : 0666;
 	logit("open \"%s\" flags %s mode 0%o",
 	    name, string_from_portable(pflags), mode);
-	if (readonly &&
-	    ((flags & O_ACCMODE) == O_WRONLY || (flags & O_ACCMODE) == O_RDWR))
-		status = SSH2_FX_PERMISSION_DENIED;
-	else {
-		fd = open(name, flags, mode);
-		if (fd < 0) {
-			status = errno_to_portable(errno);
+	fd = open(name, flags, mode);
+	if (fd < 0) {
+		status = errno_to_portable(errno);
+	} else {
+		handle = handle_new(HANDLE_FILE, name, fd, NULL);
+		if (handle < 0) {
+			close(fd);
 		} else {
-			handle = handle_new(HANDLE_FILE, name, fd, NULL);
-			if (handle < 0) {
-				close(fd);
-			} else {
-				send_handle(id, handle);
-				status = SSH2_FX_OK;
-			}
+			send_handle(id, handle);
+			status = SSH2_FX_OK;
 		}
 	}
 	if (status != SSH2_FX_OK)
@@ -640,7 +634,7 @@
 	u_int32_t id;
 	u_int64_t off;
 	u_int len;
-	int handle, fd, ret, status;
+	int handle, fd, ret, status = SSH2_FX_FAILURE;
 	char *data;
 
 	id = get_int();
@@ -651,12 +645,7 @@
 	debug("request %u: write \"%s\" (handle %d) off %llu len %d",
 	    id, handle_to_name(handle), handle, (unsigned long long)off, len);
 	fd = handle_to_fd(handle);
-	
-	if (fd < 0)
-		status = SSH2_FX_FAILURE;
-	else if (readonly)
-		status = SSH2_FX_PERMISSION_DENIED;
-	else {
+	if (fd >= 0) {
 		if (lseek(fd, off, SEEK_SET) < 0) {
 			status = errno_to_portable(errno);
 			error("process_write: seek failed");
@@ -671,7 +660,6 @@
 				handle_update_write(handle, ret);
 			} else {
 				debug2("nothing at all written");
-				status = SSH2_FX_FAILURE;
 			}
 		}
 	}
@@ -768,10 +756,6 @@
 	name = get_string(NULL);
 	a = get_attrib();
 	debug("request %u: setstat name \"%s\"", id, name);
-	if (readonly) {
-		status = SSH2_FX_PERMISSION_DENIED;
-		a->flags = 0;
-	}
 	if (a->flags & SSH2_FILEXFER_ATTR_SIZE) {
 		logit("set \"%s\" size %llu",
 		    name, (unsigned long long)a->size);
@@ -820,11 +804,9 @@
 	a = get_attrib();
 	debug("request %u: fsetstat handle %d", id, handle);
 	fd = handle_to_fd(handle);
-	if (fd < 0)
+	if (fd < 0) {
 		status = SSH2_FX_FAILURE;
-	else if (readonly)
-		status = SSH2_FX_PERMISSION_DENIED;
-	else {
+	} else {
 		char *name = handle_to_name(handle);
 
 		if (a->flags & SSH2_FILEXFER_ATTR_SIZE) {
@@ -940,7 +922,7 @@
 				continue;
 			stat_to_attrib(&st, &(stats[count].attrib));
 			stats[count].name = xstrdup(dp->d_name);
-			stats[count].long_name = ls_file(dp->d_name, &st, 0, 0);
+			stats[count].long_name = ls_file(dp->d_name, &st, 0);
 			count++;
 			/* send up to 100 entries in one message */
 			/* XXX check packet size instead */
@@ -972,12 +954,8 @@
 	name = get_string(NULL);
 	debug3("request %u: remove", id);
 	logit("remove name \"%s\"", name);
-	if (readonly)
-		status = SSH2_FX_PERMISSION_DENIED;
-	else {
-		ret = unlink(name);
-		status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
-	}
+	ret = unlink(name);
+	status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
 	send_status(id, status);
 	xfree(name);
 }
@@ -997,12 +975,8 @@
 	    a->perm & 07777 : 0777;
 	debug3("request %u: mkdir", id);
 	logit("mkdir name \"%s\" mode 0%o", name, mode);
-	if (readonly)
-		status = SSH2_FX_PERMISSION_DENIED;
-	else {
-		ret = mkdir(name, mode);
-		status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
-	}
+	ret = mkdir(name, mode);
+	status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
 	send_status(id, status);
 	xfree(name);
 }
@@ -1018,12 +992,8 @@
 	name = get_string(NULL);
 	debug3("request %u: rmdir", id);
 	logit("rmdir name \"%s\"", name);
-	if (readonly)
-		status = SSH2_FX_PERMISSION_DENIED;
-	else {
-		ret = rmdir(name);
-		status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
-	}
+	ret = rmdir(name);
+	status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
 	send_status(id, status);
 	xfree(name);
 }
@@ -1068,14 +1038,12 @@
 	debug3("request %u: rename", id);
 	logit("rename old \"%s\" new \"%s\"", oldpath, newpath);
 	status = SSH2_FX_FAILURE;
-	if (readonly)
-		status = SSH2_FX_PERMISSION_DENIED;
-	else if (lstat(oldpath, &sb) == -1)
+	if (lstat(oldpath, &sb) == -1)
 		status = errno_to_portable(errno);
 	else if (S_ISREG(sb.st_mode)) {
 		/* Race-free rename of regular files */
 		if (link(oldpath, newpath) == -1) {
-			if (errno == EOPNOTSUPP || errno == ENOSYS
+			if (errno == EOPNOTSUPP
 #ifdef EXDEV
 			    || errno == EXDEV
 #endif
@@ -1154,12 +1122,8 @@
 	debug3("request %u: symlink", id);
 	logit("symlink old \"%s\" new \"%s\"", oldpath, newpath);
 	/* this will fail if 'newpath' exists */
-	if (readonly)
-		status = SSH2_FX_PERMISSION_DENIED;
-	else {
-		ret = symlink(oldpath, newpath);
-		status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
-	}
+	ret = symlink(oldpath, newpath);
+	status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
 	send_status(id, status);
 	xfree(oldpath);
 	xfree(newpath);
@@ -1169,19 +1133,15 @@
 process_extended_posix_rename(u_int32_t id)
 {
 	char *oldpath, *newpath;
-	int ret, status;
 
 	oldpath = get_string(NULL);
 	newpath = get_string(NULL);
 	debug3("request %u: posix-rename", id);
 	logit("posix-rename old \"%s\" new \"%s\"", oldpath, newpath);
-	if (readonly)
-		status = SSH2_FX_PERMISSION_DENIED;
-	else {
-		ret = rename(oldpath, newpath);
-		status = (ret == -1) ? errno_to_portable(errno) : SSH2_FX_OK;
-	}
-	send_status(id, status);
+	if (rename(oldpath, newpath) == -1)
+		send_status(id, errno_to_portable(errno));
+	else
+		send_status(id, SSH2_FX_OK);
 	xfree(oldpath);
 	xfree(newpath);
 }
@@ -1364,11 +1324,39 @@
 	extern char *__progname;
 
 	fprintf(stderr,
-	    "usage: %s [-ehR] [-f log_facility] [-l log_level] [-u umask]\n",
-	    __progname);
+	    "usage: %s [-he] [-l log_level] [-f log_facility]\n", __progname);
 	exit(1);
 }
 
+#ifdef CHROOT
+void
+chroot_init(void)
+{
+       char *user_dir, *new_root;
+
+       user_dir = getenv("HOME");
+       if (!user_dir)
+               fatal("HOME isn't in environment");
+
+       new_root = user_dir + 1;
+
+       while ((new_root = strchr(new_root, '.')) != NULL) {
+               new_root--;
+               if (strncmp(new_root, "/./", 3) == 0) {
+                       *new_root = '\0';
+                       new_root += 2;
+
+                       if (chroot(user_dir) != 0)
+                               fatal("Couldn't chroot to user directory %s: %s", user_dir, strerror(errno));
+
+                       setenv("HOME", new_root, 1);
+                       break;
+               }
+               new_root += 2;
+       }
+}
+#endif /* CHROOT */
+
 int
 sftp_server_main(int argc, char **argv, struct passwd *user_pw)
 {
@@ -1377,8 +1365,6 @@
 	ssize_t len, olen, set_size;
 	SyslogFacility log_facility = SYSLOG_FACILITY_AUTH;
 	char *cp, buf[4*4096];
-	const char *errmsg;
-	mode_t mask;
 
 	extern char *optarg;
 	extern char *__progname;
@@ -1386,11 +1372,8 @@
 	__progname = ssh_get_progname(argv[0]);
 	log_init(__progname, log_level, log_facility, log_stderr);
 
-	while (!skipargs && (ch = getopt(argc, argv, "f:l:u:cehR")) != -1) {
+	while (!skipargs && (ch = getopt(argc, argv, "C:f:l:che")) != -1) {
 		switch (ch) {
-		case 'R':
-			readonly = 1;
-			break;
 		case 'c':
 			/*
 			 * Ignore all arguments if we are invoked as a
@@ -1411,13 +1394,6 @@
 			if (log_facility == SYSLOG_FACILITY_NOT_SET)
 				error("Invalid log facility \"%s\"", optarg);
 			break;
-		case 'u':
-			mask = (mode_t)strtonum(optarg, 0, 0777, &errmsg);
-			if (errmsg != NULL)
-				fatal("Invalid umask \"%s\": %s",
-				    optarg, errmsg);
-			(void)umask(mask);
-			break;
 		case 'h':
 		default:
 			sftp_server_usage();
@@ -1442,8 +1418,15 @@
 	logit("session opened for local user %s from [%s]",
 	    pw->pw_name, client_addr);
 
-	in = STDIN_FILENO;
-	out = STDOUT_FILENO;
+#ifdef CHROOT
+	chroot_init();
+#endif
+	// Drop privileges - required as we are setuid root prog
+	if (setuid(getuid()) != 0)
+		fatal("Couldn't drop privileges: %s", strerror(errno));
+		
+	in = dup(STDIN_FILENO);
+	out = dup(STDOUT_FILENO);
 
 #ifdef HAVE_CYGWIN
 	setmode(in, O_BINARY);

Youez - 2016 - github.com/yon3zu
LinuXploit