Skip to content

Commit 1c7dfdd

Browse files
committed
🎉 First Commit (for ACNS 2023)
0 parents  commit 1c7dfdd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+12057
-0
lines changed

.gitignore

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
__pycache__/
2+
data/
3+
.vscode/
4+
5+
# Distribution / packaging
6+
.Python
7+
build/
8+
develop-eggs/
9+
dist/
10+
downloads/
11+
eggs/
12+
.eggs/
13+
parts/
14+
sdist/
15+
var/
16+
wheels/
17+
share/python-wheels/
18+
*.egg-info/
19+
.installed.cfg
20+
*.egg
21+
MANIFEST

README.md

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Wi-Fi Chameleon
2+
3+
Captive Portal attack and Captive Portal Browser measurement tool suite.
4+
5+
## Install
6+
Python3 (version >=3.6) is required for this project.
7+
8+
Installation script:
9+
```bash
10+
mkvirtualenv wifi-chameleon
11+
git clone https://git.nslab.csie.ntu.edu.tw/joeywang4/wifi-chameleon-tool
12+
cd wifi-chameleon-tool
13+
sudo pip install .
14+
```
15+
16+
For development:
17+
```bash
18+
mkvirtualenv wifi-chameleon
19+
git clone https://git.nslab.csie.ntu.edu.tw/joeywang4/wifi-chameleon-tool
20+
cd wifi-chameleon-tool
21+
sudo pip install -e .
22+
```
23+
24+
If something went wrong, please check the configuration files located in `conf` directory is properly installed.
25+
26+
## Test Portal
27+
To create a test portal:
28+
```bash
29+
cd src
30+
sudo python3 main.py http_portal
31+
```
32+
33+
To cleanup this portal:
34+
```bash
35+
cd src
36+
sudo python3 main.py cleanup
37+
```
38+
39+
To set static portal files:
40+
Put the portal files to `portals/<portal name>` and use
41+
```bash
42+
sudo python3 src/main.py set_portal <portal name>
43+
```
44+
45+
To set portal to a given URL
46+
```bash
47+
sudo python3 src/main.py set_portal <URL>
48+
```
49+
50+
## Testing
51+
*\*Under development\**
52+
53+
`pytest` is required for testing.
54+
```bash
55+
pip install pytest
56+
# Under the root directory of this project
57+
pytest
58+
```

TEST.md

