и еще до кучи не парсит и не подбирает пароль в qnap qts web server qts-212 (инфо показывает такую http server 1.0) пароль и логин тупо админ, если нужен доступ для добавления, то айпишник могу в личку скинуть..
Я всё думаю, чего вы так покровительственно и занудно binarymaster-а зазываете? Неужто, в даркнете совсем кончились образованные программисты? Одни скрипт-кидди остались?
Если бы вы знали историю проекта, у вас было бы понимание, с каких пор и почему пошла традиция паролить архив. У нас всё просто, эксплойты постят участники сообщества в этой теме, а разработчики их добавляют в RS. Так безопаснее.
Всё постить сюда. Да, но RCE тоже можно, если оно эксплуатируется через HTTP, и с помощью него можно добиться таких эффектов: Это не роутер, так что добавлять не стоит. Нет, рано ещё, мало изменений.
А в каком виде передаются данные в SetTableDataW(Row: DWord; Name, Value: PChar); ... я почему то не могу сохранить Name и Value типа Pchar в любую переменную, перепробовал разные типы... но почему то выводится только в визуальные компоненты... Причем, если потом скопировать из визуального компонента в переменную, тоже Access Violation.. не сталкивался ещё с таким.
Это указатели на null-terminated строки, ANSI либо Unicode в зависимости от постфикса A/W. Покажите, как вы объявили callback-функцию, и как производите чтение из переменных, и я скажу, в чём ошибка.
Пол ночи просидел с этой проблемой ). Ниже функция которой пытаюсь получить результат. Инициализация как в примере. Spoiler function routerscan(row:dword; ipaddr:string; port:dword):string; type TIPv4 = record case Boolean of False: (dw: LongWord); True: (b: Array[0..3] of Byte); end; var s:string; IP: TIPv4; info:tstringlist; hRouter: THandle; procedure SetTableDataW(Row: DWord; Name, Value: PChar); stdcall; begin if Row <> 123 then Exit; form1.memo1.Lines.Add(Name+ ': '+ Value); if Name='Auth' then result:= PChar(Value) ; // В memo1 выводится, в любую переменную не получается... end; begin info:=tstringlist.Create; info.Delimiter:='.'; info.DelimitedText:=ipaddr; ip.b[3]:=strtoint(info[0]); ip.b[2]:=strtoint(info[1]); ip.b[1]:=strtoint(info[2]); ip.b[0]:=strtoint(info[3]); info.Free; if not SetParam(stSetTableDataCallback, @SetTableDataW) then begin form1. memo1.Lines.Add('Failed to set callback procedure'); Exit; end; if not PrepareRouter(row, IP.dw, Port, hRouter) then begin form1.memo1.Lines.Add('PrepareRouter failed'); Exit; end; form1.memo1.Lines.Add('Scanning router...'); if not ScanRouter(hRouter) then begin form1.memo1.Lines.Add('ScanRouter failed'); Exit; end; if not FreeRouter(hRouter) then begin form1.memo1.Lines.Add('FreeRouter failed'); Exit; end; end;
Нельзя использовать вложенную функцию в качестве callback функции, поскольку при её вызове из librouter у неё не будет привязки к родительской функции, и к её локальным переменным соответственно. Обращение к любым локальным переменным вызовет порчу памяти и структур. Можно использовать глобальные переменные: Spoiler: Пример PHP: var Form1: TForm1; Res: String; // глобальная переменнаяimplementation{$R *.dfm}function routerscan(row: dword; ipaddr: string; port: dword): string;type TIPv4 = record case Boolean of False: (dw: LongWord); True: (b: Array [0 .. 3] of Byte); end;var IP: TIPv4; info: tstringlist; hRouter: THandle; procedure SetTableDataW(row: dword; Name, Value: PChar); stdcall; begin if row <> 123 then Exit; form1.memo1.Lines.Add(Name + ': ' + Value); if Name = 'Auth' then Res := Value; // записываем результат end;begin Result := ''; info := tstringlist.Create; info.Delimiter := '.'; info.DelimitedText := ipaddr; IP.b[3] := strtoint(info[0]); IP.b[2] := strtoint(info[1]); IP.b[1] := strtoint(info[2]); IP.b[0] := strtoint(info[3]); info.Free; if not SetParam(stSetTableDataCallback, @SetTableDataW) then begin form1.memo1.Lines.Add('Failed to set callback procedure'); Exit; end; if not PrepareRouter(row, IP.dw, port, hRouter) then begin form1.memo1.Lines.Add('PrepareRouter failed'); Exit; end; form1.memo1.Lines.Add('Scanning router...'); if not ScanRouter(hRouter) then begin form1.memo1.Lines.Add('ScanRouter failed'); Exit; end; Result := Res; // считываем результат if not FreeRouter(hRouter) then begin form1.memo1.Lines.Add('FreeRouter failed'); Exit; end;end;
Хм, это ж функция потока... тогда придется создавать массив res, для каждого потока свой... Я так понимаю и в функции PrepareRouter(row, IP.dw, port, hRouter), row должно быть уникальное для каждого потока... И проверять в функции SetTableDataW, что ответ пришел именно этому потоку... row всех остальных потоков игнорировать... Ограничений на количество потоков в библиотеке нет?
Теперь проблема что в этой функции вообще не работают никакие локальные переменные, только глобальные, а как мне объявить внутри этой функции номер потока? Номер потока в любом случае локально внутри потока... Пытался так объявлять, не работает... tnew = class(tthread) public st:dword; //тут храню номер потока protected procedure execute; override; end; procedure SetTableDataW(Row: DWord; Name, Value: pchar); stdcall; begin if Row <> st then Exit; if Name='Auth' then res[st]:= Value ; end; Глобальные переменные работают, но как мне в них держать номера потоков?
Можно же просто сделать глобальный массив строк: Rows: Array[0..999] of String; // 1000 строк И таким образом получать нужные строки по нужному уникальному индексу. Сами активные (используемые) индексы хранить где-то ещё.
В них и проблема , в индексе, для результатов уже сделал глобальный массив res , вопрос как функции указать индекс потока... res: array [1..2000] of string; // тут храню результаты... глобальная переменная... вопрос как указать функции индекс потока.... его номер... его нельзя глобально хранить... Переменная st , мне ж нужно указать функции какой Row этого потока, и индекс массива для сохранения результатов... procedure SetTableDataW(Row: DWord; Name, Value: pchar); stdcall; begin if Row <> st then Exit; if Name='Auth' then res[st]:= Value ; end; Чем заменить st переменную?
Вы должны были прийти к пониманию, для чего нужна первая проверка условия в демо приложении... PHP: procedure SetTableDataW(Row: DWord; Name, Value: pchar); stdcall;begin if Name = 'Auth' then res[Row] := Value;end;
Меня строка if Row <> 123 в демке запутала )... Все работает, на сотнях поков без глюков ... спасибо за консультацию...
Доброе время суток! Вопрос может немного не по теме, но пока задам здесь. В базе 3Wifi появилась точка с МАК C8:BE:19:7A:50:04 и ESSID DSL_2640NRU. Нельзя ли подсказать пользователя и пароль на сам роутер, простые стандартные - не подходят, пытаюсь сбрутить через telnet -пока безрезультатно. Ещё раз извиняюсь если не по теме.