[Write-up] HTTP - Hố bug nho nhỏ

HTTP là viết tắt của HyperText Transfer Protocol, nghĩa là giao thức truyền tải siêu văn bản. Nó cũng là 1 trong 5 giao thức phổ biến nhất mạng internet hiện nay (HTTP, FTP, SMTP, IMAP, SNMP)

Khuyến cáo: nên vào link thử test trước khi đọc thêm phần dưới!

0x01. HTTP - Open Redirect
Với bài này: http://tiny.cc/http_redirect
Xem Source trên ta có thể thấy có 3 lệnh http redirect và mỗi url đều được gán với 1 mã hash MD5
Md5(https://facebook.com) a023cfbf5f1c39bdf8407f28b60cd134
Đây là lệnh http nhằm kiểm tra tính toàn vẹn của url, tức có nghĩa là nó sẽ chuyển hướng trang web đến https:\\facebook.com, nếu như MD5 của url này bằng với đoạn mã hash MD5 đằng sau. Nên khi bạn đổi url khác nhưng nó không trùng với đoạn hash đó thì trang web sẽ báo lỗi.
Giờ mình sẽ thử:
Md5(https://root-me.org) = ff3b06bec7b5bc0469b378d3abb9bf83
Flag sẽ xuất hiện.... :))

0x02. HTTP - User Agent
Với bài này: http://tiny.cc/http_ua
Bài này khá dễ nên mình sẽ không giải :))) do it yourself :v
User Agent của các trình duyệt là tình năng vô cùng hữu ích khi nó cho phép bạn tuỳ biến giao diện của trình duyệt đến giao diện của tổng cả trong web. Hơn thế nữa nó còn có thể can thiệp vào cách mà trình duyệt render ra một trang web từ source. Thêm nữa, bạn có thể tuỳ biến được tên thiết bị mà bạn muốn dùng để truy câp vào trang web, thâm chí bạn có thể đưa chế độ duyệt web từ online sang offline.

0x03. HTTP - Directory Indexing
Với bài này: http://tiny.cc/dir_index
Bằng gởi ý từ đề: 
M hãy sử dụng Ctrl + U đi
Chúng ta có được cái này:
Ta giờ lại có thêm một cái gợi ý khác, một đường dẫn:
http://challenge01.root-me.org/web-serveur/ch4/admin/pass.html
Và đời éo như là mơ :v toàn là text và flag...tao đâu???
Mà khoan hãy thử xoá html đi nhỉ: 
http://challenge01.root-me.org/web-serveur/ch4/admin/
Wow! chúng ta được một cái gì đây hehe
Công việc còn lại là của bạn :)))
Nói thêm về Dir Index, đây là một lỗi rất sơ đẳng của các trang web thời xa xưa nhưng một số rất ít trang web hiện giờ vẫn bị. Này nó như một file explorer vậy ấy, đôi khi tìm những thứ như này khá thú vị đấy, biết đâu tìm được vàng :D

0x04. HTTP - Header
Với bài này: http://tiny.cc/http_header
Gợi ý của đề:
HTTP response sẽ cho thông tin cần thiết
Và thêm cả "gợi ý" từ trang web:
Thông tin không phải là phần duy nhất trong HTTP response 
Nên chúng ta sẽ tập trung vào "soi" HTTP response đầu tiên:
Có 1 cái Header khả nghi đấy: Header-RootMe-Admin: none
Giờ "soi" thử đến HTTP request thử:
Chẳng có 1 Header nào giống với cái Header khả nghi kia cả phần response, vậy thì mình sẽ thử thêm vào phần request và đổi value của nó thành "yes" hehe: Header-RootMe-Admin: yes
Và BOOM flag hiện ra hehe!!!
0x05. HTTP - POST
Với bài này: http://tiny.cc/http_post
Đầu tiên ta có gì đây:
1 trò chơi, cần phải nhấn nút để nó xuất ra điểm và nếu số điểm cao hơn 999999 thì bạn win:
ĐỪNG CÓ MÀ CỐ BẤM ĐẾN KHI NÀO WIN NHÉ :))) 
Mở Source nó ra xem trước đã:
Phân tích code thôi:
  • Khi bạn nhấn nút nó sẽ thiết lập phương thức POST với dòng lệnh document.getElementsByName('score')[0].value = Math.floor(Math.random() * 1000001)
  • Hàm Math.random() trong js nó là một hàm sinh số ngẫu nhiên và trả về một số thực  trong khoảng 0..1 và được nhân với 1,000,001.
  • Hàm Math.floor() nó là một hàm làm tròn xuống, nó sẽ cắt bỏ phần thập phân của số thực.
Như vậy tổng hợp lại là ta có kết luận dù bạn có generate ra 0.9999999 thì cũng chỉ bằng 999999 và bạn sẽ chẳng bao giờ win với việc bấm cái nút đó đâu :)))
Nhưng từ từ đã, ta có cái HTTP request POST kìa, hãy xem nó có gì:
Có cái Form Data: score=209470&generate=Give+a+try%21 cần phải chú ý đấy, nó mang đúng với giá trị mà ta đã generate được.
Giờ mình sẽ thử gửi lại request và đổi giá trị score=9999999 hehe:
BOOM WE WON!!! FLAG IS APPEARED HEHE :D

0x06. HTTP - Improper Redirect
Với bài này: http://tiny.cc/http_ir
Xem ta có gì nào:
Bạn cần phải login vào để có thể truy cấp trang này NHƯNG đừng vội gõ vào đấy :))) xem source trước sẽ hay hơn:

