MCPcopy Create free account
hub / github.com/VenTheZone/Project-WebHunter / test_boolean_based

Method test_boolean_based

src/sql_injection_scanner.rs:141–202  ·  view source on GitHub ↗
(
        &self,
        client: &reqwest::Client,
        url: &Url,
        true_payload: &str,
        false_payload: &str,
        param_index: usize,
        pb: &ProgressBar,
    )

Source from the content-addressed store, hash-verified

139 .await?
140 {
141 break;
142 }
143 }
144 }
145 }
146 Ok(())
147 }
148
149 async fn test_boolean_based(
150 &self,
151 client: &reqwest::Client,
152 url: &Url,
153 true_payload: &str,
154 false_payload: &str,
155 param_index: usize,
156 pb: &ProgressBar,
157 ) -> Result<bool, reqwest::Error> {
158 let query_pairs: Vec<(String, String)> = url.query_pairs().into_owned().collect();
159 let tested_param = query_pairs[param_index].0.clone();
160 let true_url = inject_query_param(url, param_index, |value| format!("{}{}", value, true_payload));
161 let false_url = inject_query_param(url, param_index, |value| format!("{}{}", value, false_payload));
162
163 self.rate_limiter.wait().await;
164 if let (Some(true_response), Some(false_response)) = (
165 self.send_get_request(client, &true_url).await,
166 self.send_get_request(client, &false_url).await,
167 ) {
168 if let (Ok(true_body), Ok(false_body)) =
169 (true_response.text().await, false_response.text().await)
170 {
171 // Diff normalized bodies: raw responses differ on every request
172 // (random request IDs, CSRF tokens, timestamps) and on reflected
173 // payload echoes, so a naive != comparison false-positives on
174 // any dynamic page (verified against freebuff.com).
175 let true_norm = normalize_boolean_body(&true_body, true_payload);
176 let false_norm = normalize_boolean_body(&false_body, false_payload);
177 if true_norm != false_norm {
178 let vuln = SqlInjectionVulnerability {
179 url: url.clone(),
180 parameter: tested_param.clone(),
181 payload: format!("{} / {}", true_payload, false_payload),
182 vuln_type: "Boolean-Based".to_string(),
183 };
184 println!(
185 "[+] SQL Injection Found: {} in {}",
186 vuln.payload, vuln.parameter
187 );
188 self.reporter.report_sql_injection(&vuln);
189 return Ok(true);
190 }
191 }
192 }
193 pb.inc(2);
194 Ok(false)
195 }
196
197 async fn measure_url_time(
198 &self,

Callers 1

scan_urlsMethod · 0.80

Calls 3

waitMethod · 0.80
send_get_requestMethod · 0.80
report_sql_injectionMethod · 0.80

Tested by

no test coverage detected