книги хакеры / Защита_от_взлома_сокеты,_эксплойты,_shell_код_Фостер_Дж_
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
i |
|
|
|
|
F |
|
|
|
|
|
|
|
i |
|
||
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
t |
|
||||
P |
D |
|
|
|
|
|
|
|
|
o |
|
|
P |
D |
|
|
|
|
|
|
|
|
o |
||
|
|
|
|
NOW! |
r |
|
|
|
|
|
|
NOW! |
r |
||||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
|
722 Глава 14. Создание инструмента для проверки уязвимости Web приложения |
|
|
|
|
to |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
m |
|
|
w |
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
o |
|
|
w Click |
|
|
|
|
|
|
o |
||||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
|
.c |
|
|
|
|
. |
|
|
|
|
|
|
.c |
|
||||
|
|
p |
df |
|
|
|
|
e |
|
|
|
|
|
p |
df |
|
|
|
|
e |
|
||||
|
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
g |
|
|
|
||||||
|
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||||
|
|
|
|
-xcha |
|
|
|
|
|
В строке 130 вызывается функция strtrim() для удаления начальных и хвос--x cha |
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
товых пробелов из только что прочитанной строки. Если строка оказывается |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
комментарием (строки 132 и 133), то на этом ее обработка заканчивается, |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
и мы переходим к следующей строке. |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
В строке 138 создается новый объект класса VulnDBEntry, которому прочи- |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
танная строка с удаленными пробелами передается для разбора. Когда строка |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
будет разобрана, объект помещается в вектор m_vuln, и мы переходим к сле- |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
дующей итерации цикла чтения строк. |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
Если при чтении не произошло ошибок, файл закрывается, и функция |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
инициализации возвращает true. |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
В строках 161–168 определен метод Size(). Он возвращает размер вектор |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
объектов VulnDBEntry. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
В строках 175–188 определен метод GetEntry(). Он возвращает указатель на |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
объект VulnDBEntry, находящийся в векторе m_vuln по индексу idx, ïðè óñëî- |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
вии, что индекс не выходит за пределы вектора. |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
В результате разбора строки в классе VulnDBEntry заполняются члены Path, |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
Result, Method и Description, которые в дальнейшем будут использоваться для |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
получения доступа к данным об уязвимости. |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
1 /* |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
2 |
* VulnDBEntry.cpp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 #include <stdio.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
9 #include "VulnDBEntry.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
11 #define VDBE_FIELD_TYPE |
0x0000 |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
12 #define VDBE_FIELD_PATH |
0x0001 |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
13 #define VDBE_FIELD_RES |
0x0002 |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
14 #define VDBE_FIELD_METH |
0x0003 |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
15 #define VDBE_FIELD_DESC |
0x0004 |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17/*
18* VulnDBEntry()
19*
20*
21*/
22VulnDBEntry::VulnDBEntry()
23{
24}
25
26 /*
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||||
|
|
|
C |
|
|
E |
|
|
|
|
|
|
C |
|
|
E |
|
|
|
||||||||
|
|
X |
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
|
|
d |
|
|||||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
|
|
t |
|
|||
|
D |
|
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
|
|
NOW! |
o |
P |
|
|
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
|
to |
|
|
|
|
|
Углубленный анализ |
723 |
|
|
to |
|
|
|
|
|
|
||||||
w Click |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
|
m |
|||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
|
|
.c |
|
|
. |
|
|
|
|
|
|
|
|
.c |
|
||||
|
|
p |
|
|
|
|
|
|
|
e |
|
* ~VulnDBEntry() |
|
|
p |
|
|
|
x cha |
|
e |
|
|||||
|
|
|
d |
|
|
xch27 |
|
|
|
|
|
d |
|
|
g |
|
|
|
|||||||||
|
|
|
|
f- |
|
an |
|
|
|
|
|
|
|
|
f- |
|
|
n |
|
|
|
|
|||||
|
|
|
|
|
|
|
28 |
|
|
* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
29 |
|
|
* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
30 |
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
31 |
|
VulnDBEntry::~VulnDBEntry() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
32 |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
33 |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35/*
36* Init()
37*
38*
39*/
40
41 |
// состояния разбора |
|
42 |
#define VDBE_BEGTOK |
0x0001 |
43 |
#define VDBE_INTOK |
0x0002 |
44 |
#define VDBE_ENDTOK |
0x0003 |
45 |
#define VDBE_NXTTOK |
0x0004 |
46 |
#define VDBE_ESC |
0x0005 |
47
48 bool VulnDBEntry::Init(char *entry)
49{
50string tmp;
51 |
char |
ch |
= 0; |
|
52 |
int |
st |
= 0; |
|
53 |
int |
cnt = 0; |
|
|
54 |
int |
len = 0; |
|
|
55 |
int |
idx = 0; |
|
|
56 |
|
|
|
|
57 |
// формат |
|
|
|
58 |
// #type #path |
#tok #meth #desc |
||
59 |
// "iis","/_vti_bin/_vti_cnf/","200","GET","frontpage, \"directory |
|||
|
found." |
|
|
|
60 |
|
|
|
|
61if(entry == NULL)
62{
63return(false);
64}
65
66 len = strlen(entry);
67
68if(len <= 0)
69{
70return(false);
71}
72
73 st = VDBE_BEGTOK;
74