ZAP에서 정규표현식을 이용하여 웹 퍼징하기

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개 정도만 알아두면 간단한 페이로드 생성은 쉽습니다. 정규식에 따라서 되게 다양한 형태의 페이로드를 만들어낼 수 있죠.

Regex => 정규표현식
Max, Payloads => 최대 페이로드 갯수
[ ] => 문자 범위
{ } => 출력 갯수

e.g

[a-f]{4}

=> a-f로 이루어진 4글자 패턴

[a-f]{2}[1-9]{5}

=> a-f 패턴 2글자 + 1-9 패턴 5글자
=> 결과
aa11111 
aa11112 
aa11113 
aa11114 
aa11115

Regex case

Regex: [0-9]
Result
0
1
2
3
4
5
6
7
8
9

Regex: [0-9]{2}
Result
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17

Regex: [a-z]{2}
Result
aa
ab
ac
ad
ae
af
ag
ah
ai

md5

Regex: [a-f0-9]{32}
Result
0000000000000000000000000000004a
0000000000000000000000000000004b
0000000000000000000000000000004c
0000000000000000000000000000004d
0000000000000000000000000000004e
0000000000000000000000000000004f
00000000000000000000000000000050
00000000000000000000000000000051
00000000000000000000000000000052

Regex: [a-z]{4}[HI][1-4]
Result
aaaaH1
aaaaH2
aaaaH3
aaaaH4
aaaaI1
aaaaI2
aaaaI3
aaaaI4
aaabH1
aaabH2
aaabH3
aaabH4
aaabI1
aaabI2

Regex: [0-f]{12}
Result
789273f16e67f3d6
789273f16e67f3d7
789273f16e67f3d8
...

해당 패턴에 맞는 페이로드를 값을 증가시켜가며 생성합니다. 그러고보면.. 하나 치명적인 단점이 있으니.. 랜덤에 대해 딱히 방도가 없습니다. (랜덤에 대한 정규식도 문제지만 ZAP 자체가 순차 생성을 해버려서리..)

Random???

랜덤한 값 사용이 필요했는데, 결국은 그냥 루비로 짜서 파일로 추가했습니다.

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! 해주시면 됩니다.