Phân tích code thôi:
  • Đây chỉ là một form login bình thường.
  • Nhưng hãy để ý vào property action trong thẻ form, khi thực hiện nhấn nút  thì lập tức nó sẽ tự redirect vào chính url "login.php".
Tổng hợp lại, có thể đưa ra một kết luận là nó sẽ luôn redirect về "login.php".
Vậy lỗ hổng ở đâu??? :))) 
Từ từ, request redirect được gửi bằng phương thức HTTP POST. Ta có thể can thiệp một xíu vào request này, nó vẫn sẽ redirect nhưng sẽ sai sai một xíu. Mình sẽ gửi lại cái request đấy và sửa lại một tí:
Mình sẽ xoá đi phần đuôi "login.php" sau POST, rồi thêm vào 1 Header Location: login.php. Như vậy nó sẽ vẫn redirect đến "login.php" nhưng sai đi một xíu, để đánh lạc hướng PHP để nó có thể gửi nhiều thông tin hơn.
BOOM!!! FLAG IS APPEARED!!!
0x07. HTTP - Verb Tampering
Với bài này: http://tiny.cc/http_vt
Đầu tiên, khoan hãy lao đầu vào "ngấu nghiến" cái web :)))
Slow it down :v
Time to Google Search: đầu tiên phải hiểu cái tựa bài đã "Verb Tampering" nghĩa là "Động từ giả". Ý nó nói đây là gì??? Hãy nhìn vào các methods của HTTP Request, ta thấy gì đây:

Đúng rồi đấy, method phổ biến nhất chính là GET với POST. Còn các methods khác hay không??? có, tổng cộng có 9 methods:
  • GET: được sử dụng để lấy thông tin từ sever theo URI đã cung cấp.

  • HEAD: giống với GET nhưng response trả về không có body, chỉ có header
  • POST: gửi thông tin tới server thông qua các biểu mẫu http( đăng kí chả hạn..)
  • PUT: ghi đè tất cả thông tin của đối tượng với những gì được gửi lên
  • PATCH: ghi đè các thông tin được thay đổi của đối tượng
  • DELETE: xóa tài nguyên trên server.
  • CONNECT: thiết lập một kết nối tới server theo URI.
  • OPTIONS: mô tả các tùy chọn giao tiếp cho resource.
  • TRACE: thực hiện một bài test loop - back theo đường dẫn đến resource.
  • method: GET
  • 1 Header Authorization: Basic YWFhOmFhYQ==
  • Basic: nó là loại thông thường và nó sẽ truyền username và password theo kiểu như sau: tạo 1 string "user:pass" (VD: "aaa:aaa"), rồi sẽ encode string này theo chuẩn Base64 (VD: Base64("aaa:aaa") -> "YWFhOmFhYQ=="). Vì thế mà loại này rất dễ bị catch và decode.
  • Digest: nó sẽ encrypt username và password theo hàm hash (MD5, SHA-1, 256, 384,...). Hơn nữa, nó thêm vào một số var chứa các giá trị hash để đối chứng với server. Do đó nó được cho khá là an toàn so với Basic.

Giờ bắt đầu vào bài thôi :)))
Vào hiện lên ngay 1 box Authenticate để request vào trang web, nhập thử một username và password ngẫu nhiên xem thử:
Sau khi nhập xong là biết sai cmnr :)))
Nên là tắt cái box đấy đi, thì nhận được cái thông báo từ server:
Giờ đi đến với cái HTTP request xem thử:
Ta có 
Cái Header Authorization, nó là một header để xác thực, có 2 loại xác thực:
Ở đây không tìm được một lỗ hổng nào sao???
Khoan, hãy nhìn lại ở phần trên, phần methods ấy, hãy thử đổi method của request xem sao :))
Đầu tiên, mình thử đổi qua method POST nhung nó vẫn vậy. Vậy thử với một thằng khác xem nhỉ, thay thử method OPTIONS:
BOOM!!! FLAG IS APPEARED!!! :D

0x08. HTTP - Cookies
Với bài này: http://tiny.cc/http_cookies
Khi truy cập vào trang web và nhận được trang web:
Gõ thử cái email bất kì hay bất kì cái gì vào thử hehe
Nhấn  rồi ta nhận được 1 cái thông báo là "email saved".
Tiếp đến thử vào "Saved email adresses", và ta nhận được:
Đúng thế, mình cần quyền admin để access vào đấy.
Bật Source xem thử nào:
Hehe, ta có 2 key ở đây:
  • Dòng  là gì đây??? Đây chính là hàm setcookie của PHP. Nhưng nó đang đặt ở trong comment code.
  • 1 Query String "?c=visiteur" này là gì??? nó chính là là HTTP request set cookie.
Giờ hãy thử mở code trong comment kia ra thử, đặt nó trong thẻ PHP, nhưng nó cũng bị đưa về dạng comment -> FAIL.
Giờ thử qua sửa "?c=visiteur" -> "?c=admin" thử xem sao nhỉ, và nhận được thống báo này:
Giờ sao nhỉ??? Hết rồi sao???
Khoan còn 1 thứ chưa phân tích, HTTP Reponse:
Focus vào Header Cookie: ch7=visiteur
Giờ qua console gõ thử lên set cookie của javascript qua "admin" xem sao nhỉ:
Thử F5 lại trang xem nhì :33333
BOOM!!! FLAG IS APPEARED!!!
0x09. Kết bài 
Exploit HTTP là bài học cơ bản nhất trên con đường pentest. Còn nhiều dạng khác nữa...
Contact me: Facebook

Comments

Popular posts from this blog

[Tip&Trick] SSH-Tunnel Socks5 cho host không thể truy cập internet

[Write-up] SQL injection 💉 - Union-based ⌨