Naszym zadaniem jest poznanie Connection Stringa tak aby wydobyć z niego hasło, gdyż mamy niecny plan napisania lepszej aplikacji i potrzebujemy zalogować się na ten zewnetrzny serwer SQL.
Jeżeli w aplikacji znajduje się tabela podlinkowana lub kwerenda przekazująca to problem jest banalny. W przypadku zaś gdy nie ma takich obiektów jest trochę trudniej, ale nie beznadzijnie ;)
Do tego zadania wykorzystamye pewną cechę środowiska Access, które nie są wykorzystywana w codziennej pracy, a mianowicie możliwość dodania referencji w projekcie VBA do pliku mdb/mde dokładnie tak samo jak do biblioteki dll.
Na obrazku widzimy dodany do referencji projektu plik z tajnymi danymi. Na pasku bocznym zaś projekt będzie wyglądał następująco:
Widzimy listę obiektów do których możemy przeszukać pod kątem występowania obiektów do wykorzystania. Przeszukiwanie najłatwiej zrealizować za pomocą Object Browser-a
Ikonka Object Browser-a
Wybieramy tam z listy rozwijanej plik który przeszukujemy:
Pewną niedogodnością jest to że musimy się domyśleć jak działa sprawdzana aplikacja, gdyż obiekt do którego się odwołujemy sam z siebie może nie mieć oczekiwanych danych. Przy odrobinie szczęścia można dojść do tego na drodze dedukcji :)
Teraz najważniejsze: W jaki sposób dobrać się do takich danych?
Trzeba poprostu odwołać się do obiektu dokładnie tak samo jak by był normalnym obiektem, funkcją lub procedurą. Przykładowy kod poniżej
Sub test_conn() Dim oConn As ADODB.Connection mod_conn.Connec Set oConn = mod_conn.fGetConn Debug.Print oConn.ConnectionString Debug.Print CurrentProject.Connection.ConnectionString mod_conn.CloceConn End Sub
przykładowy kod w module mod_conn wyglądał by np. tak:
Option Compare Database Option Explicit Private oConn As ADODB.Connection Sub Connec() Set oConn = New ADODB.Connection oConn.ConnectionString = "Provider=sqloledb;Server=PRZEMEK-PC\SQLEXPRESS;Database=Aplikacja;Trusted_Connection=yes;" oConn.Open End Sub Function fGetConn() As ADODB.Connection Set fGetConn = oConn End Function Sub CloceConn() oConn.Close Set oConn = Nothing End Sub
Widzimy tu że konieczne jest zainicjowanie połączenia za pomocą procedury Connec, informacje zaś o obiekcie Connection uzyskamy z funkcji fGetConn.
Jak się bronić?
Metoda jest bardzo prosta :) pisać kod w klasach, gdyż nie można utworzyć nowej instancji klasy znajdującej się w pliku z referencji.
pod tym linkiem można pobrać pliki do analizy w domowym zaciszu: projekt apollo
Brak komentarzy:
Prześlij komentarz