1 package com.jsql.model.injection.strategy.blind;
2
3 import com.jsql.model.InjectionModel;
4 import com.jsql.model.injection.strategy.blind.AbstractInjectionBinary.BinaryMode;
5 import com.jsql.model.injection.strategy.blind.patch.Diff;
6 import com.jsql.model.injection.strategy.blind.patch.DiffMatchPatch;
7
8 import java.util.LinkedList;
9 import java.util.List;
10 import java.util.concurrent.CopyOnWriteArrayList;
11
12
13
14
15
16
17 public class CallableBlind extends AbstractCallableBinary<CallableBlind> {
18
19
20 private LinkedList<Diff> diffsWithReference = new LinkedList<>();
21
22 private static final DiffMatchPatch DIFF_MATCH_PATCH = new DiffMatchPatch();
23
24 private final InjectionBlind injectionBlind;
25
26 private final InjectionModel injectionModel;
27 private final String metadataInjectionProcess;
28
29
30
31
32 public CallableBlind(String sqlQuery, InjectionModel injectionModel, InjectionBlind injectionBlind, BinaryMode blindMode, String metadataInjectionProcess) {
33 this.injectionModel = injectionModel;
34 this.injectionBlind = injectionBlind;
35 this.metadataInjectionProcess = metadataInjectionProcess;
36 this.booleanUrl = this.injectionModel.getMediatorVendor().getVendor().instance().sqlTestBlind(sqlQuery, blindMode);
37 }
38
39
40
41
42 public CallableBlind(
43 String sqlQuery,
44 int indexCharacter,
45 int bit,
46 InjectionModel injectionModel,
47 InjectionBlind injectionBlind,
48 BinaryMode blindMode,
49 String metadataInjectionProcess
50 ) {
51 this(sqlQuery, injectionModel, injectionBlind, blindMode, metadataInjectionProcess);
52 this.booleanUrl = this.injectionModel.getMediatorVendor().getVendor().instance().sqlBitTestBlind(sqlQuery, indexCharacter, bit, blindMode);
53 this.currentIndex = indexCharacter;
54 this.currentBit = bit;
55 }
56
57
58
59
60
61
62
63 @Override
64 public boolean isTrue() {
65
66 List<Diff> falseDiffs = new CopyOnWriteArrayList<>(this.injectionBlind.getFalseDiffs());
67 for (Diff falseDiff: falseDiffs) {
68
69
70 if (this.diffsWithReference.contains(falseDiff)) {
71 return false;
72 }
73 }
74 return true;
75 }
76
77
78
79
80
81
82 @Override
83 public CallableBlind call() {
84 String result = this.injectionBlind.callUrl(this.booleanUrl, this.metadataInjectionProcess, this);
85 this.diffsWithReference = CallableBlind.DIFF_MATCH_PATCH.diffMain(this.injectionBlind.getSourceReferencePage(), result, true);
86 CallableBlind.DIFF_MATCH_PATCH.diffCleanupEfficiency(this.diffsWithReference);
87 return this;
88 }
89
90 public List<Diff> getDiffsWithReference() {
91 return this.diffsWithReference;
92 }
93 }