Skip to content

Commit 2648dad

Browse files
authored
Create Level11.md
1 parent 8ad0325 commit 2648dad

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

Natas/Level11.md

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#Level 11
2+
###### user: *natas11* pass: *1KFqoJXi6hRaPluAmk8ESDW4fSysRoIg*
3+
+ Trước tiên hãy phân tích đoạn source code:
4+
#### Hàm `xor_encryp`: được sử dụng để mã hóa hoặc giải mã `$input` với thuật toán XOR:
5+
```PHP
6+
function xor_encrypt($in) {
7+
$key = '<censored>';
8+
$text = $in;
9+
$outText = '';
10+
11+
// Iterate through each character
12+
for($i=0;$i<strlen($text);$i++) {
13+
$outText .= $text[$i] ^ $key[$i % strlen($key)];
14+
}
15+
16+
return $outText;
17+
}
18+
```
19+
#### Hàm `loadData`: load giải data từ `Cookie` của người dùng, sử dụng hàm `xor_encrypt` `base64_decode` để giải mã. Nếu data đó bgcolor một giá trị hex màu hợp lệ, sẽ cập nhật $mydata với thông tin này.
20+
```PHP
21+
function loadData($def) {
22+
global $_COOKIE;
23+
$mydata = $def;
24+
if(array_key_exists("data", $_COOKIE)) {
25+
$tempdata = json_decode(xor_encrypt(base64_decode($_COOKIE["data"])), true);
26+
if(is_array($tempdata) && array_key_exists("showpassword", $tempdata) && array_key_exists("bgcolor", $tempdata)) {
27+
if (preg_match('/^#(?:[a-f\d]{6})$/i', $tempdata['bgcolor'])) {
28+
$mydata['showpassword'] = $tempdata['showpassword'];
29+
$mydata['bgcolor'] = $tempdata['bgcolor'];
30+
}
31+
}
32+
}
33+
return $mydata;
34+
}
35+
```
36+
#### Hàm `saveData`: nhận một mảng, chuyển dạng văn bản thành JSON, sau đó hóa base64 lưu trong một cookie tên `data`
37+
```PHP
38+
function saveData($d) {
39+
setcookie("data", base64_encode(xor_encrypt(json_encode($d))));
40+
}
41+
```
42+
###### mật XOR một thuật toán giải hóa bản, yêu cầu hai biến để hóa/giải một thông tin, một biến chuỗi tự thường/ hóa, một biến key
43+
###### VD:
44+
```
45+
xor_cipher(orginal_message, key) -> encrypted_message
46+
xor_cipher(encrypted_message, key) -> original_message
47+
```
48+
###### JSON là một format với 2 thành phần chính là objects (gồm nhiều cặp key:value) và arrays (gồm nhiều objects trong []).
49+
###### VD:
50+
```
51+
PHP Array: $array = array("name" => "John", "age" => 30, "city" => "New York");
52+
-> JSON string: {"name":"John","age":30,"city":"New York"}
53+
```
54+
+ Chức năng chính của đoạn code là duy trì setting của người dùng (ở trong đoạn code là `showpassword``bgcolor` thông qua cookies.
55+
+ Quá trình xử lý của đoạn code: sử dụng một `base64__encode``json_encode` để tiến hành mã hóa `$defaultdata` thành cookies và `mã hóa XOR` cookies đó với key bị ẩn. Vì vậy muốn tìm được cookie để website hiện pass, ta sẽ xử lý cookies khởi điểm và cookies hiện tại (hay cookies được mã hóa bằng XOR) để tìm ra key:
56+
+ Đầu tiên, tìm cookies dựa trên `$defaultdata`:
57+
![image](https://github.com/WildSaul/Over-the-Wire-write-up/assets/155133173/6fee0b65-1b55-4f52-9042-51622973d1d6)
58+
###### Sử dụng PHP compiler bất kỳ
59+
-> Ta sẽ được cookies: `eyJzaG93cGFzc3dvcmQiOiJubyIsImJnY29sb3IiOiIjZmZmZmZmIn0`
60+
+ Lấy cookie của trang web (sử dụng Inspector)
61+
+ Tiếp theo, tìm key XOR dựa trên 2 cookies:
62+
![image](https://github.com/WildSaul/Over-the-Wire-write-up/assets/155133173/1d3ed40a-946e-419f-b7f6-661e0e1fa08b)
63+
###### Sử dụng [CyberChef](https://gchq.github.io/CyberChef/), một chương trình UI đơn giản cho phép thay đổi base, mã hóa, giải mã các loại data khác nhau.
64+
-> Được key: `KNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLK`, có thể để ngắn thành `KNHL`.
65+
+ Cuối cùng sử dụng key để mã hóa thông tin của `$defaultdata` với thay đổi nhỏ là trường `showpassword : yes`
66+
![image](https://github.com/WildSaul/Over-the-Wire-write-up/assets/155133173/cd3d3d4d-76de-4847-9c64-3677ceb0e6d2)
67+
-> được cookies: `MGw7JCQ5OC04PT8jOSpqdmk3LT9pYmouLC0nICQ8anZpbS4qLSguKmkz`
68+
+ Thay đổi cookies, refresh page, ta sẽ được pass.
69+
70+
71+

0 commit comments

Comments
 (0)