Skip to content

Commit 38459dd

Browse files
committed
Merge branch 'develop' of https://github.com/d4rckh/vaf
2 parents 6abf4ef + c995fe2 commit 38459dd

File tree

4 files changed

+68
-63
lines changed

4 files changed

+68
-63
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ vaf_dev.exe
33
test
44
src/Vaf.exe
55
vaf
6-
vaf.exe
6+
vaf.exe
7+
example_wordlists/

example_wordlists/short.txt

-13
This file was deleted.

src/utils/VafLogger.nim

+3-6
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,18 @@ import strformat
44
import uri
55
import strutils
66

7-
proc log*(logType: string, logMessage: string): int =
7+
proc log*(logType: string, logMessage: string): void =
88
if logType == "info":
99
echo aquamarine & "INFO: " & resetcols & logMessage & resetcols
10-
return 1
1110
if logType == "result":
1211
echo aquamarine & "RESULT: " & resetcols & logMessage & resetcols
13-
return 1
1412
if logType == "header":
1513
echo bluey & "\t\t" & logMessage & resetcols & "\n"
16-
return 1
1714
if logType == "error":
1815
echo orange & "ERROR: " & logMessage & resetcols & "\n"
1916

2017

21-
proc printResponse*(response: VafFuzzResult): int =
18+
proc printResponse*(response: VafFuzzResult): void =
2219
var urlDecoded: string = ""
2320
var urlDisplay: string = ""
2421
var statusColor: string = khaki
@@ -30,5 +27,5 @@ proc printResponse*(response: VafFuzzResult): int =
3027
urlDisplay = urlDisplay.replace(response.word, fmt"{resetcols}{khaki}{response.word}{resetcols}{orange}")
3128
if "200" == statusCode or "201" == statusCode:
3229
statusColor = lightgreen
33-
return log("result", &"{resetcols}{statusColor}Status: {statusCode}; Length: {response.responseLength}; Time: {response.responseTime}ms\t{response.word} {orange}{urlDecoded} {urlDisplay} {resetcols}")
30+
log("result", &"{resetcols}{statusColor}Status: {statusCode}; Length: {response.responseLength}; Time: {response.responseTime}ms\t{response.word} {orange}{urlDecoded} {urlDisplay} {resetcols}")
3431

src/vaf.nim

+63-43
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import utils/VafFuzzResult
1010
import utils/VafColors
1111
import utils/VafBanner
1212
import utils/VafOutput
13+
import std/streams
1314

1415
printBanner()
1516

@@ -40,62 +41,81 @@ try:
4041
var displayUrl: string = url.replace("[]", fmt"{resetcols}{orange}[]{resetcols}{khaki}")
4142

4243
if url == "" or wordlist == "":
43-
discard log("error", "Please specify an URL to fuzz using '-u' and a wordlist using '-w'.")
44+
log("error", "Please specify an URL to fuzz using '-u' and a wordlist using '-w'.")
45+
quit(1)
46+
47+
if not os.fileExists(wordlist):
48+
log("error", "File " & wordlist & " does not exist.")
4449
quit(1)
4550

46-
if not ( "[]" in url ) and ( requestMethod == "GET" ):
47-
discard log("error", "Please specify a fuzz area in the url, example: 'https://example.org/[]'")
51+
if not ("[]" in url) and (requestMethod == "GET"):
52+
log("error", "Please specify a fuzz area in the url, example: 'https://example.org/[]'")
4853
quit(1)
49-
if not ( ( "[]" in postData ) or ( "[]" in url ) ) and ( requestMethod == "POST" ):
50-
discard log("error", "Please specify a fuzz area in the post data or the url, example: '{\"username\": \"[]\"}' or 'https://example.org/[]'")
54+
55+
if not (("[]" in postData) or ("[]" in url)) and (requestMethod == "POST"):
56+
log("error", "Please specify a fuzz area in the post data or the url, example: '{\"username\": \"[]\"}' or 'https://example.org/[]'")
5157
quit(1)
5258

