ZAP의 Fuzzer는 reply attack, brute force 및 여러 엔트로피 계산에 있어 굉장히 유용한 도구입니다. 개인적으로는 Burp suite의 intruder보다 더 유연하다고 생각되네요. ZAP Fuzzer에서 Regex을 이용해서 페이로드 리스트를 만들고 테스트할 수 있는데, 오늘은 그 이야기를 좀 해볼까 합니다. 시작하죠.
Regex on ZAP Fuzzer?
우선 ZAP Fuzzer는 여러가지 페이로드 패턴을 지원합니다. File, FileFuzzer(dirbuster, jbrofuzz), Nubmer, Scripts(ZAP 스크립트) 등이 있고 솔직히 Scripts 제외하곤 정말 딱 보면 알만한 단순한 사용법입니다..

이중에선 Regex(Experimental)이 있는데, 정규표현식 룰로 페이로드 리스트를 만들 수 있습니다.
아래 4개 정도만 알아두면 간단한 페이로드 생성은 쉽습니다. 정규식에 따라서 되게 다양한 형태의 페이로드를 만들어낼 수 있죠.
1
2
3
4
|
Regex => 정규표현식
Max, Payloads => 최대 페이로드 갯수
[ ] => 문자 범위
{ } => 출력 갯수
|
e.g
1
2
3
4
|
[a-f]{4}
=> a-f로 이루어진 4글자 패턴
|
1
2
3
4
5
6
7
8
9
10
|
[a-f]{2}[1-9]{5}
=> a-f 패턴 2글자 + 1-9 패턴 5글자
=> 결과
aa11111
aa11112
aa11113
aa11114
aa11115
|
Regex case
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Regex: [0-9]
Result
0
1
2
3
4
5
6
7
8
9
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
Regex: [0-9]{2}
Result
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
1
2
3
4
5
6
7
8
9
10
11
12
|
Regex: [a-z]{2}
Result
aa
ab
ac
ad
ae
af
ag
ah
ai
|
md5
1
2
3
4
5
6
7
8
9
10
11
12
|
Regex: [a-f0-9]{32}
Result
0000000000000000000000000000004a
0000000000000000000000000000004b
0000000000000000000000000000004c
0000000000000000000000000000004d
0000000000000000000000000000004e
0000000000000000000000000000004f
00000000000000000000000000000050
00000000000000000000000000000051
00000000000000000000000000000052
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Regex: [a-z]{4}[HI][1-4]
Result
aaaaH1
aaaaH2
aaaaH3
aaaaH4
aaaaI1
aaaaI2
aaaaI3
aaaaI4
aaabH1
aaabH2
aaabH3
aaabH4
aaabI1
aaabI2
|
1
2
3
4
5
6
7
|
Regex: [0-f]{12}
Result
789273f16e67f3d6
789273f16e67f3d7
789273f16e67f3d8
...
|
해당 패턴에 맞는 페이로드를 값을 증가시켜가며 생성합니다. 그러고보면.. 하나 치명적인 단점이 있으니..
랜덤에 대해 딱히 방도가 없습니다. (랜덤에 대한 정규식도 문제지만 ZAP 자체가 순차 생성을 해버려서리..)

Random???
랜덤한 값 사용이 필요했는데, 결국은 그냥 루비로 짜서 파일로 추가했습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
arr = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f']
rand(16)
d = ""
for i in 0..1000
r = ""
for j in 0..15
r = r + arr[rand(16)].to_s
end
p r
d = d+r+"\n"
end
f = open('out.txt','w')
f.write d
|
out.txt 파일을 fuzzer > file > select!
해주시면 됩니다.