Hướng dẫn php filters root me - bộ lọc php root me
Nhân danh thánh a la Show
Hôm nay tôi sẽ giải thích & nbsp; làm thế nào tôi có thể vượt qua thử thách Đầu tiên, thử thách cần phải đăng nhập vào trang web nhưng chúng tôi không có mật khẩu, vì vậy Bắt đầu nào Chúng tôi có một biểu mẫu nhưng chúng tôi không có mật khẩu vì vậy hãy để báo chí về nhà hoặc đăng nhập vì chúng tôi cần một số thông số để chơi xung quanh anh ấy, Như bạn có thể thấy có một số filte, vì vậy chúng ta cần phải vượt qua nó như thế nào? php://filter/convert.base64-encode/resource Boooooooom !! Thông tin: PHP Sử dụng chức năng này trong Php 5.0.0 trở lên Hãy tiếp tục, chúng ta cần giải mã base64 vì vậy, tôi sẽ sử dụng người yêu của mình
‘\ N \ n \ n login & nbsp; \ n \ n mật khẩu & nbsp; \ n \ n \ n \ n \ n \ n Đây là mã nguồn của login.php, vì vậy chúng ta cần xem config.php
Taaaaaaaaaara! ./ze3r0six 1. HTML - Source codeBài đầu tiên khá đơn giản, chỉ cần view source là thấy ngay password rồi password là: nZ^&@q5&sjJHev0nZ^&@q5&sjJHev0 2. HTTP - Open redirectkhi vừa mới vào bài này bạn đề ý tên của bài nhé. Hàm ý bảo là sẽ làm gì đó để kích hoạt chuyển hướng và để giải quyết bài này ta phải chuyển hướng đến tên miền khác với tên hiển thị trong web. Ok , khi view source ta thấy có 3 đường dẫn đến 3 website tương ứng. Tuy nhiên sau đó lại có tham số h truyền vào. Nó có ý nghĩa gì vậy. thử thay đổi h 1 chút xem sao. Yeah kết quả là nó chẳng chuyển hướng được. tại sao vậy nhỉ. Nhìn vào chuỗi giá trị của h . Hmm rất giống hash MD5 của 1 chuỗi gì đó. Nhưng nó lại liên quan đến việc chuyển hướng. Để thử dự đoán, tôi hash thử chuỗi và password là: e6f8a530811d5a479812d7b82fc1a5c5e6f8a530811d5a479812d7b82fc1a5c5 3. HTTP - User-agentNgay từ đầu thì tên bài này đã gợi ý cho chúng ta 1 chút rồi. Cơ bản thì User-agent là 1 header biểu thị thông tin về browser của bạn. Khi bắt đầu challenge ta sẽ thấy 1 website như sau: Ta thấy 1 dòng duy nhất: Wrong user-agent: you are not the "admin" browser! Bạn còn nhớ tới user-agent header tôi nói ở trên chứ. Tiêu đề này hiển thị thông tin về browser của bạn. Mà câu trên chỉ ra rằng bạn không phải "admin" browser. Như vậy ta chỉ cần sửa lại giá trị tiêu đề user-agent thành admin là xong:Wrong user-agent: you are not the "admin" browser! password là: rr$Li9%L34qd1AAe27rr$Li9%L34qd1AAe27 4. Weak PasswordBài này thì khá đơn giản. sau khi vào chall ta thấy đề bắt yêu cầu nhập username và password. Ngay từ đầu tôi thử nhập admin/admin. Ai ngờ nó được luôn thế là ra luôn. Password: adminadmin 5. PHP - Command injectionThe flag is on the Đây là gợi í của bài. Yeah mục tiêu là phải đọc được file bài này thì khá giống kiến thức đối với lỗi Command injection trong PortSwigger nói khá rõ (ở đây). Ta sẽ dùng dấu ngăn cách lệnh trong linux 0để thử xem sao. Ở đây tôi thực hiện lệnh 1 để xem trong thư mục này có những gì (payload: google.com;ls -la)payload: google.com;ls -la)Tốt rồi có file index.php, ta xem file đó có gì nào (payload: google.com;cat index.php)payload: google.com;cat index.php) Xem source code ta nhận được password: S3rv1ceP1n9Sup3rS3cureS3rv1ceP1n9Sup3rS3cure 6. Backup fileTên bài là backup file nha. Khi vào chall ta thấy ô nhập login và password. Tuy nhiên từ từ đã. Bạn chẳng thể mò mẫm được. Nhớ tên bài là Backup file nha. Như vậy ta sẽ tìm cách tìm được file backup để xem source code. Ở đây tôi dùng công cụ 2 để tìm các file ẩn.Ở đây tôi tìm được file index.php~. Yep đây chính là file backup của nó. Tải về xem được gì nào. password: OCCY9AcNm1tjOCCY9AcNm1tj 7. HTTP - Directory indexingNghe tên bài có mùi kiểu cây thư mục í nhỉ ^-^. Đầu tiên ta sẽ xem source code xem có gì. Bạn thây cái này chứ: 3. Ta vào theo đường dẫn xem có gìTa chẳng được gì cả. Wait, tại sao họ cho mình đi đến tận admin/pass.html mà không có gì. thử back ra /admin xem sao. Thấy ngay thư mục có tên backup. Ngon rồi đây. Vào đó xem. Đấy, có admin.txt rồi kìa. vào đó chắc là có kết quả rồi. -> password: LINUXLINUX 8. HTTP - HeadersĐây là gợi ý của bài nhé: HTTP response give informations Hmm. Nhắc tới response, thế mình cứ đưa vào burp chặn xem ta có gì.HTTP response give informations Hmm. Nhắc tới response, thế mình cứ đưa vào burp chặn xem ta có gì. Bận thấy thằng: 4 chứ. Thế chắc muốn đi tiếp ta phải có thằng header này ở request rồi. Giá trị của nó ta đặt thành true.ta có ngay password: HeadersMayBeUsefulHeadersMayBeUseful 9. HTTP - POSTKhi vào chall, mục tiêu của ta là phải vượt qua số điểm 999999 thì mới có thể lấy được password. Sau 1 số lần thử Give a try tôi cũng chẳng thể vượt qua được số điểm đó. Cũng đúng thôi chả nhẽ dễ mà qua thế. Thử đưa vào burp sửa đổi giá trị của điểm xem có dược không. Yeah. Ăn ngay. Password: H7tp_h4s_N0_s3Cr37S_F0r_y0UH7tp_h4s_N0_s3Cr37S_F0r_y0U 10. HTTP - Improper redirectSau khi bắt đầu chall, ta lại thấy form đăng nhập quen thuộc, Sau khi loay hoay 1 hồi thì ô thôi chả đâu vào đâu cả. Bài này tôi phải lục tìm write up. Bị lừa rồi. Haizz.Làm sao có chuyện chuyển hướng chỉ với cái tham số redirect được chứ (http://challenge01.root-me.org/web-serveur/ch32/login.php?redirect). Tóm lại là lại vứt vào burp xem nó từ đâu đưa mình đến đây. Vâng và ta có password rồi: ExecutionAfterRedirectIsBad Lỗi ở đây chính là sau khi redirect trang bằng header Location, họ quên exit() hoặc die() nên phần code theo sau vẫn được thực hiện.ExecutionAfterRedirectIsBad Lỗi ở đây chính là sau khi redirect trang bằng header Location, họ quên exit() hoặc die() nên phần code theo sau vẫn được thực hiện.
11. HTTP - Verb tamperingBài này về cơ bản là nó xác thực với phương thức thường dùng là GET và POST. Như vậy thì mình chỉ cần sửa phương thức thành cái khác ví dụ như PUT chẳng hạn là được (Bài này tôi phải đọc write up mới làm được - ai ngờ xác thực như vậy đâu. hic) password: a23e$dme96d3saez$$prapa23e$dme96d3saez$$prap 12. install filesĐầu tiên thì PhpBB là một phần mềm miễn phí và cung cấp các tính năng hữu ích có sẵn, đây là công cụ xây dựng diễn đàn phổ biến nhất hiện nay. Cái tên phpBB là từ viết tắt của cụm 5. Đọc source ta thấy dòng này: 6 . Với bài này ta sẽ dùng dirsearch để xem có những file ẩn nào.Ở đây Dev quên xóa folder install rồi.HAHA. truy cập vào xem có gì nào. Thấy file install.php rồi. Ngon rồi. Truy cập vào ta được password luôn password: karambarkarambar 13. CRLFBài này thì liên quan đến kiến thức về CRLF. Đầu tiên các bạn cần biết CRLF là viết tắt của Carriage Return và Line Feed, CR và LF là các ký tự điều khiển, được mã hóa tương ứng0x0D (13 trong hệ thập phân) và 0x0A (10 trong hệ thập phân). Chúng được sử dụng để đánh dấu ngắt dòng trong tệp văn bản. Khi bạn nhập vào ô login là gì thì nếu xác thực không thành công, log sẽ ghi lại giá trị đó cộng với câu: "failed to authenticate.". Mục tiêu của ta là phải xác thực thành công, tức là phải log lại được thằng admin xác thực thành công. Như vậy lợi dụng CRLF ta sẽ có payload như sau: 7CR và LF là các ký tự điều khiển, được mã hóa tương
ứng0x0D (13 trong hệ thập phân) và 0x0A (10 trong hệ thập phân). Chúng được sử dụng để đánh dấu ngắt dòng trong tệp văn bản. Khi bạn nhập vào ô login là gì thì nếu xác thực không thành công, log sẽ ghi lại giá trị đó cộng với câu: "failed to authenticate.". Mục tiêu của ta là phải xác thực thành công, tức là phải log lại được thằng admin xác thực thành công. Như vậy lợi dụng CRLF ta sẽ có payload như sau: 7trong đó %0d%0a là \r\n. Giải thích payload này. Sau khi cho chạy, ta sẽ log được 2 dòng như hình dưới.%0d%0a là \r\n. Giải thích payload này. Sau khi cho chạy, ta sẽ log được 2 dòng như hình dưới. password: rFSP&G0p&5uAg1%rFSP&G0p&5uAg1% 14. File upload - Double extensionsYour goal is to hack this photo gallery by uploading PHP code. Retrieve the validation password in the file .passwd at the root of the application. Đây là gợi ý của đề bài. Tóm lại ta sẽ tìm cách upload file PHP lên server và đọc file .passwd để tìm password. Ok vào bài thôi. Nó chỉ cho upload file ảnh có đuôi .gif, .jpeg and .png thôi. Lên google tìm 1 con shell PHP rồi đổi tên nó thành đuôi .png là ok rồi. Ở đây tồi dùng Pony shell. Sau khi up load ta truy cập vào shell. Sau đó ta dùng ls -la để tìm xem trong các thư mục có gì, cho đến khi tìm được file .passwd rồi ta cat để xem nội dùng file đó thôi. password: Gg9LRz-hWSxqqUKd77-_q-6G8Gg9LRz-hWSxqqUKd77-_q-6G8 15. File upload - MIME typeBài này tương tự bài trước tuy nhiên, Lần này ta không thể gửi file như bài trước lên được nữa. Lí do nó đã cấu hình đúng rồi. Tuy nhiên nó lại sử dụng Content-Type để định kiểu dữ liệu gửi đi. Như vậy ta có thể sử dụng Burp để chặn và sửa đổi (Các bước y hệt bài trên ngoại trừ xóa đuôi .png trong request gửi lên trong burp)Content-Type để định kiểu dữ liệu gửi đi. Như vậy ta có thể sử dụng Burp để chặn và sửa đổi (Các bước y hệt bài trên ngoại trừ xóa đuôi .png trong request gửi lên trong burp) Sau khi truy cập được vào shell ta làm tương tự như bài trên để đọc được file .passwd Password: a7n4nizpgQgnPERy89uanf6T4a7n4nizpgQgnPERy89uanf6T4 16. HTTP - CookiesSau khi view source ta thấy có 1 comment khả nghi: 8 Khi send email thì hiện ra thông báo Email saved. Nhưng khi bấm Saved email adresses thì lại hiện thông báo You need to be admin. Ta sử dụng burp tiến hành chặn request thử xem.Email saved. Nhưng khi bấm Saved email adresses thì lại hiện thông báo
You need to be admin. Ta sử dụng burp tiến hành chặn request thử xem.bạn sẽ thấy phần tiêu đề cookie có giá trị là ch7=visiteur. Sửa lại giá trị này thành ch7=admin là ok.ch7=visiteur. Sửa lại giá trị này thành ch7=admin là ok. password: ml-SYMPAml-SYMPA 17. Insecure Code ManagementBài này liên quan đến git. Khi cài đặt mọi thứ với git thì sẽ có 1 folder được tự động generate là .git. Đẻ kiểm tra xem có folder này tồn tại hay không. Tôi sử dụng công cụ dirsearch để tìm kiếm Bây giờ ta tải hết chúng xuống bằng câu lệnh: 9. Sau đó sử dụng git show để xem kết quả.git show để xem kết quả.password: s3cureP@ssw0rds3cureP@ssw0rd 18. JSON Web Token (JWT) - IntroductionBài này có liên quan dến kiến thức về JWT. Để giải quyết bài này ta phải kết nối đến như là admin. Khi vào bài ta sẽ thấy khung đăng nhập. Dĩ nhiên là ta chưa biết username cũng như password. Tuy nhiên ta lại được phép đăng nhập như là guest. Thử chặn bằng burp xem có gì. Bạn để ý phần respone trả về có tiêu đề 0. Lấy giá trị JWT kia và sử dụng công cụ jwt.io để decode nó ra xem.Như bạn thấy ở đây phần Payload chứa giá trị "username": "guest". Và phần Signature chúng ta không biết. Tuy nhiên chúng ta có thể bỏ qua nó bằng cách để "alg": "none" (cái này do nó bị dính lỗi CVE-2018-1000531). Để kết nối đến như là admin, ta thay "username": "admin". Ở đây tôi dùng thư viện pyjwt trong python để tạo mã jwt. Ta được mã: eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJ1c2VybmFtZSI6ImFkbWluIn0. Copy mã này vào tiêu đề Cookie: trong burp ta đượceyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJ1c2VybmFtZSI6ImFkbWluIn0. Copy mã này vào tiêu đề Cookie: trong burp ta được password: S1gn4tuR3_v3r1f1c4t10N_1S_1MP0Rt4n7S1gn4tuR3_v3r1f1c4t10N_1S_1MP0Rt4n7 19. Directory traversalSau khi vào bài, ta thấy để truy cập vào các tag đều thông qua param ?galerie= . Ta sử dụng dirbuster để tìm kiếm các tag khả thi.?galerie= . Ta sử dụng dirbuster để tìm kiếm các tag khả thi. Thấy xuất hiện đường link sau mà không có trên giao diện trang web: 1. Truy cập vào thì thấy có 1 mục là password.txt. Truy cập vào ta lấy được passwordpassword: kcb$!Bx@v4Gs9Ezkcb$!Bx@v4Gs9Ez 20. File upload - Null byteBài này cũng tương tự bài trước. Tuy nhiên ở bài này thì ta sẽ thực hiện chèn kí tự null vào tên file. Lí do là vì nó check đuôi file nhưng khi đọc tên file nó chỉ đọc đến kí tự null rồi dừng lại. Lỗi này đã được fix từ phiên bản PHP 5.3 Sau khi upload thành công ta nhấp vào ảnh vừa upload và thu được password: YPNchi2NmTwygr2dgCCFYPNchi2NmTwygr2dgCCF 21. JSON Web Token (JWT) - Weak secretSau khi truy cập ta được như sau: {"message": "Let's play a small game, I bet you cannot access to my super secret admin section. Make a GET request to /token and use the token you'll get to try to access /admin with a POST request."} Ta tạo GET request đến /token thì được 1 token sau: 2/token thì được 1 token sau: 2Đưa vào jwt.io thì ta được như sau: Phần payload có ghi là
Tuy nhiên cái khó ở đây là chúng ta không biết private key của nó là gì. Ở đây ta chỉ còn cách là vét cạn các khả năng thôi. Tôi dùng jwt_tools và tập rockyou.txt để làm điều nàyjwt_tools và tập rockyou.txt để làm điều này key của chúng ta là: lol Tiếp tục sử dụng thư viện pyjwt trong python để generate ra mã jwt của ta.lol Tiếp tục sử dụng thư viện pyjwt trong python để generate ra mã jwt của ta. đưa mã đó vào burp suite khi ta tạo POST request đến /admin là ta sẽ có được password password: PleaseUseAStrongSecretNextTimePleaseUseAStrongSecretNextTime 22. PHP - assert()Trong lập trình PHP có các lệnh là include, require, include_once, require _ once cho phép việc file hiện tại gọi ra một file khác. File Inclusion Attack: là kỹ thuật khai thác dựa trên lỗi include file trong PHP. Dấu hiện để có thể tấn công FI là đường link thường có dạng php?page=,hoặc php?file=. Để biết website có bị lỗi này hay không ta chỉ việc thêm một dấu ‘ vào đường link, cụ thể php?page=’. Và trên trình duyệt có thông báo lỗi hiện ra. Khẳng định web này bị LFI bằng cách như trên. Ở thông báo lỗi chúng ta có 2 lệnh trong PHP được sử dụng là assert() và strpos(). Trong đó hàm assert() kiểm tra đầu vào và trả về giá trị bool. Nếu kết quả là fallse thì nó sẽ thực hiện hành động thích hợp. Còn hàm strpos() dùng để tìm vị trí xuất hiện đầu tiên của chuỗi con trong chuỗi cha. Code PHP của đoạn này có thể là: 3 Trong đó $file là nơi chúng ta nhập vào trên URL. Như vậy để bypass đoạn code trên ta xây dựng payload sau: 4 Ở đây mình để 5 cuối để comment hết mấy phần không cần thiết đi. 3Trong đó $file là nơi chúng ta nhập vào trên URL. Như vậy để bypass đoạn code trên ta xây dựng payload sau: 4 Ở đây mình để 5 cuối để comment hết mấy phần không cần thiết đi.Ok. payload hoạt động rồi. Vậy chúng ta đọc file .passwd thôi password: x4Ss3rT1nglSn0ts4f3A7A1Lxx4Ss3rT1nglSn0ts4f3A7A1Lx 23. PHP - FiltersSau khi truy cập vào trang login của bài thì trên URL khá gióng với bài trước. 6. Cũng thử LFI như bài trước thế nhưng không được gì cả. Nhìn lại tên bài thì có lẽ phải sử dụng 7 ở đây.
php filter được dùng để xác thực và làm sạch đầu vào bên ngoài. có rất nhiều filter có thể được dùng. Một trong số đó là 8 và 9. 0 cho phép chúng ta đọc bất kì file php nào. Tuy nhiên chúng sẽ được mã hóa base-64. Và chúng ta phải decode nó để có thể xem source các fileđối với bài này ta tiến hành đoán các file có thể hữu dụng. Trong trường hợp này file đó là config.php payload: 1Ta nhận được 1 chuỗi được encode bởi base64. decode nó ra ta được password: DAPt9D2mky0APAFDAPt9D2mky0APAF 24. PHP - register globalsBài này ta sẽ ghi đè nội dung biến toàn cục. Đầu tiên ta phải tìm file backup của nó để xem nó hoạt động như thế nào. Ở đây tôi dùng dirsearch để làm việc đó. file backup ở đây là index.php.bak. Tải về và xem nội dung. Ở đây password sẽ hiện khi mà $_SESSION["logged"]==1. Như vậy ta thực hiện ghi đè biến này thông qua URL như sau: 2password: NoTQYipcRKkgrqGNoTQYipcRKkgrqG 25. File upload - ZIPĐể hiểu rõ về lệnh link và ln trong linux các bạn có thể đọc thêm ở đây. Bài này chúng ta tạo 1 liên kết đến file index.php: 3 Chúng ta cần quay lại 3 folder (các bạn thử từng folder 1 đến khi thấy index.php) và sau đó chúng ta nén lại với tùy chọn symlink (tạo liên kết tượng trưng) 4 sau khi upload file lên. ta đọc file test.txt là sẽ thấy password: N3v3r_7rU5T_u5Er_1npU7N3v3r_7rU5T_u5Er_1npU726. Command injection - Filter bypassBài này tương tự bài 5. Về cơ bản ta cũng sẽ thấy 1 công cụ để ping đến 1 địa chỉ IP. Ta cũng thử với các dấu phân tách câu lệnh như bài 5, Tuy nhiên tất cả đều không được và trả về lỗi. Nhận thấy là chúng bị filter khá kĩ rồi. Không thể nào mà mò tay được và tôi cũng không đủ kiên nhẫn, nên tôi đã tìm được 1 list các payload về command injection ở đây. Bắt đầu tìm payload hoạt động được bằng cách sử dụng Burp Intruder. Bạn để ý chứ. Những payload có %0A đều có respone trả về "Ping OK" tức có nghĩa là đã inject thành công. Tiếp theo để kiểm chứng xem liệu rằng ta có khai thác được hay không thì ta sẽ sử dụng burp repeater và inject command trên. Ở đây tôi sử dụng lệnh sleep 5 để kiểm chứng. Nếu thành công thì respone sẽ trả về sau 5 giây. Lí do tôi chọn lệnh này là do nó bị blind os command injection. Ta inject thành công tuy nhiên respone không trả về kết quả ta mong muốn Để xử lý lỗi blind này ta thực hiện curl đến tên miền của chúng ta. Nếu ta nhận được request đến tức là thành công thực hiện Out-of-band rồi. Cho dễ dàng thì tôi dùng burp collaborator client (các bạn có thể sử dụng các nguồn khác như 5) .Tiếp theo ta sẽ thực hiện gửi nội dung file index.php với payload sau: 6 Ở đây dấu @ tức là gửi nội dung file . Thế là ta đọc được index.php và password: Comma@nd_1nJec7ion_Fl@9_1337_Th3_G@m3!!!Comma@nd_1nJec7ion_Fl@9_1337_Th3_G@m3!!!27. Local File InclusionLocal file inclustion (LFI) là kĩ thuật đọc file trong hệ thống , lỗi này xảy ra thường sẽ khiến website bị lộ các thông tin nhảy cảm như là passwd, php.ini, access_log,config.php… Như bạn để ý thì trên URL có 2 tham số để chỉ định đường dẫn ta truy cập (dấu hiệu rất rõ ràng về lỗi RFI/LFI). Dựa vào bên góc phải thấy có 2 kiểu kết nối là guess/admin. Từ đó ta có thể đoán là có 1 thư mục tên là admin. Và cũng ở đề bài là ta phải tìm password trong admin section. Như vậy mục tiêu của ta là phải truy cập được vào file admin kia. Tôi thử lần lượt "../" vào 1 trong 2 tham số cho đến khi xuất hiện file admin. Dưới đây là payload của tôi: 7password: OpbNJ60xYpvAQU8OpbNJ60xYpvAQU8 28. Local File Inclusion - Double encodingNhư bạn thấy đấy, Trang này điều hướng bằng tham số page. Như vậy rất có thể trang bị dính lỗi LFI/RFI. Tương tự như bài trước tôi cũng sử dụng "../" để quay về các thư mục trên hệ thống của web. Tuy nhiên không may mắn được nữa rồi. Tôi nhận được thông báo: Attack detected. Chắc dó web nó lọc các kí tự này rồi. Tôi đọc tài liệu này để có thể làm được bài này. Các kí tự thường dùng sau khi được encode và double encode sẽ như sau:
Đầu tiên tôi thử encode các kí tự ../ thành 8 theo URLencode và thử lại vào trong tham số page. Tuy nhiên vẫn như cũ bị bật ra thông báo như trên. Hmm. Đề bài là double encoding . Thử encode tiếp 1 lần nữa xem sao, như vậy 9Ok. không hiện thông báo kia nữa. Có hy vọng rồi. Nhiệm vụ của ta là phải đọc được source file của website này. Ứng dụng kiến thức như bài 23. Chúng ta sẽ sử dụng php://filte với base64 encoding. Payload sẽ thế này: 0. Sau lần encode đầu tiên sẽ như thế này: 1. Và encode tiếp 1 lần nữa sẽ được: 2.decode đoạn đó ra ta được 3 Rất có thể password nằm trong file conf.inc.php. Lưu í nữa là khi ta nhập tên file vào sau tham số page thì nó tự động thêm đuôi .inc.php. Như vậy ta chỉ cần thay contact thành conf là ok. Ta tiếp tục được 1 đoạn mã được encode bởi base64. decode nó ra là đượcpassword: Th2sIsTh3Fl4g!Th2sIsTh3Fl4g! 29. PHP - Loose ComparisonKiến thức có liên quan ở đây. PHP có 2 model so sánh 1 là "==" gọi là loose comparison và "===" gọi là strict comparison. Khi đọc tài liệu ta thấy có 1 ví dụ sau: TRUE: "0e12345" == "0e54321". Các biết vì sao chúng nó bằng nhau không. lí do ở đây 0e trong php xem như là 0 mũ. Như vậy số đằng sau là bao nhiêu thì cũng bằng 0 thôi. Quay lại bài. Sau khi đọc code thì ta thấy nhiệm vụ là phải điền vào giá trị vào ô seed và ô hash sao cho sau khi check ta được kết quả trả về true. Như vậy ta phải tìm giá trị ô hash sao cho sau khi hash MD5 nó bắt đầy bằng 0e. Để làm điều này ta sẽ chạy đoạn code sau:
Và khi chạy thì kết quả là: 240610708=>0e462097431906509019562988736854 ta điền vào ô seed và hash giá trị lần lượt là 0e và 240610708 thì được password: F34R_Th3_L0o5e_C0mP4r15OnF34R_Th3_L0o5e_C0mP4r15On 30. PHP - type jugglingSử dụng burp suite bắt request ta có thể thấy dữ liệu được gửi đi dưới dạng chuỗi được encode. Decode nó ra thi nhận thấy dữ liệu này được viết dưới dạng JSON. Password được hash SHA256. Đọc code thì thấy để lấy được flag ta phải so sánh login với $USER và password với $PASSWORD_SHA256. Với tài liệu này ta có thể dễ dàng bypass được loại so sánh yếu này và bypass hàm strcmp(). Cụ thể với login=true thì khi so sánh với string nó sẽ trả về true. Đồng thời hàm strcmp sẽ trả về null khi so sánh 1 mảng với giá trị khác. Như vậy ta có thể xây dựng payload sau: 4. Sau khi encode và gửi đi ta nhận được password: DontForgetPHPL00seComp4r1s0nDontForgetPHPL00seComp4r1s0n31. Remote File InclusionBài này bạn để ý trên URL nhé. Nó cho phép ta chọn ngôn ngữ dựa vào tham số lang. Để kiểm tra ta thử cho giá trị của tham số là 5Ta nhận được thông báo lỗi. Dường như bất cứ thứ gì ta nhập vào đều được tự động thêm đuôi _lang.php._ Việc đầu tiên ta phải tìm cách bỏ cái đuôi này đi. Sau khi tìm 1 hồi thì tôi tìm được cách đó là thêm dấu ? vào sau chuỗi ta nhập. Thử truy cập đến 1 web khác. 6 _lang.php._ Việc đầu tiên ta phải tìm cách bỏ cái đuôi này đi. Sau khi tìm 1 hồi thì tôi tìm được cách đó là thêm dấu ? vào sau chuỗi ta nhập. Thử truy cập đến 1 web khác.
6
Ok ta đã truy cập được 1 trang khác. Bây giờ ta sẽ viết 1 đoạn code đơn giản từ trang https://pastebin.com/. Đoạn code :
Ở đây hàm file_get_contents sẽ đọc nội dung file thành 1 chuỗi. payload: 7file_get_contents sẽ đọc nội dung file thành 1 chuỗi. payload: 7
Password: R3m0t3_iS_r3aL1y_3v1lR3m0t3_iS_r3aL1y_3v1l 32. SQL injection - AuthenticationSau 1 số lần thử thì tôi nhận thấy, Dù ta có bypass qua được thì tên người dùng vẫn là user1. mà nhiệm cụ của ta là phải lấy được password của admin kia. Để giải quyết vấn đề này ta nhập admin vào ô login và ' or ( 1=1 and username='admin')-- vào ô password Đọc source code ta được password: t0_W34k!$admin vào ô login và ' or ( 1=1 and username='admin')-- vào ô password Đọc source code ta được password: t0_W34k!$ 33. PHP - preg_replace()Tài liệu này là 1 hint khá tốt cho bài này. ở đây hàm preg_replace cung cấp 1 chức năng cho phép thực thi mã php ở đối số thứ 2 đó là /e. Điều ta cần làm là đọc được nội dung file flag.php. Ở đây ta điền ô search là /abc/e. Ô replace điền file_get_contents('flag.php') (dùng hàm này ở đây vì 1 số hàm khác như system(), exec()...không được phép vì lí do bảo mật). Ô content điền abc và được kết quả: password: pr3g_r3pl4c3_3_m0d1f13r_styl3pr3g_r3pl4c3_3_m0d1f13r_styl3 |