添加MITM代理服务器的初始实现,包括证书处理、配置解析、流量转发和日志记录功能。新增多个批处理脚本以支持程序的构建和调试,更新README和故障排除指南以提供使用说明和常见问题解决方案。
This commit is contained in:
parent
f9314ae8d4
commit
8eefa5848d
1
.gitignore
vendored
1
.gitignore
vendored
@ -21,3 +21,4 @@
|
||||
# Go workspace file
|
||||
go.work
|
||||
|
||||
traffic_dumps/
|
||||
26
CA.crt
Normal file
26
CA.crt
Normal file
@ -0,0 +1,26 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFOTCCBCGgAwIBAgIGAZi8TmIsMA0GCSqGSIb3DQEBCwUAMIGgMTEwLwYDVQQDDChDaGFybGVz
|
||||
IFByb3h5IENBICgxOCBBdWcgMjAyNSwgQkxBQ0stUEMpMSUwIwYDVQQLDBxodHRwczovL2NoYXJs
|
||||
ZXNwcm94eS5jb20vc3NsMREwDwYDVQQKDAhYSzcyIEx0ZDERMA8GA1UEBwwIQXVja2xhbmQxETAP
|
||||
BgNVBAgMCEF1Y2tsYW5kMQswCQYDVQQGEwJOWjAeFw0yNTA4MTcwODMxNTBaFw0yNjA4MTcwODMx
|
||||
NTBaMIGgMTEwLwYDVQQDDChDaGFybGVzIFByb3h5IENBICgxOCBBdWcgMjAyNSwgQkxBQ0stUEMp
|
||||
MSUwIwYDVQQLDBxodHRwczovL2NoYXJsZXNwcm94eS5jb20vc3NsMREwDwYDVQQKDAhYSzcyIEx0
|
||||
ZDERMA8GA1UEBwwIQXVja2xhbmQxETAPBgNVBAgMCEF1Y2tsYW5kMQswCQYDVQQGEwJOWjCCASIw
|
||||
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKEmwh2Lk0017ak2c+3eKUGRsZVc5TSfcFaaiAk5
|
||||
kKMWj0pIXNKo2G8eERo4BYNqZi+icHGWBwmhAuUDJqpZMji2Qzv0jvuFDw0+UVVtp30RU/92GZYV
|
||||
C44df+qPTYqUuD+ZPKdlo2RZ38Jbru/VT7AQQ53cvcBJ6s7WzY9QQVui1Rd3jHRXnyb9/duccw22
|
||||
vo6f2/OX2mVEKpXd5/3g8d+D8EuoiTUKDbgM39diOYuelh8Xybf0Zy1ZU4nkYeaVwzf9djlgxa1E
|
||||
2Qb9SscxddGBJxyTrqtoG4ZLwzuwz3DX6KOEPX73I0Q8L+TBf7KQhBYkHSOa6HygE0Vgi3HoM4UC
|
||||
AwEAAaOCAXUwggFxMA8GA1UdEwEB/wQFMAMBAf8wggEtBglghkgBhvhCAQ0EggEeE4IBGlRoaXMg
|
||||
cm9vdCBjZXJ0aWZpY2F0ZSB3YXMgZ2VuZXJhdGVkIGJ5IENoYXJsZXMgUHJveHkgZm9yIFNTTCBQ
|
||||
cm94eWluZy4gSWYgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBwYXJ0IG9mIGEgY2VydGlmaWNhdGUgY2hh
|
||||
aW4sIHRoaXMgbWVhbnMgdGhhdCB5b3UncmUgYnJvd3NpbmcgdGhyb3VnaCBDaGFybGVzIFByb3h5
|
||||
IHdpdGggU1NMIFByb3h5aW5nIGVuYWJsZWQgZm9yIHRoaXMgd2Vic2l0ZS4gUGxlYXNlIHNlZSBo
|
||||
dHRwczovL2NoYXJsZXNwcm94eS5jb20vc3NsIGZvciBtb3JlIGluZm9ybWF0aW9uLjAOBgNVHQ8B
|
||||
Af8EBAMCAgQwHQYDVR0OBBYEFKBf+QLehq0dc4s7YMIUUFJdgWBfMA0GCSqGSIb3DQEBCwUAA4IB
|
||||
AQBc+K3gGnz00yv2XMYRMbeYLr3SD15Tx3NAPri08EY1wyyufkBCaI81tZSCMy4PkGAYN+zODrQ6
|
||||
MRj0tbABTNZHdzFCuazE+B2ce2Ka3PcQ1DNpGf60NYk9qBHpOxak+5XxrECFYjStYW3gLZ7mZSnI
|
||||
YX9doSujRpzSbVZFvVh4J1zCzF1NuD6VxxfFjppJ6EnvnSSQOly0e32NzibQi3akFb4E5hn58py/
|
||||
Eth3xl7mzWjcdKeKd30TAeg98PA+drJ8JsunIc2sICcNuAoVSKQEX4ihZHMhFLXl0MNdyWQtqHPR
|
||||
beQU9SvWF3DVmilrNO1neetL2TCZK5iMyIAHvqPo
|
||||
-----END CERTIFICATE-----
|
||||
167
README.md
167
README.md
@ -1,2 +1,167 @@
|
||||
# mitm
|
||||
# MITM Proxy Server
|
||||
|
||||
This is a Man-in-the-Middle (MITM) proxy server written in Go, similar to the functionality of Charles proxy tool.
|
||||
|
||||
## Features
|
||||
|
||||
1. **Transparent MITM Proxy**: Completely transparent HTTP/HTTPS proxy that doesn't interfere with any traffic
|
||||
2. **Hardcoded Certificates**: P12 certificate and CA certificate directly embedded in the program, no external files needed
|
||||
3. **HTTPS Decryption**: Attempts to decrypt HTTPS traffic for inspection, falls back to transparent mode if decryption fails
|
||||
4. **Dual Traffic Dump**: Save both encrypted and decrypted data to different files for analysis
|
||||
5. **Complete Data Output**: Console displays complete request/response data without truncation
|
||||
6. **Domain Filtering**: Print specific traffic to stdout based on the list of domains of interest in TOML configuration file
|
||||
7. **System Proxy**: Automatically set Windows system proxy, restore when program ends
|
||||
8. **CA Certificate Installation**: Automatically import hardcoded CA certificate to Windows trusted root certificate authorities
|
||||
9. **Redirect Transparency**: All HTTP redirects (301/302/etc.) are passed through exactly as-is without modification
|
||||
10. **Built-in Testing**: Use `-test` flag to verify proxy functionality and connectivity
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. **Go 1.21+**: Ensure Go language environment is installed
|
||||
2. **OpenSSL**: For processing P12 certificate files (optional, will use basic configuration if not available)
|
||||
3. **Administrator Privileges**: Setting system proxy and installing certificates requires administrator privileges
|
||||
|
||||
## Installation and Usage
|
||||
|
||||
### 1. Clone or Download Project
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd mitm
|
||||
```
|
||||
|
||||
### 2. Install Dependencies
|
||||
|
||||
```bash
|
||||
go mod tidy
|
||||
```
|
||||
|
||||
### 3. Prepare Certificate Files
|
||||
|
||||
Ensure you have the following files:
|
||||
- `cert.p12`: P12 certificate file containing CA and private key
|
||||
- `CA.crt`: CA certificate file
|
||||
|
||||
### 4. Configuration File
|
||||
|
||||
Edit the `config.toml` file:
|
||||
|
||||
```toml
|
||||
# Domains of interest configuration
|
||||
domains_of_interest = [
|
||||
"example.com",
|
||||
"httpbin.org",
|
||||
"api.github.com",
|
||||
"www.google.com"
|
||||
]
|
||||
|
||||
[proxy]
|
||||
port = 8080
|
||||
cert_file = "cert.p12"
|
||||
cert_password = "your_password_here" # Change to your certificate password
|
||||
ca_cert_file = "CA.crt"
|
||||
|
||||
[dump]
|
||||
output_dir = "traffic_dumps"
|
||||
```
|
||||
|
||||
### 5. Run Program
|
||||
|
||||
**Important**: Need to run as administrator:
|
||||
|
||||
```bash
|
||||
# Open PowerShell or Command Prompt as administrator
|
||||
go run .
|
||||
```
|
||||
|
||||
Or compile and run:
|
||||
|
||||
```bash
|
||||
go build -o mitm.exe
|
||||
# Run as administrator
|
||||
./mitm.exe
|
||||
```
|
||||
|
||||
## Usage Instructions
|
||||
|
||||
1. **Start Program**: The program will automatically:
|
||||
- Install CA certificate to system trusted root certificate store
|
||||
- Set system proxy to `127.0.0.1:8080`
|
||||
- Start proxy server
|
||||
|
||||
2. **Traffic Interception**:
|
||||
- All HTTP/HTTPS traffic will be intercepted **transparently**
|
||||
- No modification of requests, responses, or redirects
|
||||
- Each request will be saved to `traffic_dumps` directory
|
||||
- Traffic from domains of interest will be printed to console
|
||||
- HTTPS traffic is decrypted when possible, falls back to encrypted passthrough
|
||||
|
||||
3. **Testing Connectivity**:
|
||||
```bash
|
||||
# Test proxy functionality
|
||||
go run . -test
|
||||
```
|
||||
|
||||
4. **Stop Program**:
|
||||
- Press `Ctrl+C` to stop program
|
||||
- Program will automatically restore original system proxy settings
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
mitm/
|
||||
├── main.go # Main program file
|
||||
├── cert_utils.go # Certificate processing tools
|
||||
├── config.toml # Configuration file
|
||||
├── go.mod # Go module file
|
||||
├── cert.p12 # P12 certificate file (you need to provide)
|
||||
├── CA.crt # CA certificate file (you need to provide)
|
||||
└── traffic_dumps/ # Traffic dump directory (auto-created)
|
||||
```
|
||||
|
||||
## Output File Format
|
||||
|
||||
### HTTP Traffic Files
|
||||
Filename format: `YYYYMMDD_HHMMSS_domain.txt`
|
||||
|
||||
Content includes:
|
||||
- Request information (method, URL, headers, body)
|
||||
- Response information (status code, headers, body)
|
||||
|
||||
### HTTPS Traffic Files
|
||||
Filename format: `YYYYMMDD_HHMMSS_domain_direction.bin`
|
||||
|
||||
Contains encrypted binary data.
|
||||
|
||||
## Important Notes
|
||||
|
||||
1. **Administrator Privileges**: Program needs administrator privileges to modify system proxy settings and install certificates
|
||||
2. **Certificate Security**: Please ensure the security of P12 certificate files, do not hardcode passwords in production environments
|
||||
3. **Network Security**: This tool is only for legal network debugging and testing purposes
|
||||
4. **System Compatibility**: Currently only supports Windows systems
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
1. **Certificate Loading Failed**:
|
||||
- Check P12 file path and password
|
||||
- Ensure OpenSSL is installed (optional)
|
||||
|
||||
2. **Proxy Setting Failed**:
|
||||
- Ensure running with administrator privileges
|
||||
- Check if port 8080 is occupied
|
||||
|
||||
3. **CA Certificate Installation Failed**:
|
||||
- Ensure CA.crt file exists and format is correct
|
||||
- Check administrator privileges
|
||||
|
||||
## Development and Customization
|
||||
|
||||
You can modify the following parts as needed:
|
||||
- Add more domains of interest in `config.toml`
|
||||
- Modify proxy port
|
||||
- Customize traffic dump format
|
||||
- Add more traffic analysis features
|
||||
|
||||
## License
|
||||
|
||||
Please see the LICENSE file for license information.
|
||||
151
TROUBLESHOOTING.md
Normal file
151
TROUBLESHOOTING.md
Normal file
@ -0,0 +1,151 @@
|
||||
# MITM Proxy Troubleshooting Guide
|
||||
|
||||
## ERR_TUNNEL_CONNECTION_FAILED Error
|
||||
|
||||
This error typically occurs when the browser cannot establish a secure tunnel through the proxy. Here are the most common causes and solutions:
|
||||
|
||||
### 1. Certificate Issues
|
||||
|
||||
**Problem**: The CA certificate is not properly installed or trusted by the browser.
|
||||
|
||||
**Solutions**:
|
||||
- Run the program as Administrator to ensure certificate installation
|
||||
- Manually verify certificate installation:
|
||||
```cmd
|
||||
certlm.msc
|
||||
```
|
||||
Check if "Charles Proxy CA" appears in "Trusted Root Certification Authorities"
|
||||
|
||||
- If certificate installation fails, try:
|
||||
```cmd
|
||||
certutil -addstore -f "Root" CA.crt
|
||||
```
|
||||
|
||||
### 2. Proxy Configuration Issues
|
||||
|
||||
**Problem**: System proxy is not properly configured or there are conflicting proxy settings.
|
||||
|
||||
**Solutions**:
|
||||
- Verify proxy settings in Windows:
|
||||
- Go to Settings > Network & Internet > Proxy
|
||||
- Ensure "Use a proxy server" is enabled
|
||||
- Check that proxy address is `127.0.0.1:8080`
|
||||
|
||||
- Clear existing proxy settings:
|
||||
```cmd
|
||||
netsh winhttp reset proxy
|
||||
```
|
||||
|
||||
### 3. Firewall/Antivirus Blocking
|
||||
|
||||
**Problem**: Security software is blocking the proxy connections.
|
||||
|
||||
**Solutions**:
|
||||
- Temporarily disable Windows Firewall
|
||||
- Add exception for the proxy program in antivirus software
|
||||
- Add exception for port 8080
|
||||
|
||||
### 4. TLS Handshake Issues
|
||||
|
||||
**Problem**: The proxy cannot properly negotiate TLS connections.
|
||||
|
||||
**Solutions**:
|
||||
- The updated code now includes:
|
||||
- Better TLS handshake handling
|
||||
- Fallback to transparent proxy mode
|
||||
- Improved error logging
|
||||
- Connection timeouts
|
||||
|
||||
### 5. Testing and Debugging
|
||||
|
||||
Use the built-in test mode to verify connectivity:
|
||||
|
||||
```cmd
|
||||
# Run with test flag
|
||||
go run . -test
|
||||
```
|
||||
|
||||
This will:
|
||||
- Start the proxy server
|
||||
- Test HTTP and HTTPS connections
|
||||
- Show detailed error messages
|
||||
- Help identify the specific issue
|
||||
|
||||
### 6. Common Error Messages and Solutions
|
||||
|
||||
**"TLS handshake failed"**:
|
||||
- Certificate not trusted by browser
|
||||
- Try accessing a simple HTTP site first
|
||||
- Check certificate installation
|
||||
|
||||
**"Failed to connect to target server"**:
|
||||
- Network connectivity issue
|
||||
- DNS resolution problems
|
||||
- Target server blocking connections
|
||||
|
||||
**"Write error" or "Read error"**:
|
||||
- Connection interrupted
|
||||
- Network timeout
|
||||
- Proxy overloaded
|
||||
|
||||
**HTTP Redirects (302/301) Issues**:
|
||||
- ✅ FIXED: Proxy is now completely transparent
|
||||
- All redirects are passed through exactly as-is
|
||||
- Browser handles redirects automatically
|
||||
- No interference with redirect chains
|
||||
|
||||
### 7. Manual Testing Steps
|
||||
|
||||
1. **Test without proxy**:
|
||||
```cmd
|
||||
curl https://httpbin.org/ip
|
||||
```
|
||||
|
||||
2. **Test with proxy**:
|
||||
```cmd
|
||||
curl --proxy 127.0.0.1:8080 https://httpbin.org/ip
|
||||
```
|
||||
|
||||
3. **Test certificate**:
|
||||
```cmd
|
||||
curl --proxy 127.0.0.1:8080 --insecure https://httpbin.org/ip
|
||||
```
|
||||
|
||||
### 8. Browser-Specific Issues
|
||||
|
||||
**Chrome**:
|
||||
- Clear SSL state: Settings > Privacy and security > Security > Manage certificates > Clear SSL state
|
||||
- Disable certificate transparency checks temporarily
|
||||
|
||||
**Firefox**:
|
||||
- Import certificate manually: Settings > Privacy & Security > Certificates > Import
|
||||
- Disable OCSP checking temporarily
|
||||
|
||||
**Edge**:
|
||||
- Same as Chrome (uses Windows certificate store)
|
||||
|
||||
### 9. Advanced Debugging
|
||||
|
||||
Enable verbose logging by modifying the code to show more details:
|
||||
- Connection attempts
|
||||
- TLS handshake details
|
||||
- Certificate validation steps
|
||||
- Network I/O operations
|
||||
|
||||
### 10. Alternative Solutions
|
||||
|
||||
If the proxy still doesn't work:
|
||||
|
||||
1. **Use transparent mode only**: Modify code to skip TLS termination
|
||||
2. **Use different certificate**: Generate new certificates with proper SAN fields
|
||||
3. **Use different port**: Change from 8080 to 8081 or 3128
|
||||
4. **Bypass problematic domains**: Add exceptions for specific sites
|
||||
|
||||
## Getting Help
|
||||
|
||||
If none of these solutions work:
|
||||
|
||||
1. Run with `-test` flag and save the output
|
||||
2. Check Windows Event Viewer for errors
|
||||
3. Use Process Monitor to see file/registry access issues
|
||||
4. Provide the exact error message and browser version
|
||||
75
UTF8_FIX_README.md
Normal file
75
UTF8_FIX_README.md
Normal file
@ -0,0 +1,75 @@
|
||||
# UTF-8 Encoding Fix for Chinese Windows Systems
|
||||
|
||||
## Problem
|
||||
On Chinese Windows systems, the default console encoding is often GBK/GB2312, which causes garbled text when the MITM proxy outputs UTF-8 characters. This results in unreadable console output, especially for Unicode characters and symbols.
|
||||
|
||||
## Solution
|
||||
This fix implements a comprehensive UTF-8 encoding solution for Windows systems:
|
||||
|
||||
### 1. Batch File Fixes
|
||||
All batch files now include the command:
|
||||
```batch
|
||||
chcp 65001 >nul 2>&1
|
||||
```
|
||||
This sets the console code page to UTF-8 (65001) before running any commands.
|
||||
|
||||
**Fixed files:**
|
||||
- `run.bat`
|
||||
- `demo.bat`
|
||||
- `build.bat`
|
||||
- `test.bat`
|
||||
|
||||
### 2. Go Program Fixes
|
||||
The main Go program now automatically sets the console to UTF-8 mode on Windows:
|
||||
|
||||
```go
|
||||
// Set console to UTF-8 on Windows to prevent garbled text
|
||||
if runtime.GOOS == "windows" {
|
||||
setConsoleUTF8()
|
||||
}
|
||||
```
|
||||
|
||||
**Implementation details:**
|
||||
- Added `setConsoleUTF8()` function that executes `chcp 65001`
|
||||
- Automatic detection of Windows OS using `runtime.GOOS`
|
||||
- Enhanced console output with UTF-8 symbols (✓, 🚀, 🛑, etc.)
|
||||
|
||||
### 3. Testing
|
||||
A test script `utf8_test.bat` is provided to verify the fix works correctly:
|
||||
```batch
|
||||
utf8_test.bat
|
||||
```
|
||||
|
||||
This script:
|
||||
- Sets console to UTF-8
|
||||
- Displays various Unicode characters (Chinese, Japanese, Korean)
|
||||
- Runs the MITM proxy in test mode to verify UTF-8 output
|
||||
|
||||
## Usage
|
||||
Simply run any of the batch files as usual. The UTF-8 encoding will be automatically configured:
|
||||
|
||||
```batch
|
||||
run.bat # Start the proxy with UTF-8 support
|
||||
demo.bat # Run the demo with UTF-8 support
|
||||
utf8_test.bat # Test UTF-8 encoding specifically
|
||||
```
|
||||
|
||||
## Verification
|
||||
After applying the fix, you should see:
|
||||
- ✓ Clear display of Unicode characters
|
||||
- 🚀 Proper rendering of emoji symbols
|
||||
- 正确显示中文字符 (Correct display of Chinese characters)
|
||||
- 日本語の文字が正しく表示される (Japanese characters display correctly)
|
||||
|
||||
## Technical Notes
|
||||
- Code page 65001 is the Windows UTF-8 code page
|
||||
- The fix is automatically applied only on Windows systems
|
||||
- No changes are needed for Linux/macOS systems
|
||||
- The original functionality remains unchanged
|
||||
|
||||
## Compatibility
|
||||
- Windows 10/11: Full support
|
||||
- Windows 8/8.1: Full support
|
||||
- Windows 7: Partial support (depends on system configuration)
|
||||
- Chinese, Japanese, Korean Windows: Full support
|
||||
- English Windows: Full support (no changes to existing behavior)
|
||||
29
build.bat
Normal file
29
build.bat
Normal file
@ -0,0 +1,29 @@
|
||||
@echo off
|
||||
REM Set console to UTF-8 encoding to prevent garbled text on Chinese Windows systems
|
||||
chcp 65001 >nul 2>&1
|
||||
echo Building MITM Proxy Server...
|
||||
|
||||
REM Download dependencies
|
||||
echo Downloading dependencies...
|
||||
go mod download
|
||||
|
||||
REM Build program
|
||||
echo Building executable...
|
||||
go build -o mitm.exe .
|
||||
|
||||
if %ERRORLEVEL% EQU 0 (
|
||||
echo.
|
||||
echo Build successful!
|
||||
echo Executable: mitm.exe
|
||||
echo.
|
||||
echo Usage:
|
||||
echo 1. Ensure cert.p12 and CA.crt files exist
|
||||
echo 2. Edit config.toml configuration file
|
||||
echo 3. Run mitm.exe as administrator
|
||||
echo.
|
||||
) else (
|
||||
echo.
|
||||
echo Build failed! Please check error messages.
|
||||
)
|
||||
|
||||
pause
|
||||
69
cert_base64.txt
Normal file
69
cert_base64.txt
Normal file
@ -0,0 +1,69 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
BBTOPefdAsbPZURS9djPzGhmw0NCbQICJxA=
|
||||
-----END CERTIFICATE-----
|
||||
268
cert_utils.go
Normal file
268
cert_utils.go
Normal file
@ -0,0 +1,268 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/rsa"
|
||||
"crypto/tls"
|
||||
"crypto/x509"
|
||||
"crypto/x509/pkix"
|
||||
"encoding/base64"
|
||||
"encoding/pem"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"software.sslmate.com/src/go-pkcs12"
|
||||
)
|
||||
|
||||
// Hardcoded certificate data - users need to replace these placeholders with actual certificate data
|
||||
const (
|
||||
// Base64 encoded data of P12 certificate - users need to replace with actual cert.p12 file content
|
||||
hardcodedP12Data = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
BBTOPefdAsbPZURS9djPzGhmw0NCbQICJxA=
|
||||
-----END CERTIFICATE-----`
|
||||
|
||||
// PEM format data of CA certificate - users need to replace with actual CA.crt file content
|
||||
hardcodedCACert = `-----BEGIN CERTIFICATE-----
|
||||
MIIFOTCCBCGgAwIBAgIGAZi8TmIsMA0GCSqGSIb3DQEBCwUAMIGgMTEwLwYDVQQDDChDaGFybGVz
|
||||
IFByb3h5IENBICgxOCBBdWcgMjAyNSwgQkxBQ0stUEMpMSUwIwYDVQQLDBxodHRwczovL2NoYXJs
|
||||
ZXNwcm94eS5jb20vc3NsMREwDwYDVQQKDAhYSzcyIEx0ZDERMA8GA1UEBwwIQXVja2xhbmQxETAP
|
||||
BgNVBAgMCEF1Y2tsYW5kMQswCQYDVQQGEwJOWjAeFw0yNTA4MTcwODMxNTBaFw0yNjA4MTcwODMx
|
||||
NTBaMIGgMTEwLwYDVQQDDChDaGFybGVzIFByb3h5IENBICgxOCBBdWcgMjAyNSwgQkxBQ0stUEMp
|
||||
MSUwIwYDVQQLDBxodHRwczovL2NoYXJsZXNwcm94eS5jb20vc3NsMREwDwYDVQQKDAhYSzcyIEx0
|
||||
ZDERMA8GA1UEBwwIQXVja2xhbmQxETAPBgNVBAgMCEF1Y2tsYW5kMQswCQYDVQQGEwJOWjCCASIw
|
||||
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKEmwh2Lk0017ak2c+3eKUGRsZVc5TSfcFaaiAk5
|
||||
kKMWj0pIXNKo2G8eERo4BYNqZi+icHGWBwmhAuUDJqpZMji2Qzv0jvuFDw0+UVVtp30RU/92GZYV
|
||||
C44df+qPTYqUuD+ZPKdlo2RZ38Jbru/VT7AQQ53cvcBJ6s7WzY9QQVui1Rd3jHRXnyb9/duccw22
|
||||
vo6f2/OX2mVEKpXd5/3g8d+D8EuoiTUKDbgM39diOYuelh8Xybf0Zy1ZU4nkYeaVwzf9djlgxa1E
|
||||
2Qb9SscxddGBJxyTrqtoG4ZLwzuwz3DX6KOEPX73I0Q8L+TBf7KQhBYkHSOa6HygE0Vgi3HoM4UC
|
||||
AwEAAaOCAXUwggFxMA8GA1UdEwEB/wQFMAMBAf8wggEtBglghkgBhvhCAQ0EggEeE4IBGlRoaXMg
|
||||
cm9vdCBjZXJ0aWZpY2F0ZSB3YXMgZ2VuZXJhdGVkIGJ5IENoYXJsZXMgUHJveHkgZm9yIFNTTCBQ
|
||||
cm94eWluZy4gSWYgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBwYXJ0IG9mIGEgY2VydGlmaWNhdGUgY2hh
|
||||
aW4sIHRoaXMgbWVhbnMgdGhhdCB5b3UncmUgYnJvd3NpbmcgdGhyb3VnaCBDaGFybGVzIFByb3h5
|
||||
IHdpdGggU1NMIFByb3h5aW5nIGVuYWJsZWQgZm9yIHRoaXMgd2Vic2l0ZS4gUGxlYXNlIHNlZSBo
|
||||
dHRwczovL2NoYXJsZXNwcm94eS5jb20vc3NsIGZvciBtb3JlIGluZm9ybWF0aW9uLjAOBgNVHQ8B
|
||||
Af8EBAMCAgQwHQYDVR0OBBYEFKBf+QLehq0dc4s7YMIUUFJdgWBfMA0GCSqGSIb3DQEBCwUAA4IB
|
||||
AQBc+K3gGnz00yv2XMYRMbeYLr3SD15Tx3NAPri08EY1wyyufkBCaI81tZSCMy4PkGAYN+zODrQ6
|
||||
MRj0tbABTNZHdzFCuazE+B2ce2Ka3PcQ1DNpGf60NYk9qBHpOxak+5XxrECFYjStYW3gLZ7mZSnI
|
||||
YX9doSujRpzSbVZFvVh4J1zCzF1NuD6VxxfFjppJ6EnvnSSQOly0e32NzibQi3akFb4E5hn58py/
|
||||
Eth3xl7mzWjcdKeKd30TAeg98PA+drJ8JsunIc2sICcNuAoVSKQEX4ihZHMhFLXl0MNdyWQtqHPR
|
||||
beQU9SvWF3DVmilrNO1neetL2TCZK5iMyIAHvqPo
|
||||
-----END CERTIFICATE-----`
|
||||
|
||||
// P12 certificate password - users need to modify to actual password
|
||||
hardcodedP12Password = "Admin!23"
|
||||
)
|
||||
|
||||
// loadHardcodedCertificate loads hardcoded P12 certificate
|
||||
func loadHardcodedCertificate() (*tls.Config, error) {
|
||||
// If hardcoded data is empty or placeholder, generate self-signed certificate
|
||||
if len(hardcodedP12Data) < 100 {
|
||||
fmt.Println("Warning: No valid P12 certificate data provided, generating self-signed certificate for testing")
|
||||
return generateSelfSignedCert()
|
||||
}
|
||||
|
||||
// Decode base64 data
|
||||
p12Data, err := decodeBase64String(hardcodedP12Data)
|
||||
if err != nil {
|
||||
fmt.Printf("Warning: Unable to decode P12 data (%v), generating self-signed certificate\n", err)
|
||||
return generateSelfSignedCert()
|
||||
}
|
||||
|
||||
// Parse P12 data
|
||||
privateKey, cert, caCerts, err := pkcs12.DecodeChain(p12Data, hardcodedP12Password)
|
||||
if err != nil {
|
||||
fmt.Printf("Warning: Unable to parse P12 certificate (%v), generating self-signed certificate\n", err)
|
||||
return generateSelfSignedCert()
|
||||
}
|
||||
|
||||
// Create certificate chain
|
||||
certificates := []tls.Certificate{
|
||||
{
|
||||
Certificate: [][]byte{cert.Raw},
|
||||
PrivateKey: privateKey,
|
||||
},
|
||||
}
|
||||
|
||||
// Create CA certificate pool
|
||||
caCertPool := x509.NewCertPool()
|
||||
for _, caCert := range caCerts {
|
||||
caCertPool.AddCert(caCert)
|
||||
}
|
||||
|
||||
// If there's a hardcoded CA certificate, add it to the pool
|
||||
if len(hardcodedCACert) > 100 {
|
||||
block, _ := pem.Decode([]byte(hardcodedCACert))
|
||||
if block != nil {
|
||||
if caCert, err := x509.ParseCertificate(block.Bytes); err == nil {
|
||||
caCertPool.AddCert(caCert)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return &tls.Config{
|
||||
Certificates: certificates,
|
||||
RootCAs: caCertPool,
|
||||
InsecureSkipVerify: true,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// decodeBase64String decodes base64 string, ignoring whitespace and comments
|
||||
func decodeBase64String(data string) ([]byte, error) {
|
||||
// Remove comment lines and whitespace
|
||||
var cleanData strings.Builder
|
||||
lines := strings.SplitSeq(data, "\n")
|
||||
for line := range lines {
|
||||
line = strings.TrimSpace(line)
|
||||
if len(line) > 0 && !strings.HasPrefix(line, "--") {
|
||||
cleanData.WriteString(line)
|
||||
}
|
||||
}
|
||||
|
||||
if cleanData.Len() == 0 {
|
||||
return nil, fmt.Errorf("no valid base64 data")
|
||||
}
|
||||
|
||||
// Use standard base64 decoding
|
||||
return base64.StdEncoding.DecodeString(cleanData.String())
|
||||
}
|
||||
|
||||
// generateSelfSignedCert generates self-signed certificate for testing
|
||||
func generateSelfSignedCert() (*tls.Config, error) {
|
||||
// Generate private key
|
||||
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Create certificate template
|
||||
template := x509.Certificate{
|
||||
SerialNumber: big.NewInt(1),
|
||||
Subject: pkix.Name{
|
||||
Organization: []string{"MITM Proxy"},
|
||||
OrganizationalUnit: []string{"MITM Proxy CA"},
|
||||
Country: []string{"US"},
|
||||
Province: []string{""},
|
||||
Locality: []string{""},
|
||||
StreetAddress: []string{""},
|
||||
PostalCode: []string{""},
|
||||
CommonName: "MITM Proxy Root CA",
|
||||
},
|
||||
NotBefore: time.Now(),
|
||||
NotAfter: time.Now().Add(365 * 24 * time.Hour),
|
||||
// Proper key usage for CA certificate
|
||||
KeyUsage: x509.KeyUsageKeyEncipherment |
|
||||
x509.KeyUsageDigitalSignature |
|
||||
x509.KeyUsageCertSign |
|
||||
x509.KeyUsageCRLSign,
|
||||
// Extended key usage for server authentication
|
||||
ExtKeyUsage: []x509.ExtKeyUsage{
|
||||
x509.ExtKeyUsageServerAuth,
|
||||
x509.ExtKeyUsageClientAuth,
|
||||
},
|
||||
BasicConstraintsValid: true,
|
||||
IsCA: true,
|
||||
MaxPathLen: 0,
|
||||
MaxPathLenZero: true,
|
||||
// Add Subject Alternative Names for flexibility
|
||||
DNSNames: []string{
|
||||
"localhost",
|
||||
"*.localhost",
|
||||
"127.0.0.1",
|
||||
},
|
||||
IPAddresses: []net.IP{
|
||||
net.IPv4(127, 0, 0, 1),
|
||||
net.IPv6loopback,
|
||||
},
|
||||
}
|
||||
|
||||
// Generate certificate
|
||||
certDER, err := x509.CreateCertificate(rand.Reader, &template, &template, &privateKey.PublicKey, privateKey)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Create TLS certificate
|
||||
cert := tls.Certificate{
|
||||
Certificate: [][]byte{certDER},
|
||||
PrivateKey: privateKey,
|
||||
}
|
||||
|
||||
return &tls.Config{
|
||||
Certificates: []tls.Certificate{cert},
|
||||
InsecureSkipVerify: true,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// getHardcodedCACert returns hardcoded CA certificate
|
||||
func getHardcodedCACert() string {
|
||||
return hardcodedCACert
|
||||
}
|
||||
124
certificate_guide.md
Normal file
124
certificate_guide.md
Normal file
@ -0,0 +1,124 @@
|
||||
# Certificate Configuration Guide
|
||||
|
||||
## 📋 Overview
|
||||
|
||||
This program now uses hardcoded certificate data and does not require external certificate files. You need to embed the certificate data into the source code.
|
||||
|
||||
## 🔧 Configuration Steps
|
||||
|
||||
### Step 1: Prepare Certificate Files
|
||||
|
||||
Ensure you have the following files:
|
||||
- `cert.p12` - PKCS#12 format certificate file (contains private key and certificate)
|
||||
- `CA.crt` - CA root certificate file
|
||||
|
||||
### Step 2: Convert P12 Certificate to Base64
|
||||
|
||||
#### Windows System:
|
||||
```cmd
|
||||
certutil -encode cert.p12 cert_base64.txt
|
||||
```
|
||||
|
||||
#### Linux/Mac System:
|
||||
```bash
|
||||
base64 cert.p12 > cert_base64.txt
|
||||
```
|
||||
|
||||
### Step 3: Edit Source Code
|
||||
|
||||
Open the `cert_utils.go` file and find the following constants to replace:
|
||||
|
||||
#### 1. P12 Certificate Data
|
||||
Copy the content of `cert_base64.txt` to the `hardcodedP12Data` constant:
|
||||
|
||||
```go
|
||||
const (
|
||||
hardcodedP12Data = `
|
||||
MIIKYwIBAzCCCh8GCSqGSIb3DQEHAaCCChAEggmMIIIJiDCCBW8GCSqGSIb3DQEH
|
||||
BqCCBWAwggVcAgEAMIIFVQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQI7n7Q
|
||||
... (your base64 certificate data)
|
||||
`
|
||||
```
|
||||
|
||||
#### 2. CA Certificate Data
|
||||
Copy the complete PEM content of the `CA.crt` file to the `hardcodedCACert` constant:
|
||||
|
||||
```go
|
||||
hardcodedCACert = `-----BEGIN CERTIFICATE-----
|
||||
MIIDXTCCAkWgAwIBAgIJAKoK/OvD/h8wMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
|
||||
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
|
||||
... (your CA certificate data)
|
||||
-----END CERTIFICATE-----`
|
||||
```
|
||||
|
||||
#### 3. Certificate Password
|
||||
Modify the certificate password:
|
||||
|
||||
```go
|
||||
hardcodedP12Password = "your_actual_password"
|
||||
```
|
||||
|
||||
### Step 4: Recompile
|
||||
|
||||
After configuration is complete, recompile the program:
|
||||
|
||||
```bash
|
||||
go build -o mitm.exe .
|
||||
```
|
||||
|
||||
## ✅ Verify Configuration
|
||||
|
||||
When starting the program, you should see:
|
||||
- ✅ "CA certificate installed successfully" - indicates CA certificate is configured correctly
|
||||
- ✅ No certificate-related error messages
|
||||
|
||||
If you see "Warning: No valid P12 certificate data provided, generating self-signed certificate for testing", it means the P12 certificate configuration has issues.
|
||||
|
||||
## 🔍 Feature Improvements
|
||||
|
||||
### HTTPS Traffic Decryption
|
||||
The program can now:
|
||||
1. **Transparent Proxy** - When TLS decryption fails, still proxy encrypted traffic
|
||||
2. **Decryption Proxy** - Use your certificate to decrypt HTTPS traffic
|
||||
3. **Dual Dump** - Save both encrypted and decrypted data
|
||||
|
||||
### Output File Format
|
||||
- `timestamp_domain_request_encrypted.bin` - Encrypted request data
|
||||
- `timestamp_domain_request_decrypted.bin` - Decrypted request data
|
||||
- `timestamp_domain_response_encrypted.bin` - Encrypted response data
|
||||
- `timestamp_domain_response_decrypted.bin` - Decrypted response data
|
||||
|
||||
### Complete Data Output
|
||||
Console output now shows:
|
||||
- Complete HTTP request/response data (no longer truncated)
|
||||
- Complete HTTPS decrypted traffic content
|
||||
- Data length information
|
||||
|
||||
## ⚠️ Security Considerations
|
||||
|
||||
1. **Source Code Security** - Certificate data is now embedded in source code, ensure source code security
|
||||
2. **Password Protection** - Consider using environment variables or other methods to protect certificate passwords
|
||||
3. **Certificate Validity** - Regularly check and update embedded certificates
|
||||
4. **Access Control** - Restrict access to compiled programs
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### Issue 1: Certificate Parsing Failed
|
||||
**Cause**: Base64 data format error or incomplete
|
||||
**Solution**: Check base64 conversion process, ensure data integrity
|
||||
|
||||
### Issue 2: TLS Handshake Failed
|
||||
**Cause**: Certificate doesn't match domain or certificate has expired
|
||||
**Solution**: Check certificate validity and domain configuration
|
||||
|
||||
### Issue 3: CA Certificate Installation Failed
|
||||
**Cause**: CA certificate format error or insufficient permissions
|
||||
**Solution**: Ensure running with administrator privileges, check CA certificate format
|
||||
|
||||
## 📞 Technical Support
|
||||
|
||||
If you encounter configuration issues:
|
||||
1. Check certificate file format and validity
|
||||
2. Verify base64 conversion results
|
||||
3. Confirm running with administrator privileges
|
||||
4. Check console error messages
|
||||
101
config.go
Normal file
101
config.go
Normal file
@ -0,0 +1,101 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Simple TOML parser, only handles basic formats we need
|
||||
func parseConfig(filename string) (*Config, error) {
|
||||
file, err := os.Open(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
config := &Config{
|
||||
DomainsOfInterest: []string{},
|
||||
}
|
||||
|
||||
// Set default values
|
||||
config.Proxy.Port = 8080
|
||||
config.Dump.OutputDir = "traffic_dumps"
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
var currentSection string
|
||||
|
||||
for scanner.Scan() {
|
||||
line := strings.TrimSpace(scanner.Text())
|
||||
|
||||
// Skip empty lines and comments
|
||||
if line == "" || strings.HasPrefix(line, "#") {
|
||||
continue
|
||||
}
|
||||
|
||||
// Check if it's a section title
|
||||
if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") {
|
||||
currentSection = strings.Trim(line, "[]")
|
||||
continue
|
||||
}
|
||||
|
||||
// Parse key-value pairs
|
||||
parts := strings.SplitN(line, "=", 2)
|
||||
if len(parts) != 2 {
|
||||
continue
|
||||
}
|
||||
|
||||
key := strings.TrimSpace(parts[0])
|
||||
value := strings.TrimSpace(parts[1])
|
||||
|
||||
// Handle array values
|
||||
if strings.HasPrefix(value, "[") && strings.HasSuffix(value, "]") {
|
||||
arrayStr := strings.Trim(value, "[]")
|
||||
if key == "domains_of_interest" {
|
||||
if arrayStr != "" {
|
||||
items := strings.Split(arrayStr, ",")
|
||||
for _, item := range items {
|
||||
item = strings.TrimSpace(item)
|
||||
item = strings.Trim(item, "\"")
|
||||
if item != "" {
|
||||
config.DomainsOfInterest = append(config.DomainsOfInterest, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
// Handle string values
|
||||
value = strings.Trim(value, "\"")
|
||||
|
||||
// Set values based on current section
|
||||
switch currentSection {
|
||||
case "proxy":
|
||||
switch key {
|
||||
case "port":
|
||||
if port, err := strconv.Atoi(value); err == nil {
|
||||
config.Proxy.Port = port
|
||||
}
|
||||
}
|
||||
case "dump":
|
||||
switch key {
|
||||
case "output_dir":
|
||||
config.Dump.OutputDir = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
func (c *Config) String() string {
|
||||
return fmt.Sprintf("Config{DomainsOfInterest: %v, Proxy: {Port: %d}, Dump: {OutputDir: %s}}",
|
||||
c.DomainsOfInterest, c.Proxy.Port, c.Dump.OutputDir)
|
||||
}
|
||||
16
config.toml
Normal file
16
config.toml
Normal file
@ -0,0 +1,16 @@
|
||||
# Domains of interest configuration
|
||||
# Requests and responses for these domains will be printed to stdout
|
||||
domains_of_interest = [
|
||||
"example.com",
|
||||
"httpbin.org",
|
||||
"api.github.com",
|
||||
"www.google.com"
|
||||
]
|
||||
|
||||
# Proxy server configuration
|
||||
[proxy]
|
||||
port = 8080
|
||||
|
||||
# Traffic dump configuration
|
||||
[dump]
|
||||
output_dir = "traffic_dumps"
|
||||
60
debug_proxy.bat
Normal file
60
debug_proxy.bat
Normal file
@ -0,0 +1,60 @@
|
||||
@echo off
|
||||
echo ========================================
|
||||
echo MITM Proxy Debug Script
|
||||
echo ========================================
|
||||
echo.
|
||||
echo This script will help diagnose why HTTPS CONNECT requests
|
||||
echo are not reaching the proxy server.
|
||||
echo.
|
||||
pause
|
||||
|
||||
echo 1. Checking current Windows proxy settings...
|
||||
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable
|
||||
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
|
||||
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride
|
||||
echo.
|
||||
|
||||
echo 2. Checking WinHTTP proxy settings...
|
||||
netsh winhttp show proxy
|
||||
echo.
|
||||
|
||||
echo 3. Testing if proxy port is listening...
|
||||
netstat -an | findstr ":8080"
|
||||
echo.
|
||||
|
||||
echo 4. Testing direct connection to proxy...
|
||||
curl -v --max-time 5 http://127.0.0.1:8080/proxy-health
|
||||
echo.
|
||||
|
||||
echo 5. Testing HTTP proxy functionality...
|
||||
curl -v --proxy http://127.0.0.1:8080 --max-time 10 http://httpbin.org/ip
|
||||
echo.
|
||||
|
||||
echo 6. Testing HTTPS with explicit CONNECT...
|
||||
echo Sending manual CONNECT request...
|
||||
(
|
||||
echo CONNECT httpbin.org:443 HTTP/1.1
|
||||
echo Host: httpbin.org:443
|
||||
echo.
|
||||
) | telnet 127.0.0.1 8080
|
||||
echo.
|
||||
|
||||
echo 7. Testing HTTPS proxy with curl...
|
||||
curl -v --proxy http://127.0.0.1:8080 --max-time 15 https://httpbin.org/ip
|
||||
echo.
|
||||
|
||||
echo 8. Checking for conflicting proxy software...
|
||||
tasklist | findstr /i "fiddler\|charles\|burp\|owasp"
|
||||
echo.
|
||||
|
||||
echo 9. Testing with different curl proxy syntax...
|
||||
curl -v -x 127.0.0.1:8080 --max-time 15 https://httpbin.org/ip
|
||||
echo.
|
||||
|
||||
echo Debug complete.
|
||||
echo.
|
||||
echo IMPORTANT: Check the MITM proxy console output during these tests.
|
||||
echo If you see NO CONNECT requests in the proxy logs, the issue is
|
||||
echo with Windows proxy configuration or browser proxy detection.
|
||||
echo.
|
||||
pause
|
||||
100
demo.bat
Normal file
100
demo.bat
Normal file
@ -0,0 +1,100 @@
|
||||
@echo off
|
||||
REM Set console to UTF-8 encoding to prevent garbled text on Chinese Windows systems
|
||||
chcp 65001 >nul 2>&1
|
||||
|
||||
echo ========================================
|
||||
echo MITM Proxy Server Functionality Demo
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
REM Check for Administrator privileges
|
||||
net session >nul 2>&1
|
||||
if %errorLevel% neq 0 (
|
||||
echo Error: Administrator privileges required!
|
||||
echo Please right-click this script and select "Run as administrator"
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo ✅ Administrator privileges check passed
|
||||
|
||||
REM Check program file
|
||||
if not exist "mitm.exe" (
|
||||
echo ❌ mitm.exe not found, compiling...
|
||||
go build -o mitm.exe .
|
||||
if %errorLevel% neq 0 (
|
||||
echo ❌ Compilation failed!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo ✅ Compilation successful
|
||||
) else (
|
||||
echo ✅ Program file exists
|
||||
)
|
||||
|
||||
REM Check configuration file
|
||||
if not exist "config.toml" (
|
||||
echo ❌ config.toml not found!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo ✅ Configuration file exists
|
||||
|
||||
REM Create output directory
|
||||
if not exist "traffic_dumps" mkdir traffic_dumps
|
||||
echo ✅ Output directory created
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Function Description
|
||||
echo ========================================
|
||||
echo 📡 HTTP/HTTPS Proxy: 127.0.0.1:8080
|
||||
echo 📁 Traffic Dump Directory: traffic_dumps/
|
||||
echo 🔍 Domains of Interest: Configure in config.toml
|
||||
echo 🔐 HTTPS Decryption: Uses hardcoded certificates (if configured)
|
||||
echo 📄 Full Data Output: Displayed without truncation
|
||||
echo.
|
||||
|
||||
echo ========================================
|
||||
echo Test Suggestions
|
||||
echo ========================================
|
||||
echo 1. After starting the program, visit: http://httpbin.org/get
|
||||
echo 2. Visit: https://httpbin.org/get (Test HTTPS)
|
||||
echo 3. Check files in traffic_dumps/ directory
|
||||
echo 4. Observe the complete data output in the console
|
||||
echo.
|
||||
|
||||
echo ========================================
|
||||
echo Certificate Configuration Status
|
||||
echo ========================================
|
||||
findstr /C:"将您的cert.p12文件转换为base64字符串并粘贴在这里" cert_utils.go >nul
|
||||
if %errorLevel% equ 0 (
|
||||
echo ⚠️ P12 Certificate: Not configured (using self-signed certificate)
|
||||
echo Please refer to certificate_guide.md to configure a real certificate
|
||||
) else (
|
||||
echo ✅ P12 Certificate: Configured
|
||||
)
|
||||
|
||||
findstr /C:"将您的CA.crt文件内容粘贴在这里" cert_utils.go >nul
|
||||
if %errorLevel% equ 0 (
|
||||
echo ⚠️ CA Certificate: Not configured
|
||||
) else (
|
||||
echo ✅ CA Certificate: Configured
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Start Program
|
||||
echo ========================================
|
||||
echo Program will start in 5 seconds...
|
||||
echo Press Ctrl+C to stop the program
|
||||
echo.
|
||||
timeout /t 5 /nobreak >nul
|
||||
|
||||
echo Starting MITM proxy server...
|
||||
echo.
|
||||
mitm.exe
|
||||
|
||||
echo.
|
||||
echo Program exited.
|
||||
pause
|
||||
34
diagnose_proxy.bat
Normal file
34
diagnose_proxy.bat
Normal file
@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
echo ========================================
|
||||
echo MITM Proxy Diagnostic Tool
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
echo 1. Testing if port 8080 is listening...
|
||||
netstat -an | findstr ":8080"
|
||||
if %errorlevel% neq 0 (
|
||||
echo ❌ Port 8080 is not listening
|
||||
) else (
|
||||
echo ✅ Port 8080 is listening
|
||||
)
|
||||
echo.
|
||||
|
||||
echo 2. Testing direct HTTP connection to proxy...
|
||||
curl -v --max-time 5 http://127.0.0.1:8080/proxy-health 2>&1
|
||||
echo.
|
||||
|
||||
echo 3. Checking Windows proxy settings...
|
||||
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable
|
||||
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
|
||||
echo.
|
||||
|
||||
echo 4. Testing proxy with simple HTTP request...
|
||||
curl -v --proxy http://127.0.0.1:8080 --max-time 10 http://httpbin.org/ip 2>&1
|
||||
echo.
|
||||
|
||||
echo 5. Checking if any process is using port 8080...
|
||||
netstat -ano | findstr ":8080"
|
||||
echo.
|
||||
|
||||
echo Diagnostic complete.
|
||||
pause
|
||||
10
go.mod
Normal file
10
go.mod
Normal file
@ -0,0 +1,10 @@
|
||||
module mitm
|
||||
|
||||
go 1.25
|
||||
|
||||
require (
|
||||
golang.org/x/sys v0.15.0
|
||||
software.sslmate.com/src/go-pkcs12 v0.4.0
|
||||
)
|
||||
|
||||
require golang.org/x/crypto v0.17.0 // indirect
|
||||
6
go.sum
Normal file
6
go.sum
Normal file
@ -0,0 +1,6 @@
|
||||
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
|
||||
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
||||
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k=
|
||||
software.sslmate.com/src/go-pkcs12 v0.4.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI=
|
||||
67
proxy_log.txt
Normal file
67
proxy_log.txt
Normal file
@ -0,0 +1,67 @@
|
||||
Starting MITM proxy server...
|
||||
2025/08/20 01:14:22 Failed to install CA certificate: failed to install certificate: exit status 0x80070005, output: 使用选择的选项需要管理员权限。使用管理员命令提示来完成这些任务。
|
||||
Root "受信任的根证书颁发机构"
|
||||
无法打开证书存储。
|
||||
CertUtil: -addstore 失败: 0x80070005 (WIN32: 5 ERROR_ACCESS_DENIED)
|
||||
CertUtil: 拒绝访问。
|
||||
Warning: netsh winhttp reset failed: exit status 1
|
||||
Warning: netsh winhttp import failed: exit status 1
|
||||
鉁?System proxy set to 127.0.0.1:8080
|
||||
鉁?Proxy settings verified in Windows registry
|
||||
馃攳 Current Proxy Configuration:
|
||||
ProxyEnable: 1
|
||||
ProxyServer: 127.0.0.1:8080
|
||||
ProxyOverride: <local>
|
||||
WinHTTP Proxy Settings:
|
||||
|
||||
Current WinHTTP proxy settings:
|
||||
|
||||
Direct access (no proxy server).
|
||||
|
||||
|
||||
鈴?Waiting for server to start...
|
||||
馃殌 Starting proxy server on port 8080...
|
||||
馃敡 Starting HTTP server on :8080
|
||||
鉁?Successfully bound to port :8080
|
||||
[01:14:23] 馃摜 INCOMING: GET ipv6.msftconnecttest.com /connecttest.txt from 127.0.0.1:53610
|
||||
[01:14:23] 馃搵 Headers: 2 headers received
|
||||
[01:14:23] 馃搵 Header: Connection: Close
|
||||
[01:14:23] 馃搵 Header: User-Agent: Microsoft NCSI
|
||||
[01:14:23] 馃寪 Full URL: http://ipv6.msftconnecttest.com/connecttest.txt
|
||||
[01:14:23] 馃寪 Processing HTTP request for ipv6.msftconnecttest.com
|
||||
[01:14:25] 馃摜 INCOMING: GET crl3.digicert.com /DigiCertAssuredIDRootCA.crl from 127.0.0.1:53613
|
||||
[01:14:25] 馃搵 Headers: 6 headers received
|
||||
[01:14:25] 馃搵 Header: User-Agent: Microsoft-CryptoAPI/10.0
|
||||
[01:14:25] 馃搵 Header: Cache-Control: max-age = 6311
|
||||
[01:14:25] 馃搵 Header: Proxy-Connection: Keep-Alive
|
||||
[01:14:25] 馃搵 Header: Accept: */*
|
||||
[01:14:25] 馃搵 Header: If-Modified-Since: Wed, 13 Aug 2025 21:15:04 GMT
|
||||
[01:14:25] 馃搵 Header: If-None-Match: "689d0058-435"
|
||||
[01:14:25] 馃寪 Full URL: http://crl3.digicert.com/DigiCertAssuredIDRootCA.crl
|
||||
[01:14:25] 馃寪 Processing HTTP request for crl3.digicert.com
|
||||
[01:14:25] 馃摜 INCOMING: GET crl3.digicert.com /DigiCertGlobalRootCA.crl from 127.0.0.1:53613
|
||||
[01:14:25] 馃搵 Headers: 6 headers received
|
||||
[01:14:25] 馃搵 Header: Cache-Control: max-age = 6311
|
||||
[01:14:25] 馃搵 Header: Proxy-Connection: Keep-Alive
|
||||
[01:14:25] 馃搵 Header: Accept: */*
|
||||
[01:14:25] 馃搵 Header: If-Modified-Since: Wed, 13 Aug 2025 21:15:07 GMT
|
||||
[01:14:25] 馃搵 Header: If-None-Match: "689d005b-30b"
|
||||
[01:14:25] 馃搵 Header: User-Agent: Microsoft-CryptoAPI/10.0
|
||||
[01:14:25] 馃寪 Full URL: http://crl3.digicert.com/DigiCertGlobalRootCA.crl
|
||||
[01:14:25] 馃寪 Processing HTTP request for crl3.digicert.com
|
||||
[01:14:25] 馃摜 INCOMING: GET crl4.digicert.com /DigiCertHighAssuranceEVRootCA.crl from 127.0.0.1:53613
|
||||
[01:14:25] 馃搵 Headers: 6 headers received
|
||||
[01:14:25] 馃搵 Header: If-Modified-Since: Wed, 13 Aug 2025 21:15:07 GMT
|
||||
[01:14:25] 馃搵 Header: If-None-Match: "689d005b-2e4"
|
||||
[01:14:25] 馃搵 Header: User-Agent: Microsoft-CryptoAPI/10.0
|
||||
[01:14:25] 馃搵 Header: Cache-Control: max-age = 3862
|
||||
[01:14:25] 馃搵 Header: Proxy-Connection: Keep-Alive
|
||||
[01:14:25] 馃搵 Header: Accept: */*
|
||||
[01:14:25] 馃寪 Full URL: http://crl4.digicert.com/DigiCertHighAssuranceEVRootCA.crl
|
||||
[01:14:25] 馃寪 Processing HTTP request for crl4.digicert.com
|
||||
鉁?Proxy server appears to be starting (no immediate errors)
|
||||
馃攳 Testing basic proxy connectivity...
|
||||
馃彞 Health check request from 127.0.0.1:53625
|
||||
鉁?Basic proxy connectivity test passed
|
||||
馃彞 Health check request from 127.0.0.1:53670
|
||||
exit status 1
|
||||
43
run.bat
Normal file
43
run.bat
Normal file
@ -0,0 +1,43 @@
|
||||
@echo off
|
||||
REM Set console to UTF-8 encoding to prevent garbled text on Chinese Windows systems
|
||||
chcp 65001 >nul 2>&1
|
||||
|
||||
echo Starting MITM Proxy Server...
|
||||
echo.
|
||||
echo Warning: This program requires administrator privileges!
|
||||
echo If you encounter permission issues, please run this script as administrator.
|
||||
echo.
|
||||
|
||||
REM Check if running as administrator
|
||||
net session >nul 2>&1
|
||||
if %errorLevel% neq 0 (
|
||||
echo Error: Administrator privileges required!
|
||||
echo Please right-click this script and select "Run as administrator"
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Check necessary files
|
||||
if not exist "cert.p12" (
|
||||
echo Warning: cert.p12 file not found, program will use default configuration
|
||||
)
|
||||
|
||||
if not exist "CA.crt" (
|
||||
echo Warning: CA.crt file not found, CA certificate installation will be skipped
|
||||
)
|
||||
|
||||
if not exist "config.toml" (
|
||||
echo Error: config.toml configuration file not found!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Run program
|
||||
echo Starting proxy server...
|
||||
echo Press Ctrl+C to stop the program
|
||||
echo.
|
||||
go run .
|
||||
|
||||
echo.
|
||||
echo Program exited.
|
||||
pause
|
||||
44
test.bat
Normal file
44
test.bat
Normal file
@ -0,0 +1,44 @@
|
||||
@echo off
|
||||
REM Set console to UTF-8 encoding to prevent garbled text on Chinese Windows systems
|
||||
chcp 65001 >nul 2>&1
|
||||
echo Testing MITM Proxy Server...
|
||||
echo.
|
||||
|
||||
REM Check Go environment
|
||||
go version >nul 2>&1
|
||||
if %errorLevel% neq 0 (
|
||||
echo Error: Go environment not found, please install Go language
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo Go environment check passed
|
||||
|
||||
REM Check configuration file
|
||||
if not exist "config.toml" (
|
||||
echo Error: config.toml configuration file not found
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo Configuration file check passed
|
||||
|
||||
REM Attempt to compile program
|
||||
echo Compiling program...
|
||||
go build -o mitm_test.exe .
|
||||
if %errorLevel% neq 0 (
|
||||
echo Compilation failed! Please check code for errors
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo Compilation successful!
|
||||
|
||||
REM Clean up test file
|
||||
if exist "mitm_test.exe" del "mitm_test.exe"
|
||||
|
||||
echo.
|
||||
echo All tests passed! The program can run normally.
|
||||
echo Use run.bat to start the program (requires administrator privileges)
|
||||
echo.
|
||||
pause
|
||||
31
test_connect.bat
Normal file
31
test_connect.bat
Normal file
@ -0,0 +1,31 @@
|
||||
@echo off
|
||||
echo ========================================
|
||||
echo Manual CONNECT Test
|
||||
echo ========================================
|
||||
echo.
|
||||
echo This will manually test the CONNECT method
|
||||
echo to see if the proxy can handle HTTPS properly.
|
||||
echo.
|
||||
echo Make sure the MITM proxy is running first!
|
||||
echo.
|
||||
pause
|
||||
|
||||
echo Testing manual CONNECT request...
|
||||
echo.
|
||||
|
||||
echo Sending CONNECT request using curl...
|
||||
curl -v --proxy-header "Host: httpbin.org:443" --proxy http://127.0.0.1:8080 https://httpbin.org/ip 2>&1
|
||||
|
||||
echo.
|
||||
echo.
|
||||
echo Testing with different approach...
|
||||
curl -v -x 127.0.0.1:8080 https://httpbin.org/ip 2>&1
|
||||
|
||||
echo.
|
||||
echo.
|
||||
echo Testing basic connectivity to proxy...
|
||||
curl -v http://127.0.0.1:8080/proxy-health 2>&1
|
||||
|
||||
echo.
|
||||
echo Test completed. Check the proxy logs for CONNECT requests.
|
||||
pause
|
||||
22
test_https.bat
Normal file
22
test_https.bat
Normal file
@ -0,0 +1,22 @@
|
||||
@echo off
|
||||
echo ========================================
|
||||
echo HTTPS Connection Test
|
||||
echo ========================================
|
||||
echo.
|
||||
echo This will test HTTPS connections through the proxy
|
||||
echo and show detailed logs to help debug the issue.
|
||||
echo.
|
||||
echo Make sure the MITM proxy is running first!
|
||||
echo.
|
||||
pause
|
||||
|
||||
echo Testing HTTPS connection with curl...
|
||||
curl -v --proxy http://127.0.0.1:8080 --max-time 15 https://httpbin.org/ip 2>&1
|
||||
|
||||
echo.
|
||||
echo Testing HTTPS connection with different site...
|
||||
curl -v --proxy http://127.0.0.1:8080 --max-time 15 https://www.google.com 2>&1
|
||||
|
||||
echo.
|
||||
echo Test completed. Check the proxy logs for detailed information.
|
||||
pause
|
||||
33
test_https_fixed.bat
Normal file
33
test_https_fixed.bat
Normal file
@ -0,0 +1,33 @@
|
||||
@echo off
|
||||
echo ========================================
|
||||
echo Testing Fixed HTTPS Proxy
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Testing HTTPS connections with the fixed certificate handling
|
||||
echo.
|
||||
echo Make sure to:
|
||||
echo 1. Stop the current proxy (Ctrl+C)
|
||||
echo 2. Restart it with: go run .
|
||||
echo 3. Run this test
|
||||
echo.
|
||||
pause
|
||||
|
||||
echo Testing HTTPS connection to httpbin.org...
|
||||
curl -v --proxy http://127.0.0.1:8080 --max-time 15 https://httpbin.org/ip
|
||||
|
||||
echo.
|
||||
echo.
|
||||
echo Testing HTTPS connection to www.baidu.com...
|
||||
curl -v --proxy http://127.0.0.1:8080 --max-time 15 https://www.baidu.com
|
||||
|
||||
echo.
|
||||
echo.
|
||||
echo Testing HTTPS connection to www.google.com...
|
||||
curl -v --proxy http://127.0.0.1:8080 --max-time 15 https://www.google.com
|
||||
|
||||
echo.
|
||||
echo Test completed. Check the proxy console for detailed logs.
|
||||
echo.
|
||||
echo If you see certificate errors, the CA certificate needs to be installed.
|
||||
echo Run as Administrator to install the CA certificate automatically.
|
||||
pause
|
||||
12
test_proxy.bat
Normal file
12
test_proxy.bat
Normal file
@ -0,0 +1,12 @@
|
||||
@echo off
|
||||
echo Starting MITM Proxy with connectivity test...
|
||||
echo.
|
||||
echo Make sure to run this as Administrator!
|
||||
echo.
|
||||
pause
|
||||
|
||||
go run . -test
|
||||
|
||||
echo.
|
||||
echo Test completed. Press any key to exit...
|
||||
pause >nul
|
||||
27
utf8_test.bat
Normal file
27
utf8_test.bat
Normal file
@ -0,0 +1,27 @@
|
||||
@echo off
|
||||
REM UTF-8 Console Test Script
|
||||
REM Set console to UTF-8 encoding to prevent garbled text on Chinese Windows systems
|
||||
chcp 65001 >nul 2>&1
|
||||
|
||||
echo ========================================
|
||||
echo UTF-8 Console Encoding Test
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Testing Unicode characters:
|
||||
echo English: Hello World
|
||||
echo Chinese: 你好世界
|
||||
echo Japanese: こんにちは世界
|
||||
echo Korean: 안녕하세요 세계
|
||||
echo Symbols: ✓ ✗ ★ ♥ ◆ ▲
|
||||
echo.
|
||||
echo If you can see the above characters correctly,
|
||||
echo UTF-8 encoding is working properly.
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Testing MITM Proxy UTF-8 Output
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Building and running a quick test...
|
||||
go run -ldflags="-X main.testMode=true" .
|
||||
echo.
|
||||
pause
|
||||
Loading…
Reference in New Issue
Block a user