Skip to content

Commit cd85608

Browse files
committed
Version 1.1.0
1 parent 701c6b6 commit cd85608

18 files changed

Lines changed: 478 additions & 156 deletions

.DS_Store

6 KB
Binary file not shown.

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ request.txt
2020

2121
# Built binary
2222
nomore403
23+
nomore403.exe
2324

2425
# Idea
2526
.idea/*

LICENSE

100644100755
File mode changed.

README.md

100644100755
Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,7 @@ To edit or add new bypasses, modify the payloads directly in the [payloads](http
4343
### Output example
4444

4545
```bash
46-
________ ________ ________ ________ ________ ________ ________ ________ ________
47-
╱ ╱ ╲╱ ╲╱ ╱ ╲╱ ╲╱ ╲╱ ╲╱ ╱ ╲╱ ╲╱__ ╲
48-
╱ ╱ ╱ ╱ ╱ ╱ ╱ ╱ ╱ __╱ ╱ ╱ ╱__ ╱
49-
╱ ╱ ╱ ╱ ╱ _╱ __/____ ╱ ╱ ╱
50-
╲__╱_____╱╲________╱╲__╱__╱__╱╲________╱╲____╱___╱╲________╱ ╱____╱╲________╱╲________╱
51-
46+
━━━━━━━━━━━━━━ NOMORE403 CONFIGURATION ━━━━━━━━━━━━━━━━━━
5247
Target: https://domain.com/admin
5348
Headers: false
5449
Proxy: false
@@ -61,26 +56,33 @@ Rate Limit detection: false
6156
Status:
6257
Timeout (ms): 6000
6358
Delay (ms): 0
64-
Techniques: verbs, verbs-case, headers, endpaths, midpaths, http-versions, path-case
59+
Techniques: verbs, verbs-case, headers, endpaths, midpaths, double-encoding, http-versions, path-case
6560
Unique: false
6661
Verbose: false
6762

63+
━━━━━━━━━━━━━━━ AUTO-CALIBRATION RESULTS ━━━━━━━━━━━━━━━
64+
[✔] Calibration URI: https://domain.com/admin/calibration_test_123456
65+
[✔] Status Code: 404
66+
[✔] Content Length: 1821 bytes
67+
6868
━━━━━━━━━━━━━ DEFAULT REQUEST ━━━━━━━━━━━━━
6969
403 429 bytes https://domain.com/admin
7070

7171
━━━━━━━━━━━━━ VERB TAMPERING ━━━━━━━━━━━━━━
7272

73+
━━━━━ VERB TAMPERING CASE SWITCHING ━━━━━━━
74+
7375
━━━━━━━━━━━━━ HEADERS ━━━━━━━━━━━━━━━━━━━━━
7476

7577
━━━━━━━━━━━━━ CUSTOM PATHS ━━━━━━━━━━━━━━━━
7678
200 2047 bytes https://domain.com/;///..admin
7779

80+
━━━━━━━━━━━━━ DOUBLE-ENCODING ━━━━━━━━━━━━━
81+
7882
━━━━━━━━━━━━━ HTTP VERSIONS ━━━━━━━━━━━━━━━
7983
403 429 bytes HTTP/1.0
80-
403 429 bytes HTTP/1.1
81-
403 429 bytes HTTP/2
8284

83-
━━━━━━━━━━━━━ CASE SWITCHING ━━━━━━━━━━━━━━
85+
━━━━━━━━━━ PATH CASE SWITCHING ━━━━━━━━━━━━
8486
200 2047 bytes https://domain.com/%61dmin
8587
```
8688

@@ -138,12 +140,12 @@ Flags:
138140
-r, --redirect Automatically follow redirects in responses.
139141
--request-file string Load request configuration and flags from a specified file.
140142
--status strings Filter output by comma-separated status codes (e.g., 200,301,403)
141-
-k, --technique strings Specify one or more attack techniques to use (e.g., headers,path-case). (default [verbs,verbs-case,headers,endpaths,midpaths,http-versions,path-case])
143+
-k, --technique strings Specify one or more attack techniques to use (e.g., headers,path-case). (default [verbs,verbs-case,headers,endpaths,midpaths,double-encoding,http-versions,path-case])
142144
--timeout int Specify a max timeout time in ms. (default 6000)
143-
--unique Show unique output based on status code and response length
145+
--unique Show unique output based on status code and response length.
144146
-u, --uri string Specify the target URL for the request.
145147
-a, --user-agent string Specify a custom User-Agent string for requests (default: 'nomore403').
146-
-v, --verbose Enable verbose output for detailed request/response logging.
148+
-v, --verbose Enable verbose output for detailed request/response logging (not based on auto-calibrate).
147149
```
148150
149151
## Contributing

cmd/api.go

100644100755
Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package cmd
33
import (
44
"bufio"
55
"crypto/tls"
6+
"fmt"
7+
"github.com/fatih/color"
8+
"github.com/slicingmelon/go-rawurlparser"
69
"io"
710
"log"
811
"net"
@@ -12,8 +15,6 @@ import (
1215
"os"
1316
"strings"
1417
"time"
15-
16-
"github.com/slicingmelon/go-rawurlparser"
1718
)
1819

1920
// parseFile reads a file given its filename and returns a list containing each of its lines.
@@ -95,22 +96,12 @@ func request(method, uri string, headers []header, proxy *url.URL, rateLimit boo
9596
URL: &url.URL{
9697
Scheme: parsedURL.Scheme,
9798
Host: parsedURL.Host,
98-
Opaque: parsedURL.Path, // Use Opaque to prevent path normalization
99+
Opaque: parsedURL.Path,
99100
},
100101
Header: make(http.Header),
101102
Close: true,
102103
}
103104

104-
//log.Printf("Debug - Raw URL parsed: %s", uri)
105-
// Don't use URL.String() for debugging, as it will perform encodings and normalization
106-
// log.Printf("Debug - Request Components - Scheme: %s, Host: %s, Path: %s, RawPath: %s, Opaque: %s",
107-
// req.URL.Scheme,
108-
// req.URL.Host,
109-
// req.URL.Path,
110-
// req.URL.RawPath,
111-
// req.URL.Opaque,
112-
// )
113-
114105
for _, header := range headers {
115106
req.Header.Add(header.key, header.value)
116107
}
@@ -177,3 +168,28 @@ func loadFlagsFromRequestFile(requestFile string, schema bool, verbose bool, tec
177168
// Assign the extracted values to the corresponding flag variables
178169
requester(uri, proxy, userAgent, reqHeaders, bypassIP, folder, httpMethod, verbose, technique, nobanner, rateLimit, timeout, redirect, randomAgent)
179170
}
171+
172+
func runAutocalibrate(options RequestOptions) int {
173+
calibrationURI := options.uri
174+
if !strings.HasSuffix(calibrationURI, "/") {
175+
calibrationURI += "/"
176+
}
177+
calibrationURI += "calibration_test_123456"
178+
179+
statusCode, response, err := request("GET", calibrationURI, options.headers, options.proxy, options.rateLimit, options.timeout, options.redirect)
180+
if err != nil {
181+
log.Printf("[!] Error during calibration request: %v\n", err)
182+
return 0
183+
}
184+
185+
// Save default response
186+
defaultSc := statusCode
187+
defaultCl := len(response)
188+
189+
fmt.Println(color.MagentaString("\n━━━━━━━━━━━━━━━ AUTO-CALIBRATION RESULTS ━━━━━━━━━━━━━━━"))
190+
fmt.Printf("[✔] Calibration URI: %s\n", calibrationURI)
191+
fmt.Printf("[✔] Status Code: %d\n", defaultSc)
192+
fmt.Printf("[✔] Content Length: %d bytes\n", defaultCl)
193+
194+
return defaultCl
195+
}

0 commit comments

Comments
 (0)