Skip to content

Commit 1133d8c

Browse files
committed
idor check
1 parent 0bf2fb5 commit 1133d8c

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

lib/API_Fuzzer.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
require 'API_Fuzzer/request'
88
require 'API_Fuzzer/engine'
99
require 'API_Fuzzer/xxe_check'
10+
require 'API_Fuzzer/redirect_check'
11+
require 'API_Fuzzer/idor_check'
1012

1113
module API_Fuzzer
1214
# Scans all the checks
@@ -18,6 +20,8 @@ def self.scan(options = {})
1820
vulnerabilities << API_Fuzzer::XssCheck.scan(options)
1921
vulnerabilities << API_Fuzzer::SqlCheck.scan(options)
2022
vulnerabilities << API_Fuzzer::SqlBlindCheck.scan(options)
23+
vulnerabilities << API_Fuzzer::RedirectCheck.scan(options)
24+
vulnerabilities << API_Fuzzer::IdorCheck.scan(options)
2125
API_Fuzzer::XxeCheck.scan(options)
2226
vulnerabilities.uniq.flatten
2327
end

lib/API_Fuzzer/idor_check.rb

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
require 'API_Fuzzer/vulnerability'
2+
require 'API_Fuzzer/error'
3+
require 'API_Fuzzer/request'
4+
5+
module API_Fuzzer
6+
class IdorCheck
7+
class << self
8+
def scan(options = {})
9+
@url = options[:url]
10+
@params = options[:params]
11+
@methods = options[:method]
12+
@cookies = options[:cookies]
13+
@vulnerabilities = []
14+
15+
fuzz_without_session
16+
@vulnerabilities.uniq { |vuln| vuln.description }
17+
end
18+
19+
def fuzz_without_session
20+
@methods.each do |method|
21+
response = API_Fuzzer::Request.send_api_request(
22+
url: @url,
23+
params: @params,
24+
method: method,
25+
cookies: @cookies
26+
)
27+
28+
response_without_session = API_Fuzzer::Request.send_api_request(
29+
url: @url,
30+
params: @params,
31+
method: method
32+
)
33+
34+
fuzz_match(response, response_without_session, method)
35+
end
36+
end
37+
38+
def fuzz_match(resp, resp_without_session, method)
39+
@vulnerabilities << API_Fuzzer::Vulnerability.new(
40+
type: 'HIGH',
41+
value: "API doesn't have session protection",
42+
description: "Possible IDOR in #{method} #{@url}"
43+
) if resp.body.to_s == resp_without_session.body.to_s
44+
end
45+
end
46+
end
47+
end

0 commit comments

Comments
 (0)