Whitepaper verstehen ^^''

Hi,

mir ist letztens dieses whitepaper unter die finger gekommen, http://www.harmonysecurity.com/blog/2008/10/new-paper-reflective-dll-injection.html

nun ist hier aber ein verständnissproblem wie der code überhaupt eingeschleußt wird, also von source her befindet sich der loader ja in der DLL
Code:
DLLEXPORT DWORD WINAPI ReflectiveLoader( VOID )
{
nun aber wie wird denn wenn der eigentliche loader in der dll selbst ist die dll in das programm überhaupt geladen? es geht ja darum das es sehr schwer erkennbar sein soll, aber was ist dann mit der methode es überhaupt reinzurkiegen ? ist die dann leicht erkennbar?
 
Original von Schurke
nun aber wie wird denn wenn der eigentliche loader in der dll selbst ist die dll in das programm überhaupt geladen? es geht ja darum das es sehr schwer erkennbar sein soll, aber was ist dann mit der methode es überhaupt reinzurkiegen ? ist die dann leicht erkennbar?

So wie ich das verstehe, geht es darum, dass es später schwer erkennbar sein soll, dass eine DLL eingschleust wurde. Das Einschleusen selbst hängt von dem Zielprozess ab und muss dessen Schwachstellen dafür nutzen, also kann man hier nicht generell sagen, wie leicht das Einschleusen selbst zu erkennen ist.
 
Wie schleußt man eigentlich diesen typ ein? Alle methoden die mir bis jetzt vor die nase gekommen sind haben darauf aufgebaut das DllMain aufgerufen wurde, hier ist es ja ne extra funktion. Geht sowas ohne den zielprozess in der exe zu patchen? ( vll während er läuft oO ? )

edit-- ruft man hier vll mit variable einfach die funktion aus dll main 1x auf? Aber dann wärs ja nicht Exported oder?
 
Danke werd mir mal durchlesen was man darunter versteht ^.^

--edit: ist der stack overflow eigentlich eine genutzte methode in heutigen programmen? Wie findet ihr herraus wie groß ein feld allokiert wird?

Ist die STL stack overflow sicher?

kurios...

wenn ich den quellcode so ändere das es ein run in einer shared section gibt..

Code:
#pragma data_seg("SHARED")
	BOOL Run = 0;
#pragma data_seg()         
#pragma comment(linker, "/section:SHARED,RWS")
( ReflectiveLoader.c )

geht alles soweit, wenn ich jetzt aber in DLL Main schreibe:

Code:
	if ( Run == FALSE ){
		ReflectiveLoader();
		Run = TRUE;
	}
( ReflectiveLoader.c )

dann geht nichts mehr. error, "'BOOL': Ungültige Verwendung dieses Typs als Ausdruck"

ich weiß diese art der verwenden ist ziemlich dämlich, aber ist ja nur zu testzwecken oO
 
ist der stack overflow eigentlich eine genutzte methode in heutigen programmen?
Ein Stack Overflow sollte in keinem Programm auftreten können. Wenn er doch auftreten kann, dann ist das ein Programmierfehler, also verstehe ich deine Frage nicht so ganz...
Stack Overflows nutzen sollte eigentlich kein Programmierer, eher Stack Overflows verhindern.

Wie findet ihr herraus wie groß ein feld allokiert wird?
Das gibt man in der Regel der beim allokieren an. Unter C wäre der Befehl zum Beispiel malloc(32*sizeof(int)). So würde man dynamisch einen Buffer anlegen, in dem 32 Integers gespeichert werden können.
Man findet also normalerweise nicht irgendwie heraus, wie groß ein Buffer ist, man muss es sich merken.

Ist die STL stack overflow sicher?
Das kann dir keiner zu 100% garantieren, aber du kannst davon ausgehen.
Viele Menschen überprüfen ihre Programme auf solche Fehler und noch viel mehr verwenden die STL, also sollte ein Fehler dort schnell auffallen.

Zu deinem Code: BOOL wird AFAIK in der windows.h definiert. Hast du die vor der Verwendung von BOOL eingebunden? Ohne deinen kompletten Code zu sehen kann ich dir da kaum weiterhelfen.
 
Das gibt man in der Regel der beim allokieren an. Unter C wäre der Befehl zum Beispiel malloc(32*sizeof(int)). So würde man dynamisch einen Buffer anlegen, in dem 32 Integers gespeichert werden können.
Man findet also normalerweise nicht irgendwie heraus, wie groß ein Buffer ist, man muss es sich merken.

ich meinte das jetzt eher aus der sicht dessen der diese schwachstellen sucht, aber wie macht man das bei statischen variabeln? Das man bei malloc nach der verlinkung auf diese Funktion suchen könnte wäre für mich ja logisch, aber wie man das sonst bei normalen variabeln machen soll die eben nicht im heap sind ist mir schleierhaft.

( langsam wird offtopic.. aber das ist so interessant <3, kennt ihr was zu lesen dazu :D ? )
 
Such im Netz mal nach dem "The Shellcoders Handbook".
Habs selbst noch nicht gelesen wurde mir aber von vielen Leuten empfohlen.

Als weiteres Stichwort kannst du auch mal nach sg Fuzzern suchen.

Bei Variablen die nicht auf dem Heap liegen macht man das folgendermassen:
man schaut sich an wo auf dem Stack sie liegen, und hofft das man mittels einer Methode auf diese Variable schreibend zugreifen darf und deine Eingabe nicht ueberprueft wird.
Anschliessend schiebst du soviel Muell in die Variable bis du zur gespeicherten Ruecksprungadresse gelangst.
Diese ueberschreibst du dann mit bestimmten werden, zB der adresse wo dein Programm liegt.
Wenn das Programm sich dann beenden will, springt es nicht an den Punkt von wo aus es aufgerufen wurde sondern fuehrt deinen Code das.
BTW:Das was ich gerade genannt habe ist der Stack Overflow.

mfg
sw33t
 
soweit hatte ich es auch verstanden, was bei mir verwirrung auslöst war die tastsache, wie finde ich die exakte anzahl an zeichen herraus die ich reinwerfen muss bevor ich zur speicherzelle der rücksprungadresse gelange, sprich: wie finde ich die puffergröße herraus?
 
Zurück
Oben