5359
echo ""
54-
discard log("header", fmt"Argument summary")
55-
discard log("info", fmt"Printing on status: {khaki}{printOnStatus}")
56-
discard log("info", fmt"Target URL: {khaki}{displayUrl}")
60+
log("header", fmt"Argument summary")
61+
log("info", fmt"Printing on status: {khaki}{printOnStatus}")
62+
log("info", fmt"Target URL: {khaki}{displayUrl}")
5763
if requestMethod == "POST":
58-
discard log("info", fmt"Post Data: {khaki}{displayPostData}")
59-
discard log("info", fmt"Method: {khaki}{requestMethod}")
64+
log("info", fmt"Post Data: {khaki}{displayPostData}")
65+
log("info", fmt"Method: {khaki}{requestMethod}")
6066
if not ( grep == "" ):
61-
discard log("info", fmt"Grep: {khaki}{grep}")
62-
discard log("info", fmt"Using Wordlist: {khaki}{wordlist}")
67+
log("info", fmt"Grep: {khaki}{grep}")
68+
log("info", fmt"Using Wordlist: {khaki}{wordlist}")
6369
if not ( parsedArgs.prefix == ""):
64-
discard log("info", fmt"Using prefixes: {khaki}{parsedArgs.prefix}")
70+
log("info", fmt"Using prefixes: {khaki}{parsedArgs.prefix}")
6571
if not ( parsedArgs.suffix == ""):
66-
discard log("info", fmt"Using suffixes: {khaki}{parsedArgs.suffix}")
67-
discard log("info", fmt"Print if reflexive: {khaki}{parsedArgs.printifreflexive}")
68-
discard log("info", fmt"Url Encode: {khaki}{parsedArgs.urlencode}")
69-
# discard log("info", fmt"Print Url: {khaki}{parsedArgs.printurl}")
72+
log("info", fmt"Using suffixes: {khaki}{parsedArgs.suffix}")
73+
log("info", fmt"Print if reflexive: {khaki}{parsedArgs.printifreflexive}")
74+
log("info", fmt"Url Encode: {khaki}{parsedArgs.urlencode}")
7075
if not ( parsedArgs.output == ""):
71-
discard log("info", fmt"Output file: {khaki}{parsedArgs.output}")
76+
log("info", fmt"Output file: {khaki}{parsedArgs.output}")
7277
echo ""
73-
discard log("header", fmt"Results")
74-
for keyword in lines(wordlist):
75-
for prefix in parsedArgs.prefix.split(","):
76-
for suffix in parsedArgs.suffix.split(","):
77-
var word = prefix & keyword & suffix
78-
if parsedArgs.urlencode:
79-
word = encodeUrl(word, true)
80-
var urlToRequest: string = url.replace("[]", word)
81-
var resp: VafResponse = makeRequest(urlToRequest, requestMethod, postData.replace("[]", word))
82-
var fuzzResult: VafFuzzResult = VafFuzzResult(
83-
word: word,
84-
statusCode: resp.statusCode,
85-
urlencoded: parsedArgs.urlencode,
86-
url: urlToRequest,
87-
printUrl: parsedArgs.printurl,
88-
responseLength: resp.responseLength,
89-
responseTime: resp.responseTime
90-
)
91-
proc doLog() =
92-
discard printResponse(fuzzResult)
93-
if not ( parsedArgs.output == "" ):
94-
saveTofile(fuzzResult, parsedArgs.output)
78+
log("header", fmt"Results")
79+
80+
proc fuzz(word: string): void =
81+
var urlToRequest: string = url.replace("[]", word)
82+
var resp: VafResponse = makeRequest(urlToRequest, requestMethod, postData.replace("[]", word))
83+
var fuzzResult: VafFuzzResult = VafFuzzResult(
84+
word: word,
85+
statusCode: resp.statusCode,
86+
urlencoded: parsedArgs.urlencode,
87+
url: urlToRequest,
88+
printUrl: parsedArgs.printurl,
89+
responseLength: resp.responseLength,
90+
responseTime: resp.responseTime
91+
)
92+
proc doLog() =
93+
printResponse(fuzzResult)
94+
if not (parsedArgs.output == ""):
95+
saveTofile(fuzzResult, parsedArgs.output)
96+
97+
if ((printOnStatus in resp.statusCode) or (printOnStatus == "any")) and
98+
(((word in resp.content) or decodeUrl(word) in resp.content) or not parsedArgs.printifreflexive) and
99+
(grep in resp.content):
100+
doLog()
101+
102+
var strm = newFileStream(wordlist, fmRead)
103+
var line = ""
104+
105+
let prefixes = parsedArgs.prefix.split(",")
106+
let suffixes = parsedArgs.suffix.split(",")
107+
108+
if not isNil(strm):
109+
while strm.readLine(line):
110+
for prefix in prefixes:
111+
for suffix in suffixes:
112+
var word = prefix & line & suffix
113+
if parsedArgs.urlencode:
114+
word = encodeUrl(word, true)
115+
fuzz(word)
116+
strm.close()
95117

96-
if ((printOnStatus in resp.statusCode) or (printOnStatus == "any")) and (((word in resp.content) or decodeUrl(word) in resp.content) or not parsedArgs.printifreflexive) and (grep in resp.content):
97-
doLog()
98118
except ShortCircuit as e:
99119
if e.flag == "argparse_help":
100120
echo p.help
101-
quit(0)
121+
quit(0)

0 commit comments

Comments
 (0)