-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathintruder_payload.clj
52 lines (48 loc) · 1.66 KB
/
intruder_payload.clj
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
(ns burp-clj.intruder-payload
(:require [burp-clj.helper :as helper])
(:import [burp
IIntruderPayloadGeneratorFactory
IIntruderPayloadGenerator
IIntruderAttack
IIntruderPayloadProcessor
]))
(defn make-payload-processor
"`processor-name` processor名字
`proc-fn`函数的参数为[^bytes current-payload
^bytes original-payload
^bytes base-value], 必须返回bytes"
[processor-name proc-fn]
(reify IIntruderPayloadProcessor
(getProcessorName [this]
processor-name)
(processPayload [this curr-payload orig-payload base-value]
(proc-fn (curr-payload orig-payload base-value)))))
(defn make-payload-generator
[get-next-fn has-more-fn reset-fn]
(reify IIntruderPayloadGenerator
(getNextPayload [this base-value]
(get-next-fn base-value))
(hasMorePayloads [this]
(has-more-fn))
(reset [this]
(reset-fn))))
(defn make-simple-payload-generator
"从`vs`构造简单的generator,如果vs中的元素为nil则认为结束"
[vs]
(let [queue (atom vs)
get-next (fn [base]
(let [v (first @queue)]
(swap! queue rest)
(-> (str v)
(.getBytes))))
has-more? #(not= nil (first @queue))
reset #(do (reset! queue vs)
nil)]
(make-payload-generator get-next has-more? reset)))
(defn make-payload-generator-factory
[generator-name make-generator-fn]
(reify IIntruderPayloadGeneratorFactory
(createNewInstance [this attack]
(make-generator-fn attack))
(getGeneratorName [this]
generator-name)))