+144
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
# How to perform tests
2+
3+
## JS API
4+
```bash
5+
sudo python3 src/main.py set_portal js-api
6+
```
7+
8+
## Cookie
9+
10+
Read, write, and persistence
11+
```bash
12+
sudo python3 src/main.py set_portal cookies
13+
```
14+
First round should give "Previous cookie not presented. Set Cookie successfully.", and the second round should give "Previous cookie presented.Set Cookie successfully."
15+
16+
Value capacity:
17+
```bash
18+
sudo python3 src/main.py set_portal https://wpt.live/cookies/value/value.html
19+
```
20+
21+
SameSite:
22+
```bash
23+
sudo python3 src/main.py set_portal https://samesitetest.com/setup/confirm,https://shared.samesitetest.com,https://samesitetest-external.com,http://insecure-shared.samesitetest.com,http://insecure.samesitetest-external.com,http://insecure.samesitetest.com
24+
```
25+
26+
Secure:
27+
```bash
28+
sudo python3 src/main.py set_portal https://wpt.live/cookies/secure/set-from-http.https.sub.html # should work
29+
sudo python3 src/main.py set_portal http://wpt.live/cookies/secure/set-from-http.https.sub.html # should not work
30+
```
31+
~~Note that, if the captive portal session is not sandboxed, then in the HTTP test, the two tests should be failed and pass respectively, otherwise both tests will be failed.~~
32+
33+
HttpOnly:
34+
```bash
35+
sudo python3 src/main.py set_portal http://linux8.csie.ntu.edu.tw:8123/
36+
```
37+
38+
## SOP & CORS
39+
40+
```bash
41+
sudo python3 src/main.py set_portal https://wpt.live/cors/basic.htm
42+
sudo python3 src/main.py set_portal https://wpt.live/cors/origin.htm
43+
```
44+
45+
Notice that even some normal browsers can't pass all the test in `basic.html`.
46+
47+
## SSL
48+
49+
HTTP:
50+
```bash
51+
sudo python3 src/main.py set_portal default
52+
```
53+
54+
HTTP-credit-card:
55+
```bash
56+
sudo python3 src/main.py set_portal http://http-credit-card.badssl.com/
57+
```
58+
59+
Normal:
60+
```bash
61+
sudo python3 src/main.py set_portal https://joeywang4.github.io/
62+
```
63+
64+
Expired:
65+
```bash
66+
sudo python3 src/main.py set_portal https://expired.badssl.com/
67+
```
68+
69+
Wrong Host:
70+
```bash
71+
sudo python3 src/main.py set_portal https://wrong.host.badssl.com/
72+
```
73+
74+
Self-signed:
75+
```bash
76+
sudo python3 src/main.py set_portal https://self-signed.badssl.com/
77+
```
78+
79+
Untrusted root:
80+
```bash
81+
sudo python3 src/main.py set_portal https://untrusted-root.badssl.com/
82+
```
83+
84+
Revoked:
85+
```bash
86+
sudo python3 src/main.py set_portal https://revoked.badssl.com/
87+
```
88+
89+
Pinned:
90+
```bash
91+
sudo python3 src/main.py set_portal https://pinning-test.badssl.com/
92+
```
93+
94+
Bad cipher (DH 1024):
95+
```bash
96+
sudo python3 src/main.py set_portal https://dh1024.badssl.com/
97+
```
98+
99+
Outdated TLS:
100+
```bash
101+
sudo python3 src/main.py set_portal https://clienttest.ssllabs.com:8443/ssltest/viewMyClient.html,https://cdnjs.cloudflare.com/,https://ssllabs.com/,http://plaintext.ssllabs.com/,https://www.ssllabs.com/ # SSL
102+
sudo python3 src/main.py set_portal https://tls-v1-0.badssl.com:1010/ # TLS v1.0
103+
sudo python3 src/main.py set_portal https://tls-v1-1.badssl.com:1011/ # TLS v1.1
104+
```
105+
106+
HSTS:
107+
```bash
108+
sudo python3 src/main.py set_portal https://hsts.badssl.com/
109+
sudo python3 src/main.py set_portal http://hsts.badssl.com/
110+
```
111+
Suppose that HSTS is not followed in the same session, the first portal (the https one) would no display "HSTS is working."
112+
Suppose that HSTS is not followed in the different session, the second portal (the http one) would no display "HSTS is working."
113+
114+
Mixed content
115+
```bash
116+
sudo python3 src/main.py set_portal https://www.mixedcontentexamples.com/Test/NonSecureJS # JS
117+
sudo python3 src/main.py set_portal https://www.mixedcontentexamples.com/Test/NonSecureIFRAME # iframe
118+
```
119+
120+
Indirect Redirection:
121+
```bash
122+
sudo python3 src/main.py set_portal https://allenchou.cc/a-secret-page-for-test.html,https://self-signed.badssl.com/
123+
```
124+
125+
## LocalStorage
126+
```bash
127+
sudo python3 src/main.py set_portal localStorage
128+
```
129+
130+
## Safe Browsing
131+
Phishing
132+
```bash
133+
sudo python3 src/main.py set_portal https://testsafebrowsing.appspot.com/s/phishing.html
134+
```
135+
136+
Malware (download link)
137+
```bash
138+
sudo python3 src/main.py set_portal https://testsafebrowsing.appspot.com/s/malware.html
139+
```
140+
141+
Malware (direct access)
142+
```bash
143+
sudo python3 src/main.py set_portal https://testsafebrowsing.appspot.com/s/content.exe
144+
```
+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFvTCCA6UCFDp9p6lpEbl7R/ntFq2PAnQ447TIMA0GCSqGSIb3DQEBCwUAMIGa
3+
MQswCQYDVQQGEwJUVzEPMA0GA1UECAwGVGFpd2FuMQ8wDQYDVQQHDAZUYWlwZWkx
4+
DDAKBgNVBAoMA05UVTENMAsGA1UECwwEQ1NJRTEgMB4GA1UEAwwXKi53aWZpLWNo
5+
YW1lbGVvbi5lZHUudHcxKjAoBgkqhkiG9w0BCQEWG2FkbWluQHdpZmktY2hhbWVs
6+
ZW9uLmVkdS50dzAeFw0yMTAyMDIwNjE2MzlaFw0zMTAyMDIwNjE2MzlaMIGaMQsw
7+
CQYDVQQGEwJUVzEPMA0GA1UECAwGVGFpd2FuMQ8wDQYDVQQHDAZUYWlwZWkxDDAK
8+
BgNVBAoMA05UVTENMAsGA1UECwwEQ1NJRTEgMB4GA1UEAwwXKi53aWZpLWNoYW1l
9+
bGVvbi5lZHUudHcxKjAoBgkqhkiG9w0BCQEWG2FkbWluQHdpZmktY2hhbWVsZW9u
10+
LmVkdS50dzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPLRdRft89qt
11+
qdSN+JXCWq63KxY3vB8WIS0ZT1ghaAwSYPL8UBgQSm+qVYa2pY+T16XGG8Yftjvu
12+
6kN/VEJOcKZiFLHeSKLkCriWldrsnR6QPykgeEuCwOIi8O9up+Dy5rhR9x98FfMf
13+
AL2xndyMl9q9VlvFPtcsNyZMrmDUABLs9aRIZZlnoGMeumqPb1cSRghSRc3KmPjq
14+
o9g9QHHbz2dICvdDoEsHJdeDeAeVepsY85AV7b80EFXEk7qa5jJiyPizY5bQfMi+
15+
JmQ2O+31mNeXNF6GpujyFayM0PeeOomPY39uJtkVDdnk9CVjKxFLLffLzBNdgcXU
16+
LgX0HK19bHK2beytHetxbk6YWPCPbeZPEk+0/wzHR3Z0qG+XExBW02/kntwRf24I
17+
TkktfPBtsqk5Gs9aDVWTIHjVe9fLvjMmSzvdaIyDQreqe+Nnq5JY+tkiYdcxKSkw
18+
mp5Q5iYscj9BDTz3rKlJJOyOfe8ZIqdtWeISq7VurVhy1Zj4YRGkIFCh42H9AgLl
19+
gxVWKZkoYpDejQ58NMEt55Dv1P+H2Bpq1vZGfQjOJ1qSlulwPWfhOvNOI4c8tM2S
20+
WrHJ3/CInqNA9vujaOYz5dEqj86J/mjHE/wpJCRpCkVlKUXHkH7vR4J3DOwMbEcU
21+
r7+lHbx1B6vvtKADwr45RUPhLPKM7kHnAgMBAAEwDQYJKoZIhvcNAQELBQADggIB
22+
ABg6PhLL0RI+HvsLr8SXAv9Bmc0L1XMsf2NyBLv7+4rS7mcIvu0Ep33P4ApM2YDe
23+
QTu0WUVR/4/159sC/n/a/yqaFPFaZN6teVsQ6qVZ9fffqxwdSjIgNqiT/iXYgrSd
24+
pp+A5Zqr9cqTyM80bCpsCnZECcHCLtrKYHfDxRWVsdmFdsQKtH8RxXQlFDAwSYhQ
25+
h/oZ6FQMGrkUhHiSdCZrtpUhsz9z/oSYekasR3y0+EiMqdoCiSGspn1y6haNZLOy
26+
x2EiE+iCPUFpRYa35japcpqdUtCcYsg/ai333gP8DFAuBkE0p0pfCqX1wdXFfrRx
27+
/AZL2CIs7Ggmzu/AETdtIsXfqDga7Nt4IiLZOiVHtDnu0BYpoyOYLIkjojpc4qEB
28+
nGFyuekvvt4IwpXguPcHLDYE9X3LmKao8IJMyRuuNl2wgxm1vK/q8FnNMjVL++H7
29+
WX5G642345+r7EN55gAgZMQKJ7Bc5w20znTr55/VrT83qOlNXIGIHFvn9xiMmP69
30+
jbbKqWX53Z6ZUWWRjVuobj/e7XQju3Nu37qsv67bbnwdMOMdmQwCmYxJ1yBky0BL
31+
kJP1t7pNmudsUXDJq+zC+RFRBpnRL61t+40gJpmIKZRyqvKOwb9N79ohQI3K4MHr
32+
gMqsUOOCHIBvdOo0JgN/CKCnJlC2IYBM1BdyrNr+nj+i
33+
-----END CERTIFICATE-----
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
-----BEGIN CERTIFICATE REQUEST-----
2+
MIIE4DCCAsgCAQAwgZoxCzAJBgNVBAYTAlRXMQ8wDQYDVQQIDAZUYWl3YW4xDzAN
3+
BgNVBAcMBlRhaXBlaTEMMAoGA1UECgwDTlRVMQ0wCwYDVQQLDARDU0lFMSAwHgYD
4+
VQQDDBcqLndpZmktY2hhbWVsZW9uLmVkdS50dzEqMCgGCSqGSIb3DQEJARYbYWRt
5+
aW5Ad2lmaS1jaGFtZWxlb24uZWR1LnR3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
6+
MIICCgKCAgEA8tF1F+3z2q2p1I34lcJarrcrFje8HxYhLRlPWCFoDBJg8vxQGBBK
7+
b6pVhralj5PXpcYbxh+2O+7qQ39UQk5wpmIUsd5IouQKuJaV2uydHpA/KSB4S4LA
8+
4iLw726n4PLmuFH3H3wV8x8AvbGd3IyX2r1WW8U+1yw3JkyuYNQAEuz1pEhlmWeg
9+
Yx66ao9vVxJGCFJFzcqY+Oqj2D1AcdvPZ0gK90OgSwcl14N4B5V6mxjzkBXtvzQQ
10+
VcSTuprmMmLI+LNjltB8yL4mZDY77fWY15c0Xoam6PIVrIzQ9546iY9jf24m2RUN
11+
2eT0JWMrEUst98vME12BxdQuBfQcrX1scrZt7K0d63FuTphY8I9t5k8ST7T/DMdH
12+
dnSob5cTEFbTb+Se3BF/bghOSS188G2yqTkaz1oNVZMgeNV718u+MyZLO91ojINC
13+
t6p742erklj62SJh1zEpKTCanlDmJixyP0ENPPesqUkk7I597xkip21Z4hKrtW6t
14+
WHLVmPhhEaQgUKHjYf0CAuWDFVYpmShikN6NDnw0wS3nkO/U/4fYGmrW9kZ9CM4n
15+
WpKW6XA9Z+E6804jhzy0zZJascnf8Iieo0D2+6No5jPl0SqPzon+aMcT/CkkJGkK
16+
RWUpRceQfu9HgncM7AxsRxSvv6UdvHUHq++0oAPCvjlFQ+Es8ozuQecCAwEAAaAA
17+
MA0GCSqGSIb3DQEBCwUAA4ICAQCL8ibhAG5RF1CbFgGSS6fhUDqiQnbPFlfSLr5u
18+
rijboonCJFH19sieIK0qDcBN6Re/Oj4tzfgkyPPT2rabsRf0gL6xpvhfcCYnt4fu
19+
gArQB5zL1GHunX3LMoQaVyJeos0JqYNgMAq3z0A8gOyLsDb5QEdsRhgdHLzOQk2v
20+
MFENHr17vAYAburvUIiJ3cWgvL3RwC55+Kct/AUudJiML/DzcxDP4P5giQwcMq7h
21+
4s5D/8+Qt314bKmPY21TZphR77vt+QiMnMJPvlYkc3lNoUM9Ldlag1bwHHZsZ0Op
22+
dxOoa7wkC6bkdDEkiqu0G3EeVUDw73ViJ5/IiyxO13ggK8StaNYz6+uVpji4O1/i
23+
mzt2ylRzb9YZ0wJHHimsD3P/WkNvXQ8XMLlm37eECDHAmsPdo/5ZBLnFZx4EfoC9
24+
W6eISk9IJzpH+rX5C/yHSAP/UwKa95ugklzz4psbvjdLYBphPfNZ2FbYnvU1WjJf
25+
RbwU/bB8h1I3uptO7aKxtFmz6bwOLvBWBDBbvRfMWneBd6Yu4fNl2gG5TL1Z9LQ2
26+
COjfGxcv65HixXeLOa+qZGuxsX3BHPoTjRipLqr9nxvLUwdRwErFv/deNNnHtmih
27+
g2peCJnS+FGjvYD0dE/liqm7Km3ZxczWkP+yZyojSxIzZaDtyAkLidzUdUH+mFQX
28+
EFroGA==
29+
-----END CERTIFICATE REQUEST-----
+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
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
51+
-----END RSA PRIVATE KEY-----

0 commit comments

Comments
 (0)